Bluetooth – Android
W sklepie z aplikacjami Google Play dostępnych jest sporo aplikacji umożliwiających komunikację z Arduino przez bluetooth. Są one różnej jakości (często dość słabej) ale większość jest darmowa i kilka z nich jest całkiem użytecznych.
W tym artykule pokażę jak skonfigurować Arduino aby komunikowało się bezprzewodowo z Androidem. Od strony Androida skorzystamy z aplikacji Arduino BT Joystick Free, która umożliwia wykorzystanie smartfona/tablety jako prostego gamepada.
Interfejs aplikacji umożliwia wykorzystanie 10 przycisków i danych z akcelerometru (obrót urządzenia względem osi X, Y przyspieszenie wzg. osi Z).
Od strony Arduino możemy zaprogramować właściwie dowolne wykorzystanie danych, które otrzymujemy z aplikacji, w tym wypadku będziemy wykorzystywać ją jako kontroler pojazdu, ale jeśli chciałbyś wykorzystać Arduino jako inteligentny sterownik urządzeń w twoim domu, równie dobrze aplikacja Arduino BT Joystick może być również jego interfejsem (na tym polega moc OPEN SOURCE!),
Konfiguracja Androida
1. Ze sklepu Google Play zainstaluj aplikację Arduino BT Joystick Free
2. W ustawieniach telefonu otwórz preferencje bluetooth i wyszukaj dostępne urządzenia, jeśli modem HC-06 jest włączony powinien pojawić się na liście urządzeń jako LoFiRobot, sparuj go z telefonem. Jak numer PIN podaj 1234
3. Uruchom aplikację Arduino BT Joystick, na głównym ekranie aplikacji kliknij przycisk CONNECT, wyświetli się lista dostępnych połączeń, z której wybierz LoFiRobot (jeśli nie ma go na liście oznacza to, że modem nie został dobrze sparowany lub jest wyłączony)
4. Po połączeniu aplikacji z modułem bluetooth na ekranie aplikacji pojawi się komunikat, że połączenie zostało nawiązane a na module bluetooth czerwona dioda powinna zacząć świecić światłem ciągłym.
Konfiguracja Arduino
Podłączenie modemu bluetooth:
1. VCC – do +5V (plus zasilania)
2. GND – do GND (masa zasilania)
3. TXD (nadawanie) – do pinu cyfrowego nr 3
4. RXD (odbiór) – do pinu cyfrowego nr 2
Piny komunikacyjne (TXD i RXD) podłączamy tym razem do innych wejść na Arduino, dzięki czemu będziemy mieć możliwość podglądu komunikacji na komputerze przez kabel USB
Podłączenie elementów robota:
Konstrukcja robota, którym będziemy sterować może być dowolna, na potrzeby tego przykładu wykorzystamy podstawowy model pojazdu z zestawy NA KOŁACH. Dodatkowo dodamy mu klakson w postaciu buzzera i reflektory w postacio diod LED.
1. Silniki do pinów cyfrowych nr 9 i 10
2. Buzzer do pinu cyfrowego nr 4
3. Diody do pinu cyfrowego nr 5
Sterowanie
– krzyżyk ze strzałkami steruje ruchami silników
– przycisk TRÓJKĄT – steruje pinem cyfrowym nr 4 (klakson – buzzer)
– przycisk KWADRAT – steruje pinem cyfrowym nr 5 (światła – diody LED)
Kod do wgrania na Arduino:
/* # = 35 = = 61 x = 120 y = 121 z = 122 b = 98 */ #include <SoftwareSerial.h> #include <Servo.h> Servo serwo_lewe; Servo serwo_prawe; SoftwareSerial mySerial(3, 2); // RX, TX int button; void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } mySerial.begin(57600); serwo_lewe.attach(10); serwo_prawe.attach(9); pinMode(5,OUTPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT); } void loop() // run over and over { if (mySerial.available()) { int val = mySerial.read(); if (val == 98) { if (mySerial.available()) mySerial.read(); if (mySerial.available()) button = mySerial.read(); Serial.print("button = "); Serial.println( button); } } if (Serial.available()) mySerial.write(Serial.read()); if (button == 48) stop(); if (button == 49) przod(); if (button == 50) tyl(); if (button == 51) lewo(); if (button == 52) prawo(); if (button == 55) { digitalWrite(5,HIGH); } else { digitalWrite(5,LOW); } if (button == 56) { digitalWrite(6,HIGH); } else { digitalWrite(6,LOW); } } void przod() { serwo_lewe.write(60); serwo_prawe.write(120); } void tyl() { serwo_lewe.write(180); serwo_prawe.write(0); } void lewo() { serwo_lewe.write(180); serwo_prawe.write(180); } void prawo() { serwo_lewe.write(0); serwo_prawe.write(0); } void stop() { serwo_lewe.write(89); serwo_prawe.write(89); }