ARDUINO CON I SENSORI ANTINTRUSIONE

Se desiderare sapere, tramite una pagina HTML ed in tempo reale, se qualche malintenzionato ha aperto una tapparella di casa vostra, questo mio lavoro fa per voi. Il sistema che presento e' costituito da un Arduino Mega, da una scheda Ethernet shield, da quattro schede Arduino Nano, da quattro sensori magnetici con switch incorporato, da un cavo tipo cat 5, da un router e ovviamente da un client sul quale visualizzare la pagina HTML (computer, tablet, smartphone...).
Il principio di funzionamento del sistema e' il seguente.
Una volta immesso l'indirizzo IP pubblico (da un computer remoto) o l'indirizzo IP locale di Arduino Mega (da un computer locale) nella barra degli indirizzi di un browser, appare una pagina con dei rettangoli colorati con dentro scritto il nome del sensore al quale fanno riferimento, ognuno di essi puo' assumere tre colori:
colore verde = sensore chiuso, tutto a posto, nessuno ha aperto la tapparella.
colore rosso = attenzione! Qualcuno ha aperto la tapparella.
colore giallo = La scheda Arduino Nano e' assente.
Nelle seguente figura sono rappresentate le tre situazioni:

In essa il primo  e' rosso, questo significa che qualcuno ha aperto la tapparella controllata dal sensore 01. Il secondo ed il  terzo rettangolo sono verdi, questo indica che i sensori 02 e 03 sono chiusi e le tapparelle da essi controllati sono, quindi, anch'esse chiuse. Il terzo rettangolo e' di colore giallo, questo significa che la scheda Arduino Nano che gestisce il sensore 04 e' assente (non sempre occorrono tutte e quattro le schede con i relativi sensori magari perche' si hanno poche tapparelle in casa oppure  perche' un unico Arduino Nano ne puo' controllare piu' di una se esse sono tra loro vicine.).
Arduino Mega si occupa di gestire tutta la parte della rete lan (risposta alla chiamata del browser, invio della pagina HTML) e di comunicare con i quattro Arduino Nano tramite seriale. Ogni Arduino Nano gestisce il sensore ad esso collegato, il primo Arduino Nano riceve un byte da Arduino Mega, dopo averci aggiunte alcune informazioni  lo invia all'Arduino Nano successivo che opera nella stessa maniera, l'ultimo Arduino Nano della catena spedisce il byte, ora  ricco di tutte le informazioni necessarie, ad Arduino Mega, in poche parole i cinque Arduino sono collegati in cascata a catena chiusa.
Lo schema a blocchi dell'insieme e' raffigurato nella figura seguente:


La pagina HTML e' autoaggiornante con una frequenza di 1 secondo, quindi deve passare al massimo quel lasso di tempo affinche' essa visualizzi eventuali variazioni dello stato dei sensori (aperti con tapparella aperta, chiusi con tapparella chiusa).
Per conoscere lo stato dei sensori Arduino Mega trasmette sulla seriale TX1 un byte di valore binario '00000000' e, oltre ad occuparsi di rispondere al browser che richiede l'aggiornamento della pagina ogni secondo, si mette in ascolto sulla porta RX1 delle risposte degli Arduini Nano, in particolare dell'ultimo della catena (SENSORE 04). Il byte inviato e' concettualmente diviso in due nibble (4 bit), il nibble piu' basso indica lo stato dei sensori (0 = chiuso, 1 = aperto), mentre quello piu' alto indica l'indirizzo della scheda Arduino Nano. In particolare i dati sottostanti visualizzano tutte le possibilita':

ARDUINO NANO SENSORE 01 CHIUSO = '00010000'
ARDUINO NANO SENSORE 01 APERTO = '00010001'

ARDUINO NANO SENSORE 02 CHIUSO = '00100000'
ARDUINO NANO SENSORE 02 APERTO = '00100010'

ARDUINO NANO SENSORE 03 CHIUSO = '01000000'
ARDUINO NANO SENSORE 03 APERTO = '01000100'

ARDUINO NANO SENSORE 04 CHIUSO = '10000000'
ARDUINO NANO SENSORE 04 APERTO = '10001000'

Il primo Arduino Nano Sensore 01 ricevuto da Arduino Mega il byte '00000000'  ne setta il bit 0 a zero se il sensore e' chiuso oppure a uno se il sensore e' aperto ed, in entrambi i casi, setta a uno il bit del suo indirizzo (bit 4) poi spedisce il byte cosi modificato ad Arduino Nano sensore 02 che effettua le stesse operazioni relativamente ai bit che gli competono e spedisce il byte all'Arduino successivo e cosi via.
L'ultimo Arduino Nano spedisce il byte modificato da tutti gli altri e da se stesso ad Arduino Mega che puo' cosi sapere lo stato dei  i sensori e quali schede sono presenti.
Ad esempio se il sensore 01 e' aperto (tapparella tirata su), il secondo ed il terzo sono chiusi ed il quarto non esiste perche' non c'e' la scheda, il codice ricevuto da Arduino Mega e' il seguente:

'01110001'

Come si nota il controllo e' del tipo posizionale, una volta letto tale byte, alla prossima richiesta da parte del browser, Arduino Mega spedisce la pagina HTML aggiornata con i colori dei rettangoli che in questo esempio sono:

SENSORE 01 = rosso
SENSORE 02 e SENSORE 03 = verde
SENSORE 04 = giallo

I programmi da caricare nei singoli Arduino Nano differiscono solo per i valori binari suddetti, per agevolarvi  vi fornisco tutti e quattro gli scratch.
Invece nel programma da caricare in Arduino Mega dovete effettuare alcune modifiche; in primo luogo inserire nell'array ip[] (riga 4) l'indirizzo IP locale del vostro Arduino Mega, questo indirizzo IP deve essere univoco e non utilizzato da altre utenze collegate in rete, per conoscere quali IP locali sono disponibili usate questo semplice programma  che non richiede installazione. In secondo luogo dovete inserire l'indirizzo  nella riga  99 dopo "http://" che serve per l'auto aggiornamento della pagina, in questo caso, pero', l'indirizzo IP deve essere locale se usate un client locale per controllare lo stato dei sensori o un IP pubblico nel caso cui usate un client remoto.
In quest'ultimo caso dovrete per prima cosa conoscere il vostro IP pubblico tramite un qualsiasi sito che lo fornisce tipo questo, poi dovete creare un canale nel router, chiamato DMZ host, che permette di accedere all'indirizzo locale di Arduino Mega tramite l'IP pubblico. Tenete conto che l'indirizzo pubblico ci viene cambiato dal nostro provider ogni qualvolta che spegniamo e riaccendiamo il computer, per questo motivo una volta collegatoci alla rete per poter mantenere l'IP per tutto il periodo che siamo fuori casa e vogliamo controllare lo stato dei sensori  ovunque ci troviamo, dobbiamo lasciare acceso il router. Il computer si puo' anche spegnere, esso serve solo per farci conoscere l'IP pubblico prima che usciamo da casa.
I collegamenti tra le schede sono rappresentati nella figura seguente:

Per il collegamento ho usato un cavo tipo cat 5 lungo 50 metri, per scegliere quale fossero i fili da usare, tra gli otto disponibili, per il TX e  l'RX al fine di ottenere la minore distorsione del segnale in transito, ho fatto diversi  tentativi anche estranei allo standard usato per questo tipo di collegamenti. Il risultato che ho ottenuto e' raffigurato nella figura sopra ovvero i  migliori risultati si ottengono usando una coppia intrecciata per i dati trasmessi e per quelli ricevuti il che va contro alla logica che consiglierebbe di usare sia per il TX che per l'RX fili intrecciati con la massa. Ho fatto anche questa prova ma il risultato non mi ha soddisfatto; il segnale era smussato su entrambi i fronti.
Invece con il sistema che ho deciso di usare i fronti dei dati sono ripidi e il leggero spike che era presente e' stato facilmente eliminato mettendo in parallelo ai pin dell'alimentazione di ogni Arduino Nano un condensatore ceramico da 100nF.
Nella prima figura seguente sono visualizzati i dati in partenza da Arduino Mega, nella successiva i dati in arrivo ad Arduino Nano sensore 01 e nella terza i dati di ritorno ad Arduino Mega (Quando e' stata scattata la foto all'oscilloscopio ancora non avevo montato i condensatori).





Dato che ogni Arduino Nano rigenera il segnale in arrivo posso affermare che, in base alla lunghezza del cavo che ho usato, complessivamente la distanza tra Arduino Mega ed Arduino Nano sensore 04 potrebbe essere  pari a 200 metri, ma non si puo' escludere che questa possa essere anche maggiore, purtroppo avevo solo 50 metri di cavo in laboratorio.
Nelle figure seguenti il cavo e i suoi fili interni.




Per ultimo notate che sia per il 5V sia per la  gnd  ho usato una coppia di fili per rendere minima la caduta sul filo, inoltre lo schermo del cavo deve essere collegato solo alla gnd di Arduino Mega e non alle gnd degli Arduino Nano.

file sorgente
Fabio

HOME