Monitorare in watt la corrente assorbita...ho trovato difficoltà

Ciao a tutti, ho un grosso problema da affrontare che mi porto avanti da troppo tempo. Ormai il mio sistema domotica è completato, manca solo la gestione dei consumi.
Ho cercato in lungo e in largo, ma non ho trovato niente che potesse aiutarmi, solo progetti che misurano l' assorbimento tramite una fotoresistenza (enerduino) e progetti che misurano con T.A solo la corrente apparente non considerando il cosfi.

Il mio sistema è abbastanza complicato da spiegare, mi limito solo a concentrare la parte per voi importante.
Utilizzo arduino mega per la gestione di 96 ingressi digitali e restanti segnali analogici e invio i dati tramite serial port al mio Software di tutti gli stati a cambiamenti avvenuti quindi, traffico seriale quasi nullo. Vorrei dedicare arduino uno solo per la gestione di almeno 4 o piu T.A per il controllo o meglio, per il monitoraggio degli assorbimenti di 4 fasi differenti. Vorrei sviluppare un' hardware dedicato, praticamente uno shield con 4 ingressi ed inviare, ogni secondo, la situazione dei 4 o piu T.A al' arduino mega e so che questo è gia in commercio.
Vi chiedo, potrei anche fare a meno di impegnare un' altro arduino e utilzzare il mega anche per questo compito?

Purtroppo ho quasi impegnati tutti i pin, ne restano una decina e penso credo siano sufficienti.

Si trova sul web un qualcosa di già pronto, almeno una base di partenza da dove prendere spunto oppure, conoscete uno strumento da barra din professionale in grado di leggere il reale assorbimento con uscita 232/485 che possa interfacciarsi con arduino?

Aiutatemi perchè non ho tutte le basi per muovermi in completa autonomia.
Il mio progetto domotica sta andando veramente bene da ormai più di un' anno e un collaboratore, non a gratis, farebbe al caso mio :-). Per collaboratore intendo qualcuno che conosce non solo arduino, ma che possa anche affrontare il mio problema.

Se volete conoscere meglio il mio progetto, basta cercare domotica Tartaglia PRO oppure labdomotic tanto per avere un' idea di come è sviluppato il mio sistema e come poter implementare un monitoraggio consumi.
Chiedo solo aiuto, se siete disposti, potete anche contattarmi in privato, ma vorrei che sia tutto trasparente in questo Thred aperto perchè in molti hanno il mio stesso problema e mi piacerebbe che sia di aiuto anche per altri. Il privato si intende per collaborazione.
Vi ringrazio anche solo per aver perso tempo a leggere la mia richiesta.
Notte a tutti

Mai inteso parlare di OpenEnergyMonitor? QUI la parte relativa ad Arduino che ti interessa ...
... ma studiati l'intero progetto che ne vale la pena. :wink:

Guglielmo

gpb01:
Mai inteso parlare di OpenEnergyMonitor? QUI la parte relativa ad Arduino che ti interessa ...
... ma studiati l'intero progetto che ne vale la pena. :wink:

Guglielmo

Ciao Guglielmo...sei sempre di grande aiuto :slight_smile:
Conosco l' openenergymonitor, almeno è quello di cui parlavo sul fatto dello shield, ma mi sembra troppo
per il mio sistema.
Io sviluppo tutto tramite interfaccia grafica mentre quel sistema è completamente indipendente con un suo webserver dedicato.

Opterei invece per la seconda soluzione, anche quella avevo visto, ma l' ho scartata perchè pensavo fosse poco affidabile :stuck_out_tongue: . Ho visto "l' Hardware" realizzato con pochi componenti senza imbattermi invece sulla gestione Software che da quanto ho capito, è quella che si preoccupa di leggere i valori in ingresso e dare in risultato quelli che a me servono. Potenza reale e apparente e tensione.

Oggi comincio questa avventura, troverò sicuramente ostacoli che non sarò in grado di saltare, spero di trovare un vostro aiuto.

Grazie ancora Guglielmo, sei stato gentilissimo. :slight_smile:

Allora, ecco il primo inghippo :slight_smile:

Ho visto lo schema con le resistenze e il partitore di tensione, ma devo acquistare questo accessorio?
link

In questa pagina spiegano la parte dedicata al' alimentatore in C.A per il riferimento alla rete, ma devo acquistare un trasformatore 230/9 volt oppure non serve con l' accessorio appena linkato?
alimentatore

è in inglese e l' inglese lo mastico poco.

Con Quel piccolo accessorio, l' emonTxV3 + arduino uno e il trasformatore T.A riesco a realizzare un sistema di monitoraggio corrente?

Ma QUELLO è un sistema completo che funziona autonomamente e trasmette i dati in wireless ad una stazione emonBase web-connected base-station ...
... non un qualche cosa da collegare al tuo Arduino !

A te basta un trasformatorino 220VAC -> 9VAC più un sensore SCT-013 adatto alla corrente massima che vuoi misurare (ci sono da 30A, da 50A, da 100A ...) più una manciata di componenti, come descritto nel link che ti ho dato !

Guglielmo

Avevo frainteso, meglio ancora :slight_smile:
L' ho acquistato oggi il trasformatore e restanti componenti, mi manca solo il sensore che mi arriverà a giorni.
Non credo sia un problema avere piu sensori, me ne servono almeno 4 per avere un monitoraggio piu selettivo es:
luci, prese elettriche, lavatrice, vasca idro massaggio ecc...

Guglielmo, che tu sappia, sai se questo sistema è affidabile? o meglio, è abbastanza preciso nella misura considerando che gli alimentatori switching usati nelle lampade a led possono cambiare drasticamente il cosfi?

A proposito, credo che tutto venga gestito dalla libreria, viene mostrato il cosfi? non credop da quanto ho letto, ma sarebbe bello saperlo :slight_smile:

Grazie ancora, non vedo l' ora di realizzarlo, se funziona, faccio una scheda professionale che controlla almeno 6 T.A con relativi spinotti e la pubblico in modo che tutti possano repricarla.

A questo punto, manca solo decidere se usare un' arduino uno dedicato, visto che, se i sensori dovessero diventare 6, occorrono 12 pin e nel mio mega non ce ne sono più.

Il problema è questo:
Se utilizzassi un' arduino dedicato, arduino uno, come faccio ad inviare i dati al mega?
Tramite seriale TX?

Scusa le troppe domande, ma ho bisogno di essere indirizzato da qualcuno che sa bene, e tu forse sei anche troppo sprecato :slight_smile:
Grande come sempre Guglielmo.

Il sistema è sicuramente affidabile viso che misuri sia la tensione che la corrente e quindi, avendo le due, puoi calcolare esattamente lo sfasamento ... che è quello che fa la loro libreria ... che ti consiglio di aprire e studiare dato che ci troverai dentro, ben commentati, tutti i vari calcoli e che, volendo, potrai implementare tu stesso, personalizzandoteli, senza usare la libreria :wink:

Il collegamento da i due Arduino puoi tranquillamente farlo usando sulla MEGA una delle vere seriali e sulla UNO, volendo lasciare libera la vera seriale per eventuale "debug" ... usando la SoftwareSerial.

Guglielmo

Ottimo, la prossima settimana sono in ferie e posso dedicarmi a questo progetto.
Come sempre, grazie infinite Guglielmo :slight_smile:

Rieccomi Guglielmo, ho un po di tempo da perdere e chiedo ancora dei consigli. :smiley:
Il trasformatore, visto che devo realizzare un prodotto fatto bene e professionale, vorrei prendere quello da circuito stampato...questo per intenderci
questo

Come tensione devo usare 9 volt obbligatoriamente?

Per quanto riguarda i VA posso prendere il più piccolo che trovo giusto? serve solo come riferimento alla tensione quindi, non alimentando niente, a parte portare una tensione di riferimento al pin di arduino, basta anche da 1 VA..Giusto?

Purtroppo non è bellissimo dentro un pcb un trasformatore scoperto, se posso prendere un modello piccolissimo di quelli incapsulati, riesco a contenere i 6 spinotti con resistenze e condensatori e realizzare un pcb molto carino.

Le resistenze sono tutte da 1/4 watt giusto?

Si, puoi prendere quelli da circuito stampato anche piccolo, non alimenta praticamente nulla :smiley:

Per la tensione invece bisogna che controlli il codice ... non ricordo se si aspetta un determinato valore ... o se le resistenze sono calcolate esattamente per quel valore ... ::slight_smile:

Guglielmo

P.S.: Prima di buttarmi sulla realizzazione definitiva, io fare un po' di prove di funzionamento su breadboard :wink:

gpb01:
P.S.: Prima di buttarmi sulla realizzazione definitiva, io fare un po' di prove di funzionamento su breadboard :wink:

Ma certo...Prima di mandare in stampa i pcb, li realizzo in modo artigianale con bromografo ecc, ma prima ancora
faccio prove su millefori o breadboard. I pcb che ho realizzato per il mio sistema, prima di andare in stampa hanno passato non so quanti test.

Ma si potrebbe adattare il codice oppure sarebbe meglio trovare il valore richiesto?
Lo trovo dalla libreria?

edstarink:
Ma si potrebbe adattare il codice oppure sarebbe meglio trovare il valore richiesto?
Lo trovo dalla libreria?

Se apri il .cpp e lo scorri vedi che non fa nulla di trascendentale ... puoi sia aggiungere un metodo alla libreria che ti restituisca lo sfasamento, che fare dei copia/incolla di ciò che ti serve nel tuo codice.

Guglielmo

Ciao Guglielmo, scusa ma sono andato un po nel pallone :grin: ...

Se apri il .cpp e lo scorri vedi che non fa nulla di trascendentale

Questo sicuramente per te :slight_smile: per me, a parte qualche linea di codice, il resto è ancora Buio totale :-[ .

Se carico lo sketch su arduino uno, realizzo il piccolo pcb con i relativi componenti, faccio passare una fase nel T.A, dal monitor seriale riescogià ad ottenere i valori letti oppure devo in qualche modo modificare lo sketch? Da quanto vedo sembra già tutto pronto...

Mi ha spiazzato il copia incolla riferito alla mia domanda, forse l' ho posta male.
Mi riferivo al fatto di sapere quale tensione usare per il trasformatore e quà è indicato questo:

Voltage sensing electronics:

1x 9V AC-AC Power Adapter

poi tu mi hai risposto questo alla domanda su quale tensione usare:

Per la tensione invece bisogna che controlli il codice ... non ricordo se si aspetta un determinato valore ... o se le resistenze sono calcolate esattamente per quel valore ... ::slight_smile:

Ho un po di confusione anche perchè ho visto scritto qualcosa riguardo alla calibrazione.

Come hai visto la libreria è anche corredata di due esempi ... quindi è pronta all'uso, realizzi il circuito come descritto, colleghi e lanci gli esempi.

Per evitare problemi, utilizza il trasformatore che indicano loro 230VAC -> 9VAC come QUESTO.

Guglielmo

Adesso è chiaro :slight_smile:
Quel modello è perfetto, lo acquisto subito.
Ultima cosa, se volessi utilizzare 6 T.A, basterebbe modificare in parte lo sketch giusto?

Il circuito del trasformatore rimane invariato, mentre vengono aggiunti res e cond per ogni ingresso, giusto?
Quindi, il Totale dei pin utilizzati per 6 letture individuali: 7 pin analogici

edstarink:
...
Ma si potrebbe adattare il codice oppure sarebbe meglio trovare il valore richiesto?
Lo trovo dalla libreria?

Si potrebbe anche usare uno specifico componente elettronico, appositamente progettato per adattare e regolare livelli in modo semplice e veloce ... si chiama "trimmer" :smiley:

(scusa, non ho resistito :stuck_out_tongue: :D)

Grazie etemenanki per il suggerimento :stuck_out_tongue:
io mi riferivo alla tensione del trasformatore...e comunque un trimmer è obbligo per avere una maggiore
precisione o taratura.

Il mio problema più grande è questo; lo sketch.

Se volessi utilizzare più letture individuali con più T.A, devo modificare la libreria oltre che allo sketch?
Il codice di per se è molto corto e semplice perchè è la libreria che si occupa di tutto, ma mi spaventa sapere se per la lettura di due o più sensori, devo mettere mano anche alla libreria stessa...

// EmonLibrary examples openenergymonitor.org, Licence GNU GPL V3

#include "EmonLib.h"             // Include Emon Library
EnergyMonitor emon1;             // Create an instance

void setup()
{  
  Serial.begin(9600);
  
  emon1.voltage(2, 234.26, 1.7);  // Voltage: input pin, calibration, phase_shift
  emon1.current(1, 111.1);       // Current: input pin, calibration.
}

void loop()
{
  emon1.calcVI(20,2000);         // Calculate all. No.of half wavelengths (crossings), time-out
  emon1.serialprint();           // Print out all variables (realpower, apparent power, Vrms, Irms, power factor)
  
  float realPower       = emon1.realPower;        //extract Real Power into variable
  float apparentPower   = emon1.apparentPower;    //extract Apparent Power into variable
  float powerFActor     = emon1.powerFactor;      //extract Power Factor into Variable
  float supplyVoltage   = emon1.Vrms;             //extract Vrms into Variable
  float Irms            = emon1.Irms;             //extract Irms into Variable
}

Si però almeno cerca di leggerla la libreria ... :smiling_imp:

//--------------------------------------------------------------------------------------
// Sets the pins to be used for voltage and current sensors
//--------------------------------------------------------------------------------------
void EnergyMonitor::voltage(unsigned int _inPinV, double _VCAL, double _PHASECAL)
{
   inPinV = _inPinV;
   VCAL = _VCAL;
   PHASECAL = _PHASECAL;
   offsetV = ADC_COUNTS>>1;
}

void EnergyMonitor::current(unsigned int _inPinI, double _ICAL)
{
   inPinI = _inPinI;
   ICAL = _ICAL;
   offsetI = ADC_COUNTS>>1;
}

... i pin da cui leggere li passi TU ai metodi "voltage" e "current" ... come c'è scritto.

Guglielmo

edstarink:
...
io mi riferivo alla tensione del trasformatore......

Anch'io ... dato che probabilmente la tensione di uscita arduino la leggera' tramite un partitore, basta mettere un trimmer al partitore, e si regola quello in base alla tensione del trasformatore che trovi, in modo da far coincidere il valore letto con quello che si aspetta la libreria (ad esempio, quando il tester ti da 230V, regoli il trimmer in modo che lo sketch ti restituisca 230V come indicazione) ... cosi non sei piu legato ad uno specifico tipo di trasformatore, ma se ha almeno il minimo che lo sketch si aspetta, puoi usare il primo che trovi, o quello piu facile da reperire :wink:

gpb01:
Si però almeno cerca di leggerla la libreria ... :smiling_imp:

//--------------------------------------------------------------------------------------

// Sets the pins to be used for voltage and current sensors
//--------------------------------------------------------------------------------------
void EnergyMonitor::voltage(unsigned int _inPinV, double _VCAL, double _PHASECAL)
{
  inPinV = _inPinV;
  VCAL = _VCAL;
  PHASECAL = _PHASECAL;
  offsetV = ADC_COUNTS>>1;
}

void EnergyMonitor::current(unsigned int _inPinI, double _ICAL)
{
  inPinI = _inPinI;
  ICAL = _ICAL;
  offsetI = ADC_COUNTS>>1;
}



... i pin da cui leggere li passi TU ai metodi "voltage" e "current" ... come c'è scritto.

Guglielmo

Si Guglielmo, l' ho aperta e vista, posso immaginare il funzionamento, ma non ho quel' esperienza o studio da capirla riga per riga. :-[ :-[ :-[ :-[

Semplificando posso immaginare che, nella libreria ho per esempio una formula che ricava determinati valori: risultato tensione=a+b+c+d

Nello sketch, "tensione" mi darà quel valore, ma quel valore non viene effettuato nello sketch direttamente, sarà la libreria a ricavare quel valore, io lo devo solo richiamare e usare come voglio.

Quindi deduco che, per un' altro sensore, dovrei aggiungere nella libreria un' altra parte, simile alla prima, ma con nomenclature progressive?

es:

inPinV2 = _inPinV2;
VCAL2 = _VCAL2;
PHASECAL2 = _PHASECAL2;
offsetV2 = ADC_COUNTS2>>1;

e di conseguenza dichiarare le loro variabili...ci siamo almeno nella logica +o-? :confused: :confused: