S

Elektronika i programowanie. Damian Kaniecki

BT Robot v.1.0

Pierwsza wersja robota

Projekt, do zrobienia którego zabierałem się przez ponad dwa lata :) Ciągle nie miałem czasu, wypadło coś ważniejszego... lub po prostu mi się nie chciało.

 

Projekt od samego początku miał być czymś ambitnym. Postanowiłem, że zbuduję robota, który sterowany będzie za pomocą smartfona. W pierwszej wersji sterowanie odbywać się miało przy pomocy akcelerometru. Wystarczy odpowiednio ułożyć telefon, by sterować samochodzikiem. Oczywiście napisanie odpowiedniej aplikacji na Androida także było częścią projektu.

Zacząłem walkę z telefonem. Po poszukiwaniach w sieci do wyboru miałem dwie opcje. Uczyć się Javy (raczej nie) lub spróbować sił w znanym środowisku Delphi (a konkretniej mniej znanym Firemonkey). Wcześniej próbowałem ujarzmić telefoniczny Bluetooth i naskrobać coś w Delphi.... ale jego mało intuicyjne rozwiązania skutecznie odkładało projekt na później. :(

Do momentu przypadkowego natknięcia się na tutorial Pana Mirka (tutaj)!!!

Od tego momentu "poszło z górki". Moim przyjacielem w komunikacji z Androidem stał się Basic4Android!

Odkładany na później projekt w końcu ruszył.

 

Założenia:

-Samochód sterowany będzie za pomocą aplikacji w telefonie z systemem Android. Program umożliwiał będzie sterowanie położeniem telefonu (akcelerometr) lub ręcznie za pomocą "pada".

-Silnik sterowany będzie przy pomocy PWM, co umożliwi uzyskanie płynnej regulacji prędkości w granicach 0-100%.

-Do kierowania przednią osią użyte zostanie serwo.

-Samochód będzie posiadał czujnik odległości. Pozwoli to zatrzymać pojazd przed przeszkodą i ograniczy uderzenia w ścianę :)

-Robot odczytywał będzie wartości napięcia zasilania oraz wartość temperatury otoczenia i przesyłał te dane do aplikacji....

 

BUDOWA:

Do sterowania samochodem wykorzystałem sprawdzonego AVR'ka ATmega8. Tradycyjnie rozpocząłem od stworzenia symulacji i przystąpiłem do pisania programu. Jak zwykle Eclipse i C. Rozpocząłem od wyliczenia wartości timerów dla sterowania serwomechanizmem i wypełnieniem PWM dla silnika. Postanowiłem zrezygnować z osobnego mostka H i użyłem dedykowanego układu L293D. Zaoszczędziło to nieco miejsca na płytce. Jak się później okazało - zasoby ATmega8 zostały wykorzystane na maxa :)

Dodanie czyjnika odległości zużyło ostatni dostępny timer. Ale sam program zajmował tylko 35% pamięci FLASH mikrokontrolera. Można jeszcze zaszaleć.

Symulacja układu

Układ testowy sterowania

Samochód przeznaczony do przeróbki

Podwozie robota

Do pełni szczęścia potrzebowałem tylko podwozia. Oczywiście w swoich zasobach posiadałem już "tanią chińszczyznę" przeznaczoną do przerobienia. Niestety, jak się później okazało, samochód nieźle wyglądał ale nie nadawał się do przeróbki. Sterowanie polegało po prostu na uruchomieniu bądź wyłączeniu silników odpowiedzialnych za napęd i skręcanie kołami. Jakość silniczków godna ceny samochodzika (35 zł). Jednak postanowiłem wykonać nową płytkę przeznaczoną do sterowania robotem. W późniejszym czasie zainwestuję w lepsze podwozie i robot będzie jeździł zgodnie z oczekiwaniami.

Schemat płytki sterowania

Płytka drukowana przed wytrawieniem

Gotowa płytka drukowana układu sterowania

Płytka sterowania - druk

Płytka gotowa, sterowanie przerobione. Czas na "dopieszczenie" aplikacji sterującej.

Dzięki B4A przystąpiłem do oswajania Androida. Na początku chciałem sterować robotem za pomocą położenia telefonu. Komunikacja Bluetooth - RS232 dzięki modułowi BT-222 działa "na piątkę" (pod warunkiem baaaardzo dobrego filtrowania napięcia zasilającego). Gdy napisałem już część obsługującą akcelerometr doszedłem do wniosku, że dość trudno steruje się w ten sposób. W dodatku nie sposób odczytywać informacje, które zwrotnie wysyła robot (wartość napięcia zasilania, odległość od przeszkody...). Dlatego druga wersja to coś na wzór pada. Składa się z dwóch kontrolek (prawo/lewo i przód/tył) oraz wskaźnika naładowania baterii i informacji o odległości od przeszkody.

Android - sterowanie akcelerometrem

Sterowanie ręczne - BT rozłączony

Sterowanie ręczne - BT połączony

Sterowanie ręczne - przeszkoda w odl. 15,3cm

Aplikacja odczytuje położenie suwaków i co 200 ms przesyła do robota informacje, które sterują wychyleniem serwomechanizmu (kierunek) i wypełnieniem PWM dla silnika napędzającego tylne koła.

Wersja sterowania wychyleniem telefonu pozwala na kalibrację czujnika położenia. Pozwala na sterowanie robotem, ale prawdę mówiąc jest trochę niewygodna. Dlatego powstała wersja PAD. Nie tylko pozwala na płynną regulację prędkości i kierunku robota, to jeszcze umożliwia obserwowanie informacji zwrotnej. Na pierwszym ekranie widzimy obraz, gdy BT nie jest jeszcze podłączony i nie odczytujemy wartości napięcia i odległości od przeszkody. Drugi ekran - to podłączony BT, odczytana wartość napięcia zasilania i odebrany sygnał, że przed robotem nie ma żadnej przeszkody. Ostatni screen to otrzymana informacja, że w odległości 15,3 cm od robota znajduje się przeszkoda. Telefon zaczyna wówczas wibrować a robot zatrzymuje się i nie można kontynuować jazdy do przodu. Można spokojnie wycofać się do bezpiecznej odległości 20 cm od przeszkody.

Przygotowania do pierwszej jazdy

Próba połączenia ze smartfonem

Nowa "karoseria" na miejscu

Nadejszła wiekopomna chwila by przystąpić do pierwszej jazdy! Postanowiłem iść na całość! Zaopatrzyłem się w sześciowoltowy akumulator o pojemności 4,5 Ah :) Przy średnim poborze ok. 1A prądu powinno w najgorszym wypadku starczyć energii na conajmniej 2 godziny zabawy (i to ze sporym marginesem). I tu kolejny zawód :( Najprawdopodobniej kupiłem za ciężki akumulator, bo mój robocik pojeździł dosłownie 3 minuty!!! Najpierw myślałem, że to wina akumulatora. Że może stary, rozładowany... Dla pewności zmienilem akumulator na wysłużone modelarskie akumulatorki 7,2V (tylko 650mAh). Z mniejszym ciężarem robot jeździ już dłużej. Pierwsze testy za mną. Oto efekty:

Zawartość tej strony wymaga nowszej wersji programu Adobe Flash Player.

Pobierz odtwarzacz Adobe Flash

 

Zawartość tej strony wymaga nowszej wersji programu Adobe Flash Player.

Pobierz odtwarzacz Adobe Flash

Po kilku "jazdach testowych" robot nadal rozładowywał akumulatory w zastraszającym tempie. Przez przypadek dowiedziałem się, że winę za to ponosi mostek L293D. Silnik pobierał ponad 1A, co powodowało nadmierne nagrzewanie układu. TO NIE AKUMULATOR! :)

Po wymianie mostka na układ L298N (zmontowana na płytce chińszczyzna z radiatorem i diodami zabezpieczającymi okazała się tańsza od kupna samego układu) robocik wreszcie zaczął poruszać się zgodnie z oczekiwaniami.

Czas na dopracowanie aplikacji i końcowy montaż. Zdjęcia wkrótce :)