Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Sterowane autko z Arduino

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:#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; } 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:
Sterowanie:
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ę.
 

hobby

Komentarze

0 nowych
DjLeo MODERATOR BLOGA  18 #1 13.07.2015 21:43

Ten wpis mi uświadomił, że to naprawdę jest banalnie proste :)

wojtekadams   18 #2 13.07.2015 21:55

przyznam szczerze, że nie czytałem całego wpisu, ale sam kiedyś coś podobnego zmajstrowałem - nawet użyłem takiego samego podwozia. Fajna zabawka :)

  #3 13.07.2015 23:26

Świetny wpis, dziękuję!

En_der   9 #4 14.07.2015 00:50

Jak ten pojazd, a raczej jego cztery silniki i cała reszta, radzi sobie na trzech "paluszkach"?

WODZU   17 #5 14.07.2015 08:43

Fajny wpis, motywujący do eksperymentów. Natomiast sama apka do obsługi zabawki tragiczna, bo jak widzę każdy przycisk kierunkowy musi być wyłączany środkowym, a wystarczyłoby, aby wybrana funkcja działała tylko w czasie, w którym trzyma się strzałkę, a po oderwaniu palca od ekranu dezaktywowała się.

mikolaj_s   14 #6 14.07.2015 11:42

@En_der: "Jak ten pojazd, a raczej jego cztery silniki i cała reszta, radzi sobie na trzech "paluszkach"?"
Sześciu, na zdjęciu widać tylko jedną stronę kołyski razem 7,2V

@WODZU "każdy przycisk kierunkowy musi być wyłączany środkowym,"
Tylko jak chcesz zatrzymać, przecież skręcić możesz bez zatrzymywania.

"a wystarczyłoby, aby wybrana funkcja działała tylko w czasie, w którym trzyma się strzałkę, a po oderwaniu palca od ekranu dezaktywowała się."
Byłoby to trochę męczące, ale musiałbym napisać własną aplikację bo ta nie wysyła sygnału po puszczeniu, ani trzymaniu przycisku. Raczej myślę o aplikacji, w której regulowało by się moc jednym sliderem, a drugi regulowałby promień skrętu.

kubut   18 #7 14.07.2015 12:07

Wpis leci do ulubionych, na 100% coś takiego sobie zmajstruję :)

Jaro070   16 #8 14.07.2015 13:13

@mikolaj_s

Bardzo zainteresowałeś mnie tym projektem. Przeszukałem Aliexpress i można potrzebne części kupić trochę taniej:
- podwozie 19.1$ http://www.aliexpress.com/item/Free-shipping-4WD-Smart-Robot-Car-Chassis-Kits-wi...
- bluetooth 2.85$ http://www.aliexpress.com/item/SPP-C-Bluetooth-serial-pass-through-module-wirele...
- sterownik silników 2.38$ http://www.aliexpress.com/item/Smart-Electronics-1pcs-Smart-Car-Stepper-DC-Motor...
Arduino Nano kupiłem kiedyś za 1$, koszyczek można znaleźć w wielu zabawkach.

mikolaj_s   14 #9 14.07.2015 13:23

Z Chin zawsze taniej, tylko trzeba dłużej czekać ;)

WODZU   17 #10 14.07.2015 13:40

@mikolaj_s: "Raczej myślę o aplikacji, w której regulowało by się moc jednym sliderem, a drugi regulowałby promień skrętu."

To byłoby dobre rozwiązanie, bo najbardziej zbliżone do "naturalnego" z klasycznych, nieopartych o dotykowy ekran kontrolerów.