Attenzione! Non sono responsabile per qualunque danno fisico (ustione, folgorazione, ...) o materiale (incendio, corto circuito, ...) possa accadere mentre cercate di riprodurre tutto il progetto o solo in parte! Non ho alcuna sponsorizzazione dai produttori e rivenditori a cui faccio riferimento nel post.
Questo progetto fa parte del più grande lavoro della domotica fai da me ed è stato nominato come “gingillo del giorno” in Digitalia, episodio 324
Prima di partire vorrei sottolineare che questo progetto è un po’ complesso e vi porta ad armeggiare intorno alla 220V di casa, quindi ci va attenzione e servono un po’ di basi di programmazione, impianti elettrici, saldatura. Ho usato componenti vecchiotti, potrebbe essere necessario comprarne di diversi e per questo adattare programmazione e collegamenti, se siete alle prime armi fatevi aiutare, ad esempio, in un FabLab (se non sapete cos’è un FabLab ne abbiamo parlato diffusamente in questa puntata di GeekCookies)
Negli alloggi moderni il contatore della corrente elettrica non è in casa, ma in cantina, se aggiungiamo che gli elettrodomestici moderni consumano parecchio, mi è capitato spesso, causa disattenzione, di dover correre in cantina a tirare su la leva del contatore perché avevo fatto partire lavastoviglie e forno. Quando salta la corrente si spegne anche il router, il PC e una serie di altri dispositivi (ho poi messo vari UPS in giro per casa), insomma, una gran scocciatura.
Un altro utilizzo interessante è accendere i singoli dispositivi che avete in casa per capire esattamente quanto consumano. Ho scoperto che la lavatrice consuma molto, ma solo per metà del ciclo, inoltre consuma di più quando muove lentamente il cestello piuttosto che quando fa la centrifuga. Ho scoperto che i 250W della lampada alogena richiedono un’immediata sostituzione con una a LED e che lavorare con il Mac consuma circa 250W. Spegnere con un interruttore TV, console, BluRay e compagnia quando non li uso mi fa risparmiare 7-8W (fate due conti sull’anno intero) e che ho un consumo “di fondo” (tutto spento, tranne i router, il frigo, il sensore stesso, il mio server) di circa 150W.
Sul mercato ci sono già dispositivi, anche economici, che collegati opportunamente all’impianto elettrico permettono di monitorarne i consumi, però volevo farmi qualcosa io, che rispondesse alle mie esatte esigenze. Nello specifico volevo poter visualizzare il consumo elettrico istantaneo, senza dover staccare i cavi dall’interruttore differenziale, poter archiviare la storia e poterlo interrogare dall’esterno di casa, con il mio telefono.
Lista della spesa
Per creare questo circuito ho usato dispositivi comprati nel tempo, presi per sperimentare, che poi ho trovato interessanti nello sviluppo di questo progetto specifico. Ho messo vari siti per riferimento, potete comprare i componenti dove preferite, anche dal negozio di elettronica sotto casa o dai rivenditori cinesi a bassissimo costo e lunghe attese.
- Arduino Yun (è un Arduino con un modulo ARM, una piccola distribuzione Linux all’interno e la WiFi, non è molto diffuso in Italia, e purtroppo è andato in end of life). Se non interessa la connessione alla rete di casa va bene anche un Arduino Uno, funziona allo stesso modo, ma visualizza soltanto, in alternativa potreste avventurarvi con l’Arduino MKR1000 che ha già il WiFi, è nuovo, disponibile in Italia e costa meno dello Yun, non credo si debbano fare grandi modifiche. Si può usare anche un Arduino Uno e uno shield WiFi
- Display TFT LCD 19€ + IVA
- Pinza Amperometrica SCT-013 che permette di misurare la corrente che passa in un cavo, senza doverlo interrompere. 16€
- Due resistenze da 10KΩ 1/4 di Watt, se avete qualcosa a casa, le bande colorate devono essere nera, marrone, gialla, oro. 1€
- Un condensatore elettrolitico da 10uF 1€
- Connettore jack cuffia 3,5mm femmina. 0,50€
- Shield per arduino da prototipazione che abbia i connettori del bus ICSP (12€) o una millefori per i più temerari
- Cavi, cavetti, cavettini (va anche bene cannibalizzare uno spezzone di cavo di rete UTP Cat. 5), se mi date retta, fate in modo di avere i maschio/maschio (connettori di Arduino verso millefori), maschio/femmina (da millefori a display) e femmina/femmina (da ISCP a display), giusto per non trovarvi nel mezzo della notte a tagliare e saldare cavi vari (fatto)
- Saldatore
- Stagno
- Pazienza, tanta pazienza
- Un computer per poter sviluppare, sistema operativo indifferente
- L’IDE di Arduino
- Un alimentatore 5V tipo quello degli smartphone (più è piccolo, meglio è, ovviamente)
- Cavo MicroUSB per programmare l’Arduino e poi per alimentarlo
- Scatola dove mettere il tutto, io ho usato questa che è una comodità pazzesca, visto che l’ho messa nel quadro elettrico e che il display ci sta alla perfezione.
Arduino Yun
Se siete arrivati fino a questo punto non credo che abbiate paura ad attivare e configurare la vostra scheda Arduino Yun seguendo la guida ufficiale. Una volta pronto, l’Arduino sarà connesso alla rete WiFi di casa e potrete raggiungerlo via web. Vi consiglio caldamente di assegnargli un indirizzo IP statico, in modo che possa essere raggiunto e controllato facilmente in rete. Per fare questo dovete configurare il router di casa in modo che il DHCP server non assegni l’indirizzo scelto per l’Arduino (nulla di troppo difficile, ma dovete conoscere un po’ di pratica delle reti TCP/IP)
Montare il sensore
Il sensore di corrente ha bisogno di un piccolo circuito per essere collegato, nello specifico 2 resistenze ed un condensatore. Il sensore ha un jack tipo quello delle cuffie, quindi o lo tagliate e saldate i due fili sulla scheda o usate un jack femmina 3,5mm da scheda o volante
La sonda è un anello che va posizionato intorno a uno solo dei fili che arrivano nel salvavita, ma non sul filo di terra (quello giallo-nero). Non è necessario staccare la corrente, nè scollegare i fili, solo mettere l’anello intorno a uno dei fili. Fate sempre attenzione a lavorare vicino alla 220V!
La pinza amperometrica “legge” il campo elettromagnetico generato dal passaggio della corrente nel cavo (solo uno, se la mettete intorno a fase e neutro insieme i due campi si annullano e leggerete sempre zero), converte la lettura del campo in una variazione di tensione ai suoi capi. La porta analogica dell’Arduino legge il livello di questa tensione, quindi abbiamo una relazione diretta tra la corrente che passa e la tensione all’Arduino.
Il display
Ho usato un TFT LCD a colori, 1,7” da 120×160 pixel, piccolo, si legge bene e la scheda ci sta alla perfezione nella scatola da pannello. la connessione ad Arduino non è complessa, ma comprende tanti fili, inoltre c’è da fare attenzione nel montarlo sulla scheda Yun (dettagli più avanti).
La modalità di connessione alle varie schede Arduino è molto ben documentata nella pagina ufficiale, a seconda della scheda è indicato come collegare tutti i fili. Procuratevi i fili maschio-femmina così potete collegarli ai pin di Arduino (F) e ai pin del display (M), visto che non userete la breadboard (nelle scatole lo spazio è sempre poco). Se Usate Arduino Yun assicuratevi di avere 3 connettori femmina-femmina.
Questo lo schema di connessione per Arduino Uno (prendo l’immagine dal sito così dovesse mai andare offline, qui resterà)
Per Arduino Yun la connessione è sensibilmente diversa:
Ma, datemi retta, i due fili arancioni non collegateli sui pin 0 e 1 (in basso a destra nell’immagine), ma sui pin 2 e 3. Questo perché i pin 0 e 1 sono usati dalla porta seriale del processore di Arduino per comunicare con il Linux e usare quindi la WiFi (nottate passate a cercare di capire perché non andasse). I pin cel connettore ICSP in basso sono Maschio sulla scheda, per questo vi serviranno i fili femmina-femmina.
Il Codice
Lo sketch di Arduino che vi propongo è quello definitivo, quindi con tutte le funzioni attive, nello specifico:
- Attesa per non incartare il boot del linux (anche qui non potete capire il tempo passato a capire perché non partisse). Solo per Yun
- Configurazione e attesa avvio comunicazione seriale tra Arduino e Linux. Solo per Yun
- Inizializzazione display
- Lettura sensore
- Visualizzazione lettura
- Registrazione della media di 50 letture su server web. Solo per Yun
L’inizializzazione del display TFT varia tra le schede Arduino, ma si tratta solo di modificare i pin di connessione nella definizione del codice, come indicato nella guida ufficiale
// per Arduino Uno
#define CS 10
#define DC 9
#define RESET 8
// per Arduino Yun
#define CS 7
#define DC 2 //NON 0 come indicato nella guida!
#define RESET 3 //NON 1 come indicato nella guida!
// inizializzazione valida per entrambi
TFT myScreen = TFT(CS, DC, RESET);
Queste sono le uniche differenza tra i due metodi di connessione.
Lo sketch di Arduino lo trovate sulla mia pagina di Github, ovviamente siate liberi (ed invitati a farlo) di modificarlo e migliorarlo a vostro piacimento. Eventuali aggiornamenti del codice verranno pubblicati direttamente lì, questo post sarà aggiornato solo in caso di cambiamenti importanti.
Registrazione delle letture
Questo sistema può vivere di vita propria senza difficoltà, ma per poter gestire lo storico delle letture e poi farne un po’ di analisi, l’ho integrato con la mia centralina sul Raspberry Pi con la quale interagisco via Telegram, ancora non è pronto tutto, ma provvederò a pubblicare il server web sviluppato su Python e SQLite3 che si occupa di registrare le letture in modo che queste possano poi essere elaborate dal bot di Telegram (e in un futuro è previsto che il bot mi avvisi in caso di problemi). Arriverà qualche altro post con la descrizione e il relativo codice che troverete sempre su Github.
Arduino Yun ha una distribuzione Linux Lilino, con uno slot per una microSD, se non volete avere una centralina esterna, secondo me potete tranquillamente mettere SQLite sullo Yun e da qui fare un server web per visualizzare grafici e tutto quel che volete. Non l’ho mai fatto, ma non credo sia una cosa troppo difficile.
Futuri miglioramenti e sviluppi
Aggiungendo un buzzer si può creare un allarme in tempo reale che suona al superamento di una determinata soglia. Si dovrebbe prevedere anche un pulsante di mute.
Il display è versatile, con un po’ di codice credo si possa fare un grafico banale dell’andamento del consumo nelle 24h
Creando delle prese “attive” da spargere in casa, collegate alla rete WiFi si potrebbe intervenire sulla presa con più consumo, disattivandola, al superamento di una certa soglia.
Al superamento di una certa soglia la registrazione sul DB potrebbe avvenire direttamente e non allo scadere delle 50 misurazioni, in modo che la centralina possa dare l’allarme via Telegram.
Esportazione dei dati verso la piattaforma Google, per avere grafici di ogni genere e specie.
Bug noti
Il maledetto Arduino Yun non aggiorna lo sketch via WiFi. Credo perché il bridge è abilitato, questa cosa è oltremodo scomoda e mi obbliga a smontare tutto ogni volta che voglio fare una modifica al codice. Offro una birra a chi mi risolve il problema!
La gestione del refresh del display non è un granché, la cancellazione ad ogni lettura si vede troppo. Credo che con un po’ di lavoro sul codice questo problema possa essere gestito.
La lettura della pinza amperometrica va tarata, non c’è altro modo se non chiedere in prestito un Wattmetro e fare qualche prova. Il valore da modificare è alla riga 51 dello sketch “ct_calibration”:
// parametri di calibrazione per la pinza amperometrica
// la calibrazione va fatta a mano con l'aiuto di qualche strumento
// più preciso. Per me il '29' va bene.
const int volt = 220;
const float ct_calibration = 29;
Sicuramente la precisione non è al Watt, ma è molto indicativa su come stanno andando i consumi in casa o di quanto possa consumare uno specifico dispositivo.
Note finali
Mi raccomando, con la 220V si deve stare attenti, sempre!
Se volete risparmiare potete provare con un Arduino Uno e uno shield WiFi, se solo si trovassero comodamente in Italia (sono sconsolato dal fatto che Genuino in Italia abbia un assortimento di schede e shield davvero esiguo rispetto agli USA).
Se non trovate il display TFT LCD potete ripiegare con un display LCD 8×2 o 16×2 (HD44780), costa poco ed è veramente banale da gestire e collegare con Arduino con la libreria apposita.
Questo progetto non va bene per chi è alle primissime armi con i microcontrollori e con l’elettronica in generale, se non avete mai fatto nulla a riguardo iniziate con qualcosa di più semplice, lo starter kit di Arduino è il modo migliore.
Ho preso un po’ di informazioni, riferimenti e la libreria con la quale leggo i valori del sensore di corrente da questi due siti.
Il sensore scrive le registrazioni su un DB tramite un server web, del quale vi parlerò in un futuro post, un esempio delle elaborazioni interessanti che si possono fare è questo: esportando i dati in CSV li ho poi elaborati con un normale foglio di calcolo, questo è il confronto del consumo tra due cicli di lavatrice, il blu a 30°C, il rosso a 40°C
Buon divertimento!
Ciao,
sono un ingegnere elettronico e trovo interessante il tuo lavoro, tuttavia ho da farti alcune note:
– Nelle condizioni attuali non potrai mai avere una lettura di potenza precisa, e non è solo legato al fatto che devi calibrare il sensore di corrente, ma anche dovuto al fatto che la tensione di rete gliela passi in maniera statica (220 V) e questa invece sappiamo bene che non lo è e che addirittura nell’arco della giornata può variare (di solito è 230 V ma può anche essere un pò superiore o inferiore), pertanto le variazioni di tensione influiscono sulla lettura della potenza assorbita dai carichi, per non dimenticare del coefficiente di sfasamento che inizialmente potremmo fissare ad un valore di 0,9 che va moltiplicato assieme ai valori di tensione e corrente per avere una lettura più precisa.
– Per leggere la tensione di rete abbiamo bisogno di un’altra sonda da collegare su altro pin analogico di arduino (non esiste una sonda di tensione!), in realtà la potremmo o leggere direttamente a meno di un partitore di tensione che la riduce a livelli opportuni (e poi bisogna effettuare una taratura) avendo sempre cura di separare i riferimenti di massa (importante!), oppure usiamo un ADC (Analog to digital converter) che è un integrato che legge un segnale analogico (ebbene si, la corrente elettrica è proprio un segnale analogico di tipo sinusoidale a frequenza 50 Hz) mandandogli in ingresso il segnale ridotto in ampiezza, perchè non gli puoi mandare direttamente i 230V ma ti serve il solito partitore di tensione.
In giro per la rete ci sono tanti progetti, e io personalmente sto pensando ad una soluzione su come fare.
Diciamo che per sommi capi se riusciamo a ricavare il valore di tensione, lo possiamo dare in input al tuo codice, e completare il tutto.
Non so se ho reso l’idea
Ciao
Ciao Roul,
grazie delle precisazioni!
Il metodo migliore, a mio parere, è acquistare un dispositivo che si metta in mezzo e legga corrente e tensione, sicuramente il mio modo è approssimativo, ma lo trovo indicativo (da quando lo uso non mi è più successo di dover scendere in cantina per riattivare il contatore per un carico eccessivo) e confrontando i valori sulla bolletta sono lì vicini 🙂
Lo scopo del progetto era soprattutto non dover interagire con la 220V “al vivo”, cosa pericolosa anche per chi sa come maneggiarla (una saldatura sbagliata e fai danni).
Leggere la tensione comporta mettere un circuito lì per abbassarla e raddrizzarla in modo che sia nel range 0-5V in continua, se no Arduino non saprebbe interpretarla. la cosa è abbastanza pericolosa, come mi confermerai.
Se vuoi una lettura precisa esistono dei dispositivi che fanno già tutto loro, poi leggi il valore da Arduino via seriale: Questi qui. Se vuoi fare qualcosa di preciso senza dover impazzire con il circuito (impazzire, scusa, quello lo faccio io, per te non sarebbe così complesso, in effetti).
Grazie ancora per la precisazione, l’ho trovata molto interessante (alla cosa dello sfasamento non avevo minimamente pensato)
ciao scusate se mi permetto di dire la mia.
E’ un pò di tempo che sto guardando in giro per creare un sistema che legga la tensione, corrente, potenza e altri valori elettrici di casa in aggiunta alla lettura della potenza generata con il FV.
questo per poter comandare una resistenza nel boiler per scaldare l’acqua così da bruciare tutta la potenza in eccesso ed annullare quasi del tutto lo scambio sul posto.
Ora tutto funziona con raspberry tramite il programma che ha creato flanesi con Metern e 123solar.
questo il link al progetto perchè non voglio meriti che non sono neache lontanamente miei
http://www.flanesi.it/forum/viewtopic.php?f=5&t=1879
Purtroppo vorrei riuscire a creare qualcosa tramite esp8266 perchè a mio avviso il sistema è più robusto rispetto al raspberry.
tutto questo mediante l’uso di :
– esp8266
-contattore estron sdm120c
-comunicazione per la lettura dati su un server che utilizzi telegram come messaggisticacosi da rendere sicuro il tutto.
putroppo le mie conoscenze di c sono un pò scarse. :-/
spero magari si possa collaborare .
ciao
Ciao Davide,
grazie per il tuo contributo, il link è molto interessante.
Raspberry ed ESP8266 sono due code molto diverse e secondo me non confrontabili in questa accezione. Potresti trovare sicuramente fonti di informazione nel gruppo telegram di Geekcookies, uno dei miei due podcast
Ciao potresti spiegarmi il funzionamento del circuito del trasformatore amperometrico?
Per quanto ne so l’ingresso analogico di arduino legge in tensione continua
la pinza amperometrica da data sheet
Input Current: 0~100A AC
Output Mode: 0~50mA in alternata
quindi in uscita dalla pinza avrò 50 mA quando 100A.
Come si faccio a leggere i 50 mA su arduino. Non serve una resistenza in parallelo alla pinza e un diodo per portare in continua la tensione?
Grazie
saluti
Ciao Giorgio,
con il tempo purtroppo a volte gli shop cambiano prodotti, ma non il link. Il prodotto che ho usato è un SCT-013-030, se cerchi il datasheet l’output è 0-1V relativo a 0-30A: http://www.mcielectronics.cl/website_MCI/static/documents/Datasheet_SCT013.pdf
Grazie della segnalazione, correggo il link al prodotto!
Ciao Francesco
sono molto intressato al tuo progetto,
il problema che non sono molto esperto cor Arduino avevo già costruito un controllo di tensione e assorbimento con 2 TA da 30A un trasformatore 220 -9v e un lcd 16×2 ma non funziona come vorrei
Ti chiedo se gentilmente puoi aiutarmi ho a disposizione anche due tft da 1,77 ” e 2,4″
grazie
Sai che non ho capito? Cosa hai usato come microcontrollore?
Salve a tutti,
Volevo portare la mia esperienza, per quanto riguarda la lettura dei consumi.
Io ho utilizzato il sistema di lettura del lampeggio led contattore enel, vi assicuro che il sistema è molto preciso e di facilissima implementazione con Arduino.
E’ ormai diversi anni che sto usando questo sistema e non ho problemi di sorta.
Evita qualsiasi interferenza e problematica legata all’utilizzo della tensione 220V
Un saluto
Ciao Massimo!
Grazie del tuo contributo! Ha un link da cui partire per vedere come funziona il led del contatore? (questa cosa non la sapevo)
Purtroppo da me il contatore sta in cantina in una sala condivisa e senza prese, quindi per me non sarebbe praticabile. Però l’idea di legger ein base al LED mi interessa parecchio
Ciao!
Ciao, ma in caso usassi un 0-20A cosa devo modificare all’interno dello scketch ?
Ciao, in caso avessi acquistato il sensore da 20A invece che 30A cosa devo modificare nel codice ?
Ciao, dovrei andare a vedere i datasheet per capire se la risposta in corrente è la stessa, è un progetto che ho fatto anni fa, non mi ricordo mica 😀