Prestare sempre attenzione a seguire le indicazioni fornite in questo blog, soprattutto se si tratta di apparecchiature elettriche collegate alla tensione di 220V. Non mi ritengo responsabile di danni causati dall'aver seguito i consigli qui pubblicati.
Rieccomi qua. Riprendiamo il discorso sulla rilevazione del consumo di energia da integrare in OpenHAB; ho fatto alcune passi avanti con le mie sperimentazioni.
Nel post precedente avevo fatto i primi test con il dispositivo PZEM-004T Energy Module, abbinato ad un Arduino UNO.
Test andati più che bene...ed adesso, come da programma, voglio sostituire Arduino UNO con un molto più economico Esp8266 NodeMCU Ci sono un paio di osservazioni da fare in merito a questa sostituzione, in quanto Esp8266 NodeMCU lavora a 3.3V, rispetto ad Arduino che lavora a 5V, così come il PZEM-004T Energy Module, che, come abbiamo visto, necessita di 5V di alimentazione per la parte a bassa tensione. Nel test precedente i 5V li prendevo direttamente da Arduino e quindi non avevo bisogno di diverse alimentazioni. In questo caso devo studiarmi qualcosa per evitare di dover alimentare il NodeMCU con 3.3V e il PZEM-004T con 5V. Ogni tanto la fortuna aiuta gli audaci...le ultime schedine Esp8266 NodeMCU che ho comprato sono un modello particolare della LoLin che è in grado di essere alimentato a 5V tramite solito connettore microUSB ed ha un PIN di uscita della tensione di alimentazione (cosa che gli altri modelli non hanno...forniscono in uscita solo 3.3V) Quindi, con un alimentatore di un vecchio cellulare, che fornisce 5V e 400mA e che ha l'attacco microUSB, riesco a fare tutto.
E allora, cabliamo il tutto. Ecco le due schedine pronte per il collaudo.
Manca ancora la creazione del software. Come primo step, scrivo un programma del tutto simile a quello usato con Arduino, per verificare che i due dispositivi lavorino bene. Questa volta ho usato l'editor Visual Studio Code con plugin Platformio. Ecco l'output della seriale durante il test. Prima ho acceso una lampadina da circa 18W
E poi una da 100W
Il sistema reagisce bene...ottimo! Non mi resta che modificare il software e fare in modo che le informazioni vengano mandate tramite MQTT, per una successiva integrazione su OpenHAB e Grafana. Se i valori di consumo rimangono costanti, invio i dati circa ogni minuto; altrimenti, quando il sistema rileva un cambiamento di consumi sopra una certa soglia, invia i dati. Ho fatto in questo modo per evitare di inviare una mole di dati identici inutilmente. Per adesso imposto un topic MQTT di test: nodemcu/test/esp8266mcu12/powerconsumption/state e attraverso il solito MQTT-SPY verifico la ricezione dei dati:
Tutto funziona egregiamente...non mi rimane altro che integrare il tutto in OpenHAB e vedere i dati tramite le sue sitemap e attraverso le dashboard di Grafana Alla prossima puntata...
Dopo una piccola pausa, dovuta a cause di forza maggiore, ritorno finalmente a parlare del mio sistema di Home Automation, sempre work in progress
In particolare volevo parlarvi dei primi test che ho fatto per implementare un sistema di misurazione dei consumi elettrici, da affiancare a quanto già fatto per il monitor della produzione del mio impianto fotovoltaico (trovate a questo link il relativo post). Quello che sto cercando di fare è un qualcosa che sia facilmente integrabile in OpenHAB; non mi servono quei sistemi che vendono completi di display perché il mio obiettivo non è quello di fare delle verifiche manuali, ma piuttosto acquisire i dati di consumo per poter fare delle analisi, tenerli sotto controllo in remoto (senza il bisogno di essere sempre davanti al dispositivo...) ed eventualmente far scattare avvisi e/o notifiche...
OpenHAB, insieme a Grafana, ci permette di fare tutto questo in maniera relativamente semplice...la cosa fondamentale è quella di fargli arrivare i dati...
Il mio risultato finale dovrà essere un qualcosa in grado di leggere i consumi di casa, interfacciabile con OpenHAB tramite rete e relativamente piccolo per essere inserito in qualche scatola di derivazione...
Nelle mie ricerche su internet mi imbatto nel contatore Eastron sdm120c Modbus...
Un gran bel prodotto...che permette attraverso seriale RS485 la lettura di tutta una serie di parametri energetici, tra cui tensione, corrente e potenza...Essendo una lettura tramite protocollo seriale si può interfacciare ad Arduino e/o Raspberry per leggere ed inviare i dati. Non è proprio un dispositivo economico, ma al momento di meglio non ho trovato. Non è piccolo ma è montabile nei quadri elettrici.
Ero ormai quasi deciso a comprarlo quando per pura combinazione trovo un prodottino che potrebbe fare al caso mio...il PZEM-004T Energy Module, un piccolo dispositivo che, attraverso una pinza amperometrica, è in grado di leggere il consumo di corrente che passa attraverso una linea di fase...mette a disposizione una porta seriale per leggerne i dati, quindi è interfacciabile con Arduino / Raspberry e/o simili, ha dimensioni ridotte e soprattutto costa relativamente poco...sono riuscito a portarlo a casa con circa 8€ spedito...
Per adesso ne ho comprato uno solo...se i test vanno a buon fine ne prenderò altri...il mio obiettivo finale è quello di avere il monitoraggio indipendente dei 3 piani di casa...avendo un quadro elettrico su ogni piano, non devo far altro che intercettare la fase principale ed agganciare la pinza amperometrica...il resto lo farà il microcontrollore che lo affiancherà in questo duro lavoro. L'ideale sarebbe utilizzare uno dei tanti Esp8266 NodeMCU che ho già "a magazzino"...con il Wifi integrato e le dimensioni ridotte (così come il costo...) sarebbero la soluzione ideale! Se non risulterà compatibile, ci sarà sempre il solito Arduino a venirci in aiuto...anche se poi dovrò risolvere il problema del collegamento alla rete.
Sì, perché i dati verranno trasmessi ad OpenHAB tramite protocollo MQTT
Bene, non rimane altro che fare qualche prova...iniziamo con Arduino così il test è più facile, anche perché si trovano schemi di collegamento e software già fatti in rete...una volta appurato che il dispositivo funziona, proverò con il NodeMCU.
Il dispositivo dev'essere alimentato da un lato in bassa tensione con i fatidici 5V, mentre dall'altro (il lato di potenza) necessita della 220v.
Iniziamo i collegamenti con Arduino
GND e 5V da Arduino verso il dispositivo;
uscita seriale dal dispositivo verso due ingressi digitali di Arduino
L'altro lato del dispositivo invece vuole la connessione con la pinza amperometrica e la 220v. Per fare i test ho preso un portalampada con fase e neutro a vista, in modo tale che alla fase possa agganciare la pinza di misurazione. Il tutto termina con una normale spina.
Scarichiamo un software molto semplice per Arduino, che stampa sulla seriale i dati letti. Ecco l'output con luce spenta (lampadina svitata)...zero corrente, zero potenza:
Avvitiamo la lampadina, che si accende...
e sulla seriale di Arduino si vede il rilevamento della potenza...
Accendo e spengo la lampada più volte per verificare che tutto funzioni...OK, ci siamo...i primi test sono andati più che bene...
Prossimo step sarà quello di provare ad utilizzare un Esp8266 NodeMCU al posto di Arduino e poi iniziare ad inviare i dati ad OpenHAB.
Se tutto funzionerà correttamente penso proprio che ne comprerò almeno altri due...ed inizierò ad inserirli nel mio impianto.
Come promesso, ecco la seconda parte del post relativo all'integrazione dell'antifurto con OpenHAB, solo per quanto riguarda lo stato degli ingressi...per poter monitorare anche in remoto il loro stato...cosa che la mia attuale centralina non mi permette di fare...
Passiamo quindi alla fase operativa (o distruttiva, dipenderà dall'obiettivo raggiunto 😱). Ricapitoliamo quanto c'è da fare:
portare tutti gli ingressi dell'antifurto al Raspberry PI3
costruire una piccola scheda di interfaccia per abbassare il segnale dei sensori / contatti da 4.5v a max 3.3v attraverso partitori di tensione (questo per non bruciare gli ingressi del raspberry)
connettere gli ingressi dell'antifurto agli ingressi di questa schedina e le sue uscite ai GPIO del raspberry
infine, inserire in una sitemap su OpenHAB gli oggetti per la visualizzazione dello stato degli ingressi dell'antifurto
Iniziamo...
Cablaggi vari Il raspberry è vicino alla centralina dell'antifurto dove arrivano diretti 3 degli 11 ingressi che devo gestire...gli altri 8 sono gestiti da una scheda di espansione distante dalla centrale, alla quale è collegata solo tramite bus seriale...
Fortunatamente ci sono un paio di tubi vuoti che collegano le due scatole di derivazione...quindi mi basta passare un cavo di rete dalla scheda di espansione alla scatola vicino alla centrale (e quindi vicino al raspberry).
Ho scelto il cavo di rete perchè ha proprio 8 fili (quanti ne servono a me...), è schermato ed è comodo da passare...
E allora passiamo questo cavo...e dopo averlo passato colleghiamo i sui 8 terminali agli 8 ingressi della scheda di espansione dell'antifurto...
Questa sopra è la scatola di derivazione che contiene l'espansione dell'antifurto (scatola bianca in basso...) e tutti i segnali dei singoli sensori / contatti...
Il cavetto di rete è quello blu che si vede uscire dal secondo tubo a partire dall'alto...i suoi fili sono collegati ai morsetti neri che a loro volta sono collegati alla scheda di espansione.
Bene qui è tutto fatto...possiamo chiudere.
Andiamo al piano di sopra, dove c'è la scatola di derivazione che porta tutto alla centrale.
Ecco la scatola di derivazione, vicino alla centrale, dove arrivano tutti i cablaggi necessari...compreso il nostro cavetto di rete blu
Recupero anche i 3 ingressi non gestiti dalla scheda di espansione, ma collegati direttamente alla centrale, cercando di capire quali connessioni fossero quelle giuste in tutto questo groviglio...
Quindi, gli 8 fili del cavo di rete più i tre recuperati qui direttamente li porto alla schedina d'interfaccia autocostruita (e si vede...) con i partitori di tensione. Eccola, lato destro ingressi, lato sinistro uscite...al centro le resistenze per il partitore, una coppia per ogni ingresso...
Ultimo step, connessione tra uscite e GPIO del raspberry...
Se contate bene i fili, non sono 11 come detto prima ma 12...perchè oltre a tutte le connessioni dei segnali bisogna mettere anche la massa in comune tra impianto antifurto e Raspberry...il 12° filo è proprio questo...ed è connesso ad un terminale GND del raspberry (nel suo pin header ci sono più terminali GND...basta sceglierne uno comodo...)
Tutto collegato...il Raspberry si accende ancora e anche l'antifurto sembra ancora funzionante...bene, per adesso nulla di distruttivo!!!
Prima di passare al software faccio qualche prova: apro e chiudo le finestre e le persiane e verifico con il tester che il relativo ingresso passi da 0v a 3v (il partitore mi da 3v in corrispondenza del 4.5v originario) e viceversa.
Configuriamo OpenHAB Adesso che la parte hardware è a posto (parola grossa!!!!), tocca al software...intervento sicuramente con potenzialità meno distruttive 😎
Installiamo su OpenHAB il GPIO Binding, che ci permette di interfacciare OpenHAB direttamente con i GPIO del raspberry su cui gira...
Come al solito passiamo dalla PAPERUI (l'interfaccia web di configurazione di OpenHAB) e seguiamo il percorso Add-ons -> Bindings
Fatto questo, occorre creare gli items OpenHab relativi ai singoli 11 ingressi che vogliamo gestire in modo che poi possano essere inseriti in una sitemap. Creiamo quindi il file gpio.items nella cartella /etc/openhab2/items ed inseriamo gli 11 oggetti legati ognuno ad un ingresso GPIO
Ecco come appare il mio file (editor Visual Studio Code con estensione Platformio, consigliatissimo!!!!)
Come vedete, oltre ad altri parametri, ogni riga è legata ad un pin diverso, che corrisponde ad un ingresso GPIO del raspberry. Il parametro activelow indica se bisogna considerare un contatto aperto se il segnale è a 0v ... nel nostro caso è a "no" perchè, come abbiamo visto, quando il contatto è APERTO, abbiamo tensione...
Aggiungiamo ancora gli items appena creati in una sitemap, editando il relativo file ed otteniamo a video qualcosa di simile a questo (visto da app OpenHAB su smartphone)
Adesso parte un periodo di verifica che tutto funzioni e stia in piedi ... non ne sono ancora certo al 100%, ma ci sono buoni presupposti...🍀🍀🍀
Disclaimer: le operazioni indicate nel presente post sono eseguite a mio rischio e pericolo e non sono da utilizzare come guida tecnica. Chi effettua le stesse operazioni su proprio o altrui impianti ne è direttamente responsabile
Incredibile ma vero!!! Sono riuscito a raggiungere un piccolo traguardo, inseguito da un pò di tempo...Riuscire ad integrare in OpenHAB lo stato dell'antifurto...più precisamente dei suoi ingressi!!!
Molti di voi diranno...beh, semplice...ormai tutti gli antifurti hanno questa caratteristica...tramite centraline moderne e app mobile è possibile farlo...certo!!! Ma il mio antifurto ha 10 anni e cambiare centralina ha un costo non di poco conto...e all'epoca non era così scontato avere un sistema "online" come oggi...
Il mio obiettivo era solo quello di intercettare lo stato dei sensori e non di permettere la gestione totale dell'antifurto, anche per un discorso di sicurezza...in sostanza, nel momento in cui per qualche motivo mi arriva la telefonata dall'antifurto a fronte di allarme, al volo riesco a capire quale sensore è stato aperto (chiaramente mentre mi catapulto a casa...)...ad oggi questa cosa non la posso fare perchè il combinatore telefonico non è in grado di interfacciarsi in maniera dettagliata alla centrale per capire quale ingresso ha fatto scattare l'allarme!!!
E allora basta intercettare tutti i cablaggi provenienti dai diversi sensori radar volumetrici e contatti magnetici, in qualche modo interfacciarli con una schedina tipo Arduino o simili in modo da ottenere lo stato di "APERTO" o "CHIUSO"...alla fine i diversi sensori dell'antifurto non fanno nient'altro che questo...
Inizio allora con i miei esperimenti per capire che tipo di segnale viaggia, documentazione alla mano...e scopro che, oltre al doppino che porta corrente a tutti i sensori / magneti (a 13.5v), ci sono tutti singoli fili, per ogni contatto / sensore che interessano a me...cioè, la massa di riferimento e la tensione...quando tra i due capi non c'è tensione, il contatto è CHIUSO, quando c'è una tensione positiva il contatto è APERTO...in sostanza sono gli 0 e gli 1 logici che interessano a me...
Prima di interfacciare il tutto con OpenHAB faccio delle prove con il tester...anche perchè devo capire che valore di tensione arriva sul contatto che mi identificherà il mio 1 logico...in base anche alla schedina che andrò ad usare come interfaccia, avrò delle soglie di tensione da rispettare per non bruciare gli ingressi...
Quindi, metto i terminali del TESTER tra massa e cavetto del segnale di un contatto (ad esempio porta d'ingresso, che è vicina alla scatola di derivazione...)...tensione pari a 0...perfetto, la porta è chiusa...Apro la porta, per sicurezza verifico la tastiera dell'antifurto che mi segnala contatto aperto e quindi controllo la tensione...4.5v...chiudo la porta...torna a 0...direi che funziona...ho intercettato il segnale che mi interessa...E' così per ogni sensore / contatto...
Direi che la mia idea può funzionare...poichè ho 11 ingressi da gestire (vari sensori e contatti singoli oppure messi in serie come unico ingresso...) devo trovare una schedina che mi permetta di gestire almeno 11 ingressi digitali, che abbia una tensione compatibile con i 4.5v forniti dai contatti e che possa essere connessa in rete per trasmettere l'informazione a OpenHAB tramite MQTT...
La scelta è tra
- una schedina NodeMCU ESP8266, con wifi integrato che però da specifica accetta solo 3.3v negli ingressi digitali;
- un Arduino UNO con shield ethernet che dovrebbe accettare fino a 5v negli ingressi digitali;
La prima scelta sarebbe più comoda perchè ha il wifi integrato ed è molto più piccola...bisognerà però fare un piccolo circuito per abbassare la tensione da 4.5v a sotto i 3.3v.
Con Arduino UNO invece la tensione è già a posto ma la scheda è molto più grande e necessita anche di uno shield (una scheda) in più...
Pensa che ti ripensa mi viene un lampo di genio...
il Raspberry PI3 dove attualmente stanno girando OpenHAB e il broker MQTT ha anche una serie di GPIO digitali...se riesco a far arrivare tutti i segnali, posso usarla direttamente, così evito di sprecare un'ulteriore scheda...ed essendo lo stesso sistema su cui gira OpenHAB non ho neanche la necessità di trasmettere il dato in rete...sarà tutto in locale... Purtroppo i suoi GPIO lavorano a 3.3v quindi il nostro 4.5v sicuramente non le farà bene...Niente paura...costruirò una piccola schedina di interfaccia con una serie di partitori di tensione per abbassare proporzionalmente la tensione sotto i 3.3v...tanto resistenze ne ho in abbondanza 😎
Se riesco a fare questo, posso usare direttamente un Binding di OpenHAB (vedi https://github.com/openhab/openhab1-addons/wiki/GPIO-Binding) che permette di integrare facilmente i segnali ottenuti tramite lettura di GPIO (in sostanza permette di agganciare un item di tipo logico 1/0 di OpenHAB allo stato di un ingresso del raspberry), senza dover fare un programma esterno, ed inviarli tramite MQTT...direi ottimo...(se funziona)
Ricapitoliamo:
- far convergere tutti i segnali degli ingressi dell'antifurto verso il Raspberry PI3
- creare una schedina per abbassare il segnale dei sensori / contatti da 4.5v a max 3.3v
- collegare gli ingressi di questa schedina con i cavetti degli ingressi dell'antifurto e le uscite con il Raspberry
- installare e configurare il binding GPIO di OpenHAB (vedi https://github.com/openhab/openhab1-addons/wiki/GPIO-Binding)
- creare una sitemap su OpenHAB per visualizzare lo stato degli ingressi
Non dovrei aver dimenticato nulla...spero...
Nel prossimo post, a breve online, descriverò la fase operativa e il risultato ottenuto!
Adesso provo ad integrare il mio ricevitore wireless RF433Mhz (sviluppato con Arduino e Modulo Ethernet) con MQTT, in modo da poter acquisire sul sistema di Home Automation i dati di produzione dell'impianto fotovoltaico.
Non sto a dilungarmi sui dettagli di come funziona il sistema di acquisizione; questo è il mio vecchio post relativo all'argomento
Quello che voglio fare adesso è la trasmissione al broker MQTT dei dati acquisiti, per la futura integrazione con OpenHAB.
Bisogna quindi mettere mano allo sketch di Arduino che gestisce il ricevitore RF 433Mhz e fare in modo di pubblicare su un particolare topic i dati acquisiti. Attualmente il sistema invia i dati ad un'interfaccia WEB tramite la chiamata ad un semplice servizio HTTP REST.
Bene, utilizzando l'IDE di Arduino (la stessa utilizzata per l'upload del firmware dei SONOFF), apro lo sketch ed effettuo la modifica al codice per gestire il collegamento con il broker MQTT.
Tralascio i dettagli tecnici perchè non sono lo scopo di questo post e se ne trovano tantissimi in giro per la rete, ma se qualcuno fosse interessato al sorgente dello sketch mi scriva una mail, sarò ben felice di condividerlo.
Il topic che ho scelto per la pubblicazione dei valori è il seguente:
arduino/groundfloor/rf433/solarenergy/state
Ho cercato di seguire la naming convention che stavo usando per i SONOFF e quindi
[device]/[zona]/[tipologia]/[id del dato]/state
Il contenuto del messaggio è semplicemente il valore della potenza rilevata in Watt.
Ecco i messaggi pubblicati, visti sempre tramite mqtt-spy:
Ed ecco il ricevitore:
Attualmente è "muto", ma il prossimo step sarà quello di aggiungere un led per verificarne il funzionamento ed eventualmente anche qualche sensore ambientale...
E' passato un pò di tempo dal mio ultimo post...vari impegni lavorativi e familiari mi hanno tenuto un pò lontano dai miei esperimenti...in fondo in fondo è un hobby...e in quanto tale ha "bassa priorità" soprattutto quando il tempo libero è poco...
Come forse vi ricorderete (vedi post http://domoticaduino.blogspot.it/2016/03/acquisizione-dati-produzione-impianto.html), la produzione del mio impianto fotovoltaico veniva acquisita tramite il ricevitore wireless OWL CM160 connesso via USB al Raspberry, che era in grado di ricevere i dati inviati via radio dalla pinza amperometrica collegata all'impianto fotovoltaico, a valle dell'inverter.
Purtroppo con il passare del tempo questo sistema si è rivelato instabile, in quanto spesso il driver di connessione USB del dispositivo al raspberry non funzionava correttamente e necessitava di un riavvio del sistema...non molto comodo...
Facendo diverse ricerche su internet ho capito che è possibile intercettare i segnali trasmessi dalla pinza amperometrica tramite un semplice ricevitore Wireless a 433Mhz, come quello attualmente utilizzato per ricevere i dati del sensore del gas, costruito con Arduino (vedi http://domoticaduino.blogspot.it/2015/08/acquisizione-dati-il-ricevitore.html)
Un articolo in particolare mi ha aperto la strada verso questa soluzione...eccolo
La trasmissione avviene tramite codifica Manchester OOK (on off keying) alla frequenza di 433 Mhz.
Collegato il ricevitore ad un Arduino UNO e scaricato il codice che permette la codifica del protocollo di comunicazione (scriverlo da zero sarebbe stato un pò lunghetto...), i pacchetti iniziano ad essere visualizzati sulla seriale. Tramite alcune "operazioni" sui bit si riesce in maniera abbastanza semplice a recuperare i dati "nascosti" nei pacchetti trasmessi...et voilà, il gioco è fatto: ecco il dato di potenza trasmesso dalla pinza amperometrica.
Esempi di pacchetti "grezzi" ricevuti in esadecimale
2a8081bf01501a011900 ==> valore di potenza rilevato = 434 W 2a81817f02d0fdf71800 ==> valore di potenza rilevato = 627 W 2a81813f0980f3b71300 ==> valore di potenza rilevato = 2366 W
Output sulla seriale
Adesso non mi resta altro che trasmettere il dato al server centrale per la memorizzazione su db e relativa visualizzazione su web.
Sniffando tutti i pacchetti trasmetti in OOK su 433 Mhz, noto che non sono tutti relativi alla pinza amperometrica; tra i pacchetti ricevuti e non riconosciuti come protocollo Oregon Scientific 3 ci saranno sicuramente quelli trasmessi da un sensore di temperatura esterno alla casa che comunica con un orologio che ho sul comodino...il protocollo è di tipo diverso e attualmente non sono in grado di leggerlo...ma non si sa mai...in un futuro più o meno lontano potrei riuscire a intercettare ed acquisire anche questa informazione...
Ne faccio una versione semplificata per la semplice rilevazione di gas metano, utilizzando il sensore MQ-4 [Datasheet]
e il trasmettitore wireless RF-433 per inviare i dati al ricevitore.
Il tutto condito da un pò di collegamenti elettrici, led per indicare lo stato del sistema e pulsantino per annullare le segnalazioni.
HARDWARE
Questo è lo schema disegnato su Fritzing:
Oltre al trasmettitore Wireless RF-433 e al sensore del gas MQ-4, abbiamo anche un led rosso, uno verde e uno RGB; inoltre è presente anche un push-button nella parte sinistra dello schema. Chiaramente il tutto condito dalle resistenze necessarie per non bruciare i led, alimentati dalla linea 5V di Arduino, che, a sua volta, è alimentato, tramite trasformatore, a 12V, per garantire un maggior raggio d'azione del trasmettitore wireless, collegato alla tensione di alimentazione di Arduino e non alla linea dei 5V.
PIN 11: push-button
PIN A1: pin analogico del sensore del GAS
PIN 9: trasmissione dati wireless
PIN 12: led rosso per indicazione di attività di trasmissione wireless PIN 8: led verde per indicazione di attività di campionamento dati dal sensore PIN 3, 5 e 6: led RGB per indicazione sullo stato del sistema secondo la seguente legenda: - spento: valori all'interno della soglia normale;
- giallo: è stato rilevato almeno un valore sopra la soglia normale ma sotto la soglia di pericolo;
- rosso: è stato rilevato almeno un valore sopra la soglia di pericolo;
Eccolo fisicamente montato e collegato:
FUNZIONAMENTO e MESSAGGISTICA
All'accensione del rilevatore, il sistema avvia una fase di riscaldamento del sensore MQ-4, prima di procedere alla campionatura dei dati; questa fase è necessaria per stabilizzare la precisione del sensore...In questa fase il led RGB lampeggia.
Successivamente alla fase di riscaldamento, inizia la raccolta dei dati.
Il campionamento del segnale del sensore avviene ogni secondo (quindi il led verde, a funzionamento normale, dovrebbe lampeggiare ogni secondo); in questo secondo vengono letti 10 campioni e calcolata la media; ogni 5 secondi viene inviato al ricevitore un segnale calcolato come la media dei 5 segnali campionati (quindi il led rosso, a funzionamento normale, dovrebbe lampeggiare ogni 5 secondi).
In caso di segnale fuori soglia, viene acceso il led RGB con il colore che indica il tipo di gravità (vedi sopra).
Il pulsante presente nel circuito serve semplicemente ad azzerare lo stato del sistema...questo perchè una volta che il sensore rileva dei segnali fuori soglia, accende il led e anche se il sistema torna con valori sotto soglia, il led rimane acceso. Il pulsante serve quindi a spegnere il led. In questo modo se avviene una rilevazione fuori soglia, è possibile accorgersene anche se non si è presenti in quel preciso momento.
Il segnale che ogni 5 secondi viene inviato al ricevitore è una stringa di testo composta nel seguente modo
GAS;VALORE;STATO| VALORE è la media dei 5 dati campionati, STATOè un valore numerico ed indica eventuali dati fuori soglia con la seguente codifica:
- 1: ok;
- 2: warning
- 3: danger
SOFTWARE
Lo sketch software di Arduino è scaricabile da questo link
Chiaramente, come per il ricevitore, anche qui ho utilizzato le librerie RADIOHEAD per la gestione della scheda Wireless.
Routine di inizializzazione:
- viene inizializzato il ricevitore wireless RF433
- vengono inizializzati i led di stato;
- viene effettuata la fase di riscaldamento del sensore MQ-4
corpo principale del programma:
- la prima cosa che viene fatta nel loop principale e controllare se il pulsante di reset dell'avviso è stato premuto andando a controllare il relativo ingresso digitale (PIN 11); nel caso sia premuto viene messa ad OFF la variabile che gestisce lo stato del rilevatore;
- viene quindi effettuata la lettura del sensore campionando dieci valori e facendone la media; in questo frangente viene acceso il led di lettura (PIN 8);
- ogni 5 letture, effettuate ogni secondo, viene calcolato il dato media da utilizzare per il controllo dello stato e da inviare al ricevitore tramite la rete Wireless RF-433;
- il led di stato (PIN 3, 5 e 6) si aggiorna di conseguenza ed in caso di valore fuori soglia si accende del colore relativo;
- il dato calcolato viene inviato al ricevitore tramite Wireless RF-433; in questo frangente viene acceso il led di invio dati (PIN 12);
Eccoci arrivati al secondo test.
La prova dello shield ethernet con Arduino Uno Rev 3.
L'idea è quella di collegare lo shield in rete locale e creare un piccolo web server che risponda a delle richieste http fatte via browser per eseguire dei comandi sui dispositivi fisici collegati.
Arduino mette a disposizione la libreria Ethernet, che permette facilmente la gestione dello shield. Infatti con un paio di righe di codice il dispositivo entra in rete utilizzando il protocollo dhcp (se la rete locale lo gestisce) oppure tramite l'impostazione manuale dei parametri di rete (ip, dns, gateway, etc etc).
Il collegamento è fatto direttamente sulla scheda Arduino, come la maggior parte degli shield...I pin 10, 11, 12 e 13 vengono usati dallo shield e quindi non possono essere usati per altri scopi.
Per il nostro test, colleghiamo due led alle uscite digitali 2 e 8. Faremo in modo che Arduino, a fronte di opportune chiamate http, accenda e spenga i due led. Per raggiungere il nostro scopo utilizziamo un tablet che, connesso in rete, effettui le chiamate http per controllare i led.
Il nostro Arduino quindi si metterà in ascolto sulla porta 80 in attesa di ricevere chiamate dai client...Non appena arriverà una chiamata, in base ai parametri ricevuti, deciderà di attivare / disattivare le uscite che pilotano i led.
Iniziamo a mettere insieme un pò di pezzi del nostro starter kit più qualche altro dispositivo acquistato e partiamo con la prototipazione di un rilevatore di gas "casalingo" utilizzando il sensore MQ-4.
Il sensore, già montato su scheda, fornisce 4 pin per i collegamenti:
- Vcc: tensione di alimentazione 5V, perfettamente compatibile con Arduino;
- GND: connessione a massa;
- AD: uscita analogica, proporzionale al valore di gas rilevato nell'aria;
- D0: uscita digitale triggerata; fornisce un valore di uscita ALTO quando il valore di gas rilevato supera una certa soglia; soglia impostabile tramite apposito trigger;
Noi useremo solo il pin di uscita analogico, che collegheremo ad un ingresso analogico di Arduino.
Il sensore ha bisogno di una fase di preriscaldamento prima di fornire rilevazioni attendibili.
Nel nostro prototipo, a scopo prettamente didattico e per prendere un pò di confidenza, inseriamo anche:
- un rilevatore di temperatura LM 35
- un display LCD 16X2 retroilluminato con driver Hitachi HD44780
- un Buzzer
- un led
- un potenziometro
Nel display, il cui contrasto è controllato dal potenziometro, visualizziamo i dati acquisiti dal sensore di gas e di temperatura; il led lo utilizziamo per indicazione dello stato del gas presente nell'aria e il Buzzer è utilizzato per segnalare una rilevazione alta di gas.