Leggiamo i consumi dal contatore di energia elettrica con Arduino

In attesa dell’arrivo dei nuovi contatori di energia elettrica proviamo ad usare Arduino per tenere sotto controllo i consumi elettrici.

In rete si trovano diversi progetti per leggere i consumi, qui proviamo ad usare un approccio diverso che ci consentirá di fare un primo passo verso un sistema di domotica più completo.

contatoreEcco un’immagine di un contatore, alla sinistra del visore LCD trovate due led rossi che emettono mille lampi ogni kilowattora consumato. I LED sono due perché quello in alto indica l’energia attiva mentre quello in basso l’energia reattiva.

Il principio di funzionamento del sistema di lettura é questo: per rilevare i lampi useremo un fototransistor collegato ad un ingresso digitale di una scheda Arduino Mega2560. L’aspetto interessante é che agganceremo l’ingresso digitale ad un interrupt, questa tecnica ci consentirá di mantenere la CPU di Arduino libera per altri compiti futuri. Altri articoli che ho trovato in giro fanno uso di una fotoresistenza ed un ciclo continuo di letture per determinare l’istante del lampo ma cosí facendo la CPU e’ impegnata costantemente per un compito banale ed inoltre la fotoresistenza che viene utilizzata ha un tempo di reazione molto superiore al fototransistor.

Hardware

Lo schema di collegamento é molto semplice, faremo uso di una scheda Arduino Mega 2560 (https://www.arduino.cc/en/Main/ArduinoBoardMega2560) in modo da avere spazio in futuro per inserire nuove funzioni.

I pin utilizzati per la lettura sono il 18 ed il 19, tutti e due in grado di essere agganciati ad un interrupt.

fototransitorPer rilevare i lampi dei led servono due fototransistor inseriti in un piccolo tubicino plastico che consenta di evitare di rilevare la luce ambiente.Nel mio caso ho utilizzato uno spezzone di guaina ed ho accoppiato il contatore al fototransistor con un po’ di colla a caldo.

opto2

Software

Il software di base per gestire le letture é questo, potete utilizzarlo cosí com’é e prendere spunto per un progetto più completo, secondo le vostre esigenze. In ogni caso questo diventerá il primo mattone di un sistema domotico per tenere sotto controllo temperature, umiditá, pressione atmosferica, apertura porte ed altro ancora.

#define BAUD 9600 // Baudrate per comunicazione seriale
#define LOOPRATE 60000 // La stampa delle letture avviene ogni 60 secondi 
volatile unsigned int ReactPower = 0;
volatile unsigned int RealPower = 0;

void setup() {
 Serial.begin(BAUD);
 // Definizione dei pin di input
 pinMode(18, INPUT);
 pinMode(19, INPUT);
 // Associazione delle routine di interrupt ai pin di input 
 attachInterrupt(digitalPinToInterrupt(18), countReal, RISING);
 attachInterrupt(digitalPinToInterrupt(19), countReact, RISING);
}

void loop() {
 // Stampa il valore dei contatori ogni 60 secondi
 Serial.print("ReactPower = ");
 Serial.println(ReactPower);
 Serial.print("RealPower = ");
 Serial.println(RealPower);
 // Azzera i contatori
 ReactPower = RealPower = 0;
 delay(LOOPRATE);
}

// Ad ogni lampo incrementa un contatore
void countReal() {
 RealPower++;
}

// Ad ogni lampo incrementa un contatore
void countReact() {
 ReactPower++;
}