- Wymagane materiały:
- Koncepcja robota unikającego przeszkód:
- Schemat obwodu i wyjaśnienie:
- Programowanie mikrokontrolera PIC:
- Robot omijający przeszkody w akcji:
Robot Avoider Obstacle to kolejny znany robot, który przyprawia osadzone projekty. Dla tych, którzy są nowym robotem omijającym przeszkody, jest to zwykły robot kołowy, który może poruszać się po swojej drodze bez uderzania w żadne przeszkody. Istnieje wiele sposobów na zbudowanie robota omijającego przeszkody w projekcie, wykorzystamy jeden czujnik ultradźwiękowy (przód) i dwa czujniki podczerwieni (lewy / prawy), aby nasz robot miał oczy we wszystkich trzech kierunkach. W ten sposób możesz uczynić to znacznie inteligentniejszym i szybszym, wykrywając obiekty ze wszystkich trzech stron i odpowiednio manewrując. Tutaj pozywamy PIC Microcontroller PIC16F877A za tego robota omijającego przeszkody.
Działanie robota omijającego przeszkodę można obserwować z poziomu produktu działającego w czasie rzeczywistym o nazwie Roboty sprzątające. Chociaż technologia i zastosowane w nich czujniki są bardzo skomplikowane, koncepcja pozostaje ta sama. Zobaczmy, ile możemy osiągnąć za pomocą naszych zwykłych czujników i mikrokontrolerów PIC.
Sprawdź także nasze inne roboty unikające przeszkód:
- Robot unikający przeszkód oparty na Raspberry Pi
- Inteligentny robot odkurzający zrób to sam za pomocą Arduino
Wymagane materiały:
- PIC16F877A
- Czujnik podczerwieni (2 szt.)
- Czujnik ultradźwiękowy (1Nos)
- Silnik z przekładnią DC (2 szt.)
- Sterownik silnika L293D
- Szezlongi (możesz również zbudować własne za pomocą tektur)
- Power bank (dowolne dostępne źródło zasilania)
Koncepcja robota unikającego przeszkód:
Koncepcja robota unikającego przeszkód jest bardzo prosta. Używamy czujników do wykrywania obecności obiektów wokół robota i wykorzystujemy te dane, aby nie zderzać robota z tymi obiektami. Aby wykryć obiekt, możemy użyć dowolnych czujników, takich jak czujnik podczerwieni i czujnik ultradźwiękowy.
W naszym robocie użyliśmy czujnika amerykańskiego jako czujnika przedniego i dwóch czujników podczerwieni odpowiednio po lewej i prawej stronie. Robot będzie poruszał się do przodu, gdy przed nim nie ma żadnego obiektu. Robot będzie więc poruszał się do przodu, aż czujnik ultradźwiękowy (US) wykryje jakikolwiek obiekt.
Kiedy czujnik US wykryje obiekt, pora zmienić kierunek robota. Możemy skręcić w lewo lub w prawo, aby zdecydować o kierunku skrętu używamy czujnika podczerwieni, aby sprawdzić, czy w pobliżu lewej lub prawej strony robota znajduje się jakiś obiekt.
Jeśli z przodu i po prawej stronie robota zostanie wykryty obiekt, robot zawróci i skręci w lewo. Sprawiamy, że robot cofa się na pewną odległość, aby nie zderzył się z obiektem podczas wykonywania skrętu.
Jeśli z przodu i po lewej stronie robota zostanie wykryty obiekt, robot zawróci i skręci w prawo.
Jeśli robot dotrze do rogu pomieszczenia, wykryje obiekt obecny we wszystkich czterech. W takim przypadku musimy cofać robota, aż któryś z boków stanie się wolny.
Innym możliwym przypadkiem jest to , że z przodu będzie obiekt, ale może nie być żadnego obiektu ani po lewej, ani po prawej stronie, w tym przypadku musimy losowo obrócić w dowolnym kierunku.
Mam nadzieję, że dałoby to ogólne pojęcie o tym, jak działa omijacz przeszkód, przejdźmy teraz do schematu obwodu, aby zbudować tego bota i cieszyć się nim w akcji.
Schemat obwodu i wyjaśnienie:
Pełny schemat obwodu robota omijającego przeszkody opartego na układzie PIC pokazano na powyższym rysunku. Jak widać, użyliśmy dwóch czujników podczerwieni do wykrywania obiektów odpowiednio po lewej i prawej stronie robota oraz czujnika ultradźwiękowego do pomiaru odległości obiektu znajdującego się przed robotem. Użyliśmy również modułu sterownika silnika L293D do sterowania dwoma silnikami obecnymi w tym projekcie. Są to zwykłe motoreduktory prądu stałego do kół i dlatego można je bardzo łatwo wyprowadzić. Poniższa tabela pomoże Ci w podłączaniu.
S.Nr |
Połączony z |
Połączony z |
1 |
Czujnik podczerwieni Pozostawiony styk |
RD2 (styk 21) |
2 |
Czujnik podczerwieni Wyprostowany pin |
RD3 (styk 22) |
4 |
Styk A silnika 1, kanał |
RC4 (pin 23) |
5 |
Styk B silnika 1, kanał |
RC5 (pin 25) |
6 |
Styk A silnika 2 - kanał |
RC6 (pin 26) |
7 |
Styk B silnika 2 kanału |
RC7 (pin 27) |
8 |
Amerykański trzpień wyzwalający |
RB1 (styk 34) |
9 |
Przypinka US Echo |
RB2 (styk 35) |
Moduł sterownika silnika, taki jak L293D, jest obowiązkowy, ponieważ ilość prądu wymaganego do działania motoreduktora prądu stałego nie może być pobierana przez styk I / O mikrokontrolera PIC. Czujniki i moduł zasilane są napięciem + 5V, które jest regulowane przez 7805. Moduł sterownika silnika można zasilać nawet napięciem + 12V, ale w tym projekcie po prostu przykleiłem się do dostępnego + 5V.
W moim przypadku cały Robot jest zasilany przez power bank. Możesz również użyć dowolnego zwykłego banku mocy i ominąć sekcję regulatora lub użyć powyższego obwodu i użyć dowolnej baterii 9 V lub 12 V dla robota, jak pokazano na schemacie obwodu powyżej. Po wykonaniu połączeń będzie wyglądać mniej więcej tak
Programowanie mikrokontrolera PIC:
Zaprogramowanie PIC do pracy dla omijania przeszkód jest naprawdę łatwe. Musimy tylko odczytać wartość tych trzech czujników i odpowiednio sterować silnikami. W tym projekcie używamy czujnika ultradźwiękowego. Dowiedzieliśmy się już, jak łączyć ultradźwięki z mikrokontrolerem PIC, jeśli jesteś tu nowy, wróć do tego samouczka, aby zrozumieć, jak czujnik US działa z PIC, ponieważ pominę tutaj szczegóły na ten temat, aby uniknąć powtórzeń.
Kompletny program lub Robot ten jest podany na końcu tej strony, mam wyjaśnione ważne fragmenty programu poniżej.
Jak wiemy, wszystkie programy zaczynają się od deklaracji pinów wejściowych i wyjściowych. Tutaj cztery piny modułu sterownika silnika i piny Trigger są pinami wyjściowymi, podczas gdy pin Echo i dwa piny IR out będą wejściowe. Powinniśmy zainicjować moduł Timer 1, aby używać go z czujnikiem ultradźwiękowym.
TRISD = 0x00; // PORTD zadeklarowany jako wyjście do interfejsu LCD TRISB1 = 0; // Pin wyzwalający czujnika US jest wysyłany jako pin wyjściowy TRISB2 = 1; // Pin echa czujnika US jest ustawiony jako pin wejściowy TRISB3 = 0; // RB3 jest pinem wyjściowym dla LED TRISD2 = 1; TRISD3 = 1; // Oba piny czujnika podczerwieni są zadeklarowane jako wejście TRISC4 = 0; TRISC5 = 0; // Piny silnika 1 zadeklarowane jako wyjście TRISC6 = 0; TRISC7 = 0; // Piny silnika 2 zadeklarowane jako wyjście T1CON = 0x20;
W tym programie musielibyśmy dość często sprawdzać odległość między czujnikiem a obiektem, dlatego utworzyliśmy funkcję o nazwie calc_distance (), w której będziemy mierzyć odległość metodą omówioną w samouczku dotyczącym interfejsu czujnika USA. Kod pokazano poniżej
void calculator_distance () // funkcja do obliczania odległości US {TMR1H = 0; TMR1L = 0; // wyczyść bity licznika Trigger = 1; __delay_us (10); Wyzwalacz = 0; while (Echo == 0); TMR1ON = 1; while (Echo == 1); TMR1ON = 0; time_taken = (TMR1L - (TMR1H << 8)); odległość = (0,0272 * czas_ zajęty) / 2; }
Następnym krokiem byłoby porównanie wartości czujnika ultradźwiękowego i czujnika podczerwieni i odpowiednie przesunięcie robota. Tutaj W tym programie użyłem wartości cm jako krytycznej odległości, poniżej której Robot powinien zacząć zmieniać kierunek. Możesz użyć preferowanych wartości. Jeśli nie ma przedmiotu, robot porusza się do przodu
if (odległość> 5) {RC4 = 0; RC5 = 1; // Silnik 1 do przodu RC6 = 1; RC7 = 0; // Silnik 2 do przodu}
Jeśli obiekt zostanie wykryty, odległość spadnie poniżej cm. W tym przypadku bierzemy pod uwagę wartości lewego i prawego czujnika ultradźwiękowego. Na podstawie tej wartości decydujemy się skręcić w lewo lub w prawo. Stosowane jest opóźnienie ms, aby zmiana kierunku była widoczna.
if (RD2 == 0 && RD3 == 1 && odległość <= 5) // Lewy czujnik jest zablokowany {back_off (); RC4 = 1; RC5 = 1; // Zatrzymanie silnika 1 RC6 = 1; RC7 = 0; // Silnik 2 do przodu __delay_ms (500); } oblicz_odległość (); if (RD2 == 1 && RD3 == 0 && odległość <= 5) // Prawy czujnik jest zablokowany {back_off (); RC4 = 0; RC5 = 1; // Silnik 1 do przodu RC6 = 1; RC7 = 1; // Zatrzymanie silnika 2 __delay_ms (500); }
Czasami czujnik ultradźwiękowy wykrywał obiekt, ale czujnik podczerwieni nie wykrywał żadnego obiektu. W tym przypadku robot domyślnie skręca w lewo. Możesz także skręcić w prawo lub w losowym kierunku w zależności od twoich preferencji. Jeśli po obu stronach znajdują się obiekty, zmuszamy je do cofania się. Kod do zrobienia tego samego jest pokazany poniżej.
oblicz_odległość (); if (RD2 == 0 && RD3 == 0 && odległość <= 5) // Oba czujniki są otwarte {back_off (); RC4 = 0; RC5 = 1; // Silnik 1 do przodu RC6 = 1; RC7 = 1; // Zatrzymanie silnika 2 __delay_ms (500); } oblicz_odległość (); if (RD2 == 1 && RD3 == 1 && odległość <= 5) // Oba czujniki są zablokowane {back_off (); RC4 = 1; RC5 = 0; // Silnik 1 do tyłu RC6 = 1; RC7 = 1; // Zatrzymanie silnika 2 __delay_ms (1000); }
Robot omijający przeszkody w akcji:
Praca nad projektem jest bardzo ciekawa i przyjemna do oglądania. Gdy skończysz ze swoim obwodem i kodem, po prostu włącz robota i zostaw go na ziemi. Powinien umieć identyfikować przeszkody i mądrze ich unikać. Ale oto zabawna część. Możesz zmodyfikować kod i sprawić, by robił więcej rzeczy, na przykład unikając schodów, czyniąc go mądrzejszym, przechowując cenne zakręty, a co nie?
Ten robot pomoże ci zrozumieć podstawy programowania i dowiedzieć się, jak rzeczywisty sprzęt zareaguje na twój kod. Zawsze fajnie jest programować tego robota i obserwować, jak zachowuje się on dla kodu w prawdziwym świecie.
Tutaj użyliśmy tej samej płyty PIC perf, którą stworzyliśmy do migania diody LED za pomocą mikrokontrolera PIC i używaliśmy tej płytki w innych projektach serii PIC Tutorial.
Twój robot powinien wyglądać podobnie do tego pokazanego na powyższym obrazku. Pełne działanie tego projektu pokazano na poniższym filmie.
Mam nadzieję, że zrozumiałeś projekt i podobał Ci się jego projekt. Jeśli masz jakiekolwiek wątpliwości lub utknąłeś, możesz skorzystać z sekcji komentarzy, aby zamieścić swoje pytania, a ja postaram się odpowiedzieć na nie.