- Materiały wymagane do zbudowania robota do czyszczenia podłóg opartego na Arduino
- Przenośny odkurzacz
- Moduł czujnika ultradźwiękowego HC-SR04
- Czujnik podłogowy (czujnik podczerwieni) do wykrywania schodów
- Schemat obwodu robota do czyszczenia podłóg opartego na Arduino
- Budowa obwodu dla robota czyszczącego podłogę opartego na Arduino
- Arduino
W dzisiejszym scenariuszu wszyscy jesteśmy tak zajęci pracą, że nie mamy czasu na porządne sprzątanie domu. Rozwiązanie problemu jest bardzo proste, wystarczy kupić robota do odkurzacza domowego, takiego jak irobot roomba, który za naciśnięciem przycisku wyczyści Twój dom. Ale takie komercyjne produkty są częstym problemem, jakim są koszty. Dlatego dzisiaj zdecydowaliśmy się stworzyć prostego robota do czyszczenia podłóg, który jest nie tylko prosty w wykonaniu, ale kosztuje znacznie mniej w porównaniu z produktami komercyjnymi dostępnymi na rynku. Często czytelnicy mogą pamiętać naszego robota odkurzającego Arduino, który zbudowaliśmy dawno temu, ale ten był bardzo nieporęczny i wymagał dużej baterii kwasowo-ołowiowej do poruszania się. Nowy odkurzacz Arduino będziemy tu budować będą kompaktowe i bardziej praktyczne. Ponadto robot będzie miał czujniki ultradźwiękowe i czujnik zbliżeniowy IR. Czujnik ultradźwiękowy pozwoli robotowi omijać przeszkody, dzięki czemu będzie mógł się swobodnie poruszać, aż pomieszczenie zostanie odpowiednio posprzątane, a czujnik zbliżeniowy pomoże mu uniknąć upadku ze schodów. Wszystkie te cechy brzmią interesująco, prawda? Więc zacznijmy.
W jednym z naszych poprzednich artykułów stworzyliśmy wiele robotów, takich jak samobalansujący robot, automatyczny robot do dezynfekcji powierzchni i robot unikający przeszkód. Sprawdź je, jeśli brzmi to interesująco.
Materiały wymagane do zbudowania robota do czyszczenia podłóg opartego na Arduino
Ponieważ do budowy części sprzętowej robota odkurzającego użyliśmy bardzo ogólnych komponentów, wszystkie te elementy powinny być dostępne w lokalnym sklepie hobbystycznym. Oto pełna lista potrzebnych materiałów wraz ze zdjęciami wszystkich komponentów.
- Arduino Pro Mini - 1
- Moduł ultradźwiękowy HC-SR04 - 3
- Sterownik silnika L293D - 1
- Silniki 5 V N20 i wsporniki montażowe - 2
- Koła silnikowe N20 - 2
- Przełącznik - 1
- Regulator napięcia LM7805 - 1
- Bateria litowo-jonowa 7,4 V - 1
- Moduł IR - 1
- Perfboard - 1
- Koło obrotowe - 1
- MDF
- Ogólny przenośny odkurzacz
Przenośny odkurzacz
W sekcji wymagań dotyczących komponentów rozmawialiśmy o przenośnym odkurzaczu, poniższe zdjęcia dokładnie to pokazują. To przenośny odkurzacz firmy amazon. Ma to bardzo prosty mechanizm. Posiada trzy części w dolnej części (mała komora do przechowywania kurzu, środkowa część zawiera silnik, wentylator oraz gniazdo akumulatora na górze (jest pokrywa lub nasadka na akumulator). Posiada silnik prądu stałego oraz wentylator. Ten silnik jest bezpośrednio podłączony do 3 V (baterie 2 * 1,5 V AA) za pomocą prostego przełącznika. Ponieważ zasilamy naszego robota baterią 7,4 V, odetniemy połączenie od wewnętrznego akumulatora i zasilimy go z 5 V Tak więc usunęliśmy wszystkie niepotrzebne części i pozostaje tylko silnik z dwuprzewodowymi podpórkami, co widać na poniższym obrazku.
Moduł czujnika ultradźwiękowego HC-SR04
Do wykrywania przeszkód używamy popularnego ultradźwiękowego czujnika odległości HC-SR04 lub możemy go nazwać czujnikami omijania przeszkód. Działanie jest bardzo proste, najpierw moduł nadajnika wysyła falę ultradźwiękową, która przemieszcza się w powietrzu, uderza w przeszkodę i odbija się z powrotem, a odbiornik odbiera tę falę. Obliczając czas za pomocą Arduino, możemy określić odległość. W poprzednim artykule na temat projektu ultradźwiękowego czujnika odległości opartego na Arduino, bardzo dokładnie omówiliśmy zasadę działania tego czujnika. Możesz to sprawdzić, jeśli chcesz dowiedzieć się więcej o module ultradźwiękowego czujnika odległości HC-SR04.
Czujnik podłogowy (czujnik podczerwieni) do wykrywania schodów
W sekcji funkcji omówiliśmy funkcję, w której robot może wykryć klatki schodowe i może zapobiec upadkowi. Aby to zrobić, używamy czujnika podczerwieni. Wykonamy interfejs pomiędzy czujnikiem IR a Arduino. Działanie czujnika zbliżeniowego IR jest bardzo proste, posiada diodę podczerwieni i fotodiodę, dioda podczerwieni emituje światło podczerwone i jeśli jakakolwiek przeszkoda pojawi się przed tym emitowanym światłem, zostanie odbita, a odbite światło zostanie wykryte przez fotodiodę. Ale napięcie generowane z odbicia będzie bardzo niskie. Aby to zwiększyć, możemy użyć komparatora wzmacniacza operacyjnego, możemy wzmocnić i uzyskać wyjście. Moduł podczerwienima trzy piny - Vcc, masę i wyjście. Zwykle moc wyjściowa spada, gdy przed czujnikiem pojawia się przeszkoda. Możemy więc użyć tego do wykrycia podłogi. Jeśli na ułamek sekundy wykryjemy ucisk z czujnika, możemy zatrzymać robota, zawrócić lub zrobić wszystko, co chcemy, aby nie spadł ze schodów. W poprzednim artykule stworzyliśmy wersję Breadboard modułu czujnika zbliżeniowego IR i szczegółowo wyjaśniliśmy zasadę działania, możesz to sprawdzić, jeśli chcesz dowiedzieć się więcej o tym czujniku.
Schemat obwodu robota do czyszczenia podłóg opartego na Arduino
Mamy trzy czujniki ultradźwiękowe, które wykrywają przeszkody. Musimy więc podłączyć wszystkie masy czujników ultradźwiękowych i podłączyć je do wspólnej masy. Ponadto podłączamy wszystkie trzy Vcc czujnika i podłączamy je do wspólnego pinu VCC. Następnie podłączamy piny wyzwalacza i echa do pinów PWM Arduino. Podłączamy również VCC modułu IR do 5V i masę do styku uziemienia Arduino, pin wyjściowy modułu czujnika IR idzie do cyfrowego pinu D2 Arduino. W przypadku sterownika silnika podłączamy dwa piny włączające do 5 V, a także pin napięcia sterownika do 5 V, ponieważ używamy silników 5 V. W poprzednim artykule stworzyliśmy osłonę sterownika silnika Arduino, możesz to sprawdzić, aby dowiedzieć się więcej o układzie scalonym sterownika silnika L293Di jego operacji. Arduino, moduły ultradźwiękowe, sterownik silnika i silniki pracują na 5 V, wyższe napięcie je zabije i używamy akumulatora 7,4 V, aby przekształcić go w 5 V, używany jest regulator napięcia LM7805. Podłącz odkurzacz bezpośrednio do obwodu głównego.
Budowa obwodu dla robota czyszczącego podłogę opartego na Arduino
Aby dowiedzieć się czegoś o moim robocie, szukałem w Internecie robotów do odkurzaczy i otrzymałem zdjęcia robotów okrągłych. Postanowiłem więc zbudować robota o okrągłym kształcie. Aby zbudować szkielet i korpus robota, mam wiele opcji, takich jak arkusz pianki, MDF, karton itp. Ale wybieram MDF, ponieważ jest twardy i ma pewne właściwości wodoodporne. Jeśli to robisz, możesz zdecydować, jaki materiał wybierzesz dla swojego bota.
Aby zbudować robota, wziąłem arkusz MDF, następnie narysowałem dwa koła o promieniu 8 CM, a wewnątrz tego koła narysowałem również inny okrąg o promieniu 4 CMdo montażu odkurzacza. Następnie wyciąłem koła. Ponadto wyciąłem i usunąłem odpowiednie elementy dla ścieżki koła (zapoznaj się z ilustracjami dla lepszego zrozumienia). Na koniec zrobiłem trzy małe otwory na kółko samonastawne. Kolejnym krokiem jest zamocowanie silników do podstawy za pomocą wsporników, a także umieszczenie i zamocowanie kółka samonastawnego. Następnie umieść czujniki ultradźwiękowe po lewej, prawej i na środku robota. Podłącz także moduł IR do dolnej części robota. Nie zapomnij dodać przełącznika na zewnątrz. Chodzi o zbudowanie robota, jeśli w tym momencie jesteś zdezorientowany, możesz odnieść się do poniższych zdjęć.
W górnej części narysowałem również okrąg o promieniu 11 CM na arkuszu pianki i wyciąłem go. Aby uzyskać odstęp między górną a dolną częścią, wyciąłem trzy plastikowe rurki o długości 4 cm. Następnie przykleiłem plastikowe przekładki na dolnej części, a następnie przykleiłem górną część. Jeśli chcesz, możesz pokryć boczne części robota plastikiem lub podobnymi materiałami.
Arduino
Pełny kod tego projektu znajduje się na końcu dokumentu. Ten kod Arduino jest podobny do kodu ultradźwiękowego czujnika odległości Arduino, jedyną zmianą jest wykrywanie podłogi. W kolejnych wierszach wyjaśniam, jak działa kod. W tym przypadku nie używamy żadnych dodatkowych bibliotek. Poniżej opisaliśmy kod krok po kroku. Nie używamy żadnych dodatkowych bibliotek do dekodowania danych odległości z czujnika HC-SR04, ponieważ jest to bardzo proste. W kolejnych wierszach opisaliśmy, jak to zrobić. Najpierw musimy zdefiniować pin wyzwalający i pin Echo dla wszystkich trzech ultradźwiękowych czujników odległości, które są podłączone do płyty Arduino. W tym projekcie mamy trzy piny Echo i trzy piny Trigger. Zwróć uwagę, że 1 to lewy czujnik, 2 to przedni czujnik, a 3 to prawy czujnik.
const int trigPin1 = 3; const int echoPin1 = 5; const int trigPin2 = 6; const int echoPin2 = 9; const int trigPin3 = 10; const int echoPin3 = 11; int irpin = 2;
Następnie zdefiniowaliśmy zmienne dla odległości, z których wszystkie są zmiennymi typu (int), a na czas trwania wybraliśmy (long). Znowu mamy po trzy z każdego. Ponadto zdefiniowałem liczbę całkowitą do przechowywania statusu ruchu, omówimy to w dalszej części tej sekcji.
długi czas trwania1; długi czas trwania2; długi czas trwania3; int distanceleft; int distancefront; int distanceright; int a = 0;
Następnie w sekcji konfiguracji musimy wykonać wszystkie piny perspektywiczne jako wejście lub wyjście za pomocą funkcji pinModes () . Aby wysyłać fale ultradźwiękowe z modułu, musimy ustawić pin wyzwalacza na stan wysoki, tzn. Wszystkie piny wyzwalacza powinny być zdefiniowane jako OUTPUT. Aby otrzymać echo, musimy odczytać stan pinów echa, więc wszystkie piny echa powinny być zdefiniowane jako INPUT. Ponadto włączamy monitor szeregowy do rozwiązywania problemów. Aby odczytać stan modułów IR, zdefiniowałem irpin jako wejście.
pinMode (trigPin1, OUTPUT); pinMode (trigPin2, OUTPUT); pinMode (trigPin3, OUTPUT); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
Te styki cyfrowe są zdefiniowane jako WYJŚCIE dla wejścia sterownika silnika.
pinMode (4, WYJŚCIE); pinMode (7, WYJŚCIE); pinMode (8, WYJŚCIE); pinMode (12, WYJŚCIE);
W pętli głównej mamy trzy sekcje na trzy czujniki. Wszystkie sekcje działają tak samo, ale każda dla różnych czujników. W tej sekcji odczytujemy odległość przeszkody od każdego czujnika i zapisujemy ją w każdej zdefiniowanej liczbie całkowitej. Aby odczytać odległość, najpierw musimy upewnić się, że piny wyzwalacza są wolne, w tym celu musimy ustawić pin wyzwalacza na LOW na 2 µs. Teraz, aby wygenerować falę ultradźwiękową, musimy obrócić pin wyzwalacza WYSOKI na 10 µs. Spowoduje to wysłanie ultradźwiękowego dźwięku i za pomocą funkcji pulseIn () możemy odczytać czas podróży i zapisać tę wartość w zmiennej „ duration ”. Ta funkcja ma 2 parametry, pierwszy to nazwa pinu echa, a drugi to jeden z nichWYSOKI lub NISKI. WYSOKA oznacza, że funkcja pulseIn () będzie czekała, aż pin osiągnie WYSOKI poziom spowodowany przez odbijaną falę dźwiękową i zacznie zliczać, a następnie będzie czekał, aż pin zejdzie na NISKI, gdy fala dźwiękowa się zakończy, co zatrzyma liczenie. Ta funkcja podaje długość impulsu w mikrosekundach. Aby obliczyć odległość, pomnożymy czas trwania przez 0,034 (prędkość dźwięku w powietrzu wynosi 340 m / s) i podzielimy go przez 2 (wynika to z przemieszczania się fali dźwiękowej tam iz powrotem). Na koniec przechowujemy odległość każdego czujnika w odpowiednich liczbach całkowitych.
digitalWrite (trigPin1, LOW); delayMicroseconds (2); digitalWrite (trigPin1, HIGH); delayMicroseconds (10); digitalWrite (trigPin1, LOW); duration1 = pulseIn (echoPin1, HIGH); distanceleft = czas trwania1 * 0,034 / 2;
Po uzyskaniu odległości od każdego czujnika, możemy sterować silnikami za pomocą instrukcji if, dzięki czemu kontrolujemy ruch robota. To bardzo proste, najpierw podaliśmy wartość odległości przeszkody, w tym przypadku jest to 15cm (zmień tę wartość według własnego uznania). Następnie podaliśmy warunki zgodnie z tą wartością. Na przykład, gdy przeszkoda znajdzie się przed lewym czujnikiem (oznacza to, że odległość lewego czujnika powinna być mniejsza lub równa 15 cm), a pozostałe dwie odległości są duże (oznacza to, że przed czujnikami nie ma przeszkody), następnie za pomocą funkcji zapisu cyfrowego możemy napędzać silniki w prawo. Później sprawdziłem stan czujnika podczerwieni. Jeśli robot znajduje się na podłodze, wartość pinu IR będzie NISKA, a jeśli nie, to wartość będzieWYSOKA. Następnie zapisałem tę wartość w zmiennej int s . Będziemy sterować robotem zgodnie z tym statusem.
Ta sekcja Kodeksu służy do przemieszczania robota do przodu i do tyłu :
if (s == WYSOKA) { digitalWrite (4, NISKA); digitalWrite (7, WYSOKI); digitalWrite (8, NISKI); digitalWrite (12, WYSOKI); opóźnienie (1000); a = 1; }
Ale jest problem z tą metodą, gdy silnik porusza się do tyłu, podłoga wraca, a robot przesunie się do przodu i będzie się powtarzał, blokując bota. Aby to przezwyciężyć, przechowujemy wartość (1) w int po tym, jak zrozumienie floor nie jest obecne. Sprawdzamy ten warunek również dla innych ruchów.
Po wykryciu braku podłogi robot nie ruszy do przodu. Zamiast tego przesunie się w lewo, dzięki czemu możemy uniknąć problemu.
if ((a == 0) && (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanceleft> 15 i odległość przód> 15 i odległość odległość> 15))
W powyższym stanie. Najpierw robot sprawdzi stan piętra i wartość całkowitą. Bot będzie poruszał się do przodu tylko wtedy, gdy wszystkie warunki zostaną spełnione.
Teraz możemy napisać polecenia dla sterownika silnika. Spowoduje to przesunięcie prawego silnika do tyłu, a lewego silnika do przodu, obracając w ten sposób robota w prawo.
Ta sekcja kodu służy do przesuwania robota w prawo:
digitalWrite (4, WYSOKI); digitalWrite (7, NISKI); digitalWrite (8, WYSOKI); digitalWrite (12, NISKI);
Jeśli bot wykryje brak podłogi, wartość zmieni się na 1, a robot przesunie się w lewo. Po skręceniu w lewo wartość „a” zmienia się z 1 na 0.
if ((a == 1) && (s == LOW) - (s == LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright> 15) - (distanceleft <= 15 && distancefront> 15 && distanceright> 15)) { digitalWrite (4, WYSOKI); digitalWrite (7, NISKI); digitalWrite (8, NISKI); digitalWrite (12, WYSOKI); opóźnienie (100); a = 0; }
Ta sekcja kodu służy do przemieszczania robota w lewo:
if ((s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright> 15)) { digitalWrite (4, LOW); digitalWrite (7, WYSOKI); digitalWrite (8, WYSOKI); digitalWrite (12, NISKI); }
To wszystko do budowy inteligentnego robota odkurzającego opartego na Arduino. Pełne działanie projektu można znaleźć w wideo, do którego link znajduje się na dole tej strony. Jeśli masz jakieś pytania, skomentuj poniżej.