Aiuto per misuratore di corrente potenza

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

grazie

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. :wink:

Guglielmo

Ciao, poco tempo avevo il tuo stesso quesito. Ora l'ho risolto :grin:. Dai un occhio qui :

Array e millis come funzionano insieme?

Leggilo tutto perché in realtà non c'è una sola soluzione :wink:

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 :smirk:

grazie pero non mi è chiaro come faccio ad avere il Kwh totali
come questo in figura

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*/

ciao

Claudio.

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.

Leggi qui per saperne di più.

Ciao.

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:
lagrida_latex_editor
se le grandezze in questione sono alternate e sinusoidali perché questa:
lagrida_latex_editor (1)
è 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

Spero di essere stato chiaro ed esaustivo
Alan

@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ì:

... praticamente illegibile :wink:

Conviene sempre convertire in .jpg con sfondo bianco. Grazie :slight_smile:

Guglielmo

Scusa le ho scaricate dal editor di LaTex ora provvedo
@gpb01 meglio?
Alan

... perfette :slight_smile:

Guglielmo

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.