Sogno di molti è poter controllare qualsiasi dispositivo attraverso la voce. Questo sogno non è poi così impossibile con Arduino, anzi è prossimo alla realtà e alla portata di tutti gli smanettoni.
In questo breve tutorial vi propongo due led che si accendono e si spengono semplicemente comunicandolo a voce al vostro smartphone.
Prima di iniziare però, una mia citazione:
“Oggi accendo un LED, domani un relè, poi collegherò la 220v ed è lì che farò il botto!”
Alessandro De Chirico
Questa direi che è l’intera filosofia su cui si può muovere la progettazione con Arduino. A distanza di alcuni mesi ho capito che dall’accensione di un LED si può arrivare dappertutto. Arduino è un vizio dal quale è difficile uscire, un vizio che dovrebbe essere insegnato in tutte le scuole dove si farfuglia a vuoto la parola “innovazione”.
Materiale necessario
- Arduino UNO
- HC-06 Bluetooth Module
- 2 LED (magari di colori diversi)
- 2 Resistenze da 220 ohm
- L’app Arduino Bluetooth Voice Controller (Scaricabile da Google Play Store)
- 1 Breadboard
- Cavi di collegamento
Lo schema di collegamento
Il codice
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#include <SoftwareSerial.h> String value; int TxD = 11; // Imposto i pin di comunicazione del modulo bluetooth int RxD = 10; int servoposition; SoftwareSerial bluetooth(TxD, RxD); void setup() { pinMode(2, OUTPUT); // imposto i pin dei led come output pinMode(3, OUTPUT); Serial.begin(9600); // inizia la comunicazione seriale bluetooth.begin(9600); } void loop() { Serial.println(value); // la stringa di testo (parlata) ricevuta dall'App viene stampata sul terminale seriale if (bluetooth.available()) { value = bluetooth.readString(); // viene assegnato alla variabile value la stringa che riceverà dall'App if (value == "Accendi tutto"){ // Se viene detto "Accendi tutto" accende tutti i led digitalWrite(2, HIGH); digitalWrite(3, HIGH); } if (value == "Spegni tutto"){ digitalWrite(2, LOW); digitalWrite(3, LOW); } if (value == "Accendi lampada rossa"){ digitalWrite(2, HIGH); } if (value == "Accendi lampada verde"){ digitalWrite(3, HIGH); } if (value == "Spegni lampada rossa"){ digitalWrite(2, LOW); } if (value == "Spegni lampada verde"){ digitalWrite(3, LOW); } } } |
Note e possibili intoppi
L’app vi chiederà di associare il dispositivo bluetooth HC-06 (o HC-05) utilizzando un codice pin appartenente proprio ad HC-06 (o HC-05). Nel mio caso era 1234, ma potrebbe anche corrispondere a 0000.
L’app alcune volte nel trasformare la voce in una stringa di testo sembra non avere un comportamento deterministico con l’uso di maiuscole e minuscole. Per ovviare al problema ho utilizzato l’operatore OR nei cicli if del codice, come segue:
1 2 3 |
if (value == "Accendi lampada rossa" | value == "accendi lampada rossa"){ digitalWrite(2, HIGH); } |
Per risolvere il problema e non semplicemente “ovviare”, la mia idea è quella di trasformare la variabile value tutta in maiuscolo (o in minuscolo) prima che passi all’interno dei cicli if… ma, non essendo un programmatore in C o C++, devo studiarci ancora un po’ su. 🙂