Eureka
7
Samochodzik sterowany telefonem

@Stefan robo_psuj #robotyka #arduino #atmega 1 18 kwietnia 2017

Chcielibyście sobie posterować własnoręcznie skonstruowanym oraz zaprogramowanym samochodzikiem za pomocą apki na telefon. Myślę że tak. Zobaczymy jak po kolei skonstruować takie cudo. Od potrzebnych nam narzędzi poprzez sterowania silników oraz zasilania całego układu z zewnętrznego akumulatora.

Obserwuj Ulubione Zgłoś 195 zł Średni

Instrukcja

Przedmowa

Chcielibyście sobie posterować własnoręcznie skonstruowanym oraz zaprogramowanym samochodzikiem za pomocą apki na telefon. Myślę że tak. Zobaczymy jak krok po kroku skonstruować takie cudo. Od potrzebnych nam narzędzi poprzez sterowania silników oraz zasilania całego układu z zewnętrznego akumulatora do obsługi bluetooth.

Zakupy

Potrzebujemy naszego mikrokontrolera z poprzedniego poradnika serii, podłączonego do zasilania z wgranym bootloaderem arduino oraz programatora. Jeśli coś będzie w tym poradniku do czego istnieją odpowiednie instrukcje będę zamieszczał linki. Natomiast prócz wszystkich elementów z poprzedniego wpisu potrzebujemy jeszcze kilku innych podzespołów.

 

Przetwornica

(Przetwornica step-up/step-down - S7V8F5 5V 1A lub zdecydowanie mniej polecana opcja Stabilizator 5V L7805CV - THT TO220)

 

Jest nam potrzebna do zasilania całego układu. Pytanie tylko po co? Nie wystarczy po prostu wpiąć baterii czy akumulatora do szyn tak jak robiliśmy to z kablami do programatora? I odpowiedź jest bardzo prosta. Nie zawsze. Rozchodzi się o napięcie źródła zasilania. To które płynie przez przewody programatora jest na poziomie 5V czyli poziomie idealnym dla naszego mikrokontrolera oraz większości płytek rozszerzeń takich jak moduł bluetooh, sterowniki, przekaźniki czy też wyświetlacze. Jeśli posiadamy baterie czy akumulator o napięciu 5V możemy śmiało wpiąć go w nasz układ. Z bateriami sprawa ma się o tyle dobrze że one częściej mają te nominalne 5V natomiast akumulatory z których zdecydowanie częściej korzysta się w robotyce z powodów praktycznych (możliwość ponownego ładowania, dłuższa żywotność) posiadają napięcia rzędu 3.7V, 7.4V, 11.1V tyczy się to głównie jednych z najbardziej popularnych akumulatorów typu Li-pol.

 

Więc jeśli mamy już nasz akumulator o napięciu 7,4V musimy je obniżyć do poziomu 5V i tutaj z pomocą przychodzi nam przetwornica step-down która poradzi sobie z tym zadaniem idealnie.

 

Nadmienię iż można spotkać się z o wiele tańszymi zamiennikami tak zwanymi stabilizatorami liniowymi. Są one natomiast mało efektywne, wydzielają bardzo dużo ciepła i posiadają mizerną wydajność prądową na której nam zależy ponieważ musimy zasilić 2 silniki, również akumulatory wyczerpią się zdecydowanie szybciej. Unikamy więc tego zamiennika jak ognia.

 

Sterownik silników

(Moduł Pololu DRV8801 lub mniej polecana opcja układ scalony L293D)

 

Definicja pojazdu mówi nam iż posiada on koła lub przynajmniej jedno koło. Można je napędzać siłą mięśni lecz my posłużymy się silnikami, wygodnie prawda? Konkretniej silnikami na prąd stały czyli DC (direct current) by móc wprawić je w ruch tz, by wał poruszał się w jedną bądź to druga stronę wystarczy do końcówek takiego silnika przyłożyć napięcie. W zależności od kierunku w którym chcielibyśmy by wał się poruszać musimy zamieniać ze sobą plus oraz minus. Moglibyśmy więc teoretycznie podłączyć jeden kabelek silnika do jednego pinu w mikrokontrolerze a drugi do drugiego. Na jednym pinie podawaliśmy zasilanie czyli plus a na drugim zaś uziemienie czyli minus. W ten sposób silnik mógł poruszać się w przód oraz tył i zależałoby to od wartości jakie wyprowadzimy w naszym arduino, coś jak zapalanie i gaszenie naszej diody.

 

Więc w takim razie po co nam jakiś sterownik silników? Skoro możemy się bez niego obejść. Po pierwsze wydajność prądowa. Nasz mikrokontroler może dostarczyć znikome dostawy energii której potrzebuje nasz silnik nie mówiąc już o 2 silniach no ale powiedzmy że mamy firmowe arduino które może dostarczyć większe ilości prądu, czy wtedy też nie warto kupować wcześniej wspomnianego sterownika? Chodzi o kwestię bezpieczeństwa, ręczne sterowanie wyjściem i wejściem jest ryzykowne, co jeśli na 2 pinach podany przez przypadek stan wysoki? Jak pewnie się domyślasz stykanie 2 plusów niesie za sobą opłakane konsekwencje i trochę iskier. Nie warto więc ryzykować i powstał specjalny układ który dba o wszystkie te kwestie o których wspomniałem wcześniej, nazywany jest on mostkiem H. Wystarczy podać mu zasilanie logiki, zasilanie dla naszych silników które może płynąć bezpośrednio z baterii a następnie poinformować go w którą stronę ten prąd ma przepuszczać w “lewo” cz też “prawo”.

 

Jak zwykle rynek posiada alternatywę dla sterowników silników jest ich kilka ale można je podzielić na układy scalone i moduły. Te pierwsze działaniem nie różnią się niczym od tych drugich, nawet wyprowadzenia mają takie same. Lecz te pierwsze są zdecydowanie bardziej prądożerne i mniej wydajne, posiadają mniej zabezpieczeń i nie pozwalają na tak duży pobór prądu jak w przypadku modułów. Zdecydowanie bardziej polecam te drugie.

 

Bluetooth

(Moduł Bluetooth 2.1 XM-15B 3,3V/5V lub Moduł Bluetooth HC-06)

 

Można użyć kabli. Nikomu nie bronię. Traktować je jako przycisku stykając odpowiednie końcówki, ba zrobić sobie nawet konsolę z przełącznikami i wczuć się w rolę hipstera. Są też odbiorniki RC z których korzystają modelarze w swoich samolotach problem z nimi jest taki by kupić jakiekolwiek sensowne radio musimy wydać niemałe pieniądze. A co z irdą? Każdy ma pilota w domu, czy to nie jest dobry pomysł? Może i jest ale nadajnik i odbiornik muszą się cały czas widzieć, wystarczy zakręt czy jakakolwiek przeszkoda przysłaniająca model i tracimy możliwość sterowania. Więc my tak cool nie będziemy i darujemy sobie wydziwianie oraz utrudnianie sobie życia, zrobiliśmy to już dostatecznie mocno nie kupuję gotowego zestawu Arduino, zastosujemy komunikację bezprzewodową a naszym nadajnikiem będzie smartfon który posiada chyba każda żyjąca istota na tym ziemskim padole.

 

Platforma

(Podwozie robota 4WD czterokołowe z silnikami - prostokątne lub MiniQ 2WD - dwukołowe podwozie robota DFRobot)

 

Istnieje wiele szkieletów, obudów, podwoziów na których można zamontować nasz pojazd. Równie dobrze można takie rusztowanie przygotować sobie samemu, wystarczy kawałek plexy oraz kulka podporowa. Sprawa jednak ma się nieco inaczej z silnikami, je musimy kupić lub też wymontować ze starej zabawki. Koniecznie muszą być to silniki DC czyli prądu stałego o czymi pisałem już wcześniej. Nadać mogą się również serwa, w środku znajduje się w końcu zwykły silnik DC z wieloma przekładniami i ogranicznikiem który wystarczy wymontować a następnie podłączyć silnik bezpośrednio do zasilania. Ważne jest natomiast by silniki miałby jakieś przekładnie, jest to o tyle istotne że jeśli wasz napęd będzie miał za małą moc to nie ważne ile energii mu dostarczycie wasz pojazd nie ruszy. Pamiętać należy również iż przekładnie spowalniają pracę silnika ale w zamian dają większy moment obrotowy czyli zwiększają moc silnika, sprawiają że może on zdecydowanie więcej udźwignąć czy też w ogóle ruszyć. Istnieje wiele zestawów wraz z silnikami które są od razu przygotowane do pracy.

 

Składanie

Musimy podłączyć nasz mikrokontroler do zasilania oraz zapewnić mu odpowiednią filtrację oraz oprogramowanie dostosowane do Arduino, obie te operacje opisałem w poprzedniej części serii.

 

Mikrokotroler: Link

Programator: Link

 

W dalszej części będą ukazane kolejne etapy składania oraz podłączenia wszystkich wcześniej wymienionych elementów w kolejności chronologicznej.

 

Zewnętrzne zasilanie

Zacznijmy od wpięcia naszego modułu w tył płytki, najlepiej jak najdalej od mikrokontrolera by nie plątał się z kablami od niego i blisko szyn zasilających. Wyczytajmy z oznaczeń na nim gdzie jest VCC, GND je kolejno podłączamy do zasilania (czerwona listwa) oraz uziemienia (czarna listwa).

 

Teraz zajmijmy się dostarczeniem prądu z akumulatora który będzie przetwarzany, najwygodniej jest wpiąć się jednym kablem do uziemienia a drugim do przetwornicy w miejsce nóżki z oznaczeniem VIN. W taki sposób by za pomocą tych kabli można było w łatwy sposób wpiąć akumulatorek do obwodu.

 

Teraz po podłączeniu akumulatora do naszych wtyczek, plus do czerwonego, minus do zielonego (jest to bardzo ważne bo w innym przypadku spalimy cały obwód wraz z mikrokontrolerem) przygotujmy sobie małą listewkę z prądem bezpośrednio z akumulatora, nie przetworzonym 7,4V do późniejszego wykorzystania przy silnikach.

 

Sterownik silników

Zaczynamy od umieszczenia naszego modułu jak najbliżej mikrokontrolera w taki sposób by wszystkie oznaczenia były skierowane z wcześniej już wyznaczonym kierunkiem mikrokontrolera (kropeczka resetu) po ludzku do góry napisami, dzięki temu lepiej zorganizujemy połączenia aby nie plątały się one ze sobą.

 

Następnie podłączamy uziemienie całego układu czyli nóżki z oznaczeniami GND.

 

Czas na zasilanie czyli nóżka VCC ją podłączamy do naszej głównej listwy zasilającej 5V. Natomiast przy wyjściu VMOT korzystamy z wcześniej utworzonej listwy zasilającej 7,4V bezpośrednio z akumulatora. Dzięki temu silniki nie będą wykorzystywać mocy całego układu co sprawi że będą bardziej wydajne. Należy jednak sprawdzić czy nasze silniki mogą korzystać z takiego napięcia.

 

Pisałem wcześniej o sterowaniu i właśnie teraz się tym zajmiemy, wyprowadzimy 3 piny kolejno PWMA który służy do sterowania mocą silnika (od 0V do 7,4V), AIN2 oraz AIN1 na których w zależności od podanej przez nas wartości kontroler będzie obracał w jedną stronę silnik lub też w drugą.

Je też podłączamy kolejno do portów na mikrokontrolerze. Można je podłączyć do dowolnych, lecz wcześniej należy zapisać ich wartości gdyż ich kolejność jest istotna. Taką samą operację powtarzamy dla drugiego silnika z 3 pinami oznaczonymi literą B. PWMB, BIN2, BIN1. A na sam koniec podłączyć pin STBY który służy do usypiania oraz wybudzania naszego układu. Ja podłączyłem swój układ do następujących pinów. (zdjęcia są jedynie poglądowe, wspinajcie kable według rozpiski a nie ze zdjęć)

 

Sterowanie lewego silnika (A):

PWMA = 6, AIN1 = 8, AIN2 = 7, STBY = 9

 

Sterowanie prawego silnika (B):

PWMB = 5, BIN1 = 3, BIN2 = 4, STBY = 9

 

Uwagę należy zwrócić jedynie na PWMA który musi być wpięty do portu obsługującego przerwania PWM. Na poniższym obrazku są one widoczne dla naszej ATmegi328p. (zaznaczone na czerwono)

 

Na koniec możemy podłączyć same silniki. Dla wygody jednak polecam wykonać ten krok na samym końcu. Lewy silnik do portów AO1 oraz AO2 a prawy silnik do portu BO1 oraz BO2. W chwili obecnej kolejność przewodów czy rozróżnianie ich na plus i minus jest bez znaczenia, kierunek prądu w tym przypadku będzie zmienny a odpowiedniej kalibracji dokonamy później.

 

Bluetooth

Podpinamy zasilanie według oznaczeń na naszej płytce. VCC do listwy zasilającej 5V i GND do uziemienia.

 

Następnie zajmiemy się pinami przesyłającymi dane, korzystają one z serial portu dzięki czemu parując się z tym modułem będziemy mogli wysyłać mu informację czyt. komendy w postaci np. tekstu, znaku czy też cyfry i odczytywać je bezpośrednio w kodzie programu. Ale o tym potem, należy pamiętać że piny te podłączamy na odwrót TX z modułu idzie do RX w mikrokontrolerze (pin 0) a RX z modułu idzie do TX w mikrokontrolerze (pin 1).

 

I tak prezentuje się w pełni wyposażona płytka we wszystko to co jest nam potrzebne do rozpoczęcia programowania. Na razie pamiętaj jedynie o tym by nie podłączać zewnętrznego zasilania, zostaw to na moment w którym o tym napiszę.

Oprogramowanie

Składają się na nie dwa kody. Ten znajdujący się w mikrokontrolerze oraz ten w smartfonie. Z tym pierwszym damy sobie radę lecz w drugim skorzystamy z gotowej aplikacji a proces jej tworzenia będzie tematem innego poradnika który będzie z pewnością tak samo obszerny jak i ten. Wracając do meritum, musimy stworzyć kanał komunikacji między telefonem a naszym Arduino. Dzięki temu że połączyliśmy nasze bt przez piny RX oraz TX pozwala nam całkowicie zapomnieć o tym urządzeniu, jest ono pomijalne. Jedyne do czego służy to parowanie oraz wymiana danych. Nas jako programistów niewiele na szczęście interesuje.

 

Odbiornik

Zacznijmy od instalacji biblioteki do sterowania silnika. Ułatwi nam ona znacząco sterowanie nim. Przechodzimy na tę stronę: Link

 

A następnie pobieramy paczkę z  biblioteką w formacie ZIP.

 

Następnie przechodzimy do naszego Arduino IDE i przechodzimy do zakładki Szkic -> Dołącz bibliotekę -> Dodaj bibliotekę .ZIP … A następnie wybieramy nasz plik który przed chwilą pobraliśmy.

 

Teraz przyszedł czas na stworzenie nowego projektu.

 

Oraz dodanie naszej biblioteki przechodząc do zakładki Szkic -> Dołącz bibliotekę -> .TB6612FNG-master. To sprawi że będziemy mogli korzystać z jej wszystkich dobrodziejstw w naszym kodzie.

 

Czas na kod który trzeba umieścić w programie a następnie zweryfikować go i wgrać do mikrokontrolera za pomocą opcji Szkic -> Wgraj używając programatora.

#include <TB6612FNG.h>

TB6612FNG lewy_silnik = TB6612FNG(6, 8, 7, 9, 1);
TB6612FNG prawy_silnik = TB6612FNG(5, 3, 4, 9, 1);
char data = 0; 
int predkosc = 200;

void setup() {
  lewy_silnik.Setup();
  prawy_silnik.Setup();
  
  Serial.begin(9600);
}

void loop() {
  if(Serial.available() > 0){
    data = Serial.read();
    Serial.print(data);
    Serial.print("\t");

    if(data == 'S'){
        lewy_silnik.Mode(lewy_silnik.standby);
        prawy_silnik.Mode(prawy_silnik.standby);
    } else {
        lewy_silnik.Mode(lewy_silnik.normal);
        prawy_silnik.Mode(prawy_silnik.normal);

        if(data == 'F') {
            lewy_silnik.Move(predkosc);
            prawy_silnik.Move(predkosc);   
        } else if(data == 'B') {
            lewy_silnik.Move(-predkosc);
            prawy_silnik.Move(-predkosc);
        } 
    }
  } 
}

 

Nadajnik

Musimy do naszego odbiornika przesłać kilka prostych komend w postaci liter. Moglibyśmy napisać aplikację w Javie, którą z pewnością napiszemy w jednej z serii, ale w chwili obecnej  na rynku google play jest multum alternatyw. My skorzystamy z jednej z nich z przyjemnym interfejsem symbolizującym jakiś samochodzik. Dobrym wyborem będzie aplikacja “Arduino Bluetooth RC Car”. Znajduje się ona pod tym linkiem: Link

 

Jak możemy przeczytać na stronie producenta. Wysyła on do naszego programu proste komendy w postaci liter w zależności od tego czy zdecydujemy się jechać prosto, w lewo czy się zatrzymać. Idealnie więc nadaje się dla naszego odbiornika który napisaliśmy. Dokumentacja: Link

Uruchomienie

Możemy uruchomić nasz pojazd z podłączonym programatorem pod jednym warunkiem, koniecznie musimy odłączyć przewód zasilania idący od programatora (czerwony przewód) a koniecznie musimy pozostawić czarny (masa zawsze jest wspólna, inaczej sygnał nie miałby punktu odniesienia i mógłby być zbyt mocny lub zbyt słaby) i wtedy to możemy podłączyć nasz akumulator do przewodów przy przetworniku które wcześniej specjalnie do tego celu przygotowaliśmy. W ten sposób możemy w szybki sposób wprowadzać wiele poprawek do kodu bez konieczności ciągłego podłączania wszystkiego. Możemy też odłączyć spokojnie cały programator, program znajduje się już w środku.

 

Uruchom więc pojazd. Powinna zapalić się i migać niebieska dioda przy module bt która informuje o braku połączenia, zaświeci się stałym światłem gdy tylko uruchomimy naszą aplikację na telefonie, wybierzemy nasz moduł bt który znajduje się przy mikrokontrolerze a następnie wydajemy polecenie jazdy w przód co powinno właśnie taką akcja zaowocować.

Zakończenie

Specjalnie jednak nie napisałem kodu na skręcanie. Jest to zadanie dla was. Macie wszystko to co jest wam potrzebne do tego by móc to zadanie wykonać, nie mówię że z łatwością ale na pewno nauka płynąca z małych porażek będzie bardziej dydaktyczna niż dawanie ryby zamiast wędki. Miłego testowania :)