EnergiAlternativa

Page Index Toggle Pages: 1 ... 16 17 [18] 19  Send TopicPrint
Hot Topic (More than 100 Replies) Voltmetro, Amperometro, Wattmetro, Contatori Assor (Read 171823 times)
ElettroshockNow
Forum Administrator
*****
Offline


yottawatt

Posts: 3920
Location: Roma
Gender: Male
Zodiac sign: Gemini
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Reply #255 - 08.06.15 at 10:18:28
Print Post  
Su Ebay trovi degli ottimi Powermeter a prezzo regalo che funzionano.
Scegliere di realizzare il circuito in discussione richiede una base elettronica/informatica in grado di personalizzare il proprio progetto.
Ti consiglio pertanto di iniziare con realizzazioni più  semplici e dopo una certa esperienza sarà un gioco da ragazzi modificare il powermeter alle proprie esigenze che per la cronaca lavora instancabilmente da oltre due anni.
Ciao
ElettroshockNow
  

Il Tempo non lo vede nessuno,il lavoro lo vedono tutti (Mamma)
Impara a rubare con gli occhi (Papà)
Back to top
YouTube  
IP Logged
 
supermomo717
Ex Member
*


--------

Gender: Male
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Reply #256 - 08.06.15 at 16:17:15
Print Post  
Ho usato la precedente formula impiegata dal Elettro per calcolare i KWh prodotti/assorbiti ecc.

  if (micros()>TCampionature){
    TotProdotta+=PotenzaAttiva_1*(micros()-TCampionature)/1000000/3600/1000;//Calcol
a i Kwh Prodotti GSE
  }

essendo il KWh la potenza di 1000W durante l'arco di tempo di 1 ora, lavorando con i micros() e volendo ottenere KWh, la formula è così corretta concettualmente. Faccio bene a prendere la potenza attiva ottenuta come potenza di riferimento per il calcolo?
Perdonate eventuali stupidaggini ma cerco di imparare arrangiandomi per quanto mi è possibile.
  
Back to top
 
IP Logged
 
cdj
Ex Member
*


--------

Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Reply #257 - 08.06.15 at 17:44:05
Print Post  
CITAZIONE (ElettroshockNow, 08/06/2015 16:17:15 ) Quote:
Su Ebay trovi degli ottimi Powermeter a prezzo regalo che funzionano.
Scegliere di realizzare il circuito in discussione richiede una base elettronica/informatica in grado di personalizzare il proprio progetto.
Ti consiglio pertanto di iniziare con realizzazioni più  semplici e dopo una certa esperienza sarà un gioco da ragazzi modificare il powermeter alle proprie esigenze che per la cronaca lavora instancabilmente da oltre due anni.
Ciao
ElettroshockNow



Perdonami, credo qualche base di averla, e siccome devo integrarlo in un sistema di domotica esistente, mi serve solo sapere a livello hardware come realizzarlo con un solo sensore in modo che mi entri su un DI o AI di Arduino.... lascia perdere il display... poi casomai l'output me lo faccio io....anche se credo ci sia già tutto.... grazie in anticipo
dariocdj
  
Back to top
 
IP Logged
 
maiktech
Ex Member
*


--------

Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Reply #258 - 15.06.15 at 14:14:35
Print Post  
Buongiorno a tutti ed in modo particolare ad un maestro d'arte ElettroshockNow, ho seguito tutti gli argomenti per realizzare questo fantastico controllo con arduino, ma non riesco a seguirvi con la realizzazione dei kit con schemi e lista materiali impiegati in più i disegni dei relativi pcb
noi che siamo alle prime armi come li possiamo realizzare??? ce qualcuno che li ha gia in vendita???
grazie
:clap.gif:
  
Back to top
 
IP Logged
 
natluc56
Ex Member
*


--------

Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Reply #259 - 17.06.15 at 09:47:53
Print Post  
ciao a tutti, sono nuovo del forum e spero di postare nel posto giusto, se sbaglio non mi uccidete, avrei bisogno di un consiglio e siccome ho letto alcuni post, sopratutto quelli di elettroshockNow che mi sembra di capire essere un grande esperto di arduino, sull'utilizzo di un sensore amperometrico mod. acs758 da 50 A connesso ad arduino, per misurare la produzione in kw del mio impianto fotovoltaico, che avendo un banco di batterie come accumulo,
credo sia indispensabile acquisire tali dati a monte dell'inverter, lato continua, i cui valori sono circa 60 volt 50 A Max (impianto da 3 kw), ed in particolare come collegare tale sensore ad arduino e se non chiedo troppo anche qualche consiglio sullo sketch.
Per chi mi da una mano c'e' un caffe' pagato.
  
Back to top
 
IP Logged
 
5a2v0
New Member
*
Offline


--------

Posts: 38
Location: Cefalu'
Gender: Male
Zodiac sign: Virgo
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Reply #260 - 26.06.15 at 10:08:05
Print Post  
Per Bacco! Dall'ultima mia visita sul forum vedo che sono stati fatti tanti cambiamenti al progetto...complimenti sempre ElettroshockNow e tutti coloro che contribuiscono allo sviluppo Wink

Vorrei approfittare e chiederti come mai hai usato:
Code
Select All
while (micros() < (start + 20000)){  


anziche il vecchio:
Code
Select All
while (millis() - previousMillis >= 20) 



poi perchè:
Code
Select All
ADCSRA&=0X90+ 0b101; //Setta ADC prescaler a 32  


(prima mi sembra lo settavi a 16?)

e ancora qui:
Code
Select All
if (CorrenteRMS_1 < 0.10) {//soglia minima
CorrenteRMS_1=0;
SommaP_1=0;} 



come mai hai deciso di ignorare il valore della lettura quando questa e minore di 0.1 ? Temi letture fantasma ?
  
Back to top
 
IP Logged
 
ElettroshockNow
Forum Administrator
*****
Offline


yottawatt

Posts: 3920
Location: Roma
Gender: Male
Zodiac sign: Gemini
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
Reply #261 - 07.09.15 at 18:50:40
Print Post  
Ciao 5a2v0 e bentornato Smiley

Scusami per la non tempestiva risposta ,ma nella confusione mi era sfuggita .

I due cicli while sono equivalenti ,entrambi hanno lo scopo di eseguire le campionature cicliche per un tempo impostato dal ciclo che in questo caso sono 20mS equivalente al periodo dell'onda sinusoidale di rete a 50hz .

Si possono anche campionare due o più periodi perdendo la reattività del circuito ,ma guadagnando di inerzia .

Perché 32 invece di 16 ...?
Con quella impostazione si và a impostare i parametri di default di Arduino.
Questo perché la velocità di campionatura originale non è sufficiente ai nostri scopi o meglio non possiamo avere risultati soddisfacenti misurando solo un periodo.
Quel valore imposta il prescaler del convertitore che altro non è che un divisore della frequenza di clock del micro.
Più è basso e monore sarà il tempo necessario per convertire un segnale analogico.
Ho sperimentato sia 32 che 16 ottenendo in entrambi ottimi risultati ,ma per scelta ho ritenuto già sufficiente 32.

Sul motivo del filtro 100mA è dovuto alla sensibilità del sistema.
L'accoppiata sensore e quantizzazione del convertitore consentono una precisione di 100mA ,quindi basta una leggere fluttuazione per introdurre errore .
Quindi ho reso sordo il circuito per potenze inferiori a 20W.

Ciao
ElettroshockNow di EA.org
  

Il Tempo non lo vede nessuno,il lavoro lo vedono tutti (Mamma)
Impara a rubare con gli occhi (Papà)
Back to top
YouTube  
IP Logged
 
senzasperanza
New Member
*
Offline


New EALab Member

Posts: 6
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
Reply #262 - 23.09.15 at 21:50:26
Print Post  
ciao a tutti , sono nuovo , nel pellegrinare sul web , alla ricerca di
un misuratore di potenza , mi sono imbattuto  nel progetto
di elettroshock , complimenti
chiedevo se qualcuno ha gia affrontato il problema di misurare la potenza assorbita dalla rete  , e la potenza immessa in rete
per una migliore gestione dei carichi
grazi  di nuovo
  
Back to top
 
IP Logged
 
iannez
New Member
*
Offline


--------

Posts: 31
Gender: Male
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
Reply #263 - 18.11.15 at 15:06:56
Print Post  
ciao ragazzi,
avete avuto modo di calcolare anche la frequenza con uno
degli sketch che sono riportati nel thread?

come monitoring credo sarebbe interessante Cheesy
  
Back to top
 
IP Logged
 
ElettroshockNow
Forum Administrator
*****
Offline


yottawatt

Posts: 3920
Location: Roma
Gender: Male
Zodiac sign: Gemini
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
Reply #264 - 10.12.15 at 14:14:50
Print Post  
iannez wrote on 18.11.15 at 15:06:56:
ciao ragazzi,
avete avuto modo di calcolare anche la frequenza con uno
degli sketch che sono riportati nel thread?

come monitoring credo sarebbe interessante Cheesy


Personalmente non ho ancora implementato il frequenzimetro al powerMeter (io ancora uso la versione non RMS) ,ma non dovrebbe essere tanto complesso per calcolarlo.

In primis bisogna usare il powermeter RMS link ,impostando ad esempio una finestra di campionamento di 100mS.
Nel periodo delle campionature far misurare il tempo di 3 o 4 periodi e di conseguenza si ottiene la frequenza.
Un modo semplice per rilevare le creste dell'onda è monitorare il segno della sottrazione di due campionature successive (credo che sia stato dato un consiglio simile denominata "derivata" da Bolle su un'altro progetto).
Quando il segno da negativo passa a positivo significa che stiamo sul picco positivo ...
misurando il tempo tra 3 o 4 picchi rileviamo il periodo con una buona approssimazione.
Considerando 100 campionature a periodo e tempo tra 4 picchi otteniamo una precisione di 50Hz/400= 0.125 Hz

Ciao
ElettroshockNow
  

Il Tempo non lo vede nessuno,il lavoro lo vedono tutti (Mamma)
Impara a rubare con gli occhi (Papà)
Back to top
YouTube  
IP Logged
 
ElettroshockNow
Forum Administrator
*****
Offline


yottawatt

Posts: 3920
Location: Roma
Gender: Male
Zodiac sign: Gemini
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
Reply #265 - 18.09.17 at 13:51:17
Print Post  
Più potenza ...grazie all'STM32 .
Ora la precisione è al watt con due ingressi .
Seguirà lo schema base (uguale al powermeter con offset)

Code (C++)
Select All
const int OffsetPin= 0;
const int TensionePin = 1;
const int Corrente1Pin = 2;
const int Corrente2Pin = 3;

const float Fattore_Conversione_Tensione=0.2;
const float Fattore_Conversione_Corrente=0.02502;



float Tensioneinst;
float Corrente1inst;
float Corrente2inst;
long last_refresh;
long Sine_stop;
float ADC_Tensione;
float ADC_Corrente1;
float ADC_Corrente2;
float ADC_Offset;
float TensioneRMS;
float Corrente1RMS;
float Corrente2RMS;

void setup() {
  	Serial.begin(115200);
    //adc_set_sample_rate(ADC1, ADC_SMPR_239_5);
    //adc_set_sample_rate(ADC1, ADC_SMPR_13_5);
}

void loop() {

float SommaV=0;
float SommaI1=0;
float SommaI2=0;
float SommaP1=0;
float SommaP2=0;
int NumCampionamenti=0;
Sine_stop = (millis()+40) ;//campiona 2 periodi
while (millis() < Sine_stop){
NumCampionamenti++;
ADC_Tensione=((ADC_Tensione*19)+analogRead(TensionePin))/20;//lettura con filtro passa basso
ADC_Corrente1=((ADC_Corrente1*19)+analogRead(Corrente1Pin))/20;
ADC_Corrente2=((ADC_Corrente2*19)+analogRead(Corrente2Pin))/20;
ADC_Offset=((ADC_Offset*19)+analogRead(OffsetPin))/20;

Tensioneinst = int(ADC_Tensione-ADC_Offset)*Fattore_Conversione_Tensione;//eliminazione errore
Corrente1inst = int(ADC_Corrente1-ADC_Offset)*Fattore_Conversione_Corrente;
Corrente2inst = int(ADC_Corrente2-ADC_Offset)*Fattore_Conversione_Corrente;

SommaV += pow(Tensioneinst,2);
SommaI1 += pow(Corrente1inst,2);
SommaI2 += pow(Corrente2inst,2);
SommaP1 += abs(Tensioneinst*Corrente1inst);
SommaP2 += abs(Tensioneinst*Corrente2inst);
} 

//TensioneRMS = sqrt(SommaV / NumCampionamenti); //senza media
//CorrenteRMS = sqrt(SommaI / NumCampionamenti); //senza media
TensioneRMS = ((TensioneRMS*19)+sqrt(SommaV / NumCampionamenti))/20; //media ultimi 10 valori
Corrente1RMS = ((Corrente1RMS*19)+sqrt(SommaI1 / NumCampionamenti))/20; //media ultimi 10 valori
Corrente2RMS = ((Corrente2RMS*19)+sqrt(SommaI2 / NumCampionamenti))/20; //media ultimi 10 valori

unsigned int PotenzaAttiva1 = SommaP1/ NumCampionamenti;
unsigned int PotenzaAttiva2 = SommaP2/ NumCampionamenti; 
unsigned int PotenzaApparente1 = TensioneRMS * Corrente1RMS;
unsigned int PotenzaApparente2 = TensioneRMS * Corrente2RMS;
float FattorediPotenza1 = float(PotenzaAttiva1)/float(PotenzaApparente1);
if(FattorediPotenza1>1)FattorediPotenza1=1;
float FattorediPotenza2 = float(PotenzaAttiva1)/float(PotenzaApparente2);
if(FattorediPotenza2>1)FattorediPotenza2=1;

if(millis()>(last_refresh+500)){
  last_refresh=millis(); 
  Serial.println("-------------------");
  /*
  Serial.print("NumCampionamenti=");
  Serial.println(NumCampionamenti);
  Serial.print("ADC_Tensione=");
  Serial.println(ADC_Tensione);
  Serial.print("ADC_Corrente=");
  Serial.println(ADC_Corrente);
  Serial.print("ADC_Offset=");
  Serial.println(ADC_Offset);
  */

  Serial.print("TensioneRMS=");
  Serial.print(TensioneRMS,1);
  Serial.println("V");
  Serial.println("***CARICO1***");
  Serial.print("Corrente1RMS= ");
  Serial.print(Corrente1RMS,2);
  Serial.println(" A");
  Serial.print("PotenzaAttiva1= ");
  Serial.print(PotenzaAttiva1 );
  Serial.println(" W");
   Serial.print("PotenzaApparente1= ");
  Serial.print(PotenzaApparente1);
  Serial.println(" VA");
  Serial.print("FattorediPotenza1= ");
  Serial.println(FattorediPotenza1 );
  Serial.println("***CARICO2***");
   Serial.print("Corrente2RMS= ");
  Serial.print(Corrente2RMS,2);
  Serial.println(" A");
   Serial.print("PotenzaAttiva2= ");
  Serial.print(PotenzaAttiva2 );
  Serial.println(" W");
   Serial.print("PotenzaApparente2= ");
  Serial.print(PotenzaApparente2);
   Serial.println(" VA");
  Serial.print("FattorediPotenza2= ");
  Serial.println(FattorediPotenza2 );
  Serial.println("-------------------");
 
}
 
} 

  

Il Tempo non lo vede nessuno,il lavoro lo vedono tutti (Mamma)
Impara a rubare con gli occhi (Papà)
Back to top
YouTube  
IP Logged
 
danye
Global Moderator
*****
Offline


--------

Posts: 360
Location: Roma
Gender: Male
Zodiac sign: Moonchild
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
Reply #266 - 18.09.17 at 23:18:11
Print Post  
Il mitico Elettro colpisce ancora! Grazie!  Cheesy
  

1x185Wp  + 1x225Wp in serie poli direzione sud
1xRegolatore MPPT EpSolar Tracer 3015RN
7x batterie auto da recupero in parallelo 12volt 400 Ah molto teorici
Sistema 12 volt che alimenta le luci a led di tutto l'appartamento
monitoraggio impianto www.solare.altervista.org
Back to top
 
IP Logged
 
ElettroshockNow
Forum Administrator
*****
Offline


yottawatt

Posts: 3920
Location: Roma
Gender: Male
Zodiac sign: Gemini
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
Reply #267 - 19.09.17 at 13:30:28
Print Post  
Grazie Danje ...
Era un pò di tempo che volevo migliorare il powermeter ....
Con la potenza di calcolo a disposizione si può fare proprio tanto.

Ovviamente il codice è scritto male ...ma è semplice e non richiede librerie .
Chi vorrà ottimizzarlo ..ben venga

Nel frattempo ho aggiunto il misuratore Energia e il frequenzimetro  Cheesy
Ora bisogna salvare i dati nella flash per quando manca la corrente
  

monitor1.jpg ( 68 KB | Downloads )
monitor1.jpg

Il Tempo non lo vede nessuno,il lavoro lo vedono tutti (Mamma)
Impara a rubare con gli occhi (Papà)
Back to top
YouTube  
IP Logged
 
ElettroshockNow
Forum Administrator
*****
Offline


yottawatt

Posts: 3920
Location: Roma
Gender: Male
Zodiac sign: Gemini
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
Reply #268 - 19.09.17 at 14:41:04
Print Post  
Ecco il codice ...poi lo miglioro dopo i test
Code (C++)
Select All
//Prodotto da ElettroshockNow (ElettroshockNow@gmail.com)
//Condiviso su http://www.EnergiAlternativa.org
//
//Eventuali condivisioni su altri canali/Forum devono specificare
//il forum di origine http://WWW.ENERGIALTERNATIVA.ORG e la licenza
//di seguito:
//
//CC BY-NC-SA 4.0
//Uso non commerciale, modificabile, con obbligo di condivisione-
//http://creativecommons.org/licenses/by-nc-sa/4.0/deed.it
//


//SETTAGGI UTENTE
const int OffsetPin= 0; //IMPOSTA PIN INGRESSO
const int TensionePin = 1;//IMPOSTA PIN INGRESSO
const int Corrente1Pin = 2;//IMPOSTA PIN INGRESSO
const int Corrente2Pin = 3;//IMPOSTA PIN INGRESSO

const float Fattore_Conversione_Tensione=0.272;//INSERIRE VALORI DI CALIBRAZIONE
const float Fattore_Conversione_Corrente=0.02502;//INSERIRE VALORI DI CALIBRAZIONE

//FINE SETTAGGI UTENTE

float Tensioneinst,Corrente1inst,Corrente2inst,ADC_Tensione,ADC_Corrente1,ADC_Corrente2,ADC_Offset,TensioneRMS,Corrente1RMS,Corrente2RMS,Energia1Prodotta,Energia1Consumata,Energia1Totale,Energia2Prodotta,Energia2Consumata,Energia2Totale,Frequenza;
long last_refresh,Sine_stop,last_E;

void setup() {
  	Serial.begin(115200);
}

void loop() {

float SommaV=0,SommaI1=0,SommaI2=0;
long SommaP1=0,SommaP2=0,Sine_Tstart;
int NumCampionamenti=0,Sine_start=0,FreqReady=0;

Sine_stop = (millis()+100) ;//campiona 5 periodi
while (millis() < Sine_stop){
NumCampionamenti++;
ADC_Tensione=((ADC_Tensione*19)+analogRead(TensionePin))/20;//lettura con media
ADC_Corrente1=((ADC_Corrente1*19)+analogRead(Corrente1Pin))/20;
ADC_Corrente2=((ADC_Corrente2*19)+analogRead(Corrente2Pin))/20;
ADC_Offset=((ADC_Offset*19)+analogRead(OffsetPin))/20;

if((ADC_Tensione-ADC_Offset)<-300)FreqReady=1;//Arma il trigger
if((ADC_Tensione-ADC_Offset)>300&FreqReady){//memorizza inizio e fine periodi
  FreqReady=0;
  if (Sine_start==0)Sine_Tstart=micros();
  if (Sine_start==4)Frequenza=4000000/float((micros()-Sine_Tstart));//calcola frequenza su 4 periodi
  Sine_start++;
}

Tensioneinst = int(ADC_Tensione-ADC_Offset)*Fattore_Conversione_Tensione;//eliminazione errore
Corrente1inst = int(ADC_Corrente1-ADC_Offset)*Fattore_Conversione_Corrente;
Corrente2inst = int(ADC_Corrente2-ADC_Offset)*Fattore_Conversione_Corrente;

SommaV += pow(Tensioneinst,2);
SommaI1 += pow(Corrente1inst,2);
SommaI2 += pow(Corrente2inst,2);
SommaP1 += (Tensioneinst*Corrente1inst);
SommaP2 += (Tensioneinst*Corrente2inst);
} 

TensioneRMS = ((TensioneRMS*19)+sqrt(SommaV / NumCampionamenti))/20; //media ultimi 20 valori
Corrente1RMS = ((Corrente1RMS*19)+sqrt(SommaI1 / NumCampionamenti))/20; //media ultimi 20 valori
Corrente2RMS = ((Corrente2RMS*19)+sqrt(SommaI2 / NumCampionamenti))/20; //media ultimi 20 valori

int PotenzaAttiva1 = SommaP1/ NumCampionamenti;
float Energia1=float(PotenzaAttiva1)*(micros()-last_E)/1000000/3600/1000; //CALCOLA DELTA ENERGIA
Energia1Totale+= Energia1;
int PotenzaApparente1 = TensioneRMS * Corrente1RMS;
if(PotenzaAttiva1<0){
  PotenzaApparente1=-PotenzaApparente1;
  Energia1Consumata+=Energia1;
}
else Energia1Prodotta+=Energia1;

int PotenzaAttiva2 = SommaP2/ NumCampionamenti;
float Energia2=float(PotenzaAttiva2)*(micros()-last_E)/1000000/3600/1000;
Energia2Totale+= Energia2;
int PotenzaApparente2 = TensioneRMS * Corrente2RMS;
if(PotenzaAttiva2<0){
  PotenzaApparente2=-PotenzaApparente2;
  Energia2Consumata+=Energia2;
}
else Energia2Prodotta+=Energia2;

last_E=micros();


float FattorediPotenza1 = float(PotenzaAttiva1)/float(PotenzaApparente1);
if(FattorediPotenza1>1)FattorediPotenza1=1;
float FattorediPotenza2 = float(PotenzaAttiva2)/float(PotenzaApparente2);
if(FattorediPotenza2>1)FattorediPotenza2=1;


if(millis()>(last_refresh+500)){//REFRESH DISPLAY OGNI X Ms
  last_refresh=millis(); 
  Serial.println("***EnergyMeter STM32 EnergiAlternativa.org***");
  /*
  Serial.print("NumCampionamenti=");
  Serial.println(NumCampionamenti);
  Serial.print("ADC_Tensione=");
  Serial.println(ADC_Tensione);
  Serial.print("ADC_Corrente=");
  Serial.println(ADC_Corrente);
  Serial.print("ADC_Offset=");
  Serial.println(ADC_Offset);
  */

  Serial.print("TensioneRMS= ");
  Serial.print(TensioneRMS,1);
  Serial.println(" V");
  Serial.print("Frequenza= ");
  Serial.print(Frequenza,1);
  Serial.println(" Hz");
  Serial.println("***INGRESSO-1***");
  Serial.print("Corrente1RMS= ");
  Serial.print(Corrente1RMS,2);
  Serial.println(" A");
  Serial.print("PotenzaAttiva1= ");
  Serial.print(PotenzaAttiva1 );
  Serial.println(" W");
   Serial.print("PotenzaApparente1= ");
  Serial.print(PotenzaApparente1);
  Serial.println(" VA");
  Serial.print("FattorediPotenza1= ");
  Serial.println(FattorediPotenza1 );
  Serial.print("Energia1Consumata= ");
  Serial.print(Energia1Consumata,4);
  Serial.println(" Kwh");
  Serial.print("Energia1Prodotta= ");
  Serial.print(Energia1Prodotta,4);
  Serial.println(" Kwh");
  Serial.print("Energia1Totale= ");
  Serial.print(Energia1Totale,4);
  Serial.println(" Kwh");
  Serial.println("***INGRESSO-2***");
   Serial.print("Corrente2RMS= ");
  Serial.print(Corrente2RMS,2);
  Serial.println(" A");
   Serial.print("PotenzaAttiva2= ");
  Serial.print(PotenzaAttiva2 );
  Serial.println(" W");
   Serial.print("PotenzaApparente2= ");
  Serial.print(PotenzaApparente2);
   Serial.println(" VA");
  Serial.print("FattorediPotenza2= ");
  Serial.println(FattorediPotenza2 );
  Serial.print("Energia2Consumata= ");
  Serial.print(Energia2Consumata,4);
  Serial.println(" Kwh");
  Serial.print("Energia2Prodotta= ");
  Serial.print(Energia2Prodotta,4);
  Serial.println(" Kwh");
  Serial.print("Energia2Totale= ");
  Serial.print(Energia2Totale,4);
  Serial.println(" Kwh");
  Serial.println("-------------------");
 
}
 
}
 

« Last Edit: 19.09.17 at 15:59:13 by ElettroshockNow »  

2017-09-19_15_05_18.jpg ( 919 KB | Downloads )
2017-09-19_15_05_18.jpg
2017-09-19_15_12_30.jpg ( 896 KB | Downloads )
2017-09-19_15_12_30.jpg
EnergyMeter1.jpg ( 145 KB | Downloads )
EnergyMeter1.jpg

Il Tempo non lo vede nessuno,il lavoro lo vedono tutti (Mamma)
Impara a rubare con gli occhi (Papà)
Back to top
YouTube  
IP Logged
 
ElettroshockNow
Forum Administrator
*****
Offline


yottawatt

Posts: 3920
Location: Roma
Gender: Male
Zodiac sign: Gemini
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
Reply #269 - 20.09.17 at 09:36:30
Print Post  
...CODICE CON TRE INGRESSI ...
Mi servirà per mandare in pensione il vecchio powermeter .
Sarà configurato :
ingresso 1 = ingresso rete
ingresso 2 = piano inferiore
ingresso 3 = piano superiore

Avendo un impianto grid potrò calcolare la potenza prodotta dall'inverter ...energia acquistata ed energia venduta oltre alla ripartizione dei consumi  Smiley...mi piace
Code (C++)
Select All
//Prodotto da ElettroshockNow (ElettroshockNow@gmail.com)
//Condiviso su http://www.EnergiAlternativa.org
//
//Eventuali condivisioni su altri canali/Forum devono specificare
//il forum di origine http://WWW.ENERGIALTERNATIVA.ORG e la licenza
//di seguito:
//
//CC BY-NC-SA 4.0
//Uso non commerciale, modificabile, con obbligo di condivisione-
//http://creativecommons.org/licenses/by-nc-sa/4.0/deed.it
//


//SETTAGGI UTENTE
const int OffsetPin= 0; //IMPOSTA PIN INGRESSO
const int TensionePin = 1;//IMPOSTA PIN INGRESSO
const int Corrente1Pin = 2;//IMPOSTA PIN INGRESSO
const int Corrente2Pin = 3;//IMPOSTA PIN INGRESSO
const int Corrente3Pin = 4;//IMPOSTA PIN INGRESSO

const float Fattore_Conversione_Tensione=0.272;//INSERIRE VALORI DI CALIBRAZIONE
const float Fattore_Conversione_Corrente=0.02502;//INSERIRE VALORI DI CALIBRAZIONE

//FINE SETTAGGI UTENTE

float Tensioneinst,Corrente1inst,Corrente2inst,Corrente3inst,ADC_Tensione,ADC_Corrente1,ADC_Corrente2,ADC_Corrente3,ADC_Offset,TensioneRMS,Corrente1RMS,Corrente2RMS,Corrente3RMS,Energia1Prodotta,Energia1Consumata,Energia1Totale,Energia2Prodotta,Energia2Consumata,Energia2Totale,Energia3Prodotta,Energia3Consumata,Energia3Totale,Frequenza;
long last_refresh,Sine_stop,last_E;

void setup() {
  	Serial.begin(115200);
}

void loop() {

float SommaV=0,SommaI1=0,SommaI2=0,SommaI3=0;
long SommaP1=0,SommaP2=0,SommaP3=0,Sine_Tstart;
int NumCampionamenti=0,Sine_start=0,FreqReady=0;

Sine_stop = (millis()+100) ;//campiona 5 periodi
while (millis() < Sine_stop){
NumCampionamenti++;
ADC_Tensione=((ADC_Tensione*19)+analogRead(TensionePin))/20;//lettura con media
ADC_Corrente1=((ADC_Corrente1*19)+analogRead(Corrente1Pin))/20;
ADC_Corrente2=((ADC_Corrente2*19)+analogRead(Corrente2Pin))/20;
ADC_Corrente3=((ADC_Corrente3*19)+analogRead(Corrente3Pin))/20;
ADC_Offset=((ADC_Offset*19)+analogRead(OffsetPin))/20;

if((ADC_Tensione-ADC_Offset)<-300)FreqReady=1;//Arma il trigger
if((ADC_Tensione-ADC_Offset)>300&FreqReady){//memorizza inizio e fine periodi
  FreqReady=0;
  if (Sine_start==0)Sine_Tstart=micros();
  if (Sine_start==4)Frequenza=4000000/float((micros()-Sine_Tstart));//calcola frequenza su 4 periodi
  Sine_start++;
}

Tensioneinst = int(ADC_Tensione-ADC_Offset)*Fattore_Conversione_Tensione;//eliminazione errore
Corrente1inst = int(ADC_Corrente1-ADC_Offset)*Fattore_Conversione_Corrente;
Corrente2inst = int(ADC_Corrente2-ADC_Offset)*Fattore_Conversione_Corrente;
Corrente3inst = int(ADC_Corrente3-ADC_Offset)*Fattore_Conversione_Corrente;

SommaV += pow(Tensioneinst,2);
SommaI1 += pow(Corrente1inst,2);
SommaI2 += pow(Corrente2inst,2);
SommaI3 += pow(Corrente3inst,2);

SommaP1 += (Tensioneinst*Corrente1inst);
SommaP2 += (Tensioneinst*Corrente2inst);
SommaP3 += (Tensioneinst*Corrente3inst); 
} 

TensioneRMS = ((TensioneRMS*19)+sqrt(SommaV / NumCampionamenti))/20; //media ultimi 20 valori
Corrente1RMS = ((Corrente1RMS*19)+sqrt(SommaI1 / NumCampionamenti))/20; //media ultimi 20 valori
Corrente2RMS = ((Corrente2RMS*19)+sqrt(SommaI2 / NumCampionamenti))/20; //media ultimi 20 valori
Corrente3RMS = ((Corrente3RMS*19)+sqrt(SommaI3 / NumCampionamenti))/20; //media ultimi 20 valori


int PotenzaAttiva1 = SommaP1/ NumCampionamenti;
float Energia1=float(PotenzaAttiva1)*(micros()-last_E)/1000000/3600/1000; //CALCOLA DELTA ENERGIA
Energia1Totale+= Energia1;
int PotenzaApparente1 = TensioneRMS * Corrente1RMS;
if(PotenzaAttiva1<0){
  PotenzaApparente1=-PotenzaApparente1;
  Energia1Consumata+=Energia1;
}
else Energia1Prodotta+=Energia1;

int PotenzaAttiva2 = SommaP2/ NumCampionamenti;
float Energia2=float(PotenzaAttiva2)*(micros()-last_E)/1000000/3600/1000;
Energia2Totale+= Energia2;
int PotenzaApparente2 = TensioneRMS * Corrente2RMS;
if(PotenzaAttiva2<0){
  PotenzaApparente2=-PotenzaApparente2;
  Energia2Consumata+=Energia2;
}
else Energia2Prodotta+=Energia2;

int PotenzaAttiva3 = SommaP3/ NumCampionamenti;
float Energia3=float(PotenzaAttiva3)*(micros()-last_E)/1000000/3600/1000;
Energia3Totale+= Energia3;
int PotenzaApparente3 = TensioneRMS * Corrente3RMS;
if(PotenzaAttiva3<0){
  PotenzaApparente3=-PotenzaApparente3;
  Energia3Consumata+=Energia3;
}
else Energia3Prodotta+=Energia3;

last_E=micros();


float FattorediPotenza1 = float(PotenzaAttiva1)/float(PotenzaApparente1);
if(FattorediPotenza1>1)FattorediPotenza1=1;
float FattorediPotenza2 = float(PotenzaAttiva2)/float(PotenzaApparente2);
if(FattorediPotenza2>1)FattorediPotenza2=1;
float FattorediPotenza3 = float(PotenzaAttiva3)/float(PotenzaApparente3);
if(FattorediPotenza3>1)FattorediPotenza3=1;


if(millis()>(last_refresh+500)){//REFRESH DISPLAY OGNI X Ms
  last_refresh=millis(); 
  Serial.println("***EnergyMeter STM32 EnergiAlternativa.org***");
 
  //Serial.print("NumCampionamenti= ");
  //Serial.println(NumCampionamenti);
  Serial.print("Frequenza Campionamento= ");
  Serial.print(NumCampionamenti*10);
  Serial.println(" Hz");
  /*
  Serial.print("ADC_Tensione=");
  Serial.println(ADC_Tensione);
  Serial.print("ADC_Corrente=");
  Serial.println(ADC_Corrente);
  Serial.print("ADC_Offset=");
  Serial.println(ADC_Offset);
  */

  Serial.print("TensioneRMS= ");
  Serial.print(TensioneRMS,1);
  Serial.println(" V");
  Serial.print("Frequenza= ");
  Serial.print(Frequenza,1);
  Serial.println(" Hz");
  Serial.println("***INGRESSO-1***");
  Serial.print("Corrente1RMS= ");
  Serial.print(Corrente1RMS,2);
  Serial.println(" A");
  Serial.print("PotenzaAttiva1= ");
  Serial.print(PotenzaAttiva1 );
  Serial.println(" W");
   Serial.print("PotenzaApparente1= ");
  Serial.print(PotenzaApparente1);
  Serial.println(" VA");
  Serial.print("FattorediPotenza1= ");
  Serial.println(FattorediPotenza1 );
  Serial.print("Energia1Consumata= ");
  Serial.print(Energia1Consumata,4);
  Serial.println(" Kwh");
  Serial.print("Energia1Prodotta= ");
  Serial.print(Energia1Prodotta,4);
  Serial.println(" Kwh");
  Serial.print("Energia1Totale= ");
  Serial.print(Energia1Totale,4);
  Serial.println(" Kwh");
  Serial.println("***INGRESSO-2***");
   Serial.print("Corrente2RMS= ");
  Serial.print(Corrente2RMS,2);
  Serial.println(" A");
   Serial.print("PotenzaAttiva2= ");
  Serial.print(PotenzaAttiva2 );
  Serial.println(" W");
   Serial.print("PotenzaApparente2= ");
  Serial.print(PotenzaApparente2);
   Serial.println(" VA");
  Serial.print("FattorediPotenza2= ");
  Serial.println(FattorediPotenza2 );
  Serial.print("Energia2Consumata= ");
  Serial.print(Energia2Consumata,4);
  Serial.println(" Kwh");
  Serial.print("Energia2Prodotta= ");
  Serial.print(Energia2Prodotta,4);
  Serial.println(" Kwh");
  Serial.print("Energia2Totale= ");
  Serial.print(Energia2Totale,4);
  Serial.println(" Kwh");
   Serial.println("***INGRESSO-3***");
   Serial.print("Corrente3RMS= ");
  Serial.print(Corrente3RMS,2);
  Serial.println(" A");
   Serial.print("PotenzaAttiva3= ");
  Serial.print(PotenzaAttiva3 );
  Serial.println(" W");
   Serial.print("PotenzaApparente3= ");
  Serial.print(PotenzaApparente3);
   Serial.println(" VA");
  Serial.print("FattorediPotenza3= ");
  Serial.println(FattorediPotenza3 );
  Serial.print("Energia3Consumata= ");
  Serial.print(Energia3Consumata,4);
  Serial.println(" Kwh");
  Serial.print("Energia3Prodotta= ");
  Serial.print(Energia3Prodotta,4);
  Serial.println(" Kwh");
  Serial.print("Energia3Totale= ");
  Serial.print(Energia3Totale,4);
  Serial.println(" Kwh");
  Serial.println("-------------------");
 
}
 
}
 



  

EnergyMeter2.jpg ( 97 KB | Downloads )
EnergyMeter2.jpg

Il Tempo non lo vede nessuno,il lavoro lo vedono tutti (Mamma)
Impara a rubare con gli occhi (Papà)
Back to top
YouTube  
IP Logged
 
Page Index Toggle Pages: 1 ... 16 17 [18] 19 
Send TopicPrint
 

TOP100-SOLAR Galleria Immagini EnergiAlternativa