Rozwojowa platforma mobilna - wsparcie mikrokontrolera i sterowanie bluetooth

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 +5V 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.

Odrazu zarezerwujemy piny do sterowania prędkością oobrotową 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,3V 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 lini RX modułu BT. Dlaczego tylko na lini 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 wyglada w następujący sposób: 

bluetooth podłączenie

 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), po przez 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"

 

bt platforma mobilna

 

 Następnie wciskając przycisk "edit" zmieniamy znaki nadawane podczas wciśnięcia przycisków, jak i po ich puszczeniu.

bt platforma mobilna

bt platforma mobilna

Wychodząc z edycji łączymy się z platformą Arduino (przez moduł BT) i sprawdzamy działanie programu:

bt platforma mobilna
 


bt platforma mobilna


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...