salve
sto utilizzando il sensore SCT-013-030 per misurare la corrente per ricavare il consumo energetico con questo sketch
#include "EmonLib.h"
#include <Wire.h> // Libreria wire già presente in Arduino ide
#include <LiquidCrystal_I2C.h> // Libreria display I2C
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
EnergyMonitor emon1;
//Inserire la tensione della vostra rete elettrica
int rede = 230.0; // Italia 230V in alcuni paesi 110V
//Pin del sensore SCT su A1
int pin_sct = 1;
void setup()
{
lcd.begin(16, 2);//Inizializzazione display
lcd.clear();
Serial.begin(9600); //Apro la comunicazione seriale
//Pin, calibrazione - Corrente Const= Ratio/Res. Burder. 1800/62 = 29.
emon1.current(pin_sct, 29);
//Informazioni iniziali display
lcd.setCursor(0,0);
lcd.print("Corr.(A):");
lcd.setCursor(0,1);
lcd.print("Pot. (W):");
}
void loop()
{
//Calcolo della corrente
double Irms = emon1.calcIrms(1480);
//Mostra il valore della Corrente
Serial.print("Corrente : ");
Serial.print(Irms); // Irms
lcd.setCursor(10,0);
lcd.print(Irms);
//Calcola e mostra i valori della Potenza
Serial.print(" Potenza : ");
Serial.println(Irms*rede);//Scrivo sul monitor seriale Corrente*Tensione=Potenza
lcd.setCursor(10,1);
lcd.print(" ");
lcd.setCursor(10,1);
lcd.print(Irms*rede,1); //Scrivo sul display Corrente*Tensione=Potenza
delay(1000);
}
vi chiedo come posso calcolare il consumo nel tempo? ad esempio vorrei sapere quanti Kw ho consumato in 1 mese io ho la potenza istantanea che logicamente varia nel tempo
Prima che qualcuno obietti qualche cosa sul fatto che si parla di 230V ... quello è un sensore NON invasivo che NON richiede di tagliare fili e mettere le mani direttamente su di essi per applicarci un qualche cosa.
birrohgt, che è un vecchio utente, sa benissimo che se non fosse stato così qui NON ne avrebbe potuto parlare.
in quel post parla di somme e medie di valori nelle 24 ore fin qui ok
ma a me non mi è chiaro come dalla potenza istantanea che mi legge come faccio a fare i calcoli per provare i kw che quel elettrodomestico mi ha consumato fino a oggi da quanto e stato acceso
non so se mi sono spiegato ( penso che sia una cosa diversa dal tuo post mi serve di capire che fa il contatore della corrente elettrica che abbiamo tutti a darmi la potenza totale consumata)
Si, avevo capito. Considera il mio livello generale e quindi potrei sbagliare, ma a me funziona.
La logica sarebbe questa : stabilisci un intervallo di tempo tra le letture ottenute (io ho scelto ogni tre minuti) e le sommi ; a fine giornata avrai ottenuto 480 valori perciò potrai avere una media giornaliera che inserita in un Array ( di trenta valori/giorni) potrà restituirti una media mensile.
Potresti anche utilizzare le funzioni date/time della libreria RTC, ma dovrai aggiungere e configurare il relativo modulo.
Per avere i kWh ti basta una moltiplicazione
Utilizzando per un’ora intera un carico da 800 W, verranno consumati 800 W, cioè 0,8 kW; se lo si usa per mezz’ora, i Watt consumati saranno 400 (0,4kwh) per due ore 1600w (1,6kwh). Puoi decidere se trasformare i Watt in kWh prima di accumularli nell'Array o dopo.non cambia nulla.
quindi se faccio delle letture di corrente assorbita ogni secondo (perche assorbimento non è fisso per delle ore come mi hai fatto nel esempio ma cambia di continuo) come faccio crearmi il kwh consumati totalmente (quel totale che mi fa quello strumento in foto)
Ti allego lo sketch su cui sperimento.
Spero sia corretto , nel caso non lo sia...correggetemi e ve ne sarò grato.
#define PERIODO_ACQ 1000 //definizione del tempo di pausa
unsigned long lastMillisAcq = 0; //azzero tempo di incremento dalla pausa
float wattist = 0.0; //variabile watt istantanei
float watt24 = 0.0; //variabile watt calcolata in 24 ore
int sensore = 1; //variabile lettura dal sensore
int i = 0; //variabile di incremento
void setup() {
}
void loop() {
if ( millis() - lastMillisAcq > 1000) { //se trascorsi 1 secondo esegui
lastMillisAcq = millis(); //come sopra
wattist += sensore; // accumulo le letture
i++; // incremento il contatore , sommo i valori
Serial.println(i); //tengo traccia delle letture in tempo reale
}
if (i == 86400) { //quando i è uguale a 40
watt24 = wattist / 86400; //posso calcolare il valore medio
}
if (i == 86400) { //se è uguale a 40
i = 0; //riporto a zero i valori , pronto per un nuovo ciclo
wattist = 0; //riporto a zero i valori , pronto per un nuovo ciclo
}
}
/*poi crei un array ,della dimensione che ritieni opportuna, in cui inserirai i valori di watt24 che poi potrai usare per avere la media*/
Intanto quello che ti ha suggerito @lcdsun è ok, anche se rozzo e va adattato al caso specifico. La libreria emon (credo) esegue 50 letture nel periodo di 20ms, ne ricava la media e la restituisce. 100 letture se si monitora solo la corrente. 20ms dura un periodo della forma d'onda sinusoidale a 50Hz (50 cicli per secondo) infatti 1/50 = 0.02s, questo vuole dire che ci sono 50 periodi in un secondo. Tu usi la variabile rede (forse voleva essere rete) che contiene 230.0 è quindi la devi dichiarare float e non int.
Ora se ogni secondo la corrente media è di 4.35A a 230V Pw = 230 x 4.35 = 1000,5W (1kW). La potenza in wattora vale Pwh = Pw / 3600 = 0,2779Wh. Se accumuli in Pwh 3600 letture ogni secondo ottieni il consumo di energia in un ora, ad esempio
pwh = pwh + (Irms * rede / 3600.0);
Dopo 3600 letture pwh vale 0,277916667 x 3600 = 1000,5Wh.
Ora il problema è: IRMS è la corrente media in un secondo?
Perché per essere precisi deve esserlo.
Ciao,
suppongo che tu sia misurando in regime alternato sinusoidale
ora non so esattamente il livello di precisione che vuoi ottenere, non so che tipo di carico sia, però posso dire che in genere:
se le grandezze in questione sono alternate e sinusoidali perché questa:
è la formula corretta della potenza attiva in regime Alternato Sinusoidale che vale sempre.
Ora non so che basi tu abbia di elettrotecnica, comunque se il carico che stai misurando è una resistenza l'errore che commetti è trascurabile mentre se NON stai misurando resistenza allora l'errore diventa molto rilevante.
Altra piccola parentesi riguardante la precisione, occhio che di questi tempi le armoniche e le distorsioni di forma d'onda sono all'ordine del giorno e anche queste influiscono sulla precisione dello strumento.
Per la questione di Energia ti ho scritto due paginette di teoria per capire come fare a calcolarne il valore approssimato; Misurare Energia.pdf (195.8 KB)
Detto questo quello che @Maurotec ha detto è esatto, infatti 1 sec = 1/3600 h quindi direi che per calcolare il tuo valore di Energia devi fare una cosa del genere:
float energy;
void setup(){
...
}
void loop(){
...
// misuri la potenza
energy += (power / 3600);
...
}
In questo caso la misura che fai però è dal momento che accendi Arduino oppure dal primo istante che la potenza messa in gioco diventa diversa da 0
EDIT: per la parte legata alla misura della potenza le modifiche non sono banali e necessitano di valutare anche la tensione
@alanmasutti: cortesemente, quando inserisci immagini, assicurati che NON siano .png trasparenti perché, chi ad esempio usa il tema "dark" (come il sottoscritto), vede quello che metti così: