Sensore di corrente SCT-013-030 ed Emonlib

Vi spiego più o meno brevemente il mio attuale progettino e quindi il problema riscontrato.

Per realizzare un misuratore della produzione del mio impianto fotovoltaico utilizzavo un misuratore e2 della efergy che tramite connessione wireless mi consentiva di avere in casa un display con la potenza istantanea e memoria interna per le statistiche.

Il ricevutore ha anche una porta USB per scaricare i dati e visualizzare grafici, quindi è veramente utile e lo consiglio.

Il problema è che il formato di questi dati che si ottengono via USB è proprietario ossia non ci sono specifiche, e si vedono solo tramite il software in dotazione. Ho comunque trovato il modo di estrarli ma è una cosa molto manuale: devo collegare il ricevutore alla USB del PC, aprire il software, attivare il download, fare il backup dei dati, quindii con un programmino che ho fatto in C# acquisisco i file così prodotti e li converto in CSV che collego ad un foglio dove posso elaborarli e riorganizzarli.
Volendo creare qualcosa di più automatico, ho preso un SCT-013-030 (30A di corrente massima, 1V di segnale, resistenza burden da 62 Ohm interna) che ho collegato al posto della pinza dell' Efergy, quidni connesso ad un Arduino UNO come da schema classico (col partitore di tensione ossia 2 resistenze da 10k, più condensatore da 100nF) per portare a 2.5V la base della tensione del sensore amperometrico.

Tutto ok, ma per capire come misurare e tarare la lettura ho fatto, come di mio consueto, prima una prova separata, ossia con un apposito sketch, solo la pinza collegata ad uno dei cavi della una prolunga, ed un misuratore di consumi a Schuko passante che uso per monitorare l'energia accumulata dal mio scooter elettrico in ricarica (quindi già collaudato ed affidabile).

Uso la libreria Emonlib, ovviamente, e questo è lo sketch di test:

#include "EmonLib.h" 
 
EnergyMonitor emon1;
 
// Italia 230V
#define RETE 230.0
 
//Pin del sensore SCT su A1
#define SENS_CORRENTE A1
 
void setup() 
{
  Serial.begin(115200);   //Apro la comunicazione seriale

  // Qualche lettura a vuoto per stabilizzare
  Serial.print("Calibrating...");
  for (int i=1; i<=4; ++i)
    analogRead(SENS_CORRENTE);
  delay(500);
  // Pin, calibrazione - Corrente Const= Ratio/Res. Burden 1800/62 = 29. 
  emon1.current(SENS_CORRENTE, 29); 
  Serial.println();
} 
  
void loop() 
{ 
  // Calcolo della corrente e potenza
  double Irms = emon1.calcIrms(1480);
  // Ignoro correnti piccole (<30W)
  if ( Irms <= 0.13 ) Irms = 0;
  // Calcolo la potenza ed approssimo (precisione=10W)
  int watt = (Irms*RETE)/10; // Corrente*Tensione=Potenza 
  watt = watt * 10;
  
  // Mostra i valori
  Serial.print(Irms,2);
  Serial.print(" ");
  Serial.println(watt);

  delay(1000);
}

A me, come vedete dal listato, non interessa avere una misura precisa al Watt, mi basta una precisione anche solo di +/-50W, anche considerando la precisione della pinza amperometria, del convertitore A/D di Arduino, e del calcolo della corrente RMS.

A quel punto ho collegato un phon ed acceso alla massima potenza, per confrontare la potenza mostrata nel display con quella della pinza amperometrica ed ho riscontrato una differenza ben maggiore di quello che mi aspettassi: a fronte di un consumo di 1.700W del phon l'SCT mi dava solamente 950W ossia un 44% in meno! Ovviamente ho fatto varie prove, e so bene che la misurazione dipende dal tipo di carico e dalla tensione di rete per cui non mi aspettavo una precisione assoluta, mi andava bene pure un delta di 100-150W, ma qui la differenza mi pare eccessiva visto che siamo a 750W di differenza!

Ho quindi provato ad aggiungere un fattore di correzione pari a 1700/950 ossia moltiplico per 1.79 la corrente misurata da emonlib, ed in queste condizioni le letture più o meno rientrano nel range che mi sarei aspettato di vedere senza fattore di correzione.

Collegato poi il misuratore ad un cavo dell'uscita dell'inverter al posto della pinza dell'Efergy, noto che la differenza tra la misura rilevata e quella mostrata dal pannello LCD dell'inverter è ancora più marcata ma anche apparentemente poco lineare ossia a basse potenze la differenza è poco rilevante (es. misura 150W invece di 200W), mentre ad esempio con una produzione di 3.100W l'SCT misurava 2.900 nonostante la presenza del fattore di correzione a 1.79.

Per cui mi (e vi) chiedo: avete idea di come mai la misura da parte dell'SCT è così diversa da quella del misuratore di consumi? Se qualcuno di voi ha realizzato un misuratore di consumi (o produzione come nel mio caso) con lo stesso SCT-013-030 ha una precisione maggiore? Avete fatto prove come quelle che ho fatto io, e con quale esito?

Ma lo sfasamento tra tensione e corrente lo misuri? ... non mi sembra di vederlo nel codice ... ::slight_smile:

Guglielmo

No, infatti, non lo faccio, per me potrebbero essere anche fissi i parametri di tensione e sfasamento ma penso/spero che lo faccia la libreria EmonLib visto che ha un primo metodo di sua calibrazione ("emon1.current();") che dovrebbe fare questo. Inoltre la lettura della corrente ("emon1.calcIrms()") dovrebbe campionare la forma d'onda e da questa calcolare la corrente RMS.

Anche se poi mi ha "sballato" pure con un semplice phon (con valori sempre inferiori, come detto, di un buon 45%), nel mio caso trattandosi di produzione da un inverter e non un normale consumo da parte di apparecchi, sospetto che la calibrazione che fa la libreria possa non essere proprio corretta almeno nel mio caso. Ma considera che anche l'Efergy non ha alcun parametro impostabile se non la sola tensione di rete, ma il suo calcolo era quasi identico a quello dell'inverter stesso (con un errore che ho stimato attorno ad un 5% massimo, per me accettabile).

Quindi forse qualcosa c'è comunque da considerare o fare. Ma cosa?

Ad esempio in QUESTO sito fanno una cosa simile alla mia, ma dichiarano che "Il sensore e la lettura risultano accurati, con una percentuale di scarto di 2-5W", per cui non capisco perché invece a me vengono fuori valori così differenti dal reale.

Magari provo a studiare meglio come funziona internamente la EmonLib, vediamo se ne cavo qualcosa di utile, ma certo, considerando che invece di farmi io i calcoli usando il solo analogRead ho voluto usare una libreria proprio per non dovermi stare ad impicciare con queste considerazioni... :wink:

HELP!

Confermo intanto che il problema persiste, ho dovuto mettere un fattore di correzione del totale che moltiplica la corrente per avere un valore simile a quello mostrato del display dell'inverter, ma non va comunque bene perché "sballa" come se il rapporto non fosse costante.

Per dire, io leggo 3.100W come produzione ma dal sensore ottengo un valore di corrente che, moltiplicato per la tensione di rete (230), mi dà 1.770W, quindi introduco una "pezza", un fattore di correzione pari a 3100/1700=1.750. Ma fatto questo, ad altre potenze ottengo comunque valori discordanti, ad esempio poco fa con 2.300W il sensore (con tanto di correzione) mi dice 1.700W, il che porterebbe ad un fattore di correzione addirittura di 2.36!

Insomma, non mi spiego perché ci sia tutta questa differenza e che la differenza non sia lineare. Il fatto che io stia misurando l'energia prodotta dall'impianto fotovoltaico non dovrebbe influire (o almeno non così tanto) visto che con il misuratore Efergy avevo un valore di potenza quasi coincidente con quello (più preciso sicuramente) del display dell'inverter.

Cosa sto sbagliando secondo voi? Perché invece di uno scarto di qualche Watt arrivo ad avere valori sempre inferiori al reale, e approssimativamente sempre circa la metà (e che comunque se fosse costante sarebbe risolvibile con la "pezza")?

Ci provo per l'ultima volta, poi se nessuno mi sa dire nulla dovrò trovare altre soluzioni.

Possibile che qui nessuno abbia mai utilizzato il sensore di corrente SCT-013?
Dai, su, non ci posso credere...

Io continuo a misurare valori inferiori al reale all'incirca di un 70% per cui la lettura devo moltiplicarla per 1.7 per avere un valore "plausibile" ma apparentemente non affidabile (vedi mio post #3 qui sopra), cosa assolutamente non accettabile.

E' il mio sensore a non essere ben funzionante (perché a voi funziona correttamente, anche con il semplice sketch che ho indicato), o sbaglio io a fare qualcosa?

Lo sketch ve l'ho messo, il link al sensore l'ho messo, lo schema di connessione ve l'ho descritto, ora me la date sta maledetta carta igienica? (cit.):wink:

Guarda parecchi anni fa ormai avevo provato anch'io ad usare quel sensore ma con scarso successo (più o meno valori come i tuoi e comunque non affidabili) e ho abbandonato, è li in una scatola che attende che mi torni la voglia di riprovarci. Questo per dire che non so se sia plausibile un problema al sensore.

Eh, però il misuratore Efergy funzionava allo stesso modo (sensore a clip sullo stesso cavo di fase) e con una precisione "decente" (diciamo sui +/-50W) per cui escluderei che il problema sia il metodo di lettura.

Il fatto è che del sensore dell'Efergy non ho trovato alcuna caratteristica, per cui ho acquistato quell'SCT-013 che ho visto spesso citato in giro, e del quale ho visto alcuni progetti nei quali gli autori dichiaravano una precisione su +/- 5W, cosa per la quale "ci metterei la firma subito"!!!

Per cui se qualcun altro ha fatto un progetto con l'SCT-013 e gli ha funzionato decentemente, o è il mio sensore che è "sballato" (ossia difettoso, anche se in fondo è solo un "trasformatore" con una resistenza di carico) o le caratteristiche dell'SCT-013 non sono quelle che mi aspetto (es. la resistenza di carico che non è da 62 Ohm? Il "ratio" dichiarato non è 1800?) o non sto usando correttamente la libreria, o è la libreria che non va bene...

Idee?