#include <liquidcrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);//ASSEGNAZIONE PIN LCD
const int BACKLIGH_PIN = 10;
const int ProdottaPin = A11;
const int AssorbitaPin = A12;
const int TensionePin = A13;
const int TempoCampionatura = 40; //Scegli i ms da Campionare
const float Fattore_Conversione_Potenza = .11; //Fattore di conversione Potenze
const float Fattore_Conversione_Corrente = .055;
const float Fattore_Conversione_Tensione = 1.6;
long start ;
int i ;
long PotenzaPro;
long PotenzaAss;
float PotenzaAss_Float;
float AmperPro;
float AmperAss;
long OffsetPro;
long OffsetAss;
long OffsetTens;
int Tensionemin=1023;
int Tensionemax=0;
void setup() {
//lcd.begin(16, 2);
Serial.begin(9600) ;
pinMode(BACKLIGH_PIN, OUTPUT);
digitalWrite(BACKLIGH_PIN, HIGH);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PowerMeter");
lcd.setCursor(0,1);
lcd.print("Enhanced");
delay(2000);
//CALCOLO AUTOMATICO OFFSET SENSORI
for (i = 0 ; i <= 1000 ; i++){
OffsetPro+=analogRead(ProdottaPin);
OffsetAss+=analogRead(AssorbitaPin);
int Tensioneinst =analogRead(TensionePin);
if (Tensionemax<tensioneinst)Tensionemax=Tensioneinst;
if (Tensionemin>Tensioneinst)Tensionemin=Tensioneinst;
}
OffsetPro/=1000;
OffsetAss/=1000;
OffsetTens=(Tensionemax+Tensionemin)/2;
//--------------------------------
ADCSRA&=0X90+ 0b100; //Setta ADC prescaler a 16 quindi la velocita delle conversioni
}
void loop() {
PotenzaPro=0;
PotenzaAss=0;
AmperPro=0;
AmperAss=0;
int NumCampionamenti=0;
int Tensionepicco=0;
start = millis() ;
do
{
NumCampionamenti++;
int Tensioneinst = abs(analogRead(TensionePin)-OffsetTens);
int Prodottainst = abs(analogRead(ProdottaPin)-OffsetPro);
int Assorbitainst = abs(analogRead(AssorbitaPin)-OffsetAss);
PotenzaPro += Tensioneinst*Prodottainst;
PotenzaAss += Tensioneinst*Assorbitainst;
AmperPro+=Prodottainst;
AmperAss+=Assorbitainst;
if (Tensionepicco<tensioneinst)Tensionepicco=Tensioneinst;
}while((millis()-start)<tempocampionatura);
int Tempomisura=millis() - start;
PotenzaPro=(PotenzaPro/NumCampionamenti)*Fattore_Conversione_Potenza;
PotenzaAss_Float=(PotenzaAss/NumCampionamenti)*Fattore_Conversione_Potenza;//Calcolo Potenza Somma medie V*I in Float
PotenzaAss=(PotenzaAss/NumCampionamenti)*Fattore_Conversione_Potenza;
AmperPro=(AmperPro/NumCampionamenti)*Fattore_Conversione_Corrente;
AmperAss=(AmperAss/NumCampionamenti)*Fattore_Conversione_Corrente;
int TensioneRMS=Tensionepicco*Fattore_Conversione_Tensione;
float TensioneRMS_Float=Tensionepicco*Fattore_Conversione_Tensione;//Calcolo Tensione in Float
int PotenzaProCalc=TensioneRMS*AmperPro;
int PotenzaAssCalc=TensioneRMS*AmperAss;
float PotenzaAssCalc_Float=TensioneRMS_Float*AmperAss;//Calcolo Potenza Vm*Im in Float
//Visualizza risultati su PC
if (Tensionemax>23 && Tensionemin<1000)
Serial.println ("Misurazioni Attendibili");
else
Serial.println ("ERROR");
Serial.print ("Numero Campionamenti = ");
Serial.println(NumCampionamenti);
Serial.print ("Tempo conversione = ");
Serial.print(Tempomisura) ;
Serial.println(" ms") ;
Serial.print ("ADCSRA = ");
Serial.println(ADCSRA) ;
Serial.print ("Tensione RMS = ");
Serial.print(TensioneRMS) ;
Serial.println(" Volt") ;
Serial.print ("Valore Sensore Tensione Max = ");
Serial.println(Tensionemax) ;
Serial.print ("Valore Sensore Tensione Min = ");
Serial.println(Tensionemin) ;
Serial.print ("Offset Sensore Tensione = ");
Serial.println(OffsetTens) ;
Serial.print ("Offset Sensore Produzione = ");
Serial.println(OffsetPro) ;
Serial.print ("Offset Sensore Assorbimento = ");
Serial.println(OffsetAss) ;
Serial.print ("Potenza Prodotta = ");
Serial.print(PotenzaPro) ;
Serial.println(" Watt") ;
Serial.print ("Potenza Prodotta Calcolata= ");
Serial.print(PotenzaProCalc) ;
Serial.println(" Watt") ;
Serial.print ("Potenza Assorbita = ");
Serial.print(PotenzaAss) ;
Serial.println(" Watt") ;
Serial.print ("Potenza Assorbita Calcolata = ");
Serial.print(PotenzaAssCalc) ;
Serial.println(" Watt") ;
Serial.print ("Corrente Prodotta = ");
Serial.print(AmperPro) ;
Serial.println(" Amper") ;
Serial.print ("Corrente Assorbita = ");
Serial.print(AmperAss) ;
Serial.println(" Amper") ;
Serial.println("") ;
Serial.println("") ;
//Visualizza risultati su LCD
lcd.setCursor(0, 0);
lcd.print("V*I=");
lcd.print(PotenzaAssCalc);
lcd.print("W ");
lcd.setCursor(10, 0);
lcd.print(PotenzaAssCalc_Float,1);
lcd.print("W ");
lcd.setCursor(0,1);
lcd.print("Spr=");
lcd.print(PotenzaAss);
lcd.print("W ");
lcd.setCursor(10, 1);
lcd.print(PotenzaAss_Float,1);
lcd.print("W ");
//delay(1000);
}
Nella prima riga verrà visualzzata la potenza calcolata con il prodotto della tensione media per la corrente media , sia calcolandola con variabili intere sia con tutte le variabili float
Nella seconda riga invece ci sarà la somma dei prodotti di ogni singola campionatura , , anch'essa con variabili intere e con variabili float ..
Lampadina ad incandescenza (forma d'onda nelle prime pagine )
Valori uguali
(la mia tolleranza è circa 1...2w)
Lampadina Basso consumo con ballast elettronico
Valori uguali
Lampadina neon con reattore
Trapano alla massima velocità
E relativa forma d'onda
Trapano a circa metà potenza
E relativa forma d'onda
Trapano al minimo
E relativa forma d'onda
Le forme d'onda sono state misurate direttamente sui piedini dell'arduino
qqcreafis il 28/6/2013, 14:57
Re:Vediamo le Lampadine
giustamente si vede bene nell'ultimo, dove la corrente è assorbita quando la tensione è bassa, chiaramente la somma dei vari V*I tiene conto di questo fatto mentre il prodotto dei valori medi non ne può tenere conto.
ElettroshockNow il 28/6/2013, 16:52
Re:Vediamo le Lampadine
CITAZIONE (PinoTux @ 28/6/2013, 00:40) [quote]Non so se sono ancora in tema, ma nell'immagine il diagramma inferiore indica l'andamento della corrente nel diodo raddrizzatore quando il carico è
capacitivo ed è sempre più elevata di quella che scorre nel carico
Effettivamente ricorda molto il tipico comportamento ,ma non vorrei che fosse mal interpretato da una mia manomissione....
In quella misurazione avevo erroneamente messo un condensatore sull'ingresso addolcendo di molto il picco ... la vera forma d'onda è questa
Anche qui si vede quel comportamento ,ma ci sono altre due gobbe !! che dite indago ?
qqcreafis il 28/6/2013, 19:51
Re:Vediamo le Lampadine
const float Fattore_Conversione_Potenza = .11;
const float Fattore_Conversione_Corrente = .055;
const float Fattore_Conversione_Tensione = 1.6;
da dove vengono questi numeri?
comunque lo puoi tarare con un resistore che non si scaldi
qqcreafis il 28/6/2013, 20:20
Re:Vediamo le Lampadine
CITAZIONE [quote]Anche qui si vede quel comportamento ,ma ci sono altre due gobbe !! che dite indago ?
dovrebbero essere la terza e la quinta armonica
ElettroshockNow il 28/6/2013, 20:29
Re:Vediamo le Lampadine
CITAZIONE (qqcreafis @ 28/6/2013, 20:51) [quote]const float Fattore_Conversione_Potenza = .11;
const float Fattore_Conversione_Corrente = .055;
const float Fattore_Conversione_Tensione = 1.6;
da dove vengono questi numeri?
comunque lo puoi tarare con un resistore che non si scaldi
Ho usato come carico una lampadina da 150W a filamento(custodita gelosamente
).
Comparando tensione e corrente a quella rilevata da un buon strumento e la potenza mi son fidato del prodotto V*I .....
Cosa intendi per resistore che non scaldi ? ... mi interessa .... vuoi dire una resistenza sovradimenzionata in potenza dissipabile ...
CITAZIONE (qqcreafis @ 28/6/2013, 21:20) [quote]dovrebbero essere la terza e la quinta armonica
Effettivamente le gobbe tendono ad addolcirsi ......
qqcreafis il 28/6/2013, 20:55
Re:Vediamo le Lampadine
comunque il metodo vero è fare la media dei prodotti v*I , tutte le altre metodologie si applicano a casi particolari e derivano comunque dalla definizione (p media =media dei prodotti v*I).
comunque il problema rimane, occorre essere certi che le letture di tensione e corrente siano esatte.
CITAZIONE [quote]dovrebbero essere la terza e la quinta armonica
opss
no sono armoniche pari la 2°, 4°, 6° oppure 4°,6°,8° o qualcosa del genere
se hai utilizzato una lampada a filamento per tarare il tutto dovrebbe andare bene, il problema della temperatura è che la resistenza scaldandosi varia molto, un filamento molto sottile potrebbe (forse) non essere ottimale , ci vuole qualcosa la cui temperatura non varia (un grosso filamento con molta inerzia potrebbe andare bene)