Współcześnie, najbardziej rozpowszechnionymi urządzeniami elektronicznymi są smartfony. Ma je już niemal każdy. Ich popularność sprawia, że często są wykorzystywane jako platformy obsługi różnych domowych urządzeń np.: telewizorów, systemów audio, systemów inteligentnych domów i innych. Można je także wykorzystać do obsługi projektów Arduino. Obecnie najbardziej rozpowszechnionym systemem operacyjnym dla telefonów komórkowych jest Android. Specjalnie dla tej platformy zostało stworzone środowisko programistyczne online App Inventor. Wykorzystamy je do tworzenia aplikacji na telefon obsługującej układ Arduino.
MIT App Inventor umożliwia tworzenie aplikacji dla telefonów z systemem Android za pomocą przeglądarki www i telefonu (lub emulatora). Środowisko udostępnia dwa narzędzia: App Inventor Designer, w którym można zaprojektować wygląd aplikacji na telefon oraz App Inventor Blocks Editor, w którym, za pomocą składanych bloków można zbudować kod aplikacji. Programy budujemy wizualnie, dopasowując do siebie klocki, jak w Scratchu (Fig. 2). Efekty pracy na bieżąco można wyświetlić na swoim telefonie lub w emulatorze telefonu. Po ukończeniu projektu, można także utworzyć samodzielną aplikację do zainstalowania na telefonach.
Na początek, w oparciu o platformę Arduino utworzymy proste urządzenie obsługujące diodę LED. Za pomocą telefonu będziemy sterowali jej włączaniem i wyłączaniem. Komunikację pomiędzy układem Arduino, a telefonem, zapewni moduł bluetooth HC-05 (Fig. 3).
Do wykonanie układu potrzebne nam będą:
Do komunikacji pomiędzy modułem bluetooth odbierającym sygnały z telefonu a płytką Arduino, wykorzystamy magistralę szeregową UART. Sygnał RX podłączamy do pinu 11, a TX do 10. Diodą LED będzie sterował pin 13 (Fig. 4).
Do Arduino wgrywamy poniższy program. Port szeregowy USB wykorzystamy do kontrolowania zmiennej odpowiedzialnej za wlączanie i wyłączanie diody LED. Dlatego, do podłączenia modułu bluetooth będziemy potrzebowali dodatkowego, wirtualnego portu szeregowego. Tworzymy go na cyfrowych pinach 11 i 10, za pomocą bliblioteki SoftwareSerial.
#include <SoftwareSerial.h> SoftwareSerial bluetooth(10, 11); // TX, RX respetively String state; // string to store message incoming from bluetooth module void setup() { bluetooth.begin(9600); // start bluetooth serial communication Serial.begin(9600); // Start serial communication to control the data on serial monitor pinMode(13, OUTPUT); // LED } void loop() { while (bluetooth.available()) { // Check if there is an available byte to read delay(10); // Delay added to make thing stable char c = bluetooth.read(); // Conduct a serial read state += c; // build the string- either "on" or "off" } if (state.length() > 0) { Serial.println(state); if (state == "on") { digitalWrite(13, HIGH); } else if (state == "off") { digitalWrite(13, LOW); } state = ""; // Reset the variable } }
Wchodzimy na stronę projektu MIT App Inventor. Musimy się zalogować przy pomocy konta Google. Po zalogowaniu, zostajemy przeniesieni do okna aplikacji ze spisem osobistych projektów. Za pomocą przycisku "Start new project" otwieramy nowy projekt i nadajemy mu dowolną nazwę np "LED_controller". Zostajemy przeniesieni do okna edytora blokowego (Fig. 5).
LED controller
oraz tło okna "BackgroundColor" na Dark Grey.Text for ListPicker1
" na "Bluetooth
".
On
", a drugiego na "Off
".
ListPicker1
. W tym celu w oknie Blocks wybieramy komponent ListPicker1
. Z listy dostępnych klocków wybieramy obsługę zdarzenia "When ListPicker1.BeforePicking
" i przeciągamy go do okna Viewer (Fig. 8).
ListPicker1
powinna zostać pobrana lista sparowanych urządzeń bluetooth. Aby oprogramować to zdarzenie, ponownie klikamy w oknie Blocks na komponent ListPicker1
. Z listy dostępnych klocków wybieramy element deklaracji właściwości Elements "set_ListPicker1_Elements_to
" i dodajemy go do klocka "When ListPicker1.BeforePicking
" (Fig. 9).
BluetoothClient1
. Z listy dostępnych klocków wybieramy element odpowiadający za pobranie listy sparowanych urządzeń bluetooth "BluetoothClient1_AdressesAndNames
" i dodajemy go do wcześniej dodanego klocka "set_ListPicker1_Elements_to
" (Fig. 10).
ListPicker1
i z listy dostępnych klocków wybieramy element odpowiadający za opis zdarzenia po kliknięciu na listę możliwych połączeń When ListPicker1.AfterPicking
. W oknie Blocks z listy Built-in wybieramy Control, a z niego wybieramy blok warunkowy "if then
" i dodajemy go do istniejącego bloku "When ListPicker1.AfterPicking
" (Fig. 11).
BluetoothClient1
dodajemy klocek "call_BluetoothClient1.Connect_adress
" (Fig. 12).
ListPicker1
. Z listy dostępnych klocków wybieramy ListPicker1:Elements
po czym zmieniamy właściwość Elements
na Selection
. Dołączamy klocek do wejścia adresu instrukcji warunkowej if
(Fig. 13).
When ListPicker1.BeforePicking
" duplikujemy całą instrukncję "set_ListPicker1_Elements_to
" i dodajemy ją do instrukcji warunkowej "if then
" (Fig. 14).
When Clock1.Timer do
" i przesuwamy ją do okna Viewer. Do jego wnętrza dołączamy blok instrukcji warunkowej "if then
". Z właściwości komponentu BluetoothClient1
dodajemy klocek "BluetoothClient1.AdressAndNames
". Zmieniamy jego właściwość na "IsConnected
" i dołączamy go do bloku instrukcji If
. Klikamy teraz na listę bloków elementu Label1 i wybieramy z niej klocek "set Label1.text to
" i dołączamy blok do instrukcji then
. Z listy elementów Built-in, z listy Text wybierz blok pusty i dodaj go do bloku instrukcji "set Label1.text to
" i dodajemy do niego napis "Connected". Na koniec przed tą instrukcję dodajemy blok zmieniający kolor napisu Connected na biały. W tym celu z menu Label1 wybieramy blok "set Label1.TextColor to
" i ustawiamy dla niej kolor biały.
if then
" i dodajemy do bloku "if
" instrukcję "else
". Kopiujemy do niego blok instrukcji "set Label1.text to "Connected"
" i zmieniamy wartość zmiennej tekstowej na "Not connected".
When Button1.Click do
". Po kliknięciu na przycisk pierwszy do modułu bluetooth ukłądu arduino powinna zostać wysłana instrukcja "On". Z menu elementu BluetoothClient1 wybieramy klocek "call BluetoothClient1.SendText to
" i dodajemy do niego blok tekstowy z tekstem "on". Mamy oprogramowane wysyłanie polecenia zaświecenia diody LED. Pora na jej wyłączenie. Skopiujmy cały blok instrukcji i zmieńmy tekst na "off" (Fig. 17).
Cały kod aplikacji przedstawiono na Fig. 18.
Teraz wystarczy wyeksportować aplikację do telefonu. Na telefonie instalujemy aplikację MIT AI2 Companion. Z menu środowiska programistycznego MIT PPP Inventor wybierzmy Connection > Al companion. Kod QR można zeskanować z poziomu aplikacji android MIT AI2 Companion.