Intro
A chi non è mai capitato di restare chiuso fuori casa senza le chiavi? Beh a noi spesso e ci sarebbe piaciuto aprire il nostro cancello o porta di ingresso usando il telefono cellulare che abbiamo sempre con noi, il bisogno aguzza l'ingegno...ed ecco fatto! Ci siamo guardati un attimo in giro ed abbiamo recuperato un po' di informazioni su Arduino, la sua filosofia a "brick" ci è sembrata l'ideale per fare quello che avevamo in mente, il mio HTC Hero con Android OS ha fatto il resto.
Comandare le porte/cancelli
Ma procediamo per step, per primo dovevamo recuperare dalla scatola di derivazione i cavi che comandavano l'elettroserratura delle porte, senza bisogno di smontare la casa li abbiamo trovati nella scatola di derivazione centrale, quella dove confuiscono tutti i cavi del piano dell'abitazione. Ora basta chiudere il contatto tra di essi, per farlo in modo sicuro abbiamo collegato un relè comandato da un transistor. Questo è lo schema di come realizzarlo:
dove Rb = 150ohm e Rc rappresenta la resistenza interna della bobina del relè che nel mio caso è di 40ohm.
L'ho testato sulla breadboard ed era funzionanete ma per comodità ho comprato questo:
che ho trovato su Ethermania.
Ora bisogna collegre in qualche modo Arduino ad internet, abbiamo scelto la ethernet shield dato che sono riuscito a tirare il cavo di rete dal router alla scatola di derivazione.
Realizzazione software
Bisogna far comunicare Arduino con il nostro telefono, la soluzione più pulita che mi è balzata in mente era quella di usare il protoccolo http per farsì che la comunicazione avvenga e JSON per scambiarsi i dati agilemente. Sotto riporto a grandi linee com'è stato pensato il progetto:
AS = Arduino Station (raggruppa più sensori/attuatori) è composto da arduino 2009/Mega + ethernet shield(collegata a router wifi)/wifi shield
M = Master (applicativo su piattaforma android)
Precondizioni: tutti i dispositivi (AS) sono sulla stessa subnet e c omunicano tra di loro attraverso http.
Ogni AS è programmata in modo da comunicare ad M i vari sensori ed attuatori (terminazioni) che sono stati collegati ad esso ed anche le terminazioni collegati ai vari ARSF (questo va inserito programmato all'interno di AS).
Comunicazione Sync
AS esegue un ipscan sulla subnet specificata quando trova un ip attivo invia la chiamata http:
http://ipttivo/?m=hello
M risponde indicando le sue terminazioni seguendo questo schema JSON di esempio:
{"ip" : "192.168.10.15", "devices" : [" + "{ "type" : "gate", "name" : "cancellino ingresso", "out" : "5"}, {"type" : "door", "name" : "porta ingresso", "out" : "4"}, {"type" : "light", "name" : "luce soggiorno", "out" : "6"}, {"type" : "light", "name" : "luce cucina", "out" : "7"}, {"type" : "temperature", "name" : "camera da letto", "out" : "0"}, {"type" : "temperature", "name" : "camera bimbi", "out" : "9"}, {"type" : "wattmeter", "name" : "consumo energetico casa", "out" : "10"}]}
dove:
- ip indica l'ip del master
- out è il pin al quale è collegato l'attuatore
- name nome dell'oggetto (presa cucina)
- type tipo dell'oggetto
Tipi disponibili:
- plug (prese)
- light (luci)door (porte)
- gate (cancelli)
- temperature (sensore temperatura)
- humidity (sensore umidità)
- wattmeter (sensore corrente o tensione)
Quando M avrà rilevato tutte le terminazioni collegate a ciascun AS verrà mostrata l'interfaccia con la lista degli attuatori/sensori.
Attivazione/Disattivazione terminazione
AS invierà la chiamata http
http://M/?out=1&status=1
- M indica l'ip del master recuperato in precedenza
- status può essere 1/0
- out indica la terminazione
AS risponderà con l'esito dell'operazione con una stringa JSON del tipo
{"out": "4", "status" , "1"}
Materiale usato
- 1 Arduino
- 1 Ethernet shield
- 1 Relè con stadio pilota
- 1 Alimentatore da 5V-1A
- 1 Scatola di derivazione
- 1 Pannello di plexiglas
- Viti per il fissaggio
Costo totale: circa 60€.
Conclusioni
Ricapitolando: Arduino è in ascolto sulla porta 80 e comunica con l'applicazione usando http.
[App -> http get request -> Arduino -> http json response -> App]
L'applicazione si sincronizza recuperando la lista degli attuatori/sensori comandati da Arduino. Un servizio che lavora in background gestice ciclicamente il recupero dei riguardanti temperatura, consumi etc... memorizzandoli nel database, in futuro mi piacerebbe creare grafici statistici.
Se qualcuno si vuole cimentare gli giro l'applicazione, tra un po' sarà disponibile anche sul market.
Screenshot dell'applicazione Android
Scatola di derivazione modificata