- Jak zbudować robota omijającego przeszkodę za pomocą czujnika ultradźwiękowego
- Wymagane składniki
- Schemat obwodu
- Przeszkoda unikająca robota za pomocą Arduino - kod
Robot unikający przeszkód to inteligentne urządzenie, które automatycznie wykrywa przeszkodę przed sobą i omija je, obracając się w innym kierunku. Taka konstrukcja pozwala robotowi poruszać się w nieznanym środowisku, unikając kolizji, co jest podstawowym wymogiem dla każdego autonomicznego robota mobilnego. Zastosowanie robota unikającego przeszkód nie jest ograniczone i jest obecnie używany w większości organizacji wojskowych, co pomaga w wykonywaniu wielu ryzykownych prac, których żaden żołnierz nie jest w stanie wykonać.
Wcześniej budowaliśmy robota unikającego przeszkód przy użyciu Raspberry Pi i mikrokontrolera PIC. Tym razem zbudujemy robota omijającego przeszkodę za pomocą czujnika ultradźwiękowego i Arduino. Tutaj czujnik ultradźwiękowy jest używany do wykrywania przeszkód na ścieżce poprzez obliczanie odległości między robotem a przeszkodą. Jeśli robot napotka jakąkolwiek przeszkodę, zmienia kierunek i kontynuuje ruch.
Jak zbudować robota omijającego przeszkodę za pomocą czujnika ultradźwiękowego
Przed przystąpieniem do budowy robota ważne jest, aby zrozumieć, jak działa czujnik ultradźwiękowy, ponieważ będzie on odgrywał ważną rolę w wykrywaniu przeszkód. Podstawową zasadą działania czujnika ultradźwiękowego jest zapisanie czasu potrzebnego czujnikowi na przesłanie wiązki ultradźwiękowej i odebranie wiązki ultradźwiękowej po uderzeniu w powierzchnię. Następnie dalej obliczana jest odległość według wzoru. W tym projekcie zastosowano powszechnie dostępny czujnik ultradźwiękowy HC-SR04. Aby użyć tego czujnika, podobne podejście zostanie wyjaśnione powyżej.
Tak więc pin wyzwalający HC-SR04 jest ustawiony wysoko przez co najmniej 10 nas. Wiązka dźwiękowa jest transmitowana z 8 impulsami po 40 kHz każdy.
Sygnał następnie uderza w powierzchnię i wraca z powrotem i przechwytywany przez pin Echo odbiornika HC-SR04. W tym czasie szpilka Echo osiągnęła wysoki poziom.
Czas powrotu wiązki do powrotu jest zapisywany w zmiennej i przeliczany na odległość przy użyciu odpowiednich obliczeń, jak poniżej
Odległość = (czas x prędkość dźwięku w powietrzu (343 m / s)) / 2
W wielu projektach wykorzystaliśmy czujnik ultradźwiękowy, aby dowiedzieć się więcej o czujniku ultradźwiękowym, sprawdź inne projekty związane z czujnikiem ultradźwiękowym.
Elementy tego robota omijającego przeszkody można łatwo znaleźć. Aby wykonać podwozie, można użyć dowolnego podwozia do zabawki lub może być wykonane na zamówienie.
Wymagane składniki
- Arduino NANO lub Uno (dowolna wersja)
- Czujnik ultradźwiękowy HC-SR04
- Moduł sterownika silnika LM298N
- Silniki 5V DC
- Bateria
- Koła
- Podwozie
- Przewody połączeniowe
Schemat obwodu
Pełny schemat obwodu dla tego projektu znajduje się poniżej, ponieważ widać, że wykorzystuje on Arduino nano. Ale możemy również zbudować robota omijającego przeszkodę za pomocą Arduino UNO z tym samym obwodem (wykonaj to samo wyprowadzenie) i kodem.
Gdy tor będzie gotowy, musimy zbudować nasz samochód omijający przeszkody, montując obwód na szczycie podwozia robota, jak pokazano poniżej.
Przeszkoda unikająca robota za pomocą Arduino - kod
Kompletny program wraz z filmem demonstracyjnym znajduje się na końcu tego projektu. Program będzie obejmował konfigurację modułu HC-SR04 i wysyłanie sygnałów do pinów silnika, aby odpowiednio zmienić kierunek silnika. W tym projekcie nie będą używane żadne biblioteki.
Najpierw zdefiniuj w programie wyzwalacz i pin echa HC-SR04. W tym projekcie pin trig jest podłączony do GPIO9, a pin echo jest podłączony do GPIO10 Arduino NANO.
int trigPin = 9; // pin wyzwalający HC-SR04 int echoPin = 10; // Pin echa HC-SR04
Zdefiniuj piny dla wejścia modułu sterownika silnika LM298N. LM298N ma 4 styki wejściowe danych służące do sterowania kierunkiem podłączonego do niego silnika.
int revleft4 = 4; // Odwrotny ruch lewego silnika int fwdleft5 = 5; // Ruch ForWarD lewego silnika int revright6 = 6; // Odwrotny ruch prawego silnika int fwdright7 = 7; // Ruch ForWarD prawego silnika
W konfiguracji () funkcji określają kierunek przesyłania danych wykorzystywane kołki GPIO. Cztery piny silnika i pin wyzwalający są ustawione jako OUTPUT, a pin Echo jest ustawiony jako wejście.
pinMode (revleft4, OUTPUT); // ustaw piny silnika jako wyjściowe pinMode (fwdleft5, OUTPUT); pinMode (revright6, OUTPUT); pinMode (fwdright7, OUTPUT); pinMode (trigPin, OUTPUT); // ustaw pin wyzwalający jako wyjście pinMode (echoPin, INPUT); // ustaw pin echa jako wejście do przechwytywania fal odbitych
W pętli () funkcji się odległość od HC-SR04 i w oparciu o odległość przemieszczenia w kierunku silnika. Odległość będzie wskazywać odległość obiektu przed robotem. Odległość jest mierzona przez rozerwanie wiązki ultradźwiękowej do 10 us i odebranie jej po 10 us. Aby dowiedzieć się więcej o pomiarze odległości za pomocą czujnika ultradźwiękowego i Arduino, kliknij link.
digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); // wysyłanie fal na 10 us delayMicroseconds (10); duration = pulseIn (echoPin, HIGH); // odbieranie fal odbitych odległość = czas trwania / 58,2; // przekonwertuj na opóźnienie odległości (10);
Jeśli odległość jest większa niż zdefiniowana odległość, oznacza to, że na jego drodze nie ma przeszkody i będzie się poruszać w kierunku do przodu.
if (odległość> 19) { digitalWrite (fwdright7, HIGH); // przejdź dalej digitalWrite (revright6, LOW); digitalWrite (fwdleft5, HIGH); digitalWrite (revleft4, LOW); }
Jeśli odległość jest mniejsza niż zdefiniowana odległość do ominięcia przeszkody, oznacza to, że przed Tobą jakaś przeszkoda. W tej sytuacji robot zatrzyma się na chwilę i cofnie się, po czym ponownie zatrzyma się na chwilę, a następnie skręci w innym kierunku.
if (odległość <18) { digitalWrite (fwdright7, LOW); // Zatrzymaj digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); opóźnienie (500); digitalWrite (fwdright7, LOW); // movebackword digitalWrite (revright6, HIGH); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, HIGH); opóźnienie (500); digitalWrite (fwdright7, LOW); // Zatrzymaj digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); opóźnienie (100); digitalWrite (fwdright7, HIGH); digitalWrite (revright6, LOW); digitalWrite (revleft4, LOW); digitalWrite (fwdleft5, LOW); opóźnienie (500); }
W ten sposób robot może omijać przeszkody na swojej drodze bez utknięcia w dowolnym miejscu. Znajdź pełny kod i film poniżej.