Sterowane autko z Arduino
13.07.2015 22:53
Projekt autka z wykorzystaniem platformy zdalnie sterowanego za pomocą telefonu komórkowego chodził mi od jakiegoś czasu po głowie. Niestety znalazłem czas na realizację projektu dopiero na urlopie. To dobra okazja, żeby posiedzieć trochę z dzieckiem i zrobić z nim zabawkę. Jasne, że znacznie ładniejsze sterowane autko można kupić gotowe, bez wysiłku i straty czasu. Tym bardziej, że koszt samodzielnego złożenia pojazdu nie jest wcale niższy od zakupu nowego, a do tego trzeba w to włożyć sporo wysiłku. Po co zatem się wysilać? Poza satysfakcją z samodzielnego wykonania dochodzi możliwość dowolnego oprogramowywania pojazdu oraz rozbudowy. W każdej chwili jeśli coś się popsuje mogę wymienić zużyty element nowym. Ale w mojej opinii najważniejsze jest kontakt z dzieckiem i przykład oraz zachęta dla niego, że można i warto robić coś samodzielnie. Fakt, że dziecko niewiele mogło pomóc, ale za to frajda z zabawy jest chyba większa niż z gotowego pojazdu ze sklepu.
Potrzebne elementy
Początkowo próbowałem zrobić podwozie robota z klocków Lego. Jednak mają one to do siebie, że nie są zbyt trwałe. Trudno jest tak umocować silniki, aby przy uderzeniu w przeszkodę całość konstrukcji nie rozpadła się. Potrzebne byłyby zapewne silniczki zalane w plastiku z Mindstorma, ale koszt ich jest zbyt wysoki. Postanowiłem kupić gotowe podwozie z popularnego serwisu aukcyjnego:
Papierową naklejkę należy zdjąć, a następnie całość złożyć zgodnie z instrukcją. Wszystko skręca się dość prosto, poza jedną przeszkodą otóż niestety Chińczycy nie są zbyt solidni i kątowniki do umocowania silniczka nie pasowały do wyciętych dziurek. Trzeba było popracować trochę, aby je powiększyć.
Po zmontowaniu całości samochodzik wygląda następująco:
Sercem pojazdu może być dowolne Arduino, w moim przypadku użyłem klona Arduino Nano. Jest ono bardzo małe, nie zajmuje wiec dużo miejsca, ma złącze USB i nie zużywa dużo prądu, a ilość pinów jest wystarczająca. Jako sterownika silników użyłem: UNO MEGA2560 R3 Mini L293D Motor Driver, kupiony z Chin (popularny zagraniczny serwis aukcyjny). Ma on tę zaletę, że może posłużyć jako zasilacz dla naszego Arduino. Obsługuje dwa kanały. Należy przylutować kabelki do silników i połączyć prawą stronę do kanału A, a lewą do kanału B (łącząc po dwa kable). Wyjście VCC i GND łączymy z Nano do pinów: 5V znajdującego się obok A7 oraz dwa piny dalej GND. Do VIN i GND obok wyjść na silniki podłączamy zasilanie bateryjne (VIN jako +). Prąd dostarcza kołyska 6 paluszków akumulatorków 1,2V. Sterowanie silników odbywa się przez piny D5, D6, D9, D10 podłączone do pinów sterownika IN1, IN2, IN3, IN4 (dwa silniki * przód i tył). Te piny Nano pozwalają na użycie PWMu. Do połączenia z telefonem po bluetooth użyłem popularnego modułu HC‑05. Wymaga on zasilania 3,3V podłączonego z Arduino. Piny RX i TX tego modułu podłączamy do pinów A7 i A8. W Arduino IDE potrzebujemy do komunikacji biblioteki Software Serial, którą musimy ściągnąć i zapisać w katalogu lib.
Sterowanie
Potrzebujemy programu na telefon z Androidem, który będzie łączył się po bluetooth z autem. Użyłem do tego aplikacji Arduino Controll Car.
Działa ona w prosty sposób, wysyłając litery odpowiadające klawiszom po ich wciśnięciu (a - naprzód, e - tył, b - prawo, d - lewo, c - stop). Wyłapując je w aplikacji na Arduino wiem czy pojazd ma jechać naprzód do tyłu czy też skręcać. Nie da się nie zauważyć, że zachowuje się ono bardziej podobnie do czołgu niż samochodu, ponieważ sterowanie kierunkiem musi polegać na obracaniu kół z jednej strony szybciej niż z drugiej. Jednak ze względu na brak odpowiedniej aplikacji na Androida, będzie on skręcać obracając tylko jedną stroną kół, bez możliwości regulacji stopniem skrętu. Kod testowy dla autka:
[code=c++]#include <SoftwareSerial.h> SoftwareSerial mySerial(7, 8); // RX, TX char character; int p= 0; void setup() { mySerial.begin(9600); Serial.begin(9600); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); }
void loop() // run over and over { if(mySerial.available()){ character = mySerial.read(); p= 50; } switch(character) { case 'a': analogWrite(9, 0); analogWrite(10, p); analogWrite(5, 0); analogWrite(6, p); break; case 'e': analogWrite(9, p); analogWrite(10, 0); analogWrite(5, p); analogWrite(6, 0); break; case 'd': analogWrite(9, 0); analogWrite(10, 0); analogWrite(5, 0); analogWrite(6, p); break; case 'b': analogWrite(9, 0); analogWrite(10, p); analogWrite(5, 0); analogWrite(6, 0); break; case 'c': analogWrite(9, 0); analogWrite(10, 0); analogWrite(5, 0); analogWrite(6, 0); p = 0; break; default: break; } delay(50); if(p < 250) p+= 10; } [/code]
Dodatkowo w celu uproszczenia sterowania zmienna p reguluje moc silników powodując, że na początku działają one słabiej, a siła rośnie z czasem, dzięki czemu łatwiej jest delikatnie skręcić.
Koszt
Całkowity koszt materiałów wyniósł około 160 zł.
- klon Arudino Nano - 20 zł
- sterownik silników - 15 zł
- moduł bluetooth - 20 zł
- podwozie z silnikami - 100 zł
- koszyczek na baterie - 5 zł
Podsumowanie
To co mam teraz jest w zasadzie tylko wstępem do dalszego rozwijania projektu. Można eksperymentować ze sterowaniem, poprzez udoskonalanie kodu na Arduino, ale również przez szukanie innych programów na Androida, a być może napisaniem nawet własnego. Planuję również pobawić się w dodanie nowych modułów, w tym przede wszystkim miernika ultrasonicznego dystansu, dzięki czemu pojazd będzie unikać wpadania na przeszkody. Zastanawiam się również na uczynieniem z projektu platformy do nauki programowania dla dzieci z wykorzystaniem projektu Kojo lub Scratch. Aby dzieci mogły samodzielnie planować zachowanie pojazdu przy użyciu języka typu LOGO lub składania go z klocków. Na razie efekt wygląda następująco: [youtube=https://youtu.be/zzzO-k5FgB8] Sterowanie: [youtube=https://youtu.be/gQFfhhnD0zc] Myślę, że dla każdego kto lubi trochę się pobawić z Arduino to bardzo prosty projekt, który można wykonać małym kosztem czasu, a przy okazji zrobić dziecku zabawkę.