Progettiamo un Energy Meter con ESPertino

Un dispositivo in grado di misurare gli assorbimenti di potenza di una qualunque apparecchiatura collegata alla rete elettrica rappresenta senza ombra di dubbio un’applicazione utile e vantaggiosa. Se da un lato è infatti possibile monitorare gli assorbimenti dei carichi più critici (come gli elettrodomestici), dall’altro le misure ottenute possono essere confrontate con i valori dichiarati dal produttore, determinando quindi i consumi effettivi e reali. Scopriamo in questo articolo come realizzare un energy meter utilizzando la scheda ESPertino, che ci permetterà di acquisire, memorizzare, e visualizzare le principali grandezze legate all’assorbimento di potenza

Introduzione

La progettazione di un energy meter (o misuratore di energia, in italiano) può sembrare a prima vista un compito piuttosto arduo, che richiede delle approfondite conoscenze in campo elettrico. In realtà, come vedremo nell’articolo, seguendo un approccio al problema di tipo graduale, e soprattutto analizzando ogni singolo passo, chiunque abbia delle conoscenze basilari di elettronica ed elettrotecnica può cimentarsi nella realizzazione di questo progetto.

Lo scopo del progetto è quello di realizzare un dispositivo che, in modo non invasivo e tramite un opportuno isolamento dalla rete elettrica, sia in grado di misurare il valore efficace (detto anche valore RMS, acronimo di Root Mean Squared) sia della corrente che della tensione di rete, derivando poi da questi altre misure quali: potenza apparente, potenza reale, e fattore di potenza. I valori numerici di queste grandezze verranno visualizzati in tempo reale su un comodo display LCD, e periodicamente memorizzate su una scheda di memoria SD per una successiva analisi e interpretazione dei dati storici.

Nel corso degli ultimi anni abbiamo assistito a una proliferazione dei progetti Do-It-Yourself (DIY), con una comunità di maker in continua crescita grazie soprattutto al successo ottenuto dalla piattaforma di prototipazione rapida Arduino. Proprio per Arduino è stata sviluppata una libreria (EmonLib) che si occupa di eseguire tutti i calcoli e le trasformazioni richieste da un misuratore di energia. Il progetto proposto in questo articolo segue un approccio analogo, questa volta basato sulla scheda ESPertino (visibile in Figura 1), espressamente progettata per le applicazioni IoT e quindi anche i sistemi di misura. Utilizzeremo una versione della libreria EmonLib leggermente modificata e adattata per riflettere l’architettura hardware di ESPertino, che sappiamo non utilizza un microprocessore AVR come la maggior parte delle schede Arduino, ma bensì un Tensilica LX6 dual core. Oltre alla libreria, il software è composto da uno sketch che potrà essere compilato e scaricato sulla scheda utilizzando l’ambiente di sviluppo Arduino IDE. Un approccio alla progettazione molto semplice e intuitivo, quindi, nel pieno rispetto della filosofia Arduino ed open source.

Figura 1: la board di prototipazione rapida ESPertino, particolarmente indicata per le applicazioni IoT

Nel prossimo paragrafo esamineremo più in dettaglio il progetto, analizzandone il principio di funzionamento e le principali componenti hardware. Nei paragrafi successivi vedremo invece come funzionano, come vanno collegati, e come calibrare i sensori utilizzati per acquisire i valori di corrente e tensione alternata. Seguiranno l’analisi della componente software del progetto (libreria EmonLib rivista, e sketch Arduino-like). Chiuderanno l’articolo alcune considerazioni riassuntive, completate dal suggerimento per possibili espansioni ed ampliamenti futuri del progetto originale.

Il progetto

Il modo più semplice ed immediato di presentare il progetto è attraverso il suo schema a blocchi, che possiamo osservare in Figura 2.

Figura 2: schema a blocchi del misuratore di energia proposto nell’articolo

Il sistema è composto dalle seguenti cinque componenti:

  1. la board ESPertino, equipaggiata con il modulo ESP-Wroom-32 di Espressif Systems;
  2. un sensore (trasformatore di tensione) in grado di misurare la tensione alternata di rete. Prima di presentare questo segnale in ingresso all’ADC occorre applicare ad esso un opportuno condizionamento del segnale (signal conditioning) in modo tale da renderlo compatibile con le caratteristiche degli ingressi del convertitore analogico-digitale;
  3. un sensore (trasformatore di corrente) in grado di misurare la corrente alternata di rete. Valgono anche in questo caso le stesse considerazioni sul condizionamento del segnale fatte a proposito del trasformatore di tensione;
  4. un modulino con scheda di memoria SD, collegata ad ESPertino tramite interfaccia SPI, utilizzata per memorizzare i dati storici relativi agli assorbimenti di tensione, corrente, e potenza;
  5. un comune display LCD, 2 righe x 16 caratteri, utilizzato per la visualizzazione dei valori istantanei delle misure di tensione, corrente, e potenza reale. Il display è collegato alla scheda ESPertino tramite interfaccia I2C (risparmiando quindi qualche segnale rispetto al collegamento classico parallelo).

Il funzionamento del dispositivo è molto semplice: i sensori acquisiscono dalla rete, su una finestra temporale opportunamente definita, i valori di corrente e tensione alternate, i quali vengono convertiti in valori numerici dagli ADC del modulo ESP32 (o meglio, da due distinti canali appartenenti all’ADC1). Il software provvede a gestire la logica di controllo dell’acquisizione, calcolare le grandezze richieste (VRMS, IRMS, potenza reale, potenza apparente, e fattore di potenza), e gestire sia la visualizzazione su display LCD che l’aggiornamento degli storici sulla scheda SD (quest’ultima operazione viene eseguita ogni 60 secondi). Vediamo ora di esaminare in dettaglio la parte hardware del progetto, in particolare i due sensori e la modalità di interfacciamento con la scheda ESPertino delle cinque componenti hardware elencate in precedenza.

ADC e tensione di riferimento

Il modulo ESP32 include due ADC di tipo SAR (Successive Approximation Register) a 12 bit, ciascuno composto da 9 canali. Attualmente il framework di sviluppo rilasciato da Espressif supporta solo l’ADC1, i cui canali sono collegati ai GPIO 32-39. Come indicato nello schema a blocchi di Figura 2, abbiamo scelto il GPIO 36 per il sensore di corrente, e il GPIO 39 per il sensore di tensione. Il valore di default della tensione di fondo scala dell’ADC è pari a 1,1 V, dove per tensione di fondo scala si intende la tensione corrispondente alla massima lettura dell’ADC (nel nostro caso: 212=4096). Se si vogliono leggere valori di tensione superiori (fino al valore massimo di 3,3 V sopportato dai pin analogici), occorre impostare l’attenuazione del pin secondo la seguente tabella:

Livello di attenuazione Tensione di fondo scala dell’ADC
0 dB 1,1 V
2,5 dB 1,5 V
6 dB 2,2 V
11 dB 3,9 V

 

Nel software dovremo quindi impostare l’attenuazione dei GPIO 36 e 39 a 11 dB. Si noti come, in tale caso, la tensione di fondo scala dell’ADC venga limitata dal valore presente sulla linea di alimentazione VDD_A (3,3 V), e pertanto il valore di 3,9 V non verrà mai raggiunto. A livello hardware sarà comunque richiesta la progettazione di un opportuno circuito di condizionamento, in modo tale che il segnale in ingresso all’ADC abbia un’ampiezza picco-picco inferiore a 3,3 V.

Il trasformatore di tensione

Per eseguire il calcolo della potenza reale, apparente, e del fattore di potenza, occorre ricevere in ingresso la tensione di rete, opportunamente condizionata a livello elettrico. Il modo più semplice e sicuro per ottenere questa misura è quello di utilizzare un adattatore di rete AC/AC, analogo a quello mostrato in Figura 3. Al suo interno è presente un trasformatore che garantisce l’isolamento dalla rete elettrica, rendendo disponibile sull’avvolgimento secondario (collegato allo spinotto o jack di uscita) una tensione alternata di ampiezza ridotta rispetto ai circa 230 VAC della rete elettrica. I parametri che ci interessa sapere di questo adattatore sono due: tensione di uscita nominale e tensione di uscita a vuoto. La tensione nominale è riferita alla condizione tipica di utilizzo dell’adattatore, quindi con carico collegato. Senza alcun carico (come avviene nel nostro caso, dove siamo interessati soltanto al monitoraggio) la tensione è in genere superiore di circa il 20-25% rispetto al valore nominale.

Figura 3: un adattatore AC/AC

Circuito di condizionamento

L’obiettivo di questo circuito è fare in modo che l’uscita dell’adattatore (che utilizzeremo per risalire al valore della tensione di rete) si adatti elettricamente all’ingresso dell’ADC: sarà quindi necessario convertirla in una tensione positiva compresa tra 0 V e 3,3 V (tensione di riferimento dell’ADC). Prendiamo come esempio un tipico adattatore con uscita pari a 9 VRMS, e tensione a vuoto di 11,2 VRMS. La tensione di picco si ottiene moltiplicando quest’ultima per la radice di 2, ottenendo un valore di 15,8 V. Moltiplicando quest’ultima per 2, si ottiene la tensione picco-picco, pari a 31,6 V. Il circuito, visibile in Figura 4, dovrà pertanto scalare la tensione dell’adattatore, e aggiungere un opportuno offset in modo tale da eliminare la componente negativa. Lo scalamento si ottiene tramite un partitore di tensione (R1/R2), mentre l’offset viene aggiunto utilizzando un altro partitore di tensione (R3/R4) applicato alla tensione di alimentazione di 3,3 V. Il condensatore C1 svolge soltanto una funzione di disaccoppiamento, creando un percorso verso massa di bassa impedenza per il segnale alternato. R1 e R2 devono essere scelte in modo tale che la tensione in uscita dal partitore sia di circa 1 V. Il segnale in ingresso all’ADC avrà ora un’ampiezza compresa tra circa 0,2 V e 3,09 V, quindi all’interno del range ammissibile.

Figura 4: circuito di condizionamento del segnale relativo alla tensione

Calibrazione

Il software, di cui parleremo in seguito, avrà il compito di eseguire la lettura dall’ADC, e da questa risalire al valore della tensione di rete. Per fare ciò, il programma dovrà rimuovere l’offset di tensione introdotto dal circuito di condizionamento, e applicare un opportuno fattore moltiplicativo (il fattore di calibrazione), espresso dalla seguente formula:

VCAL = VRETE / (RPARTITORE * (VADATTATORE * RADATTATORE)

dove:

VRETE = 230 V è il valore nominale della tensione di rete

RPARTITORE = 1/11 è il rapporto del partitore di tensione formato da R1 e R2

VADATTATORE = 9 V è la tensione di uscita nominale dell’adattatore

RADATTATORE = 1 + 20% = 1,20 - è la costante che moltiplicata per la tensione nominale dell’adattatore determina la tensione a vuoto dello stesso (supponendo una variazione del 20%).
[...]

Iscriviti e ricevi GRATIS
Speciale Pi

Fai subito il DOWNLOAD (valore 15€) GRATIS

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2620 parole ed è riservato agli abbonati MAKER. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici MAKER e potrai fare il download (PDF) dell'EOS-Book del mese. ABBONATI ORA, è semplice e sicuro.

Abbonati alle riviste di elettronica

5 Commenti

  1. Maurizio Di Paolo Emilio Maurizio Di Paolo Emilio 22 agosto 2017
  2. Davide Di Gesualdo Davide Di Gesualdo 22 agosto 2017
    • Stefano Lovati Stefano Lovati 22 agosto 2017
  3. Giovanni Di Maria Giovanni Di Maria 23 agosto 2017
  4. Massimo Spiezia Massimo Spiezia 30 agosto 2017

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Iscriviti e ricevi GRATIS
Speciale Pi

Fai subito il DOWNLOAD (valore 15€) GRATIS