Przejdź do głównej zawartości

Nieskomplikowany robot mobilny

Żadna to nowość w sieci – dwukołowy robot sterowany platformą Arduino i to jeszcze zbudowany w oparciu o gotową "ramę". A jednak jest szansa, że w każdym takim pojekcie i artykule na blogu znajdzie się coś ciekawego, może nawet unikatowego.
Historia tego robocika zaczęła się od marzenia, którym podzielił się ze mną pewnego wieczoru syn. Otóż powiedział, że chciałby mieć droida. Wiedziałem, o co chodzi, bo mój dziewięcioletni syn jest wielkim fanem Gwiezdnych Wojen (i aktualnie Harry'ego Pottera, choć na bal przebierańców idzie póki co jako Imperator Palpatine). Zadziałał efekt kolejki elektrycznej – zaproponowałem, że zbudujemy robota, który potrafi jeździć. Syn się zgodził.
Poszło więc zamówienie, dotarła paczka i poskładaliśmy robota, którego syn nazwał "Gnomonek", prawdopodobnie bazując na nazwie elementu zegara słonecznego.
Do dziś powstały cztery jego wersje, w zależności głównie od oprogramowania i zastosowanego dodatkowego sprzętu:
  • beam follower (czyli ścigający latarkę);
  • line follower (czyli jeżdżący po linii; w domu była to biała linia na brązowym tle, w pracy zaś, podczas prezentacji, czarna linia na jasnym tle – kwestia przestawienia paru znaków w programie);
  • robot zdalnie sterowany (za pomocą pilota od starego telewizora);
  • robot zdalnie sterowany (jak wyżej) z prostym systemem wykrywania przeszkód.
Końcowa wersja została tak przygotowana, żeby można było wrócić do każdej z poprzednich poprzez wgranie odpowiedniego programu.



Ponieważ wszelkiego rodzaju line followery i beam followery zostały przedstawione na wielu blogach i w różnych odmianach – między innymi właśnie ten, który wykorzystuje komponenty sprzętowe identyczne z zainstalowanymi  "Gnomonku" – tutaj skupiłem się na ostatniej jego wersji, czyli zdalnie sterowanym robocie mobilnym z prostym wykrywaniem przeszkód.
Do budowy tego robota wykorzystałem:
  • Magician Chassis z silnikami, kołami i koszykami na baterie (dostępną np. na Nettigo);
  • Arduino Leonardo i Arduino Motor Shield (zamiast drogiej płytki Motor Shield można zastosować układ L293D – do użytych przeze mnie silników w zupełności wystarczy, a jakby nie dawał rady, to możemy połączyć kilka takich układów w systemie "na barana", czyli piggy-back);
  • RoboBoard 1.0 – jeśli zależy nam na funkcjonalności line followera i beam followera (opis obu rozwiązań z płytką RoboBoard i Arduino znajdziemy tutaj);
  • małą płytkę stykową;
  • czujnik zbliżeniowy HC-SR04;
  • TSOP2236 (lub odpowiednik) jako odbiornik podczerwieni;
  • buzzer z generatorem;
  • dwie LED-y w różnych kolorach;
  • dwa rezystory 220 Ohm;
  • paczkę kabelków do płytki stykowej.
Zaprogramowane przeze mnie funkcjonalności robota, to:
  • możliwość poruszania się w przód i w tył z jedną z predefiniowanych prędkości ("biegów");
  • możliwość płynnej regulacji prędkości;
  • płynny skręt po łuku;
  • skręt w miejscu (zwrot);
  • sygnalizacja dźwiękowa przeszkody w odległości mniejszej niż 20 cm od czoła robota (po wykryciu przeszkody robot cofa się kilka centymetrów i zatrzymuje).
Jeśli chodzi o komponenty programowe, wykorzystałem standardową bibliotekę dla Arduino Motor Shield oraz bibliotekę IRremote, opisaną na stronie autora i w serwisie Majsterkowo. W przypadku IRremote należy zwrócić uwagę, że w środowisku Arduino IDE w wersji nowszej niż 1.5.4 może wystąpić błąd kompilacji związany z kolizją nazw bibliotek (środowisko dostarcza podobną bibliotekę). Jeśli nie chcemy ostro  modyfikować kodu, zmieńmy po prostu nazwy plików z naszą, lokalną wersją IRremote.
Dodatkowo użyłem prostego kodu obsługi czujnika ultradźwiękowego HC-SR04 – kodu zainspirowanego rozwiązaniem znalezionym w serwisie Instructables oraz opisem w dokumentacji technicznej modułu.
Poniżej zamieściłem listing programu – myślę, że nie powinno być problemów ze zrozumieniem poszczególnych jego elementów, starałem się wszak dość szczegółowo i wnikliwie go komentować. Schematu nie załączam - przedstawiony w listingu opis przeznaczenia poszczególnych pinów dla każdego arduinowca będzie prawdopodobnie wyczerpującą informacją na temat połączeń elementów elektronicznych w tym urządzeniu.


Program z oczywistych powodów nie jest doskonały ani optymalny, tym bardziej, że powstawał metodą przyrostową, na podstawie eksperymentów i obserwacji.
Na załączonych dalej flimach możemy zobaczyć "Gnomonka" jako line followera i jako pojazd sterowany pilotem TV (ale jeszcze bez wykrywania przeszkód).



Co dalej z robotem? Otóż sterowanie zdalne za pomocą pilota TV jest szalenie niewygodne. Można by pomyśleć o zaadaptowaniu do sterowania nadajnika od biedronkowego śmigłowca – też działa na podczerwień. Byłoby to rozwiązanie optymalne, choć nie dostarczałoby tylu ciekawych opcji, co prezentowane wyżej. Próbowałem nawet "zdjąć" kody emitowane przez taki nadajnik, niestety, jak na razie nie byłem w stanie ogarnąć zastosowanego tam systemu... Co do planów na najbliższe tygodnie (o ile czas pozwoli), to właśnie przygotowałem układ enkodera dla silników – chodzi o to, że motorki zastosowane w robocie, mimo, że takie same pod względem specyfikacji, są szalenie nierówne. Innymi słowy przy takim samym wypełnieniu (czyli zadanej prędkości) robot zaczyna "ściągać" w lewo. Rzecz polega na tym, żeby robot starał się w miarę możliwości jechać równo.
Po rozwiązaniu tego problemu planuję zamontowanie ruchomej, sterowanej serwomechanizmem wieżyczki z czujnikiem HC-SR04 w celu zbudowania robota potrafiącego wykrywać i omijać przeszkody.
Równolegle trwają też prace nad robotem balansującym (nazwa robocza "Black") – moduł sterujący (Arduino Pro Mini, mostek H do sterowania silnikami i akcelerometr z żyroskopem GY-521 plus kilka elementów dyskretnych) oraz szkielet wraz z silnikami już przygotowane, teraz tylko trzeba znaleźć czas na montaż i testy.
Do zobaczenia zatem przy kolejnych wersjach moich (naszych :-)) robotów.


Komentarze

Popularne posty z tego bloga

Niesamowicie prosty czujnik zmierzchowy.

Tym razem zero programowania, będzie natomiast nostalgiczno-wspomnieniowy układzik, lekko zmodyfikowany.
Otóż kilka dni temu rozmawialiśmy w gronie znajomych o różnego rodzaju czujnikach zmierzchowych i czujnikach ruchu. Ponieważ należę do tych wariatów, co to hołdują jeszcze owej przestarzałej i kompletnie odrealnionej dziś zasadzie: "po co kupować, gdy można zrobić", stwierdziłem, że poskładam takie coś (czujnik zmierzchowy; sensor ruchu faktycznie lepiej nabyć, choćby ze względu na rozmiary ;)) i być może podłączę do jakiegoś mikrokontrolera. Przypomniało mi się też przy okazji, że znalazłem ostatnio w elektronicznych śmieciach stary fotorezystor (dla niewtajemniczonych: element zmieniający rezystancję, czyli opór elektryczny, pod wpływem działania strumienia światła) RPP130, jeden z kilku pozostałych po montowanych wieki temu układach tranzystorowych do zdalnego sterowania pracą urządzeń za pomocą latarki... No OK, nie było to specjalnie rozbudowane zdalne sterowanie ;)

Android i zewnętrzny moduł GPS

Od kilku dni jestem w posiadaniu smyrfona z Androidem 4.1.1 na pokładzie. Kwestie związane z wyborem systemu roztrząsałem już na G+, a ten artykuł tutaj ma konkretny temat, więc nie będę wyjaśniał po raz n-ty. Po prostu zwyciężyły popularność i ekosystem oraz przywiązanie do produktów sieciowych Google. Mniejsza.

Zbliża się sezon urlopowy :-) Moi podopieczni już mają wakacje, a ja wyjeżdżam wkrótce. W każdym bądź razie wakacje to podróże - samochodem, rowerem, na piechotę, żaglówką, motorówką, samolotem... Zaawansowane urządzenia mobilne przyzwyczaiły nas już do usług lokalizacyjnych, z których najważniejszą jest GPS (na dalszym planie mamy A-GPS, lokalizacje w oparciu o sieci WiFi itp.). Często korzystamy z programów, które w coraz ciekawszy sposób wiążą naszą lokalizację, pobraną z np. GPS-a, z przeróżnymi danymi, nieraz ocierając się o AR.
Każdy współczesny smartfon, a przynajmniej znakomita ich większość, wyposażona jest we wbudowany odbiornik sygnału lokalizacyjnego (GPS, GLONASS…

Po co mi to całe Arduino?

Oczywiście tytuł ma być jedynie prowokacją. Chociaż nie do końca - artykuł jest właśnie poświęcony pracy w Arduino IDE z mikrokontrolerami, ale bez płytek Arduino.
Czym jest Arduino - wiemy wszyscy, zarówno początkujący fani programowania elektroniki, jak i zaawansowani mikrokontrolerowcy. Jeśli jednak nie do końca wiemy, zachęcam do odwiedzenia strony domowej projektu (link 5 na końcu artykułu) oraz zerknięcia np. w poradnik (link 4).

Jakiś czas temu, przełamując się i zmieniając zdanie ("o 180 stopni" ;-)) nabyłem sobie Arduino Leonardo, głównie w celu jego "obwąchania" i zapoznania się z bogatym zbiorem bibliotek dostępnych dla tej platformy. Zgoda, różne biblioteki są dostępne niezależnie od Arduino, ale i tak się zdecydowałem. Dlaczego Leonardo? Otóż miałem ochotę przyrządzić dwie pieczenie na jednym ogniu - mieć Arduino i przetestować ATmegę 32u4. Dziś doskonale zdaję sobie sprawę, że żeby pobawić się Arduino nie trzeba go w ogóle posiadać... Ale po kolei.

Pi…