Dodaj produkty podając kody
Bluetooth do Arduino i nie tylko - To Proste! Cz.2
Witam, w drugiej części artykułu, który poświęcony jest modułom komunikacji bezprzewodowej BLUETOOTH. W poprzedniej części omówiliśmy sposób funkcjonowania tejże bezprzewodowej transmisji danych, a także przyjrzeliśmy się bliżej modułom HC-05, HC-06 , HC-08 (cz. I). Teraz kolejnym krokiem więc będzie zaznajomienie się z aplikacjami, które pozwolą nam na komunikację między Arduino wraz z modułem bluetooth, a naszym smartfonem.
Jak już wspomniałem, w pierwszej części są dwa sposoby, dzięki którym stworzymy własne sterowanie i połączymy się z modułem za pomocą telefonu.
Pierwszym z nich jest (jeżeli nie chcecie tracić czasu na tworzenie własnej aplikacji i może nie znacie się na tym) Bluetooth Electronics. Jest to aplikacja na telefon do pobrania w sklepie Google PLAY, która jest niebywale prosta i intuicyjna w obsłudze. Aby odebrać dane z Arduino na smartfonie, wystarczy wpisać odpowiednią frazę w sketch-u Arduino, włączyć telefon, uruchomić aplikację, sparować z modułem i to wszystko. Możemy również wysyłać informacje do Arduino przez smartfon. Zasada funkcjonowania aplikacji jest dość prosta, a tak wygląda ekran startowy i wbudowane przykłady:
Użytkownik ma do wyboru różne zakładki takie jak przełączniki, przyciski, pole tekstowe, suwaki i inne. Dzięki tym narzędziom stworzymy okno naszej aplikacji.
Aplikacja ta posłużyła nam do odbioru informacji z naszej stacji pogodowej, którą zbudowaliśmy i informacje wysyłaliśmy poprzez moduł bluetooth.
Tu zobacz stację meteorologiczną.
Może na początek sprawdźmy i przeanalizujmy, jak to działa. Myślę, że prostym przykładem będzie czujnik odległości, jakim jest ultrasonograf HC-SR04.
No więc tak, na początek podłączmy wszystkie elementy razem i wgrajmy sketch do Arduino, który dostępny jest na stronie: www.keuwl.com/electronics.html Otwórzmy aplikację, wyszukajmy nasz moduł, połączmy się z nim i otwórzmy okno gotowego przykładu. Jak widać, wszystko działa prawidłowo: na ekranie ukazuje się odległość i nawet wielka kontrolka zmienia kolory w zależności od dystansu. Aby to zrozumieć, zajrzyjmy do kodu, który wgraliśmy do płytki mikrokontrolera.
Na początku wygląda jak zwykły przykład z aplikacji ARDUINO. Kluczowe są tutaj te linie kodu:
Serial.print("*T"+String(echotime)+"*");
Serial.print("*D"+String(distance,1)+"*");
Wygląda jak zwykłe wyświetlanie w monitorze portu szeregowego. Otóż tak, ponieważ jak już wspomniałem, w pierwszej części moduł bluetooth komunikuje się poprzez port UART, a więc szynę TX i RX. Należy więc rozpoczynać transmisję za pomocą kodu - Serial.begin(9600);
Jak sami widzicie to naprawdę nic skomplikowanego. Wyrażenie "*T"+String są to informacje wysyłane dla aplikacji: T to liczba „nadająca”, którą wpisujemy również w aplikacji jak na tym zdjęciu (oczywiście, zamiast R ma być T)
Receive znaczy odbierać. Więc, jak chcemy odebrać wiadomość, wpisujemy tę samą literę w programie Arduino i aplikacji. String jest to po prostu zmienną, a w nawiasie znajduje się wartość, którą chcemy wysłać. Tak samo postępujemy, chcąc wyświetlić informacje w monitorze portu szeregowego.
Sytuacja wygląda trochę inaczej, gdy chcemy wysłać informacje do Arduino. W tej sytuacji otwórzmy sobie przykład RC Car Demo na stronie internetowej i przeanalizujmy kod. Aplikacją zajmiemy się później.
Na początku mamy zadeklarowaną char jako bluetooth Data.
Char BluetoothData;
Następnie w ustawieniach początkowych rozpoczynamy transmisję szeregową - Serial.begin(9600); a także ustawiamy przekaźniki jako wyjścia - pinMode(4,OUTPUT);.
Następnie w głównej pętli loop musimy odebrać informacje z modułu bluetooth, a więc tak jak i z monitora przez komendę:
(Serial.available());
BluetoothData=Serial.read(); Ta komenda zamienia odczytane wartości z modułu na BluetoothData, którą zdeklarowaliśmy już wcześniej.
Następnie znajdują się warunki logiczne, które zarządzają wydarzeniami po otrzymaniu konkretnych danych. Te dane wyglądają w następujący sposób:
(BluetoothData=='R')
(BluetoothData=='Y')
(BluetoothData=='r'||BluetoothData=='y')
Pierwsze dwa z nich załączają przekaźniki po odczytaniu odpowiednich liter R i Y, które są nadawane, gdy w aplikacji wciśniemy odpowiednie przycisk. Gdy nie są wciśnięte, to przekaźniki mają zostać wyłączone, za co odpowiada trzecia linika kodu, a aplikacja wysyła wtedy małe litery “r” i “y”. Tak samo przedstawia się sytuacja, gdy chcemy poruszać samochodem w przód czy tył.
Sterowanie z poziomu telefonu odbywa się za pomocą gotowego przykładu z aplikacji Bluetooth Electronics. Otwieramy więc przykład za pomocą przycisku Edit i widzimy cztery przyciski w różnych kolorach, które są podpisane. Po wciśnięciu przycisków wyświetla się informacja w prawym dolnym rogu, jaka litera jest wysyłana w czasie wciśnięcia przycisku i jaka w czasie braku jego aktywności. Dla przykładu żółty przycisk w prawo wysyła sygnał “y” w czasie jego braku aktywności, “Y” w czasie jego wciśnięcia. Jak widać, najprostsze rozwiązania są najlepszymi rozwiązaniami.
Wiemy jak sterować wyjściami i wejściami cyfrowymi, a jak sterować sygnałem PWM odbierając i wysyłając te informacje o wielkości współczynniku wypełnienia? Praktycznie tak samo, dla przykładu otwórzmy LED Brightness ze strony keuwl. W tym przykładzie steruje się trzema diodami, rozjaśnia się je i przyciemnia poprzez właśnie sygnał PWM. Zerknijmy do sketchu Arduino. Na początku mamy zadeklarowane nazwy diod w postaci int i piny, pod które są te diody podłączone do Arduino, a więc są to piny 9,10 oraz 11, ponieważ na tych pinach jest możliwość modelowania sygnału PWM. Tak wygląda owa linika kodu: int Red_LED_Pin = 9;
Następnie mamy wartości tych trzech diod, również w postaci zmiennej int i wygląda ona tak: int Red_value=0;
Następnie jak i w przypadku poprzednim należy odebrać informacje z bluetooth
char BluetoothData;
W ustawieniach początkowych setup trzy diody ustawione są jako wyjścia, ponieważ będą odbierać sygnał PWM - pinMode(Red_LED_Pin, OUTPUT);
Także uruchamiamy transmisję szeregową - Serial.begin(9600);
W głównej pętli loop mamy warunki logiczne if - if (Serial.available()){{|br class="kix-line-break" /> BluetoothData=Serial.read(); //odbiór info. z modułu bluetooth
if(BluetoothData=='R') Red_value=Serial.parseInt(); //odbiór litery “R” i jej wartości
Jak widać komenda - Serial.parseInt(); odpowiedzialna jest za odbiór wartości sygnału PWM. Po odebraniu wszystkich wartości należy je wykonać, za co odpowiadają te linie kodu - analogWrite(Red_LED_Pin, Red_value);
analogWrite - wysyła sygnał PWM
(Red_LED_Pin, Red_value); - do diody czerwonej - Red_LED_Pin
Red_value - o odpowiedniej wartości współczynnika wypełnienia.
Jak widać, ten przykład był już trochę trudniejszy, lecz nadal do wykonania i zrozumienia. To rozwiązanie jest proste, szybkie i wygodne, ale nie jest ono jedyne. Jeżeli ktoś chciałby, aby jego aplikacja była ładniejsza, z większą ilością funkcji to może wykonać ją sam. Pisanie aplikacji brzmi jak zlecenie dla informatyka? Nic bardziej mylnego! Każdy z nas może stworzyć swoją własną aplikację, w miarę prosty sposób. Google stworzyło program, który działa na przeglądarce i służy do tworzenia aplikacji, a nazywa się appinventor. Jest to bardzo fajny pomysł, który posiada ogromny potencjał. Jego działanie opiszę w następnej części.
Zobacz pozostałe części: