Sottotitolo: Controllo e gestione remota bidirezionale basata su Arduino
Multipiattaforma, multibrowser e opensource (ottimizzata per smartphone)
Eccomi con il progetto forse più interessante fin’ora presentato.
Cercavo su internet un sistema per controllare Arduino via web, il tutto però doveva essere estrememanete flessibile, semplice, adattabile ad uno smartphone ma soprattutto doveva avere una comunicazione bidirezionale e un refresh automatico. Non ho trovato nulla che avesse tutte queste caratteristiche messe insieme, ecco perchè ho deciso di realizzare questo progetto.
La maggior parte dei progetti simili, hanno a mio avviso delle caratteristiche incomplete: quelli specifici per domotica solitamente hanno un’applicazione da scaricare e quindi non sono multipiattaforma, quelli basati via web o hanno un interfaccia graficamente scarsa oppure richiedono il refresh della pagina per aggiornare lo stato delle uscite, oppure ancora hanno la possibilità di leggere sensori, ma non di modificare le uscite…
L’esigenza che avevo io in particolare era che se modificavo lo stato di un uscita non da remoto, ma localmente (tramite un pulsante per esempio), l’interfaccia doveva presentarmi quasi in tempo reale tale modifica esattamente sul tasto di accensione o spegnimento dell’ interfaccia senza dover “refreshare” nulla.
Per fare ciò avevo l’esigenza di utilizzare un’interfaccia web un po’ più complessa di quella gestibile dall’ethernet shield di Arduino, ho quindi optato per utilizzare il Raspberry Pi lato web (ma può essere utilizzato qualsiasi PC con Linux, o con qualche modifica anche Windows), collegato via USB (quindi seriale) con Arduino.
In questo modo ho potuto implementare alcune tecnologie, in particolar modo PHP e jQuery, che mi hanno permesso di realizzare il tutto.
Il funzionamento finale è quindi molto semplice:
L’interfaccia visibile nella foto sopra è una semplice pagina web (ottimizzata come si vede per smartphone). Cliccando sullo slide abilito o disabilito un’uscita (che viene azionata in tempo reale) ed ogni 5 secondi ho il refresh automatico delle uscite e anche degli ingressi anlalogici (nell’esempio sopra ho abilitato solo quattro uscite ed un ingresso).
L’interfaccia completa contiene le 13 uscite di Arduino (escluse la 0 e la 1 che servono per la comunicazione seriale), e i 6 ingressi analogici.
Il collegamento e la configurazione sono semplicissimi: Il Raspberry Pi o il nostro PC va collegato via USB alla board Arduino sulla quale avremo caricato lo sketch, dopodichè caricheremo l’interfaccia e gli script sul Raspberry Pi et voilà, il gioco è fatto.
NOTA IMPORTANTE: Affinchè il tutto funzioni, dobbiamo disabilitare l’autoreset di Arduino. Questo può essere fatto collegando un condensatore da 10uF tra RESET e GND. Se non si fa questo la comunicazione seriale non funzionerà correttamente!
Ma vediamo ora il principio di funzionamento:
Lo sketch di Arduino si preoccupa principalmente di ricevere un comando via seriale. Tale comando deve essere di 7 caratteri, cominciare con *CMD e terminare con /.
Tra “*CMD” e “/”, va inserito il numero del pin seguito dall’azione:
V = value (read) – legge il valore dell’input analogico
S = status (read) – legge lo stato dell’uscita digitale
H = high (write) – porta il PIN digitale su “ON”
L = low (write) – porta il PIN digitale su “OFF”
T = toggle (write) – inverte il PIN digitale
Ovviamente tale sketch pur essendo nato per funzionare con il suo script PHP associato, può essere utilizzato per altre applicazioni.
Lo script PHP invece si occupa di fare da ponte tra l’interfaccia web e Arduino tramite seriale (USB).
Se lanciato senza parametri, restituisce una stringa JSON con lo stato delle uscite digitali e i valori delle porte analogiche.
Per esempio:
{“02″:0,”03″:0,”04″:0,”05″:0,”06″:0,”07″:0,”08″:0,”09″:0,”10″:0,”11″:0,”12″:0,”13″:0,”14″:756,”15″:745,”16″:722,”17″:679,”18″:634,”19”:494}
Se lanciato con il metodo GET, usa due parametri: “pin” (da P02 a P013) e “cmd” (0 oppure 1).
Esempio: http://raspberrypi/ardudome.php?pin=P13&cmd=1, manderà il comando *CMD13H/ ad Arduino, che porterà il PIN13 su HIGH.
Anche qui, pur essando nato per funzionare con la sua interfaccia web, può essere adattato ad altre applicazioni.
L’interfaccia web infine, basata su HTML, jQuery ed AJAX, non fa altro che chiamare ogni 5 secondi lo script PHP e aggiornare la pagine HTML con i valori corretti presi da Arduino. Se uno slider viene clickato, cambiando il suo valore, lo script chiamerà immediatamente lo script PHP passandogli il parametro del PIN da modificare e il VALORE da settare.
Come si può vedere il tutto è semplice ed intuitivo.
Veniamo ora alla fine alla modalità di installazione:
1 – Scaricare tutti i file da github (https://github.com/toggio/ardudome/)
2 – Caricare lo sketch ArduDome.ino sulla board Arduino UNO
3 – Inserire un condensatore da 10uF tra GND e RESET
4 – Connettere Arduino tramite la porta USB al Raspberry PI (o qualsiasi altro PC Linux) con apache e php preinstallato
5 – Caricare tutti i files (eccetto Ardudome.ino e functions.ino) nella directory www (normalmente /var/www)
6 – Verificare il nome della porta USB (normalmente /dev/ttyACM0) e modificarla nel file ardudome.php ($serial->deviceSet(“/dev/ttyACM0”);)
7 – Dare a www-data il permesso per usare la seriale (usermod -a -G dialout www-data)
8 – Verificare la connessione (lanciando il file ardudome.php)
9 – Aprire il browser dello smartphone o del PC su http://yourraspberryip/ardudome.html
Buon divertimento e ci vediamo al prossimo progetto!!!