En aquesta pràctica, deixarem enrere, d'alguna manera, els circuits de l'Arduino i encaminarem aquesta última pràctica amb la web anomenada APP INVENTOR que ens permetrà crear aplicacions mitjançant les quals podran controlar l'Arduino a distància.
APP INVENTOR
L'App Inventor és un programa dissenyat pel M.I.T. amb el qual es poden dissenyar aplicacions senzills pel mòbil o tauletes totalment funcionals
Aquesta compta amb diferents tipus de blocs pel codi. Primerament, hi ha els de control que serveixen per dur a terme les accions. Després hi ha els de lògica per fer comandaments de cert o fals o els de matemàtica per fer càlculs. També hi ha per afegir texts, llistes, entre d'altres.
INTRODUCCIÓ A L'app INVENTOR
Després de fer un codi mitjançant el qual "encendrem" un LED (és un programa on si cliquem "on" sortirà una foto d'un LED encès i "off" una foto d'un LED apagat) farem el primer codi amb el qual controlarem amb Bluetooth un LED instal·lat a l'Arduino.
Tots els codis, tant de l'App Inventor com de l'Arduino, han estat extrets d'un vídeo de YouTube on explica com es fan.
BLUETOOTH
El Bluetooth es tracta d'un sistema d'ones de radiofreqüència que permet connectar dos o més dispositius entre sí sense necessitat de cables o hardware extern.
Mitjançant el Bluetooth, es poden transmetre dades, indicacions o arxius entre diferents aparells electrònics.
BLUETOOTH I L'ARDUINO
Per connectar el mòbil amb l'Arduino mitjançant Bluetooth necessitarem un dispositiu extern anomenat HC 05 que ens permetrà establir aquesta connexió. Aquest compta amb quatre pins: el TX, el RX, el VCC i el GND.
Primerament, el TX, anirà connectat al pin RX de l'Arduino i és el que farà la funció de transmissió de dades. seguidament, el RX, anirà connectat al pin TX de l'Arduino i farà la funció inversa a l'anterior, és a dir, recepció de dades. Per altra banda, el VVC que va connectat als 5V de l'Arduino és l'encarregat de donar-li energia al HC 05 i per conseqüent, el GND que com ja sabem és el Ground és el que tanca aquest circuit.
CODI 1 (PANTALLA)
Quan controlem el LED des del mòbil, a la pantalla ens apareixerà el següent:
Aquí, com es pot veure, hi ha dos blocs diferents.
El primer, mostra l'estat del LED on, si el codi de blocs, que explicarem més endavant, detecta que s'ha establert la connexió Bluetooth, mostrarà el text de CONNECTAT i si no mostrarà el de DESCONNECTAT.
El següent bloc mostra el panell per controlar el LED el qual compta amb dos botons, ON i OFF, de noms "botton 1" i "botton 2" respectivament, funcions dels quals explicarem a continuació:
CODI 1 (App inventor)
Mitjançant els blocs en la imatge situada a la dreta de la pantalla, podrem controlar els LED enviant la informació a l'Arduino perquè llavors aquest pugui executar les ordres pertinents.
Primerament, els tres primers blocs s'encarreguen del control del Bluetooth entre el mòbil i l'Arduino i de mostrar estat del LED en el quadre de text vist anteriorment
Seguidament, els dos blocs següents s'encarreguen d'enviar una lletra A a l'Arduino en cas de que detecti que el botó ON ha estat premut i una B en cas de que detecti que el botó OFF ha estat premut. La funció d'aquestes lletres serà explicada a l'explicació següent.
L'últim bloc té la funció de canviar l'estat del LED quan es perdi la connexió Bluetooth.
CODI 1 (ARDUINO)
Aquest codi permetrà encendre el LED mitjançant la informació rebuda de l'App Inventor.
Primerament, es defineix una variable de tipus integer de nom "led_1" amb el nombre 22 que equival al nombre del pin al qual reconnectat sent en les següents línies declarat com a "output"
També es declara la velocitat de transmissió a una velocitat de 9600 bps.
Seguidament, amb un "loop" es controla si l'Arduino ha rebut alguna de les lletres enviades anteriorment des de l'App Inventor de manera que si rep una "A" encendrà el LED i si rep una "B" l'apagarà.
int led_1 = 22;
char valor;
void setup() {
pinMode(led_1, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Serial.available())
{
valor = Serial.read();
if (valor == 'A')
{
digitalWrite(led_1, HIGH);
}
if (valor == 'B')
{
digitalWrite(led_1, LOW);
}
}
}
CODI 2 (PANTALLA)
Quan controlem el LED i el Servo des del mòbil, a la pantalla hi veurem el següent:
Aquí, com es pot veure, hi ha tres blocs diferents:
El primer, com a l'anterior, mostra l'estat Bluetooth del LED.
Per altra banda, el segon i el tercer són controls lliscants que utilitzarem per controlar, o bé la intensitat lumínica del LED o la posició del cursor del servo respecte a l'eix.
CODI 2 (APP INVENTOR)
Aquest serà el codi utilitzat per enviar la informació necessària perquè l'Arduino pugui controlar el LED i el Servo:
Primer de tot, els tres primers blocs comptaran amb la mateixa funció que els del codi anterior.
Seguidament, els dos següents blocs envien la posició del cursor que controla el Servo, amb una "A", i la posició del cursor que controla el LED, amb una "B"
Per una banda, la posició del Servo estarà entre els 0 i els 180 (graus respecte a l'eix) i per l'altra banda, la dels LEDS entre 0 i 255 (Amperes d'intensitat)
Finalment, l'últim bloc també realitza la mateixa funció que l'anterior.
CODI 2 (ARDUINO)
#include <Servo.h>
Servo servomotor;
int led_1 = 5;
char valor;
String estado;
void setup() {
servomotor.attach(6);
servomotor.write(90);
pinMode(led_1, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Serial.available())
{
valor = Serial.read();
if (valor == 'A')
{
servo();
}
if (valor == 'B')
{
led();
}
}
}
void led()
{
delay(30);
while (Serial.available())
{
char c = Serial.read();
estado += c;
}
if (estado.length() > 0)
{
analogWrite(led_1, estado.toInt());
estado = "";
}
}
void servo()
{
delay(30);
while (Serial.available())
{
char c = Serial.read();
estado += c;
}
if (estado.length() > 0)
{
servomotor.write(estado.toInt()); estado = "";
}
}
Amb aquest codi, mitjançant la informació rebuda del recentment comentat, aconseguirem controlar el LED i l'Arduino:
Primerament, i com és habitual si s'ha utilitzat un servo, hem de fer a l'Arduino accedir a la biblioteca per poder utilitzar-lo amb la instrucció " #include <servo.h>"
Seguidament, es creen les variables corresponents als pins on el servo anirà al pin 6 i el LED al 5 i una cadena anomenada "estado" que utilitzarem més endavant.
A continuació es fa el setup de totes aquestes variables situant el servo als 90º d'inici i inicialitzant una transmissió a una velocitat de 9600 bps (la mateixa que al codi anterior)
Un cop fet això es crea un loop on, si el valor que rep el port en sèrie de l'App Inventor és una "A" s'haurà de fer moure el Servo a la posició corresponent amb el control lliscant (cridant la funció "servo") i si rep una "B", s'haurà d'ajustar la lluminositat del LED també a la corresponent amb el control lliscant (cridant la funció led).
Per fer això, requerim dues funcions més ("led" i "servo") per coincidir la posició del cursor lliscant amb la del cursor del Servo o amb la de la intensitat del LED.
Dit això, la funció "led" el que fa és, després d'esperar 30 mil·lisegons, convertir el valor del port en sèrie en un enter, emmagatzemant cada caràcter en la cadena "estado" i convertint aquesta en un valor enter per així transmetre'l a la sortida analògica i controlar la brillantor del LED.
La funció Servo fa el mateix però controlant la brillantor del servo.