Dodaj produkty podając kody
Rozwojowa platforma mobilna - wsparcie mikrokontrolera i sterowanie bluetooth
W tej części (I część) w dalszym ciągu zajmiemy się platformą mobilną, jednak tym razem będzie to już nieco bardziej rozbudowana wersja, w której wykorzystam Arduino UNO, a sterowanie będzie realizowane za pomocą komunikacji bluetooth.
Dzięki komunikacji bezprzewodowej będzie można sterować platformą praktycznie z każdego urządzenia wyposażonego w moduł bluetooth jak np. smartfon czy tablet.
Dodatkowo obsługa będzie prosta dzięki dedykowanym aplikacjom na telefon.
Zacznijmy więc od założeń, na początek pojazd musi być jak najprostszy, następnie będzie się programowało i podłączało dodatkowe elementy.
Pierwszym krokiem jest podłączenie mostka H do Arduino. Mostek L298N jest Wam już dobrze znany z poprzednich wpisów, dodatkowo jest tani i łatwo dostępny.
Podłączenie wygląda następująco: Piny odpowiedzialne za prędkość obrotową każdego kanału są spięte zworką do +5 V, dzięki czemu będą się obracać z max. prędkością, a my będziemy tylko zmieniać kierunki obrotów poprzez podawanie stanów wysokich na odpowiednie piny od IN1 do IN4.
Od razu zarezerwujemy piny do sterowania prędkością obrotową każdego z kanałów, aby w czasie rozwoju nie brakło nam pinów w Arduino. Ponieważ Arduino posiada wybrane 6 pinów, którymi możemy regulować sygnał PWM, to wybierzemy takie piny, które są koło siebie. Tak więc podpięcie wygląda następująco:
- Piny odpowiedzialne za kierunek obrotów:
L298N - Arduino
IN1 - 4
IN2 - 7
IN3 - 8
IN4 - 9
- Piny sterujące prędkością obrotową:
ENA - 5
ENB - 6
Mostek mamy podłączony, teraz można pokusić się już o sterowanie, a więc podłączmy moduł Bluetooth. W moim przypadku jest to HC-06, który może działać tylko jako SLAVE. BT komunikuje się z Arduino za pomocą portu UART, czyli podłączyłem go pod piny 2,3. Dlaczego nie pod piny 0 - RX i 1 - TX? Ponieważ tam jest port uart systemowy, a my potrzebujemy dodatkowy (aby można było z podłączonym modułem wgrywać nowe programy) i w tym celu pomoże nam biblioteka Software Serial, ale o tym nieco później, przy omawianiu programu.
O modułach BT wspominałem w poprzednich wpisach im poświęconych, a także przy okazji tworzenia stacji pogodowej. Tak więc jeżeli jesteście zainteresowani tematem i chcecie poszerzyć wiedzę w tym zakresie, to odsyłam do serii o modułach bluetooth TUTAJ, a także stacji pogodowej TUTAJ.
Podłączenie modułu BT nie jest proste, ponieważ interface działa na poziomie 3,3 V, a Arduino jak wiemy na 5V. Podłączając bezpośrednio, możemy uszkodzić moduł BT, dlatego potrzebujemy konwerter poziomów, lub po prostu prosty rezystancyjny dzielnik napięcia na linii RX modułu BT. Dlaczego tylko na linii RX? Ponieważ jest to linia odbioru danych przez moduł BT, a linia TX jest linią wysyłającą dane do Arduino. Zasilanie modułu to jednak 5V, dlatego podłączenie wygląda w następujący sposób:
To wszystko jeżeli chodzi o części mechaniczne i połączenia elektryczne pojazdu, teraz przechodzimy do aplikacji, którą będziemy sterować robotem. Pobieramy ze sklepu Google PLAY bluetooth electronics tutaj link do strony keuwl i tego oryginalnego projektu.
Aplikacja działa w bardzo prosty sposób (patrz szczegółowy opis artykułu o komunikacji BT i stacja meteorologiczna linki wyżej), poprzez komunikację UART wysyła np. litery wielkie lub małe w zależności od tego czy wciskamy włącznik, czy też nie. Dodatkowo można ustawić czy wysyłany znak jest tylko raz w czasie zmiany, czy przez cały czas wciśnięcia przycisku. Dzięki czemu po odebraniu odpowiednich znaków przez Arduino możemy przytoczyć im konkretne "zadania". Taka sama zasada jest z komunikacją w odwrotną stronę.
Następnie możemy przejść do programu wgranego w robota Arduino, a później zajmiemy się sterowaniem, czyli aplikacją na smartfona. Poniżej jest sketch, w którym postarałem się każdą czynność dokładnie opisać, także zapraszam do zapoznania:
[CODE]
/*
*
Platforma mobilna sterowana bluetooth HC-05 /06 wer. 1.0
*/
#include SoftwareSerial mySerial(2, 3); //RX, TX // doodłączenia BT na odwrót
char BluetoothData; // stala ktora odbiera dane z bt
// silniki:
int silnikPPpin = 4; // do przodu prawy silnik
int silnikPTpin = 7; // do tylu prawy silnik
int silnikPPWM = 5; // PWM silnik R
int silnikLPWM = 6; // PWM silnik L
int silnikLPpin = 8; // do przodu lewy silnik
int silnikLTpin = 9; //do tylu lewy silnik
void setup() {{|br />
Serial.begin(9600); // transmisja komp-ardu
mySerial.begin(9600); // rozpoczecie transmisji ardu-BT
//Silniki jako wyjscia
pinMode(silnikPPpin, OUTPUT);
pinMode(silnikPTpin, OUTPUT);
pinMode(silnikPPWM, OUTPUT);
pinMode(silnikLPWM, OUTPUT);
pinMode(silnikLPpin, OUTPUT);
pinMode(silnikLTpin, OUTPUT);
//ustawienia na LOW
digitalWrite(silnikPPpin, LOW);
digitalWrite(silnikPTpin, LOW);
digitalWrite(silnikPPWM, HIGH); // ustawiamy w stan wysoki aby silniki się obracały no chyba, że masz podpięte zworki
digitalWrite(silnikLPWM, HIGH); // też pwm w stani wysokim
digitalWrite(silnikLPpin, LOW);
digitalWrite(silnikLTpin, LOW);
void loop() {{|br />
if (mySerial.available()) { // jezeli w buforze znajduja sie dane to odbierz
BluetoothData = mySerial.read(); //odbiór danych z BT
if (BluetoothData == 'P') { // jezeli wcisniete "przod" t odo przodu
digitalWrite(silnikPPpin, HIGH); //prawy silnik, przod ON
digitalWrite(silnikLPpin, HIGH); //lewy silnik przod ON
}
if (BluetoothData == 'T') { //jezeli odczytane do tylu "T"
digitalWrite(silnikPTpin, HIGH); // prawy silnik tyl ON
digitalWrite(silnikLTpin, HIGH);// lewy silnik tyl ON
}
if (BluetoothData == 'L') { // jezeli lewo
digitalWrite(silnikPPpin, HIGH); // to prawy silnik przod ON
}
if (BluetoothData == 'R') { // jezeli prawo to lewy silnik przod ON
digitalWrite(silnikLPpin, HIGH);
}
if (BluetoothData == '0') { // jezeli nic nie wcisnięte to stoj
digitalWrite(silnikLPpin, LOW);
digitalWrite(silnikPPpin, LOW);
digitalWrite(silnikPTpin, LOW);
digitalWrite(silnikLTpin, LOW);
}
//delay(10);// wait 10 ms
while (Serial.available() > 0) {{|br /> mySerial.write(Serial.read());
}
while (mySerial.available() > 0) {{|br /> Serial.write(mySerial.read());
}
}
[CODE/]
Teraz mając kod, możemy go wgrać w płytkę Arduino.
Skoro program już za nami to teraz przechodzimy do aplikacji bluetooth electronics, w której uruchamiamy przykład "Motor Control Demo"
Następnie wciskając przycisk "edit" zmieniamy znaki nadawane podczas wciśnięcia przycisków, jak i po ich puszczeniu.
Wychodząc z edycji, łączymy się z platformą Arduino (przez moduł BT) i sprawdzamy działanie programu:
Po połączeniu otwieramy przykład i możemy cieszyć się zdalnie sterowaną platformą mobilną.
Niebawem pojawi się kolejny wpis na blogu, w którym rozbuduję platformę o dodatkowe "gadżety", "bajery",
np. takie jak światła, GPS, MPU, FPV, różnego rodzaju czujniki i inne.
Filmik na yotube...