ElettroshockNow il 8/2/2013, 19:33
Voltmetro, Amperometro, Wattmetro, Contatori Assor
Oggi si conta
1 2 3 4 5 6 7 8 9 bo!!

Stavo realizzando un semplice Wattmetro ,ma come al solito si è cappottato l'orizzonte e in crisi di pazzia pura ho partorito questo......il Powermeter Rev3.3

Si tratta semplicemente di :
-un Voltmetro AC.....
-un doppio Amperometro AC.....
-un doppio Wattmetro ........
-un doppio contatore con memoria di Backup (metti che vada via la luce
)

Le sue applicazioni sono molteplici:
-Vuoi misurare la potenza che produci..ora puoi

-e che consumi ...ora puoi

-Volevi sapere la tensione per un rapido Trouble Shooting..ora puoi

-Hai il contatore in comune e vuoi sapere i due consumi ...ora puoi

-Vuoi stare comodamente al computer e leggere i consumi...ora puoi (magari se si implementasse un programmino in VB)...
-Vabbè puoi farci quello che ti pare,,,,io lo metto a disposizione del Forum nella speranza che sia utile a qualcuno oltre a me


Dettaglio "LE PAGINE DEL DISPLAY"

Prima pagina (nel programma la numero 0)

Seconda pagina (nel programma la numero 1)

Terza pagina (nel programma la numero 2)

Quarta pagina (nel programma indovinate
)


Avete notato niente !!????
Nella seconda pagina sono presenti dei tratti in quanto dipende in quale configurazione vi trovate.
Mi spiego meglio.......

-Io vado di On grid Tie e ho alcune esigenze.


-Pippo và di Isola ed usa un inverter


-Pluto và di Isola ed usa un UPS.....


-Puffo scrocca


Quindi in che configurazione vi trovate ????

Semplicemente o A o B......



Come realizzarlo???
Bo!!provate a chiedere al vicino

oppure W il Fai da Te .......

Iniziamo :
Sezione Alimentatore e adattatore di livello!!!!


Lo so ..lo so ..il condensatore dovè.........bo !!!Cmq l'ho dimenticato volontariamente
.

Il display ed i sensori ....(i miei piccolini ACS712 da 30A)ecco come vanno collegati


Un saluto a tutti e grazie della pazienza nell'aver letto tutte ste fregnacce.....



A dimenticavo.....


Ciao...


Dimenticavo una cosina ...il codice Rev3.3


/*Progetto Powermeter Rev3.3
Un sentito ringraziamento al Forum
"" Energia Alternativa & Energia Fai Da Te ""
http://energiaalternativa.forumcommunity.net/

Saluti
ElettroshockNow
----------------------------------------------------------------------------
INFO:il Powermeter dispone di memoria eeprom interna nella quale salva a cadenza di
4 ore il valore contenuto nei contatori.Se si desidera resettare i contatori :
-disalimentare il circuito
-premere e mantenere premuto il pulsante
-alimentare il circuito
-attendere la scritta "ATTENZIONE RESET CONTATORI TRA 4H"
-rilasciare il pulsante
A questo punto il reset è armato e sarà attivato allo scadere delle 4H.
Quindi se erroneamente si resettano i contatori ,basterà disalimentare e rialimentare il
circuito per recuperare l'ultimo Backup.
-----------------------------------------------------------------
*/
//IMPOSTAZIONI UTENTE (Scegliere le preferenze)

const boolean ConfigB = false; //Configurazione B ? true or false
//Scegli lo schema di installazione piu' adatto
//false = doppio contatore simultaneo
//true = doppio contatore funzionamento selettivo

const byte PagDefault = 0; // Scegli la schermata di default..:-)
//0 = Wattmetro
//1 = Voltmetro + stato UPS
//2 = Amperometro
//3 = Contatori

const int TempoLed = 200; //Scegli il Tempo della retroilluminazione
//allo spengimento si imposterà la pagina di Default
//Ogni unita vale circa 2 secondi :-)


//------------------------------------------------------------
// LIBRERIE
#include <virtualwire.h>
#include <liquidcrystal.h>
#include <eeprom.h>

//-----------------------------------------------------------
// VARIABILI E COSTANTI
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);//ASSEGNAZIONE PIN LCD
const int BACKLIGH_PIN = 10;//Assegnazione Retroilluminazione
const int ProdottaPin = A1;
const int AssorbitaPin = A2;
const int TensionePin = A3;
const int transmit_pin = 12;
const int receive_pin = 11;
const int transmit_en_pin = 3;
const int ledPin = 13;
const int ADR=100;//Indirizzo PowerMeter
const int ResetPin = 2;//se posto a 1 resetta i contatori
const int PagPin = 2;//se premuto scorre le pagine
byte pagina = PagDefault; //PAGINA DA VISUALIZZARE SULL'LCD
int Timeout = TempoLed;//Timeout
byte Tensione = 0;
byte Frequenza = 50;
unsigned long ProdottaMedia = 0;//Somma delle campionature
unsigned long AssorbitaMedia = 0;//Somma delle campionature
float ProdottaMediaP = 0;//Amper Prodotti
float AssorbitaMediaP = 0;//Amper Assorbiti
int PotenzaPro;//Potenza Prodotta (Amper Prodotti*Tensione)
int PotenzaAss;//Potenza Assorbita (Amper Assorbiti*Tensione)
unsigned long time = 0;//Tempo dall'ultimo invio via radio
unsigned long Tmemoria = 0;//Tempo dall'ultimo BackUp
unsigned long TCampionature = 0;//Tempo dall'ultima Campionatura
float TotProdotta = 0;//Contatore Totale Prodotta
float TotAssorbita = 0;//Contatore Totale Assorbita




void setup() {
Serial.begin(9600);
vw_set_tx_pin(transmit_pin);
vw_set_rx_pin(receive_pin);
vw_set_ptt_pin(transmit_en_pin);
vw_set_ptt_inverted(true);
vw_setup(2000);
pinMode(ledPin, OUTPUT);
pinMode(ResetPin, INPUT);
lcd.begin(16, 2);
pinMode(BACKLIGH_PIN, OUTPUT);
digitalWrite(BACKLIGH_PIN, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PowerMeter V3 By");
lcd.setCursor(0,1);
lcd.print("ElettroshockNow");
delay(2000);

//recupero dati contatori dal BackUp
unsigned char k,mem;
for (k=0;k<4;k++){
mem = EEPROM.read(0x00+k);
((unsigned char*) &TotProdotta)[k]=mem;
}
for (k=0;k<4;k++){
mem = EEPROM.read(0x05+k);
((unsigned char*) &TotAssorbita)[k]=mem;
}
if (digitalRead(ResetPin) == HIGH) {//se premuto Resetta i contatori
TotProdotta = 0;
TotAssorbita = 0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ATTENZIONE RESET");
lcd.setCursor(0,1);
lcd.print("CONTATORI TRA 4H");
delay(5000);
}
}


void loop() {


//-----------------------------------------------------------------
//MISURA I SENSORI E CALCOLA LE CORRENTI E LE POTENZE E LA TENSIONE
int Tensionepicco = 0;
ProdottaMedia = 0 ;
AssorbitaMedia = 0 ;
for (int i=0;i<1000;i++){
ProdottaMedia += abs(analogRead(ProdottaPin)-510);
AssorbitaMedia += abs(analogRead(AssorbitaPin)-510);
int Tensioneinst = analogRead(TensionePin);
if (Tensionepicco<tensioneinst)Tensionepicco=Tensioneinst;
}
Tensione=Tensionepicco*.45;//Taratura sensore Tensione

ProdottaMediaP= (ProdottaMedia*.000079)-0.032;//calcola gli Amper istantanei Prodotti
AssorbitaMediaP= (AssorbitaMedia*.000079)-0.032;//calcola gli Amper istantanei Assorbiti
if (ConfigB & AssorbitaMediaP > 0.2)ProdottaMediaP=0;
PotenzaPro=int(ProdottaMediaP*Tensione/10)*10;//Calcola Potenza istantanea Prodotta (Step da 10W)
PotenzaAss=int(AssorbitaMediaP*Tensione/10)*10;//Calcola Potenza istantanea Assorbita (Step da 10W)

//Calcola e memorizza in EEPROM i Contatori Potenze
if (micros()>TCampionature){// if è per prevenire il reset del contatore ogni 70ore!!
TotProdotta+=ProdottaMediaP*Tensione*(micros()-TCampionature)/1000000/3600/1000;//Calcola i Kwh Prodotti
TotAssorbita+=AssorbitaMediaP*Tensione*(micros()-TCampionature)/1000000/3600/1000;//Calcola i Kwh Consumati
}
TCampionature=micros();
if (millis()>(Tmemoria + 14400000)){//BackUp ogni 4 ore= 14400000mS
unsigned char k,mem;
for (k=0;k<4;k++){
mem = ((unsigned char*) &TotProdotta)[k];
EEPROM.write(0x00+k,mem);
}
for (k=0;k<4;k++){
mem = ((unsigned char*) &TotAssorbita)[k];
EEPROM.write(0x05+k,mem);
}
Tmemoria=millis();
}
//---------------------------------------------------------------


//VISUALIZZA E SPENGE IL DISPLAY SE NON USATO
if (digitalRead(PagPin) == HIGH & Timeout<=0){
digitalWrite(BACKLIGH_PIN, HIGH);//accendi LCD
Timeout=TempoLed;
delay(1000);
}
if (Timeout>0) {
digitalWrite(BACKLIGH_PIN, HIGH);//accendi LCD
Timeout--;
if (digitalRead(PagPin) == HIGH){
pagina++;
if (pagina>3)pagina=0;
}

switch (pagina){
case 0 :
lcd.setCursor(0, 0);
lcd.print ("Assorbita= ");
lcd.print (PotenzaAss);
lcd.print ("W ");
lcd.setCursor(0,1);
lcd.print ("Prodotta = ");
lcd.print (PotenzaPro);
lcd.print ("W ");
break;
case 1 :
lcd.setCursor(0, 0);
lcd.print ("Tensione= ");
lcd.print (Tensione);
lcd.print ("V ");
lcd.setCursor(0,1);
if(ConfigB){
lcd.print ("Stato UPS=");
if (AssorbitaMediaP > 0.2) lcd.print ("STBY ");
else lcd.print ("ACTIVE ");
}
else lcd.print ("----------------");

break;
case 2 :
lcd.setCursor(0, 0);
lcd.print ("CorrenteA= ");
lcd.print (AssorbitaMediaP,2);
lcd.print ("A ");
lcd.setCursor(0,1);
lcd.print ("CorrenteP= ");
lcd.print (ProdottaMediaP,2);
lcd.print ("A ");
break;
case 3 :
lcd.setCursor(0, 0);
lcd.print ("TotA= ");
lcd.print (TotAssorbita,1);
lcd.print ("Kwh ");
lcd.setCursor(0,1);
lcd.print ("TotP= ");
lcd.print (TotProdotta,1);
lcd.print ("Kwh ");
break;

}
}
else {
digitalWrite(BACKLIGH_PIN, LOW);//Spenge LCD
pagina=PagDefault;//imposta la pagina default
}

Serial.write ("Tensione= ");
Serial.println(Tensione);
Serial.write ("Frequenza= ");
Serial.println(Frequenza);
Serial.write ("Amper RMS assorbiti= ");
Serial.println(AssorbitaMediaP);
Serial.write ("Amper RMS Prodotti= ");
Serial.println(ProdottaMediaP);
Serial.write ("Potenza assorbita= ");
Serial.println(PotenzaAss);
Serial.write ("Potenza Prodotta= ");
Serial.println(PotenzaPro);
Serial.write ("Totale consumata= ");
Serial.println(TotAssorbita);
Serial.write ("Totale Prodotta= ");
Serial.println(TotProdotta);
Serial.write ("Taratura Sensore Assorbita= ");
Serial.println(AssorbitaMedia);
Serial.write ("Taratura Sensore Prodotta= ");
Serial.println(ProdottaMedia);


//TRASMETTI DATI OGNI 15 SECONDI OPPURE IMMEDIATAMENTE SE LA POTENZA PRODOTTA
//E' PROSSIMA ALLA POTENZA ASSORBITA
if (ProdottaMediaP != 0 && (ProdottaMediaP > (AssorbitaMediaP - 0.30)) && ConfigB==false || millis() > (time + 15000)){
time = millis();
byte Pro1 = PotenzaPro&0xFF;
byte Pro2=(PotenzaPro&0xFF00)>>8;
byte Ass1=PotenzaAss&0xFF;
byte Ass2=(PotenzaAss&0xFF00)>>8;
byte CPro1= int(ProdottaMediaP*100)&0xFF;
byte CPro2= (int(ProdottaMediaP*100)&0xFF00)>>8;
byte CAss1= int(AssorbitaMediaP*100)&0xFF;
byte CAss2= (int(AssorbitaMediaP*100)&0xFF00)>>8;
byte TPro1= long(TotProdotta*10)&0xFF;
byte TPro2= (long(TotProdotta*10)&0xFF00)>>8;
byte TPro3= (long(TotProdotta*10)&0xFF0000)>>16;
byte TAss1= long(TotAssorbita*10)&0xFF;
byte TAss2= (long(TotAssorbita*10)&0xFF00)>>8;
byte TAss3= (long(TotAssorbita*10)&0xFF0000)>>16;
byte CKS = (ADR+Tensione+Pro1+Pro2+Ass1+Ass2+CPro1+CPro2+CAss1+CAss2+TPro1+TPro2+TPro3+TAss1+TAss2+TAss3)/16;
char msg[17] = {ADR,Tensione,Pro1,Pro2,Ass1,Ass2,CPro1,CPro2,CAss1,CAss2,TPro1,TPro2,TPro3,TAss1,TAss2,TAss3,CKS};
digitalWrite(13, true); // Flash a light to show transmitting
vw_send((uint8_t *)msg, 17 );
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13, false);
}
}


Nella Configurazione B il PowerMeter visualizza sulla pagina 2 lo Stato dell'UPS
-ACTIVE se stà fornendo energia


-STBY se in attesa


Spero che sia di vostro gradimento e che il mio non sia figlio unico


Saluti Veri
ElettroshockNow

Ora una Breve panoramica della realizzazione:
Il sensore ACS712 da 30A

Consiglio un bel giro di nastro autoagglomerante

Magari installandoli in maniera fissa

L'arduino pronto per sposarsi con il display

L'interno nasconde


L'estetica finale




eliafino il 9/2/2013, 8:50
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Bel progetto


Io avrei un Raspberry ma pare che non sia compatibile con il convertitore seriale che mi serve per comunicare con il regolatore di carica, sennò userei anche io quei sensori di corrente, avevo già preso quello da 200A

NonSoloBolleDiAcqua il 9/2/2013, 9:04
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Un lavoro notevole,realizzato in tempi ristrettissimi e documentato in modo eccelso: cosa dire?
FENOMENALE!!!!!


ElettroshockNow il 9/2/2013, 11:45
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Thanks ....ma FENOMENALE
me pare troppo
.
Sò du fesserie al confronto di altri progetti postati nel forum......ma son contento che piace un pochino anche il mio...
In verità mi aspetto questa estate il decollo di PowerMeter ...........Sai quanti saranno curiosi di leggere i consumi e prodotti (negli impianti sprovvisti!!!)

Ciao

CITAZIONE [quote]Io avrei un Raspberry ma pare che non sia compatibile con il convertitore seriale che mi serve per comunicare con il regolatore di carica

Scusami ma non ne capisco niente di Raspberry ma :
Il tuo PC8048 usa una interfaccia RS485 con protocollo MODBUS ,quindi prova di interfaccia Rs485-232 e implementi il protocollo via software (almeno io farei cosi' con Arduino)!!!

Ciao
ElettroshockNow

eliafino il 9/2/2013, 13:48
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE [quote]CITAZIONE [quote]Io avrei un Raspberry ma pare che non sia compatibile con il convertitore seriale che mi serve per comunicare con il regolatore di carica

Scusami ma non ne capisco niente di Raspberry ma :
Il tuo PC8048 usa una interfaccia RS485 con protocollo MODBUS ,quindi prova di interfaccia Rs485-232 e implementi il protocollo via software (almeno io farei cosi' con Arduino)!!!

Ciao
ElettroshockNow

Anche tu hai ragione, loro mi hanno dato una interfaccia RS485<->USB, collegandola al raspberry fa andare in confusione la porta Ethernet...
... potrei provare ad usare un convertitore rs485-rs232 e connetterlo direttamente alla porta seriale del raspberry.
Poi per il modbus non c'è molto, oppure, ci sarebbe un programmino che gira in linux, modpoll, ma non è compilabile per raspberry, non forniscono i sorgenti.
Ci sono script in python, ho visto qualcosa in php, ma niente di facile facile... vediamo...
... mi accontento per ora della paginetta internet


ElettroshockNow il 9/2/2013, 13:57
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Gran bel problema........
In alternativa...potesti fare un concentratore di sensori con Arduino (li' i protocolli ModBus ci sono) poi lo interroghi via seriale dal raspberry.....
Certo aggiungi un pezzo al puzzle, ma cosi il lavoro sporco lo farebbe Arduino e al Rasp solo (!!) la grafica. ........

CITAZIONE [quote]... mi accontento per ora della paginetta internet

E lasci il Rasp solo soletto nel cassetto ..


Ciao
ElettroshockNow



eliafino il 9/2/2013, 19:34
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Appena ho tempo provo qualche soluzione...
... di rasp ne ho 2 una mi fa da mediacenter, connesso alla tv... l'altro x esperimenti, mentre non ho nessun arduino.

Luca450Mhz il 11/2/2013, 12:58
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (eliafino @ 9/2/2013, 19:34) [quote]... di rasp ne ho 2 una mi fa da mediacenter, connesso alla tv...

Piccola intrusione.. ho ordinato il raspberry e devo aspettare ancora una settimana e mezza (almeno).. ho intenzione di usarlo per varie cose, tra le quali media center.. come ti trovi? Quali tipo di file video riproduci? Hai mai provato con file in full-hd? Ce la fa?
Grazie!

eliafino il 11/2/2013, 16:15
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Direi che lo uso quasi esclusivamente con mkv in fullhd, ma anche x video in streaming...
... uso xbian come software.

Ottimo prodotto! Soprattutto l'ultima versione con 512Mb di RAM


Luca450Mhz il 11/2/2013, 16:44
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ho ordinato questo da 512MB di ram, la revisione 2 del modello B.
Oltre a questa distro che mi hai suggerito, utilizzerò anche l'immagine preparata dal Bolle per fare delle prove..
Non vedo l'ora che arrivi a casa così lo provo subito subito!

ElettroshockNow il 13/2/2013, 11:45
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao a Tutti,
Proseguo ed ultimo il progetto PowerMeter con un Up Software....

Come avevo detto in precedenza il Powermeter invia via radio tutti i dati che misura e che memorizza ....ma come riceverli e visualizzarli ?

La parte hardware è molto semplice,si tratta di un modulo Receiver OOK 433Mhz (dipende dal modulo tx che installate nel PowerMeter) connesso al solito Arduino ...


Caricando il seguente codice
#include <virtualwire.h>
int Tensione;
int PotenzaPro;
int PotenzaAss;
float CorrentePro;
float CorrenteAss;
float TotalePro;
float TotaleAss;

void setup()
{
Serial.begin(9600); // Debugging only
Serial.println("setup");

// Initialise the IO and ISR
vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000); // Bits per sec

vw_rx_start(); // Start the receiver PLL running
}

void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;

if (vw_get_message(buf, &buflen)) // Non-blocking
{
/*
int i;
digitalWrite(13, true); // Flash a light to show received good message
// Message with a good checksum received, dump it.
Serial.print("Got: ");

for (i = 0; i < buflen; i++)
{
Serial.print(buf[i], DEC);
Serial.print(" ");
}
*/
Tensione = buf[1];
PotenzaPro = (int(buf[3]<<8)+buf[2]);
PotenzaAss = (int(buf[5]<<8)+buf[4]);
CorrentePro = float(int(buf[7]<<8)+buf[6])/100;
CorrenteAss = float(int(buf[9]<<8)+buf[8])/100;
TotalePro = float(long(buf[12]<<16)+int(buf[11]<<8)+buf[10])/10;
TotaleAss = float(long(buf[15]<<16)+int(buf[14]<<8)+buf[13])/10;


Serial.write ("Tensione= ");
Serial.print(Tensione);
Serial.println(" Volt");
Serial.write ("Potenza Assorbita= ");
Serial.print(PotenzaAss);
Serial.println(" Watt");
Serial.print ("Potenza Prodotta= ");
Serial.print(PotenzaPro);
Serial.println(" Watt");
Serial.write ("Corrente Assorbita= ");
Serial.print(CorrenteAss);
Serial.println(" Amper");
Serial.write ("Corrente Prodotta= ");
Serial.print(CorrentePro);
Serial.println(" Amper");
Serial.write ("Totale Consumata= ");
Serial.print(TotaleAss);
Serial.println(" Kwh");
Serial.write ("Totale Prodotta= ");
Serial.print(TotalePro);
Serial.println(" Kwh");


//Serial.println("");
digitalWrite(13, false);
}
}


verrà visualizzato il solito e noioso Testo



Allora mi son chiesto ....esiste un modo per renderlo piu' [color=gray]colorato ?

Tataaaaaaa Processing !!!!!

Fino a ieri sera ne avevo sentito solo parlare .....quindi durante il turno di notte (a proposito che freddo) mi son scaricato il software (100% Gratuito!),mi son visto gli esempi che mi interessavano e questa mattina ho regalato un pò di colore al PowerMeter.



Questo è il Codice che potete successivamente renderlo StandAlone esportandolo per il vostro sistema operativo attraverso il compilatore Processing
PImage img;
import processing.serial.*;

int lf = '#';
Serial myPort;
String inbuf = null;
int Tensione;
int PotenzaPro;
int PotenzaAss;
float CorrentePro;
float CorrenteAss;
float TotalePro;
float TotaleAss;
long TimeRec=0;

void setup() {
println(Serial.list());
myPort = new Serial(this, "COM5", 9600);
myPort.clear();
inbuf = myPort.readStringUntil(lf);
inbuf = null;
img = loadImage("PowerMeterJpg.jpg");
size(400, 250);
}


void draw() {

int Volt=(Tensione-200)*10;
int Ass=-(PotenzaAss/25);
int Pro=-(PotenzaPro/25);
image(img, 0, 0);
fill(255, 0, 0);
rect(Volt, 25,5,15);
fill(0, 204, 255);
rect(166, 230,23,Ass);
textSize(15);
text("Potenza="+PotenzaAss+("W"), 30, 110);
text("Corrente="+CorrenteAss+("A"), 30, 140);
textSize(20);
text(TotaleAss+("Kwh"), 35, 210);
fill(0, 255, 0);
rect(211, 230,23,Pro);
textSize(15);
text("Potenza="+PotenzaPro+("W"), 250, 110);
text("Corrente="+CorrentePro+("A"), 250, 140);
textSize(20);
text(TotalePro+("Kwh"), 255, 210);



if(millis()<timerec+30000)fill(0, 255, 0);
else fill(255, 0, 0);
ellipse(10, 10, 15, 15);






while (myPort.available() > 0) {
TimeRec=millis();
inbuf = myPort.readStringUntil(lf);
if (inbuf != null) {
int[] buf = int(split(inbuf, ','));
Tensione = buf[1];
PotenzaPro = (int(buf[3]<<8)+buf[2]);
PotenzaAss = (int(buf[5]<<8)+buf[4]);
CorrentePro = float(int(buf[7]<<8)+buf[6])/100;
CorrenteAss = float(int(buf[9]<<8)+buf[8])/100;
TotalePro = float(int(buf[12]<<16)+int(buf[11]<<8)+buf[10])/10;
TotaleAss = float(int(buf[15]<<16)+int(buf[14]<<8)+buf[13])/10;

fill(100, 0, 100);
ellipse(10, 10, 15, 15);


print ("Tensione= ");
print(Tensione);
println(" Volt");
print ("Potenza Assorbita= ");
print(PotenzaAss);
println(" Watt");
print ("Potenza Prodotta= ");
print(PotenzaPro);
println(" Watt");
print ("Corrente Assorbita= ");
print(CorrenteAss);
println(" Amper");
print ("Corrente Prodotta= ");
print(CorrentePro);
println(" Amper");
print ("Totale Consumata= ");
print(TotaleAss);
println(" Kwh");
print ("Totale Prodotta= ");
print(TotalePro);
println(" Kwh");
}
}
}


Attenzione :Se optate per la grafica "Processing" dovete sostituire sull'Arduino il codice con questo
#include <virtualwire.h>
int Tensione;
int PotenzaPro;
int PotenzaAss;
float CorrentePro;
float CorrenteAss;
float TotalePro;
float TotaleAss;

void setup()
{
Serial.begin(9600); // Debugging only
Serial.println("setup");

// Initialise the IO and ISR
vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000); // Bits per sec

vw_rx_start(); // Start the receiver PLL running
}

void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;

if (vw_get_message(buf, &buflen)) // Non-blocking
{

int i;
digitalWrite(13, true); // Flash a light to show received good message
// Message with a good checksum received, dump it.
//Serial.print("Got: ");

for (i = 0; i < buflen; i++)
{
Serial.print(buf[i], DEC);
Serial.print(",");
}
Serial.print("#");

Tensione = buf[1];
PotenzaPro = (int(buf[3]<<8)+buf[2]);
PotenzaAss = (int(buf[5]<<8)+buf[4]);
CorrentePro = float(int(buf[7]<<8)+buf[6])/100;
CorrenteAss = float(int(buf[9]<<8)+buf[8])/100;
TotalePro = float(long(buf[12]<<16)+int(buf[11]<<8)+buf[10])/10;
TotaleAss = float(long(buf[15]<<16)+int(buf[14]<<8)+buf[13])/10;

/*
Serial.write ("Tensione= ");
Serial.print(Tensione);
Serial.println(" Volt");
Serial.write ("Potenza Assorbita= ");
Serial.print(PotenzaAss);
Serial.println(" Watt");
Serial.print ("Potenza Prodotta= ");
Serial.print(PotenzaPro);
Serial.println(" Watt");
Serial.write ("Corrente Assorbita= ");
Serial.print(CorrenteAss);
Serial.println(" Amper");
Serial.write ("Corrente Prodotta= ");
Serial.print(CorrentePro);
Serial.println(" Amper");
Serial.write ("Totale Consumata= ");
Serial.print(TotaleAss);
Serial.println(" Kwh");
Serial.write ("Totale Prodotta= ");
Serial.print(TotalePro);
Serial.println(" Kwh");
*/
//Serial.println("");
digitalWrite(13, false);
}
}



Sperò che sia di vostro Gradimento e che regali un pò di colore anche hai vostri progetti.

Sempre a vostra disposizione per dubbi,critiche e consigli bidirezionali
ElettroshockNow



NonSoloBolleDiAcqua il 13/2/2013, 11:49
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento





ElettroshockNow il 13/2/2013, 12:00
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
ora tutto bello colorato


fulroc il 13/2/2013, 20:59
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (ElettroshockNow @ 13/2/2013, 12:00) [quote]
ora tutto bello colorato


Hai fatto veramente un'ottimo lavoro!!!!
Spero, al più presto, di avere del tempo libero per iniziare a studiare l'arduino per applicarlo.
Un saluto. Fulroc

jumpy75 il 13/2/2013, 21:01
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Bolle, qui EettroshockNow ci sta' superando con Arduino......... Bisogna rimettersi sotto e chiudere un po' di proggettini lasciati in sospeso ehehehhehe

Fino al 20 febbraio sono incasinato con l'uni, pero' dal 21 in poi ci possiamo rimettere sotto con il PPTEA-XXX!!!!

J.

ElettroshockNow il 14/2/2013, 18:29
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Arduino
PPTEA

Li preferisco cosi' :

Arduino
PPTEA

Forse Troppo ........allora cosi'

Arduino
PPTEA

Ciao e al prossimo Project
ElettroshockNow

jumpy75 il 15/2/2013, 14:40
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
, concordo con l'ultima vignetta....


J.

calcola il 17/2/2013, 19:56
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Elettro, non ho capito bene, usi un Arduino che trasmette i dati ad un altro Arduino? Oppure il ricevente è un raspbery?

Poi volevo chiederti che tu sappia quale è la massima temperatura che sopporta l'atmega senza friggere? Chiuso dentro la scatola la temperatura...

CITAZIONE [quote]Quali tipo di file video riproduci? Hai mai provato con file in full-hd? Ce la fa?

Io lo uso come mediacenter da parecchi mesi, per i film FullHD in streaming, nessun problema a patto che l'HD da cui prelevi il film non sia gestito, dallo stesso raspberry. Mentre via lan o internet nessun problema.

ElettroshockNow il 17/2/2013, 20:16
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao Calcola grazie per l'interesse.
Sono due Arduino .
Il trasmettitore possiede il display per leggere i dati in locale. Gli stessi dati vengono trasmessi con cadenza di 15 sec in wireless usando la libreria virtualwire.

Un secondo arduino con la sezione ricevente invia via usb i dati al Pc, ed usando il programma in processor li visualizza con la grafica (colorata
) .

Ciao
ElettroshockNow

Ps: per quanto riguarda la temperatura non saprei!! Prova a vedere sul datasheet ... Ciao

calcola il 17/2/2013, 20:49
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Grazie, ho capito. Un secondo arduino fa da ponte tra il primo ed il Pc, non si potrebbe semplificare il tutto inviando i dati direttamente tramite seriale o lan?

Provo a guardare la scheda tecnica. Ho posto la domanda perchè al mio, che ho chiuso dentro un centralino, ho aggiunto un sensore di temperatura ed ho visto che dentro al chiuso la temperatura raggiunge i 40° e siamo in inverno, in estate... ho provveduto ad aggiungere una ventola di raffreddamento che parte se si superano i 45°C, non so però se ho fatto una cosa inutile, non conosco i valori massimi di temperatura sopportati dal microcontrollore.

ElettroshockNow il 17/2/2013, 21:07
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE [quote]direttamente tramite seriale o lan?

Certo che si può. .....
Per la seriale bisogna solo modificare le ultime righe del powermeter ....se vuoi domani lo faccio.
Così risparmieresti un arduino perdendo il wireless ...

Per la lan risulta piu complesso ma non impossibile...

Temperatura:
È possibile che sia il regolatore di tensione che fa aumentare la temperatura? Se è così una soluzione è ridurre la tensione in ingresso....io vado a circa 7volt .

Ciao
ElettroshockNow

calcola il 17/2/2013, 21:16
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE [quote]È possibile che sia il regolatore di tensione che fa aumentare la temperatura? Se è così una soluzione è ridurre la tensione in ingresso....io vado a circa 7volt .

Ora che mi fai riflettere, si è possibile, l'impianto è a 24v, riduco la tensione con un dc dc a 6,5v, al tatto non lo sento caldo, la corrente in gioco è veramente minima. Però potrebbe essere quello, il trasformatore è dentro il centralino, proverò a metterlo all'esterno.

CITAZIONE [quote]Per la seriale bisogna solo modificare le ultime righe del powermeter ....se vuoi domani lo faccio.
Così risparmieresti un arduino perdendo il wireless ...


Anzi, di più, potrei aggiungere il codice ed i due nuovi sensori all'arduino esistente o al limite carico tutto su un mega.

ElettroshockNow il 17/2/2013, 21:33
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
ottima idea .......in pratica un concentratore di sensori

Cmq penso che Uno è piu che sufficiente , anzi io avrei optato per i nano (ricordi tuo consiglio).
Poi deliziaci della tua creatura


Ciao
ElettroshockNow

calcola il 17/2/2013, 22:02
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
I nano hanno due porte analogiche in più rispetto all'uno o duemilanove. Al momento due porte analogiche sono impegnate con i sensori di corrente delle due stringhe, una terza con quello di tensione, due sono impegnate con RTC, ne rimane libera solo una. Devo passare al mega o al nano, quello non ce la fa più!

ElettroshockNow il 18/2/2013, 9:26
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Giusto .....stai stretto di porte analogiche
.
La soluzione migliore è sicuramente la tua ,andare di Mega oppure (alternativa a scopo puramente di curisità) caricare la libreria Time.h e rimuovere il Ds1307......
Io uso questa alternativa nel mio piccolo impianto delle luci giardino (il codice è a metà pagina!)
e ad essere sincero l'errore è del tutto trascurabile ........

Ciao
ElettroshockNow

calcola il 18/2/2013, 15:08
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ho visto il tuo listato e mi chiedo, in caso di interruzione dell'alimentazione occorre sistemare nuovamente l'ora o in qualche modo la mantiene in memoria.

ElettroshockNow il 18/2/2013, 15:17
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
La prima che hai detto
.
Però:
-l'alimentazione è presa dalle batterie.Quindi salvo in casi particolari è sempre alimentato..


calcola il 18/2/2013, 15:34
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Non sempre, dalla scorsa settimana anche il mio è alimentato direttamente dalle batterie, prima invece durante la commutazione per batterie scariche si riavviava anche l'arduino.

giocan il 29/4/2013, 11:04
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
bene, può anche essere utilizzato per pilotarmi dei relè sul FV in determinate condizioni di assorbimento....
senti l'ACS712 rileva la corrente, per la misura della tensione hai utilizzato dei TV, oppure come hai interfacciato tale valore con arduino?

grazie 1000

ElettroshockNow il 29/4/2013, 14:35
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao giocan ,
Son felice che il powermeter possa essere utile anche ad altri ....

Per la lettura della tensione puoi vedere lo schema proposto nella prima pagina .
Ho usato semplicemente un trasformatore con doppia uscita (8+4) ....
La 8 volt l'ho raddrizzata e livellata per alimentare il tutto, mentre invece la 4 l'ho raddrizzata e mandata direttamente all'arduino semplicemente attraverso un partitore.
Per la misurazione leggo solo i picchi e di conseguenza il valore efficace.....
(Attenzione nel dimensionare le resistenze del partitore ....la tensione di picco su un trasformatore con uscita 4V sarà 1, 41 volte maggiore
)

Il motivo di questa anomala lettura è perché prima o poi implemento la lettura del cosfi
......e quindi avrò bisogno di poter misurare l'andamento della sinusoide anche della tensione.

PS: se ti piace il Fai da Te ,puoi realizzare il circuito proposto già con il PCB pronto per essere stampato
.
I valori vengono inviati sulla seriale ed è possibile visualizzarli con HyperTerminal;oppure con il compiler PPTEA ,ecc ecc ecc , ma se vuoi puoi aggiungere un display a due fili .........


Ciao
ElettroshockNow



nino il 13/5/2013, 17:27
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao,ho visto per caso il tuo progetto del voltometro/amperometro/wattmetro,e sono rimasto entusiasta.Sono un pensionato,con una vecchia passione (elettronica che da parecchio ,non pratico piu'),ora voglio sentirmi anche io attivo ,senza accasciarmi (sarebbe la fine).Potresti aiutarmi a costruire questo bellissimo progetto,dandomi tutte le informazioni:dalla lista dei componenti,all'inserimento degli stessi nelle schede,al montaggio ,taratura e al programma.Naturalmente me lo devi spiegare il piu' elementare possibile.Se poi hai gia' schede,materiale e quant'altro,fammi sapere .Ti ringrazio e ti saluto

ElettroshockNow il 13/5/2013, 18:09
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao Nino ,
mi rende onorato esser di aiuto ...

Il Progetto PowerMeter è stato realizzato usando :

-n°1 ARDUINO UNO
-n°1 LCD 16x2 (Acquistabili in combo ARDUINO+LCD ad esempio
QUI ,ma spesso si trovano a molto meno seguendo le aste
-n°2 sensori ACS712 30 Ampere (Sempre Ebay
QUI)
-n°1 trasformatore primario 220V secondario 8+4V Potenza 15VA (Negozio di impianti elettrici, io ho usato il TM15/12 della ABB)
e poi i componenti che vedi nel seguente schema


Se poi vuoi avere la visualizzazione remota wireless su PC dovrai aggiungere un secondo ARDUINO (vanno bene anche i più piccolini tipo
QUESTO ) e un modulo TX OOK ed uno RX OOK operante alla frequenza da te preferita (vedi QUI)


Oppure se non manca la manualità puoi optare nella realizzazione dello stesso circuito usando il PPTEA ... prendendo spunto da un progetto fatto qualche mese fà che può essere facilmente adattato .... vedi

Il tuo obbiettivo è solo visualizzare ?
visualizzare in remoto ?
Creare un log dei consumi sul computer?
Accendere o spengere dei carichi in funzione del consumato ,ad esempio isolare una linea se c'e' un eccesso di assorbimento per evitare l'intervento del magnetotermico principale?

Ciao e spero di aver tralasciato niente...
ElettroshockNow



nino il 14/5/2013, 14:35
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Grande nell'esprimerti e nel proporti,io che non so quasi niente di elettronica,sono riuscito ad entrare in questo ottimo progetto.Ancora complimenti!!!

ElettroshockNow il 17/5/2013, 18:18
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Grazie Nino,

Mi son permesso di disegnare lo basetta e lo schema di collegamento.



Ciao e buon PowerMeter
ElettroshockNow



nino il 17/5/2013, 18:25
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Grazie,gentilissimo e schema bellissimo,complimenti

ElettroshockNow il 17/5/2013, 18:35
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Spero che ti può essere utile .....
Sottointeso che il trasmettitore se non necessario può essere non installato ....
e che possono essere installati fino a 4 sensori ACS712 (modificando il codice) ...... donando al circuito la possibilità di poter vedere su un solo strumento l'assorbimento e i consumi sezionando casa in 4 Blocchi .......

Poi ....... libera la fantasia

Ciao

alealfredo il 18/6/2013, 22:53
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao,sono veramente affascinato dal tuo progetto. Veramente interessante, tanto che avrei pensato di utilizzarlo per la gestione del condizionatore/pompa di calore legandolo alla produzione del fotovoltaico, con un range di attacco stacco programmabile, e lasciando al display la sola visualizzazione dei watt prodotti/consumati che anche la mia cara nonna sappia quando lavare, stirare ecc, ecc. Purtoppo di manualità ne ho a palate , ma di programmazione brancolo nel buio!! Se gentilmente riuscissi ad indicarmi le retta via , ne sarei felice. Ciao e grazie.

ElettroshockNow il 19/6/2013, 12:21
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao Alealfredo ,
Per il tuo progetto puoi usare come base il powermeter ed aggiungere una scheda relè pilotata dei pin digitali liberi di Arduino (ne hai 12 a tua completa disposizione
) .
Poi una volta che leggerai sul display potenza prodotta e assorbita implementeremo la parte software che si preoccupa delle soglie .... e ti assicuro che una volta che hai capito il sistema tutto sembrerà semplice



Ciao e buon power ....
ElettroshockNow



alealfredo il 3/7/2013, 22:18
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao elettro, sono arrivato alle prime prove a banco con un alimentatore 5v trovato in casa(senza adattatore di livello "è necessario"? ). Per adesso il circuito PRODUZIONE non legge valori oltre8/900watt. Sicuramente sto sbagliando qualcosa. Il circuito assorbimenti legge correttamente. A vuoto invece leggono rispettivamente 10 e 50 watt.
Che ne pensi?

notte elettro

ElettroshockNow il 3/7/2013, 22:33
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao,
Che tipo di sensori stai usando ?
Al pin A3 che tensione gli stai mandando ?

Cmq stai a buon punto , ora dovrai tarare il tutto variando i valori di offset dei sensori per rilevare lo zero e i fattori di conversione .....
Ma se hai qualche settimana di pazienza posto un nuovo codice che usa un nuovo calcolo per rilevare la potenza ed ha la taratura degli offset automatica


Ciao e buone sperimentazioni
ELettroshocknow

alealfredo il 4/7/2013, 21:09
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
hello, i sensori sono gli acs712 30A, ma sembra uno dei due sia da 5A viste le letture; forse hanno toppato alla spedizione(non so dove sta scritta la potenza).
Al pin A3 non ho collegato nulla perche non mi interessa la lettura della rete, ma se al progetto serve provvederò al collegamento. A proposito hai qualche altra alternativa per il sensore, visto che ho già l'alimentatore e quindi evitare l'acuisto del trasformatore ,più l'assemblaggio della schedina di raddrizzamento.
CIao a presto.

ElettroshockNow il 4/7/2013, 21:53
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Effettivamente le scritte son piccole , ma ci sono ..... procurati una lente , una buona luce e con un po' di pazienza riuscirai a leggerlo sotto la scritta Acs712
sul minuscolo chip ...

Per quanto l'alimentazione va' benissimo , l'importante è che sia sul Vin (quindi o sul connettore o sul pin Vin) e che la tensione sia almeno 8Vdc.
Questo perché è bene lasciare la stabilizzazione al 7805 della scheda.
Invece per il piedino A3 devi trovare una soluzione ....perché sennò come calcola la potenza non potendo misurare la tensione ....
Se non hai pretese sulla precisione della potenza potresti impostare a livello codice un valore standard di 230V evitando di installare il trasformatore per rilevare la tensione di rete .
Modificare il codice credo che sia abbastanza semplice , ma se hai problemi domani ci metto mano.
Avrai conferma che hai correttamente modificato il codice quando sulla pagina tensione leggerai 230 v


Ciao e buon arduino
ElettroshockNow

alealfredo il 4/7/2013, 22:34
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Quindi è sbagliata l'alimentazione a 5V? Per la tensione di rete la sto già monitorando con Raspberry e 123solar e varia dai 230 fino ai 245, imposterò un valore medio, che nel complesso da un errore trascurabile.
Domani mi procuro una lente e vedo di capire cosa c'è scritto sopa il cip.
Rinotte Elettro.

ElettroshockNow il 4/7/2013, 23:14
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
No, non è sbagliato , ma dovrai alimentare direttamente arduino quindi sui pin +5 della scheda, ma perderesti lo switch automatica delle alimentazioni della scheda rischiando di mandare la +5 ad un eventuale Pc connesso via usb ........
Quindi non è sbagliato , ma è rischioso oltre a perdere anche la 3.3 ....

Se invece alimenti con 5V passando dal connettore (o pin Vin), avrai circa 4, 7V lato arduino e di conseguenza anche sugli ACS ........e non saprei che anomalie potresti riscontrare .......ma niente di pericoloso


Ciao

alealfredo il 11/7/2013, 23:21
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao ele, finalmente le letture funzionano a dovere
.
Mi sono costruito la basetta su istruzioni dell'ottimo schema da te postato(dovrei recitare il mea culpa per non averlo fatto prima
).
Però scusami di nuovo, ma con il pulsante e la retroilluminazione ,non l'ho proprio capito come collegare. Anzi a me andrebbe meglio se rimanesse sempre acceso.
Fatto questo rimarrà solo , come mi avevi detto in precedenza, implementare il programma con la gestione del relè, per il comando della pompa di calore e quindi anche in questo caso, sono nelle tue mani!!!
Ti ringrazio per la pazienza che mi dedichi e di nuovo complimenti per il tuo progetto che mi coinvolto in questa avventura elettronica.

Notte ele..

ElettroshockNow il 12/7/2013, 19:02
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
,
In fine settimana prevedo di dedicarci un pò di tempo implementando le funzioni .
Nel frattempo ti rispondo come collegare il pulsante ...
Il Pulsante deve portare il +5V quando premuto al piedino DIGITAL 2,quindi semplicemente dovrai mettere una resistenza da 10KOhm tra il Digital 2 e negativo ed aggiungere un pulsante normalmente aperto tra il Gigital 2 e il +5 (il +5 è lo stesso positivo che porti hai sensori
)

Adesso veniamo all'implementazione ....
-Aggiungerò 2 uscite relè programmabili (ma possono essere 3 4 5 6 7
) le quali verranno attivate dalle soglie impostate in fase di programmazione
-Lascerò sempre il display Acceso
-La pagina di Default sarà la pagina delle Potenze

Però ..... se vuoi , possiamo usare i pulsanti del display per cambiare le soglie direttamente ,sempre se hai acquistato il mio stesso shield ....
A te si complicherà l'istallazione perchè dovrai garantire l'accesso ai pulsanti ...

Ciao e gentilmente elenca tutto quello che dovrà fare il powermeter ......saro' lieto di implementarlo


alealfredo il 12/7/2013, 21:43
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Grazie infinite, sono lusingato dalla tua collaborazione.

Per l'accesso ai pulsanti di sicuro troverò la soluzione adeguata(il pulsante al Digital 2 servirà ancora?)
Per il programma del/i relè pensavo di partire con una soglia di 1,1kw prodotti ed uno sgancio a 0,6 kw, con un tempo minimo di funzionamento di 6/10 minuti,per evitare eccessive partenze e ridurre al minimo l'effetto nuvola.
Ovvio che per l'estate non crea grandi problemi , ma durante le stagione fredda quando il sole c'è e non c'è potrebbe creare danni alla PDC.
E' sottinteso che il sistema se funziona a dovere sarà di sola integrazione e non di sostituzione ai sistemi tradizionali(quindi favorire l'autoconsumo).
Il tutto ovviamente, dovra essere testato e tarato durante la stagione.


ElettroshockNow il 16/7/2013, 21:38
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Eccomi ......
Sono in ferie e .... pensavo di aver tempo


Come promesso allego la versione Powermeter 3.4 che implementa alcune funzioni.
Prima di tutto le connessioni di Arduino:
Analogici:
-A0=Ingresso Tastiera LCD (compresa nello shield)
-A1=Segnale proveniente dal sensore Produzione (vedi schema precedente)
-A2=Segnale proveniente dal sensore Assorbimento (vedi schema precedente)
-A3=Segnale Tensione Rete proveniente dalla scheda (vedi schema precedente)
Digitali:
-D2=ingresso Pulsante (Mettere una resistenza pullDown da 10K e il pulsante NA tra il +5 e il pin D2 )
-D3=Uscita Segnale Codificato per trasmissione radio (ATTENZIONE era il PIN D12)
-D456789= LCD (compresa nello shield)
-D10=Retroilluminazione LCD (compresa nello shield)
-D11=Uscita Relè 1 (Segnale TTL)
-D12=Uscita Relè 2 (Segnale TTL)

Per la prima accensione deve essere eseguita la procedura di ripristino default in quando bisogna precaricare i valori delle soglie.

La procedura consiste nel disalimentare il powermeter e successivamente accenderlo con il pulsante premuto (o un ponticello provvisorio tra il +5 e il D2) fino a quando non compare la scritta sul display "ATTENZIONE RESET CONTATORI TRA 4H",quindi rilasciare il pulsante (o rimuovere il ponticello)

A questo punto il powermeter visualizzerà le misurazioni e gestirà automaticamente i carichi posti sulle due uscite in funzione delle soglie impostate . Le soglie potranno essere variate dalla tastiera dell'LCD scorrendo le 10 Pagine a disposizione e verrano memorizzate nella memoria Eeprom (memoria non volatile).

Soglie di Default:
ON Uscita1 = 1000W
Time Uscita1 = 10S
OFF Uscita1 = 500W

ON Uscita2 = 1200W
Time Uscita2 = 600S
OFF Uscita2 = 800W

Le uscite si attiveranno se la produzione supera la Potenza ON impostata per un determinato tempo e le uscite verrànno disattivate se la produzione risulta inferiore alla Potenza OFF .

Ciao e buon Solare
ElettroshockNow

Scarica allegato
PowerMeter_TX3_4.ino ( Numero download: 54 )



ElettroshockNow il 19/7/2013, 11:43
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Questa mattina pensavo ..... (succede ogni tanto
)
Ma se la potenza da monitorare non sia la potenza prodotta ,ma la differenza tra prodotta ed assorbita ?
e se fosse solo l'assorbita ?

Quindi ho ritoccato un pochino il codice aggiungendo una pagina di configurazione nella quale è possibile scegliere una delle 4 scelte:
-Potenza Prodotta
-Potenza Assorbita
-Potenza Prodotta - Potenza Assorbita
-Potenza Assorbita - Potenza Prodotta

Cosi' da renderlo ancor più versatile ......

metti caso che uno volesse ad esempio accendere una luce che avvisi un sovrassorbimento prima dell'intervento del magnetotermico
.......

Sfogo alla fantasia


Come sempre và avviata la procedura di reset al primo avvio o in caso di disalimentazione nelle prime 4 ore di funzionamento (il powermeter memorizza lo stato ogni 4 ore )

Ciao
ElettroshockNow

PS: il codice postato calcola la potenza in base alla corrente media per la tensione media ....... appena terminerò la nuova versione con interfaccia RS485 (salutando il wireless) verrà introdotta una nuova formula per il calcolo della potenza che lo renderà ancora più preciso e totalmente immune al tipo di carico

Spero che gradirete ......

Scarica allegato
PowerMeter_TX3_5.ino ( Numero download: 77 )



NonSoloBolleDiAcqua il 19/7/2013, 13:48
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Questa ultima pensata mi sembra 'geniale'...


alealfredo il 10/8/2013, 18:56
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Eccomi quà, ora sono io in ferie , e il progetto va avanti.
Il tutto misura ok , solo che a banco la tensione era corretta, ma dopo montato mi misura 204 volt!
Quanto dovrei misurare all'ingresso del sensore A3 di tensione?
In quanto invece al programma mi da errore al DFR_Key con riferimento alla uscita 2 ...booo

forse la libreria che ho scaricato è sbagliata? Mha!!

ElettroshockNow il 12/9/2013, 18:27
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ops .... mi era sfuggito il tuo intervento .... scusami..
Allego la libreria per il DFR_KEY e VirtualWire

Ciao
ElettroshockNow

Scarica allegato
libraries.zip ( Numero download: 14 )



ElettroshockNow il 12/9/2013, 18:30
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Allego inoltre la liquidcristal che uso

Scarica allegato
LiquidCrystal.zip ( Numero download: 21 )



Il_salentino il 22/9/2013, 9:18
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Prima di porre il mio problema, è doveroso da parte mia fare i complimenti a tutti per la dedizione a risolvere i problemi altrui.Vengo a porre il mio problema;premesso che sono un ragioniere con la passione per il fai da te, ho acquistato tutti i componenti per la realizzazione del powermeter. Quello che non sono riuscito a capire cosa è collegato nella 1^ figura insieme ai 2 sensori (sarà il pulsante?), inoltre ho difficoltà a realizzare il circuito stampato sul quale collegare i componenti. Chiedo se è possibile avere il circuito stampato già pronto ed in alternativa dove poterlo comprare. Ho anche la necessità di acquisire i dati della produzione da 2 fonti distanti tra loro e non saprei come fare. In attesa che qualcuno mi aiuti a risolvere il problema, ringrazio anticipatamente e saluto.
Francesco

ElettroshockNow il 22/9/2013, 19:19
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (Il_salentino @ 22/9/2013, 10:18) [quote]Quello che non sono riuscito a capire cosa è collegato nella 1^ figura insieme ai 2 sensori (sarà il pulsante?

Ciao Francesco ,
Quello che vedi è un piccolo modulo radio a 433Mhz .
Il powermeter oltre a visualizzare i dati sul display è in grado di inviarli via usb ad un pc connesso direttamente oppure in wireless usando un secondo arduino come ricevitore (codice arduino e programma in processing sono scaricabili alla seconda pagina della presente discussione)

CITAZIONE (Il_salentino @ 22/9/2013, 10:18) [quote]inoltre ho difficoltà a realizzare il circuito stampato sul quale collegare i componenti. Chiedo se è possibile avere il circuito stampato già pronto ed in alternativa dove poterlo comprare.

La sua realizzazione non è complessa e l'esperienza che farai ti risulterà utile per altri mille progetti .....
Benvenuto nel fai da te

CITAZIONE (Il_salentino @ 22/9/2013, 10:18) [quote]Ho anche la necessità di acquisire i dati della produzione da 2 fonti distanti tra loro e non saprei come fare.

Hai letto tutta la discussione con le possibili applicazioni ?
Si fà sempre in tempo a modificare due linee di codice e renderlo bello e compatibile alle tue necessità .

Ciao
ElettroshockNow

Il_salentino il 22/9/2013, 20:46
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Grazie per la velocità con la quale avete risposto, ma per voi che avete realizzato tanti progetti è facile; io potrei riuscire a realizzare la basetta per il collegamento del trasformatore ed i componenti, ma ho difficoltà a capire come acquisire i dati da 2 fonti distanti 30 metri. Ho l'impianto ad isola distante dall'abitazione e 1 inverter tie gid con 3 panelli sul tetto dell'abitazione e vorrei fare al somma della produzione, premesso che a monte dell'impianto, subito dopo l'inverter max power da 3000W ho inserito 1 contatore che misura la corrente consumata, ma dovrei fare la somma con i watt immessi dal grid tie al quale ho collegato uno di quei misuratori di potenza. Vorrei realizzare qualcosa con arduino ed il powermeter da utilizzare con il pc, il tablet, l'iphone.
per il momento saluto in attesa di consigli.

ElettroshockNow il 22/9/2013, 20:59
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Interessante impianto ....perché non apri una discussione e lo descrivi più in dettaglio , in maniera tale da avere una visione a 360º sul tuo progetto.

Ti anticipo che non sarà una passeggiata .... dovrai necessariamente immeggerti nel fai da te .

Ciao

Il_salentino il 22/9/2013, 21:02
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
La vera difficoltà sta nel realizzare una apparecchiatura che fa la somma delle 2 produzioni e le comunica ad un pc non ha importanza se tramite USB, LAN o RS232 l'importante averli su un pc la gestione dei dati su pc non è un problema, tramite WIFI posso interrogare il pc collegato all'impianto distante l'abitazione.

5a2v0 il 23/9/2013, 8:00
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao a tutti, bel forum, e bel progetto !!!
Ho trovato la discussione perchè da qualche settimana mi sono messo in testa di realizzare un sistema di visualizzazione dei consumi (niente produzione...nessun impianto) e mi eviti di andare fino al piano terra del palazzo quando stacca il contatore enel...

Ho già acquistato ArduinoUNO, un sensore di corrente come quello usato nel tuo progetto ma da 20A, l'alimentatore switching a 12v, una scheda con doppio relè a 12v per staccare la corrente su due sezioni della casa, una scheda relè a 5v che fa da "ponte" tra la prima scheda relè a 12v e arduino, bottoni, led, portaled, regolatori di tensione per abbassare dal 12v dell'alimentatore fino a 8v e poi a 5v per alimentare le varie cose senza tirare tutto dai+5v di Arduino, un monitor 16x2 e un buzzer...

Mi permetto di allegare uno schemino (elementare) di come avevo immaginato attualmente il tutto:


A me interessa che se raggiungo il consumo max (che imposto io) di 3300watt l'arduino mi alimenta un relè a 5v che mi alimenta il relè a 12v che mi "stacca" 1 sezione di casa (la prima sarebbe bagni e corridoio) ... Se dopo il distacco il consumo è ancora elevato, arduino deve fare la stessa cosa con l'altra coppia di relè togliendo corrente alla sezione "stanze e condizionatori".
In questo modo non rimarrei mai senza illuminazione in tutta la casa e corrente in cucina dove magari il frigo e il forno da soli non riescono a raggiungere il limite di enel e non devo scendere al piano terra...


Nota1: dove avevo previsto l'interruttore magnetotermico per eventualmente spegnere tutto il sistema aggiuntivo che vorrei creare, preciso che si tratterebbe di magnetotermico differenziale ABB DS941 C6.

Nota2: La scheda relè a 12v con i relè NC mi garantirebbe il passaggio della corrente nelle sezioni di casa anche quando la sezione aggiuntiva è scollegata (magari per modifiche hw/sw o per eventuali malfunzionamenti...)

Nota3: I bottoni solo collegati cosi in modo da occupare una sola uscita analogica e non impegnare altre uscite digitali rischiando di rimanere senza !!! Le resistenze ovviamente sarebbero differenti tanto da avere un valore in lettura da arduino in un range X se premo un bottone e in un range diverso Y se premo l'altro bottone.

Piccola perplessità...ero partito dal presupposto di leggere gli A a monte di tutto e dare per valore fisso la tensione a 230v arrivando quindi al wattaggio.... considerando quindi:
- le oscillazioni della tensione
- qualcuno mi ha pure detto che in caso di un carico dato da un motore o da alimentatori di tipo switching non si ottiene il reale wattaggio facendo tensione x Ampere a causa dell'angolo di fasatura o.O

rischio di avere delle letture totalmente sballate ???

ElettroshockNow il 23/9/2013, 8:44
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
....... qui si alza il livello qualitativo dei progetti


Ciao 5a2v0 ,
un doveroso complimenti per lo schema di principio ,chiaro e ben fatto e se questo è il tuo primo messaggio resterò in trepidante attesa per il secondo ,terzo ,.....


Analizzando lo schema devo sottolineare alcuni caution :
-il sensore da 20A è sottodimenzionato. A 3300W di assorbimento la corrente avrà picchi di 22A (16Rms), quindi devi necessariamente usare un 30A
-Attenzione .... un sensore ad effetto hall (tipo acs712) restano galvanicamente isolati se non si oltrepassa la massima corrente ..... che nello specifico è 100A ....
Anche se 100A sembrano tanti ,posso garantirti che un corto nell'impianto creerà un picco superiore alla soglia per un tempo abbastanza lungo per connettere il lato 220V del sensore con il resto della scheda
.
Questo è per dirti che visto che sei ancora in fase di progetto ,sostituisci il sensore hall con un classica bobina amperometrica .
Io spesso uso l'economico SCT-013-030 (11Euro) che mi garantisce un isolamento anche nei casi più estremi.
Usarlo è semplice quanto un Acs ...e sicuramente ti sarà utile questo progetto (utili info per il suo utilizzo)

Per le note .... tutte pollice Up ....
posso aggiungere che esiste una libreria per i pulsanti resistivi che ti permette di connettere 6 pulsanti con solo input analogico .....

CITAZIONE [quote]rischio di avere delle letture totalmente sballate ???

Dipende da come effettui le misure.
Misurare solo la corrente ti porterà un errore almeno del 5/10%.
Per ridurlo ,puoi misurare la tensione di picco (come nel powermeter) usando un semplice trasformatore ,calcolare il valore efficace moltiplicandolo per 0.7 e successivamente calcolando la potenza ........
Se invece vuoi eliminare completamente l'errore ti consiglio questa tecnica che ancora non ho introdotto in nessun progetto


Si tratta semplicemente di un overclock del convertitore A/D del micro e una lettura simultanea (o quasi) della tensione e corrente ,calcolando la potenza istante x istante .
Oppure se vuoi avere i valori Rms e successivamente calcolare la potenza puoi fare la radice quadrata della media dei quadrati letti in un periodo.

Ciao e buon lavoro
ElettroshockNow

PS:se il tuo progetto avrà seguito sarò lieto di spostarti in una tua nuova discussione .

5a2v0 il 23/9/2013, 10:28
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Grazie per l'incoraggiamento


Parto dal presupposto che non sono molto preparato sull'argomento e quello che ho fatto fin ora è frutto di letture varie e confronti con amici che invece masticano di elettronica...

Per il sensore in verità avevo visto anche io quel modello ma non era disponibile nel negozio online dove ho preso tutta la roba che ho elencato sopra... avevano infatti solo il modello che ho descritto prima... Sinceramente l'ho preso da 20A in quanto tutti gli interruttori magnetotermici di casa riportano 16A quindi pensavo di essere comunque nei limiti !!!

Eventualmente non posso mettere un fusibile sempre da 20A messo appena prima del cavo, così:


ElettroshockNow il 23/9/2013, 11:40
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Se il tempo di intervento del fusibile è inferiore a 100ms , avresti protetto il sensore.
Ma la potenza massima misurabile resterebbe sui 3000W ....
Forse una soluzione è installare il sensore i parallelo ad una resistenza di shunt....

Ciao

5a2v0 il 23/9/2013, 13:26
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
In effetti pero dovendo sceglieretra le opzioni che mi hai consigliato credo sia meglio cambiare sensore...p.s. dove lo trovo a quel prezzo?

Sulla baia sta solo a circa 20euri...

5a2v0 il 23/9/2013, 18:55
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ho rivisto un po lo schema generale..


ho inserito gli altri magnetotermici differenziali già esistenti (gruppo doccia ed illuminazione) e ho posizionato il sensore nell'uscita del magnetotermico principale anzichè all'entrata...
In questo modo ho già una protezione da 32A per il sensore senza ricorrere al fusibile !!

Il sensore da 20A posso poi cambiarlo cosi in qualsiasi momento con la versione da 30A come da te consigliatomi senza poi dover stravolgere nulla


In più nello schema ho inserito anche uno zener nel collegamento tra sensore e Arduino in quanto è precisato nel datasheet del sensore che in caso di lettura di corrente = 0 A il sensore restituisce 2,5v verso arduino !! (zener consigliatomi da un amico)

A giorni dovrei ricevere il pacco con i vari componenti, se posso faccio foto di tutto e posto un po di roba... bye

ElettroshockNow il 23/9/2013, 20:57
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Robot-italia li vende a 11E .....
Per lo zener fai pure , ma per misurare una corrente alternata devi campionare tutta la semionda.
Togliere l'offset con un diodo ti fa' monitorare solo la semionda positiva ......

Ad esempio molti phon o scaldini usano un semplice diodo per dimezzare la potenza ......
Quindi potrebbe capitare che stai assorbendo 1500w , ma il tuo strumento non sarebbe in grado di misurarlo restituendoti sul display 0W ..

Ti consiglio di leggere bene le linee di codice responsabili della lettura AC è tutto lì la qualità della misurazione.

Ps: se hai la possibilità evita di usare il rosso/nero nel disegno lato AC, al loro posto usa il blu per il neutro e il marrone o grigio per la fase .
Il rosso tienitelo per la DC renderà lo schema più conforme
...

Ciao e in bocca al lupo per il fantastico progetto in corso d'opera.

5a2v0 il 24/9/2013, 12:05
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Rieccomi... è arrivato tutto il materiale ma ho una grossissima perplessità e ho bisogno di un consiglio !!!!!

La scheda a doppio relè con bobina a 12v è arrivata con una sorpresa !!!

Nonostante il venditore avesse scritto: 16A per ogni relè, mi ritrovo dei relè con su scritto 8A/250VAC !!!

ho subito chiamato e mi hanno fatto notare che il relè è di tipo a "doppio contatto" infatti ha 8 piedi in total: 2 per la bobina e gli altri 6 sono invece ponticellati a 2 a 2..
Il venditore mi garantisce quindi che ho 16A per ogni relè !!

Dicendo però che uno dei due relè sarebbe collegato alla linea "gruppo bagni" dove ho scaldabagno elettrico, possibili carichi come phon e stufette elettriche, mi dice che non è sicuro che i relè possano tenere questo genere di carico


Che ne dite ???

P.s. appena posso posto una foto della schedina elettronica vista da sopra con i vari dati dei relè e vista da sotto per far capire la pcb e quindi i contatti dei relè !!!

EDIT: postate foto

scheda relè incriminata:

scheda relè incriminata ruotata (i 6 pin dei relè sono sulla sinistra in foto) :


tutto quello che mi è arrivato !!


particolare dell'altra scheda relè da collegare ad arduino:


Ho pensato una soluzione alternativa, usare solo la scheda relè piccola che supporta comunque la 230v @ 10A max per ogni relè e dal salvavita magnetotermico differenziale 6A mi esco dei cavi a 220 che collego a questa scheda e poi a dei CONTATTORI con bobina a 230v che li dovrei trovare con supporto fino a 20A... li monterei direttamente a quadro DIN questi accanto ai relativi sezionatori ai quali verrebbero collegati...

Peccato però che 1 contattore costi 40,00 € al negozio della mia città... e non tanto meno su internet !! Provo comunque a cercare meglio...

Se qualcuno mi vuole consigliare qualcosa intanto.....



5a2v0 il 24/9/2013, 20:14
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Comprati contattori della SIEMENS sempre 20A da mettere su quadro elettrico accanto ai relativi sezionatori ma comandati a 230v dalla scheda relè che collego ad arduino... il nuovo schema è quello in allegato (ho cambiato i colori alla 230v come da te consigliato) ho cercato di usare il grigio al posto del marrone in alcuni punti per cercare di non creare confusione...spero sia comprensibile...
Le bobine del contattori sono normalmente aperte quindi riceveranno costantemente elettricità infatti ho cambiato il collegamento sulla scheda relè a 5v che prima era come NA ora è NC cosi la 220 passa sempre TRANNE quando arduino alimenta la scheda 5v che mi interrompe così la 220 ai contattori che mi isolano le dovute sezioni !!!

P.s. dovrò cambiare sensore prendendo uno di quelli non invasivi !!! Quello attuale non riesco a collegarlo sicuramente al generale del quadro elettrico che ha un cavo con una sezione molto più grossa della morsettiera presente su questo sensore
Immagine Allegata: SCHEMA2



ElettroshockNow il 24/9/2013, 20:22
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ottime scelte ..... sopratutto per i contattori di qualità sicuramente superiore (anche di prezzo
)
Ti seguo con interesse e partecipazione
Un salutone
ElettroshockNow

5a2v0 il 24/9/2013, 21:23
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
per caso hai mai utilizzato un sensore di corrente non invasivo come il sct 013-030 ?

ElettroshockNow il 24/9/2013, 21:42
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Si ... ti avevo già lincato un progetto (vedi nella pagina precedente)
Cmq in sostanza :
-Fai un partitore e crei i 2, 5 V di offset
-in parallelo al sensore ci metti una resistenza da 100ohm (il valore modifica la sensibilità)
-metti la bobina+resistenza in serie tra i 2, 5v e un ingresso analogico

A questo punto tratti la bobina come un Acs ...in quanto avrai una tensione proporzionale alla corrente e con la possibilità di leggere tutta l'onda , sia negativa che positiva ....

Ciao

5a2v0 il 25/9/2013, 10:01
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (ElettroshockNow @ 24/9/2013, 22:42) [quote]Si ... ti avevo già lincato un progetto (vedi nella pagina precedente)
Cmq in sostanza :
-Fai un partitore e crei i 2, 5 V di offset
-in parallelo al sensore ci metti una resistenza da 100ohm (il valore modifica la sensibilità)
-metti la bobina+resistenza in serie tra i 2, 5v e un ingresso analogico

A questo punto tratti la bobina come un Acs ...in quanto avrai una tensione proporzionale alla corrente e con la possibilità di leggere tutta l'onda , sia negativa che positiva ....

Ciao

mmm.. in sostanza i miei dubbi sono che per il sensore non invasivo ho trovato questo schema qui:

http://openenergymonitor.org/emon/node/58

quest'altro:
http://openenergymonitor.org/emon/sites/de...les/current.png

o quello che mi dici tu.. sono confuso


ElettroshockNow il 25/9/2013, 10:16
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Quale sarebbe la differenza ? .....
I due schemi e la mia descrizione (schema nell'altra discussione) sono identici ! ....
Cosa mi sfugge ....

5a2v0 il 25/9/2013, 10:23
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
mi sembra che il primo schema utilizzi anche una linea +9v !! Sbaglio ?

ElettroshockNow il 25/9/2013, 10:33
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Nono tutti identici.
La bobina amperometrica somma una tensione proporzionale alla tensione di offset.
Quindi quando non scorre corrente avrai sul piedino dell'arduino 2, 5V.

Come scorrera' corrente nel filo che attraversa il sensore verrà generata una tensione (tensione data dalla corrente nel loop sensore/resistenza) la quale verrà a sommarsi o sottrarsi all'offset .

Quindi avrai una tensione variabile che rispecchiera' l'assorbimento ...con lo 0 a 2, 5V.

Ciao

5a2v0 il 25/9/2013, 11:57
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
ok ok chiedo venia


quindi quello schema utilizzava la parte a 9v e varie resistenze ecc solo per ricavarsi il valore della tensione reale anziche dare per scontato i 230v !!!

Per il momento mi prendo solo il sensore da 30A e se ho fatto bene i calcoli dovrei mettere una resistenza di Burden da 106 Ohms (posso collegarne una da 100 e una da 5 in serie?) sperando di trovarle e affidandomi a quel +/- 1% di tolleranza dovrei esserci...

P.s. il sensore che prendo riporta nel datasheet:
turn ratio 1800:1
per cui ho utilizzato per il calcolo, queste formule ovviamente mettendo 1800 anzichè 2000 e 30A anzichè 100A che utilizzavano li:
http://openenergymonitor.org/emon/building...nsors-interface

Le altre due resistenze sono da 10k e il condensatore da 10uf

ElettroshockNow il 25/9/2013, 12:06
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Sisi lo schema con il piccolo trasformatore viene usato usato per rilevare la tensione di rete.

Per il resto credo che sia tutto ok .....

Buon lavoro

dinoch il 2/10/2013, 9:18
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Sto facendo anche io delle prove.. ma dopo aver fatto una taratura intorno ai 60W di assorbimento quando assorbo circa 1200W (misurati con amperometro) l'uscita di arduino mi dice che sono altre 5000.. Devo rivedere lo Sketck


ElettroshockNow il 5/10/2013, 11:15
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
------Qualche giorno fà ...... boom
-------

In un momento di rinc....mento totale ho erroneamente causato un corto netto sull'impianto di casa ......
Nulla di preoccupante se non fosse che il solare non produceva più
...

Il motivo era semplice :
Durante il corto ,la corrente circolante nel sensore ACS712 ha superato il valore massimo sopportabile (100A *100mS) causando la rottura dello stesso e del microcontrollore
ad esso collegato ....

Quindi ho introdotto una semplice modifica che allontana la ricomparsa del problema.
Consiste nel sostituire i sensori ACS712 con dei sensori non invasivi SCT-013-030 (o simili) secondo lo schema di seguito

Con una resistenza di schunt di 100Ohm ho riscontrato una sensibilità simile all'ACS712 30A ,attestandosi a 50mV/A invece dei 66mV/A ,quindi bisognerà solo ritarare i fattori di conversione e il gioco è fatto


Ecco l'interno del nuovo powerMeter



Ciao
ElettroshockNow

eliafino il 6/10/2013, 8:52
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Bella idea Elettro,
mi dispiace che è venuta dopo un botto... ma succede... sapessi quante volte


Mi sa che al posto dei sensori hall seguirò il tuo consiglio! Il rischio come hai visto tu è alto...
... grazie per la condivisione!

PinoTux il 6/10/2013, 10:48
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ottima soluzione, ma mi è venuto un pensierino... avendo a disposizione un ASC712 da 5A e volendolo utilizzare come ha fatto Elettro, si potrebbe utilizzare uno SHUNT in modo da bypassare la corrente maggiore, leggi quella di Corto Circuito, in modo che la quota parte non ecceda quella supportata dal dispositivo.
Complicazioni varie a parte, sarebbe fattibile?

ElettroshockNow il 6/10/2013, 11:18
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (PinoTux @ 6/10/2013, 11:48) [quote]Ottima soluzione, ma mi è venuto un pensierino... avendo a disposizione un ASC712 da 5A e volendolo utilizzare come ha fatto Elettro, si potrebbe utilizzare uno SHUNT in modo da bypassare la corrente maggiore, leggi quella di Corto Circuito, in modo che la quota parte non ecceda quella supportata dal dispositivo.
Complicazioni varie a parte, sarebbe fattibile?

Sisi ,è fattibilissimo e forse perderesti solo la risoluzione a vantaggio della corrente massima misurabile /sopportabile.

Ricordo di avere qualche documento a riquardo ,proprio della "Allegro" ... se trovo, posto


dinoch il 8/10/2013, 13:21
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Sto facendo le varie prove con il sensore non invasivo, ma ho da porti una domanda (ammetto che non sono un programmatore esperto e quindi ho un pò di difficolta). E' normale che quando Arduino lavora ripresenta sempre ciclica la videata che segue?

ERROR
Numero Campionamenti = 1
Tempo conversione = 0 ms
ADCSRA = 148
Tensione RMS = 0 Volt
Valore Sensore Tensione Max = 0
Valore Sensore Tensione Min = 445
Offset Sensore Tensione = 222
Offset Sensore Produzione = 507
Offset Sensore Assorbimento = 507
Potenza Prodotta = 0 Watt
Potenza Prodotta Calcolata= 0 Watt
Potenza Assorbita = 0 Watt
Potenza Assorbita Calcolata = 0 Watt
Corrente Prodotta = 0.00 Amper
Corrente Assorbita = 0.00 Amper

Grazie

ElettroshockNow il 8/10/2013, 14:19
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (dinoch @ 8/10/2013, 14:21) [quote]Sto facendo le varie prove con il sensore non invasivo, ma ho da porti una domanda (ammetto che non sono un programmatore esperto e quindi ho un pò di difficolta). E' normale che quando Arduino lavora ripresenta sempre ciclica la videata che segue?

Nono non è normale !!!
Sono giorni che provo a simulare la tua avaria .... ma niente funziona sempre tutto
...
Quindi ....

Ho paura che sia un problema hardware o un errore ciclico .....

Inizia con questa prova ...

-Carica il codice (senza nessuna modifica)
-Disconnetti il carico
-Premi il pulsante Reset o disconnetti/connetti l'usb
-Vedi cosa ti dice sulla seriale

const int ProdottaPin = A1;
const int AssorbitaPin = A2;
const int TempoCampionatura = 20; //Scegli i ms da Campionare
const float Fattore_Conversione_Corrente = .055;
long start ;
int i ;
float AmperPro;
float AmperAss;
long OffsetPro;
long OffsetAss;
void setup() {

//CALCOLO AUTOMATICO OFFSET SENSORI
for (i = 0 ; i <= 1000 ; i++){
OffsetPro+=analogRead(ProdottaPin);
OffsetAss+=analogRead(AssorbitaPin);
}
OffsetPro/=1000;
OffsetAss/=1000;
//--------------------------------


ADCSRA&=0X90+ 0b100; //Setta ADC prescaler a 16 quindi la velocita delle conversioni
Serial.begin(9600) ;

}

void loop() {
AmperPro=0;
AmperAss=0;
int NumCampionamenti=0;
start = millis() ;
do
{
NumCampionamenti++;
AmperPro+= abs(analogRead(ProdottaPin)-OffsetPro);
AmperAss+= abs(analogRead(AssorbitaPin)-OffsetAss);
}while((millis()-start)<TempoCampionatura);
int Tempomisura=millis() - start;

AmperPro=(AmperPro/NumCampionamenti)*Fattore_Conversione_Corrente;
AmperAss=(AmperAss/NumCampionamenti)*Fattore_Conversione_Corrente;

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 ("Offset Sensore Produzione = ");
Serial.println(OffsetPro) ;
Serial.print ("Offset Sensore Assorbimento = ");
Serial.println(OffsetAss) ;
Serial.print ("Corrente Prodotta = ");
Serial.print(AmperPro) ;
Serial.println(" Amper") ;
Serial.print ("Corrente Assorbita = ");
Serial.print(AmperAss) ;
Serial.println(" Amper") ;
Serial.println("") ;
Serial.println("") ;
delay(1000);
}


Posta i risultati come hai fatto precedentemente
Ciao

dinoch il 9/10/2013, 8:17
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
ieri sera mi sono messo a costruire il circuito su un mille fori, non vorrei che la mia Breadboard essendo vecchia ha qualche falso contatto. Appena ho novità ti faccio saxre.

5a2v0 il 10/10/2013, 13:28
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
posto qui il mio sketch attuale:
//Includo la libreria per il corretto funzionamento del display
#include <LiquidCrystal.h>
// Dichiaro i pin del display
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Dichiaro il pin a cui sono collegati i bottoni e la variabile in cui viene memorizzato il valore letto dal pin
int buttonPin = A0;
int buttonValue = 0;
//Dichiaro il pin del sensore di corrente e la variabile in cui sarà memorizzato il valore letto dal sensore
int sensorPin = A5;
float sensorValue = 0.00;
//Dichiaro la variabile in cui sarà memorizzato il valore di Ampere totali assorbiti
float ampere = 0.00;
//Variabile per il consumo in watt (ottenuto moltiplicando il valore in Ampere ottenuto dal sensore di corrente per la tensione stabilita di 230v)
float tensione = 230.00;
int consumo = 0;
//Dichiaro i pin del buzzer, dei led e dei relè
int buzzer = 6;
int verde1 = 7;
int verde2 = 8;
int rosso1 = 1;
int rosso2 = 13;
int bagni = 9;
int stanze = 10;
//Dichiaro variabili per memorizzare lo stato (0 o 1) dei relè e dei bottoni
int rele1 = 0;
int rele2 = 0;
int buttonState = 0;
//Variabili per prevenire ritardi ai pulsanti e regolare il refresh del display
#define intervallcd 3000  
long previousMillslcd = 0;
#define interval1 2000  
long previousMills1 = 0;
#define interval2 2000  
long previousMills2 = 0;
//Note di check funzionamento buzzer
int melody[] = {
 4699, 4699};
//Durata delle note: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
 8, 8};


void setup() {
 //Imposto il voltaggio di riferimento per le letture analogiche a 1.10v o lascio 5v se commentato
 //analogReference(INTERNAL);
 //Definisco l'eventuale porta seriale per leggere dati dal monitor seriale N.B. si accenderà fisso il led sul PIN 1 !!!
 //Serial.begin(9600);
 //Inizializzo il display
 lcd.begin(16, 2);
 //Imposto i pin dei led e dei relè come uscite digitali
 pinMode(verde1, OUTPUT);
 pinMode(verde2, OUTPUT);
 pinMode(rosso1, OUTPUT);
 pinMode(rosso2, OUTPUT);
 pinMode(bagni, OUTPUT);
 pinMode(stanze, OUTPUT);
 //Accendo i due led verdi e spengo i due rossi (i relè sono normalmente chiusi e la variabile dei relè è gia impostata a 0 di default all'avvio del programma)
 digitalWrite(verde1, HIGH);
 digitalWrite(verde2, HIGH);
 digitalWrite(rosso1, LOW);
 digitalWrite(rosso2, LOW);
 digitalWrite(bagni, HIGH);
 digitalWrite(stanze, HIGH);
 //Codice di esecuzione delle note di check funzionamento buzzer
 for (int thisNote = 0; thisNote < 2; thisNote++) {
   int noteDuration = 1000/noteDurations[thisNote];
   tone(buzzer, melody[thisNote],noteDuration);
   int pauseBetweenNotes = noteDuration * 1.30;
   delay(pauseBetweenNotes);
   noTone(buzzer);
 }
}


void loop() {
 //Lettura sensore e calcolo Ampere assorbiti e Watt consumati con eventuale distacco automatico in caso di esubero
 sensorValue = analogRead(sensorPin);
 //Il sensore restituisce da 0 a 1v se legge da 0 a 30 Ampere (valore max di lettura) e lo somma al voltaggio reference 5v diviso in 2.
 //Utilizzeremo però 2.49v anzichè 2.50v poichè in lettura senza carico il valore letto oscillava tra 2.48 e 2.50.
 //Per cui abbiamo [ 1.00v : 30 A = (sensorValue - 2.49v) : ampere ] quindi [ ampere = (sensorValue - 2.49) * 30.00 / 1.00 ]
 //Trasformo il valore letto sulla A5 in volt sapendo che 5 è il voltaggio reference e 1024 sono le parti in cui viene suddiviso per la lettura.
 sensorValue = (((5.00 * sensorValue) / 1024.00) - 2.49);
 if (sensorValue < 0) sensorValue = 0;
 ampere = sensorValue * 30.00;
 consumo = ampere * tensione;


 //Lettura pin dei bottoni e azioni di distacco manuale o ripristino della corrente nelle sezioni collegate ai contattori
 buttonValue = analogRead(buttonPin);
 if (millis() -  previousMills1 > interval1 ) {
   previousMills1 = millis();
   if ((buttonValue >= 150) && (buttonValue <= 200)) {
     switch (rele1) {
     case 0:
       if (buttonState == 0) {
         digitalWrite(verde1, LOW);
         digitalWrite(rosso1, HIGH);
         digitalWrite(bagni, LOW);
         rele1 = 1;
         buttonState = 1;
         lcd.clear();
         lcd.setCursor(0,0);
         lcd.print("istacco manuale");
         lcd.setCursor(0,1);
         lcd.print("Linea 1 OFF");
       }        
       break;
     case 1:
       if (buttonState == 0) {
         digitalWrite(verde1, HIGH);
         digitalWrite(rosso1, LOW);
         digitalWrite(bagni, HIGH);
         rele1 = 0;
         buttonState = 1;
         lcd.clear();
         lcd.setCursor(0,0);
         lcd.print("Intervento:");
         lcd.setCursor(0,1);
         lcd.print("Linea 1 ON");
       }
       break;
     }
   }
 }
 if (millis() -  previousMills2 > interval2 ) {
   previousMills2 = millis();
   if ((buttonValue >= 800) && (buttonValue <= 900)) {
     switch (rele2) {
     case 0:
       if (buttonState == 0) {
         digitalWrite(verde2, LOW);
         digitalWrite(rosso2, HIGH);
         digitalWrite(stanze, LOW);
         lcd.clear();
         lcd.setCursor(0,0);
         lcd.print("istacco manuale");
         lcd.setCursor(0,1);
         lcd.print("Linea 2 OFF");
         rele2 = 1;
         buttonState = 1;
       }
       break;
     case 1:
       if (buttonState == 0) {
         digitalWrite(verde2, HIGH);
         digitalWrite(rosso2, LOW);
         digitalWrite(stanze, HIGH);
         lcd.clear();
         lcd.setCursor(0,0);
         lcd.print("Intervento:");
         lcd.setCursor(0,1);
         lcd.print("Linea 2 ON");
         rele2 = 0;
         buttonState = 1;
       }
       break;
     }
   }
 }
 if ((buttonValue >= 0) && (buttonValue <= 100)) {
   if (millis() -  previousMillslcd > intervallcd ) {
     previousMillslcd = millis();
     lcd.clear();
   }
   lcd.setCursor(0,0);
   if ((rele1 == 0) && (rele2 == 0)) {
     lcd.print("Linee ON");
   }
   if ((rele1 == 0)  && (rele2 == 1)) {
     lcd.print("L1 ON   L2 OFF");
   }
   if ((rele1 == 1)  && (rele2 == 0)) {
     lcd.print("L1 OFF  L2 ON");
   }
   if ((rele1 == 1)  && (rele2 == 1)) {
     lcd.print("Linee OFF");
   }
   lcd.setCursor(0,1);
   lcd.print("Watt: ");
   lcd.setCursor(7,1);
   lcd.print(consumo);
   buttonState = 0;
 }
 //riga utilizzata per calibrare il sensore e i bottoni
 //Serial.println(sensorValue);
}



arduino collegato ai led, ai pulsanti, alla scheda relè e al sensore.

Senza carico leggo 0 Watt... in attesa ancora di testare con un carico conosciuto come una lampadina ad incandescenza per verificare l'attendibilità del codice e del sensore.

Poi se il valore è giusto (lo confronterò anche con misurazioni ottenute con qualche altro strumento), rimane di creare un sistema che legga bene i valori e non mi stacchi la corrente già per un picco ma solo per un consumo costante O.o

Intanto testerò se il valore viene letto bene...

P.s. ho provato anche un altra strada, ovvero quella di settare l'analogReference a (INTERNAL) in modo che arduino scomponesse in 1024 parti il voltaggio di 1.10v al posto dei 5v come DEFAULT ed avere una lettura così più precisa del sensore collegandolo DIRETTAMENTE alla porta analogica senza passare per lo schema attuale che è questo:


ElettroshockNow il 10/10/2013, 13:55
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Il tuo codice è adatto per correnti continue .
Il sensore ti restituirà una tensione variabile nella stessa forma della corrente che misura quindi variabile ed alternata.
È per questo che viene aggiunto l'offset ....

Ciao
ElettroshockNow

Ps: se ti interessa solo la corrente puoi usare le linee di codice postate nel mio ultimo intervento, magari togliento la regolazione dell'offset in quanto già lo hai misurato.

Ulteriori info sulla misurazione di potenze alternate le puoi trovare qui
Nella quale discussione vengono presi in esame (con codici Arduino) due metodi di misurazione.

ElettroshockNow il 10/10/2013, 15:06
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Segue il codice per la lettura di correnti alternate
CITAZIONE [quote]ampere=0;
int NumCampionamenti=0;
long start = millis() ;
do
{
NumCampionamenti++;
ampere+= abs(analogRead(sensorPin)-510); //510 è la lettura senza carico quindi l'offset
}while((millis()-start)<20); // 20 sono i millisecondi che verranno campionati
ampere=(ampere/NumCampionamenti)* .55; // .55 è il fattore di conversione
consumo = ampere * tensione;

Per far funzionare bene il codice appena postato bisogna aggiungere nel setup

CITAZIONE [quote]ADCSRA&=0X90+ 0b100; //Setta ADC prescaler a 16 quindi la velocita delle conversioni

Ciao
ElettroshockNow

mi156 il 11/10/2013, 4:34
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (ElettroshockNow @ 12/9/2013, 19:30) [quote]Allego inoltre la liquidcristal che uso

SALVE IL CODICE MI DA DEI PROBLEMI

ElettroshockNow il 11/10/2013, 5:47
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (mi156 @ 11/10/2013, 05:34) [quote]SALVE IL CODICE MI DA DEI PROBLEMI

Ciao mii157,
volevo informarti che hai il tasto Maiuscolo inserito , sembra quasi che urli
..

Cmq anche se il progetto in questione illude di essere di facile realizzazione ,in realtà non lo è ,almeno che non usi gli stessi identici hardware.
Quindi ti consiglio di iniziare con progetti più semplici e fare esperienza sull'uso dei display LCD ,in quanto credo che sia li' il problema da te riscontrato .

Giusto a titolo informativo nel codice trovi una sezione chiamata "setup" nella quale vengono impostati i parametri hardware ....
Esempio :
Il mio display deve essere settato :LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
invece quello di 5a2v0 :LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


Ciao
ElettroshockNow

PS: il progetto powermeter funziona ininterrottamente da 8 mesi ... tranne quel breve periodo del Boom
( A proposito devo un Grazie ad Elia per la pacca sulla spalla , GRAZIE ELIA )

5a2v0 il 11/10/2013, 7:53
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (ElettroshockNow @ 10/10/2013, 16:06) [quote]Segue il codice per la lettura di correnti alternate
CITAZIONE [quote]ampere=0;
int NumCampionamenti=0;
long start = millis() ;
do
{
NumCampionamenti++;
ampere+= abs(analogRead(sensorPin)-510); //510 è la lettura senza carico quindi l'offset
}while((millis()-start)<20); // 20 sono i millisecondi che verranno campionati
ampere=(ampere/NumCampionamenti)* .55; // .55 è il fattore di conversione
consumo = ampere * tensione;

Per far funzionare bene il codice appena postato bisogna aggiungere nel setup

CITAZIONE [quote]ADCSRA&=0X90+ 0b100; //Setta ADC prescaler a 16 quindi la velocita delle conversioni

Ciao
ElettroshockNow

Buondi.. intanto grazie come semprre


stamattina ho provato prima il codice mio collegando una lampadina da 20watt ma arduino sembrava non leggere proprio il valore... poi un PHON e il valore saliva ma ogni tanto il sensore leggeva addirittura un voltaggio INFERIORE all'offset O.o...

dando quindi per scontato che il problema potesse essere come mi avevi detto tu che il mio codice è adatto per le CC e non per le AC, ho seguito il tuo suggerimento e inserito il tuo codice al posto del mio:

CODICE
//Lettura sensore e calcolo Ampere assorbiti e Watt consumati con eventuale distacco automatico in caso di esubero
 sensorValue = analogRead(sensorPin);
 //Il sensore restituisce da 0 a 1v se legge da 0 a 30 Ampere (valore max di lettura) e lo somma al voltaggio reference 5v diviso in 2.
 //Utilizzeremo però 2.49v anzichè 2.50v poichè in lettura senza carico il valore letto oscillava tra 2.48 e 2.50.
 //Per cui abbiamo [ 1.00v : 30 A = (sensorValue - 2.49v) : ampere ] quindi [ ampere = (sensorValue - 2.49) * 30.00 / 1.00 ]
 //Trasformo il valore letto sulla A5 in volt sapendo che 5 è il voltaggio reference e 1024 sono le parti in cui viene suddiviso per la lettura.
 sensorValue = (((5.00 * sensorValue) / 1024.00) - 2.49);
 if (sensorValue < 0) sensorValue = 0;
 ampere = sensorValue * 30.00;
 consumo = ampere * tensione;


ovviamente ho aggiunto anche la riga che mi dicevi di mettere nel void setup () !

Situazione attuale:
Arduino senza carico mi dice che consumo 250watt.
Quando collego e accendo un phon da 1800watt totali messo a metà potenza mi dice 1800(circa eh, l'lcd refresha senza che leggo il valore bene)
Quando alzo la potenza del phon al suo max legge 3500
Quando spengo, ritorna a 250.

Che può essere ?

ElettroshockNow il 11/10/2013, 8:52
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Pian pianino facciamo dama
...
Controlla se senza carico il sensore ti resistuisce circa 2, 5v ....

Se si credo che devi solo tararlo:
-senza carico modifica il valore di offset (510 ...509...508 ...511...)per avere una lettura prossima allo 0 (10w di toll )
-poi connetti un carico noto e modifica il fattore di conversione (.55 ... 0.56 ....0.50 .... sperimentalmente o facendo la proporzione)

Ciao
Ps: non misurando la tensione avrai una potenza molto simile al valore reale , ma con una tolleranza del 10% .... ma dovrebbe essere più che sufficiente ai tuoi scopi ..

Ariciao


5a2v0 il 11/10/2013, 9:46
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
aspetttttttttttttta un attimo

DOMANDISSIMA:

nel tuo sketch ho letto che scrivi:
CITAZIONE [quote]const float Fattore_Conversione_Corrente = .055;

mentre a me hai scritto prima:
CITAZIONE [quote]-poi connetti un carico noto e modifica il fattore di conversione (.55 ... 0.56 ....0.50 .... sperimentalmente o facendo la proporzione)

qual'è il parametro giusto ?


Per ora sono a lavoro e non posso fare la prova, ma può essere che l'errore è dato da quello 0 mancante ?

ElettroshockNow il 11/10/2013, 9:53
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Nono c'è il punto
quindi scrivere 0.55 o .55 è indifferente .
Per quanto invece il valore in se ,dipende dalle tolleranze della resitenza di shunt ecco perché devj modificarlo per adattarlo al tuo circuito ...
Se non sbagli quell .55 era uscito per un sensore acs712 da 20A ... ma come ti dicevo ognuno deve eseguire la taratura .

Ciao

5a2v0 il 11/10/2013, 10:07
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
dicevo 0.055 al posto di 0.55 !!! Mi riferivo allo zero dopo il punto !


inoltre, il fatto che non uso un ACS ma un SCT-013-030 non cambia nulla ?

ElettroshockNow il 11/10/2013, 11:28
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Hai ragione .... mia colpa

Oggi controllo e posto il fattore che uso per gli Sct


Acs o Sct (con schema) vengono gestiti nello stesso modo . Sottointeso per misurazioni AC ed ognuno la sua taratura.

Ciao grande


5a2v0 il 11/10/2013, 12:56
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Allora intanto tornato a casa ho fatto una prova mettendo:

fattore di conversione= 0.055
e offset mio = 508 (al posto dei 510 del tuo sketch)

e rilevo adesso:

- senza carico un valore che oscilla tra 0 e 01 watt
- con una lampada non a risparmio (da verificare wattaggio) appena accendo ho un valore di circa 30 watt per qualche secondo e poi scende ad un valore che oscilla tra 3 e 6 watt
- con il phon da 1800w max alla max potenza ho un valore sui 300watt

Cercherò di provare una lampada da watt conosciuti prima possibile e ti faccio sapere
)))))

Domanda da niubbo: se SPENGO la lampadina (carico) ma lascio collegata la spina, arduino mi dice 0 o 01... se invece scollego proprio la spina (quindi nessun carico nel sensore) arduino mi restituisce 16-18 watt O.o !!! come è possibile ?

ElettroshockNow il 11/10/2013, 13:20
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Curioso
... cmq ci avviciniamo alla dama ....
Posta il codice così lo carico sul mio powermeter .
Ciao

5a2v0 il 11/10/2013, 13:31
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE [quote][color=#7E7E7E]//Includo la libreria per il corretto funzionamento del display
#include <[color=#CC6600]LiquidCrystal.h>
[color=#7E7E7E]// Dichiaro i pin del display
[color=#CC6600]LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
[color=#7E7E7E]// Dichiaro il pin a cui sono collegati i bottoni e la variabile in cui viene memorizzato il valore letto dal pin
[color=#CC6600]int buttonPin = A0;
[color=#CC6600]int buttonValue = 0;
[color=#7E7E7E]//Dichiaro il pin del sensore di corrente e la variabile in cui sarà memorizzato il valore letto dal sensore
[color=#CC6600]int sensorPin = A5;
[color=#CC6600]float sensorValue = 0.00;
[color=#7E7E7E]//Dichiaro la variabile in cui sarà memorizzato il valore di Ampere totali assorbiti
[color=#CC6600]float ampere = 0.00;
[color=#7E7E7E]//Variabile per il consumo in watt (ottenuto moltiplicando il valore in Ampere ottenuto dal sensore di corrente per la tensione stabilita di 230v)
[color=#CC6600]float tensione = 230.00;
[color=#CC6600]int consumo = 0;
[color=#7E7E7E]//Dichiaro i pin del buzzer, dei led e dei relè
[color=#CC6600]int buzzer = 6;
[color=#CC6600]int verde1 = 7;
[color=#CC6600]int verde2 = 8;
[color=#CC6600]int rosso1 = 1;
[color=#CC6600]int rosso2 = 13;
[color=#CC6600]int bagni = 9;
[color=#CC6600]int stanze = 10;
[color=#7E7E7E]//Dichiaro variabili per memorizzare lo stato (0 o 1) dei relè e dei bottoni
[color=#CC6600]int rele1 = 0;
[color=#CC6600]int rele2 = 0;
[color=#CC6600]int buttonState = 0;
[color=#7E7E7E]//Variabili per prevenire ritardi ai pulsanti e regolare il refresh del display
#define intervallcd 3000
[color=#CC6600]long previousMillslcd = 0;
#define interval1 2000
[color=#CC6600]long previousMills1 = 0;
#define interval2 2000
[color=#CC6600]long previousMills2 = 0;
[color=#7E7E7E]//Note di check funzionamento buzzer
[color=#CC6600]int melody[] = {
4699, 4699};
[color=#7E7E7E]//Durata delle note: 4 = quarter note, 8 = eighth note, etc.:
[color=#CC6600]int noteDurations[] = {
8, 8};


[color=#CC6600]void [color=#CC6600]setup() {
ADCSRA&=0X90+ 0b100; [color=#7E7E7E]//Setta ADC prescaler a 16 quindi la velocita delle conversioni
[color=#7E7E7E]//Imposto il voltaggio di riferimento per le letture analogiche a 1.10v o lascio 5v se commentato
[color=#7E7E7E]//analogReference(INTERNAL);
[color=#7E7E7E]//Definisco l'eventuale porta seriale per leggere dati dal monitor seriale N.B. si accenderà fisso il led sul PIN 1 !!!
[color=#7E7E7E]//Serial.begin(9600);
[color=#7E7E7E]//Inizializzo il display
lcd.[color=#CC6600]begin(16, 2);
[color=#7E7E7E]//Imposto i pin dei led e dei relè come uscite digitali
[color=#CC6600]pinMode(verde1, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(verde2, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(rosso1, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(rosso2, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(bagni, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(stanze, [color=#006699]OUTPUT);
[color=#7E7E7E]//Accendo i due led verdi e spengo i due rossi (i relè sono normalmente chiusi e la variabile dei relè è gia impostata a 0 di default all'avvio del programma)
[color=#CC6600]digitalWrite(verde1, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(verde2, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(rosso1, [color=#006699]LOW);
[color=#CC6600]digitalWrite(rosso2, [color=#006699]LOW);
[color=#CC6600]digitalWrite(bagni, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(stanze, [color=#006699]HIGH);
[color=#7E7E7E]//Codice di esecuzione delle note di check funzionamento buzzer
[color=#CC6600]for ([color=#CC6600]int thisNote = 0; thisNote < 2; thisNote++) {
[color=#CC6600]int noteDuration = 1000/noteDurations[thisNote];
[color=#CC6600]tone(buzzer, melody[thisNote],noteDuration);
[color=#CC6600]int pauseBetweenNotes = noteDuration * 1.30;
[color=#CC6600]delay(pauseBetweenNotes);
[color=#CC6600]noTone(buzzer);
}
}


[color=#CC6600]void [color=#CC6600]loop() {
ampere = 0.00;
[color=#CC6600]int NumCampionamenti = 0;
[color=#CC6600]long start = [color=#CC6600]millis() ;
[color=#7E7E7E]//Serial.println(analogRead(sensorPin));
[color=#CC6600]do
{
NumCampionamenti++;
[color=#7E7E7E]//508 è la lettura senza carico quindi l'offset e lo sottraiamo alle letture
ampere+= [color=#CC6600]abs([color=#CC6600]analogRead(sensorPin) - 508);
}
[color=#CC6600]while(([color=#CC6600]millis()-start)<20); [color=#7E7E7E]// 20 sono i millisecondi che verranno campionati
ampere=(ampere/NumCampionamenti) * 0.055; [color=#7E7E7E]//0.055 è il fattore di conversione
consumo = ampere * tensione;
[color=#7E7E7E]//Per evitare letture negative in assenza di carico
[color=#CC6600]if (consumo < 0) consumo = 0;


[color=#7E7E7E]//Lettura pin dei bottoni e azioni di distacco manuale o ripristino della corrente nelle sezioni collegate ai contattori
buttonValue = [color=#CC6600]analogRead(buttonPin);
[color=#CC6600]if ([color=#CC6600]millis() - previousMills1 > interval1 ) {
previousMills1 = [color=#CC6600]millis();
[color=#CC6600]if ((buttonValue >= 150) && (buttonValue <= 200)) {
[color=#CC6600]switch (rele1) {
[color=#CC6600]case 0:
[color=#CC6600]if (buttonState == 0) {
[color=#CC6600]digitalWrite(verde1, [color=#006699]LOW);
[color=#CC6600]digitalWrite(rosso1, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(bagni, [color=#006699]LOW);
rele1 = 1;
buttonState = 1;
lcd.[color=#CC6600]clear();
lcd.[color=#CC6600]setCursor(0,0);
lcd.[color=#CC6600]print([color=#006699]"istacco manuale");
lcd.[color=#CC6600]setCursor(0,1);
lcd.[color=#CC6600]print([color=#006699]"Linea 1 OFF");
}
[color=#CC6600]break;
[color=#CC6600]case 1:
[color=#CC6600]if (buttonState == 0) {
[color=#CC6600]digitalWrite(verde1, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(rosso1, [color=#006699]LOW);
[color=#CC6600]digitalWrite(bagni, [color=#006699]HIGH);
rele1 = 0;
buttonState = 1;
lcd.[color=#CC6600]clear();
lcd.[color=#CC6600]setCursor(0,0);
lcd.[color=#CC6600]print([color=#006699]"Intervento:");
lcd.[color=#CC6600]setCursor(0,1);
lcd.[color=#CC6600]print([color=#006699]"Linea 1 ON");
}
[color=#CC6600]break;
}
}
}
[color=#CC6600]if ([color=#CC6600]millis() - previousMills2 > interval2 ) {
previousMills2 = [color=#CC6600]millis();
[color=#CC6600]if ((buttonValue >= 800) && (buttonValue <= 900)) {
[color=#CC6600]switch (rele2) {
[color=#CC6600]case 0:
[color=#CC6600]if (buttonState == 0) {
[color=#CC6600]digitalWrite(verde2, [color=#006699]LOW);
[color=#CC6600]digitalWrite(rosso2, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(stanze, [color=#006699]LOW);
lcd.[color=#CC6600]clear();
lcd.[color=#CC6600]setCursor(0,0);
lcd.[color=#CC6600]print([color=#006699]"istacco manuale");
lcd.[color=#CC6600]setCursor(0,1);
lcd.[color=#CC6600]print([color=#006699]"Linea 2 OFF");
rele2 = 1;
buttonState = 1;
}
[color=#CC6600]break;
[color=#CC6600]case 1:
[color=#CC6600]if (buttonState == 0) {
[color=#CC6600]digitalWrite(verde2, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(rosso2, [color=#006699]LOW);
[color=#CC6600]digitalWrite(stanze, [color=#006699]HIGH);
lcd.[color=#CC6600]clear();
lcd.[color=#CC6600]setCursor(0,0);
lcd.[color=#CC6600]print([color=#006699]"Intervento:");
lcd.[color=#CC6600]setCursor(0,1);
lcd.[color=#CC6600]print([color=#006699]"Linea 2 ON");
rele2 = 0;
buttonState = 1;
}
[color=#CC6600]break;
}
}
}
[color=#CC6600]if ((buttonValue >= 0) && (buttonValue <= 100)) {
[color=#CC6600]if ([color=#CC6600]millis() - previousMillslcd > intervallcd ) {
previousMillslcd = [color=#CC6600]millis();
lcd.[color=#CC6600]clear();
lcd.[color=#CC6600]setCursor(0,1);
lcd.[color=#CC6600]print([color=#006699]"Watt: ");
lcd.[color=#CC6600]setCursor(7,1);
lcd.[color=#CC6600]print(consumo);
}
lcd.[color=#CC6600]setCursor(0,0);
[color=#CC6600]if ((rele1 == 0) && (rele2 == 0)) {
lcd.[color=#CC6600]print([color=#006699]"Linee ON");
}
[color=#CC6600]if ((rele1 == 0) && (rele2 == 1)) {
lcd.[color=#CC6600]print([color=#006699]"L1 ON L2 OFF");
}
[color=#CC6600]if ((rele1 == 1) && (rele2 == 0)) {
lcd.[color=#CC6600]print([color=#006699]"L1 OFF L2 ON");
}
[color=#CC6600]if ((rele1 == 1) && (rele2 == 1)) {
lcd.[color=#CC6600]print([color=#006699]"Linee OFF");
}
buttonState = 0;
}
}


mi156 il 11/10/2013, 16:00
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (ElettroshockNow @ 11/10/2013, 06:47) [quote]CITAZIONE (mi156 @ 11/10/2013, 05:34) [quote]SALVE IL CODICE MI DA DEI PROBLEMI

Ciao mii157,
volevo informarti che hai il tasto Maiuscolo inserito , sembra quasi che urli
..

Cmq anche se il progetto in questione illude di essere di facile realizzazione ,in realtà non lo è ,almeno che non usi gli stessi identici hardware.
Quindi ti consiglio di iniziare con progetti più semplici e fare esperienza sull'uso dei display LCD ,in quanto credo che sia li' il problema da te riscontrato .

Giusto a titolo informativo nel codice trovi una sezione chiamata "setup" nella quale vengono impostati i parametri hardware ....
Esempio :
Il mio display deve essere settato :LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
invece quello di 5a2v0 :LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


Ciao
ElettroshockNow

PS: il progetto powermeter funziona ininterrottamente da 8 mesi ... tranne quel breve periodo del Boom
( A proposito devo un Grazie ad Elia per la pacca sulla spalla , GRAZIE ELIA )

grazie della risposta devi scusarmi non mi ero accorto dell maiuscolo,quindi quando provo a compilare il programma gli errori sono dovuti agli hardware scollegati le librerie sono tutte scritte in nero. elettro scusa per il disturbo ti faccio i miei complimenti per la bellissima realizzazione


Dimenticavo domani posto le foto dei display in mio possesso

ElettroshockNow il 11/10/2013, 16:18
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao mi156 e grazie.
Cmq oggi ho fatto alcune prove riscontrando :
il fattore di conversione usando un sensore sct si aggira intorno a 0.108 (info utile per 5a2v0)
e che 2 Atmega su 3 non digeriscono molto bene l'aumento della velocità di conversione A/D.

Quindi il progetto powermeter deve tornare nella fase test per convivere felicemente con i sensori SCT


Ciao a tutti

eliafino il 11/10/2013, 16:18
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (ElettroshockNow @ 11/10/2013, 06:47) [quote]PS: il progetto powermeter funziona ininterrottamente da 8 mesi ... tranne quel breve periodo del Boom
( A proposito devo un Grazie ad Elia per la pacca sulla spalla , GRAZIE ELIA )

Grazie a te, stavo per acquistare una partita di 10 sensori hall, ma visto l'inconveniente ho optato anche io per quelli amperometrici... io sono ancora in alto mare col mio progetto


Ciaooo

ElettroshockNow il 11/10/2013, 16:20
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao Elia ,
C'è qualche problema da risolvere con gli SCT ..... appena ho tempo analizzo tutto all'oscilloscopio


Comunque non torno sugli ACS ... troppo pericolosi


Ciao

eliafino il 11/10/2013, 16:24
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Per arduino ho visto qui qualcosa di utile...

5a2v0 il 12/10/2013, 8:22
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (ElettroshockNow @ 11/10/2013, 17:18) [quote]Ciao mi156 e grazie.
Cmq oggi ho fatto alcune prove riscontrando :
il fattore di conversione usando un sensore sct si aggira intorno a 0.108 (info utile per 5a2v0)
e che 2 Atmega su 3 non digeriscono molto bene l'aumento della velocità di conversione A/D.

Quindi il progetto powermeter deve tornare nella fase test per convivere felicemente con i sensori SCT


Ciao a tutti

Oggi ho collegato il sensore a una lampada ad incandescenza di valore notissimo
25Watt e infatti con 0.055 il sensore mi restituisce un consumo di 3watt
Però se metto su equazione:

3watt : 0.055 = 25watt : x

il mio valore di conversione ideale per leggere i 25 watt sarebbe 0,4583333333333333
sbaglio ??

Stessa lampadina da 25 watt con fattore di conversione 0.108 mi legge 6 watt infatti

ElettroshockNow il 12/10/2013, 9:02
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Così differente !!!! Pensavo che al massimo avevamo un 10% di differrenza ..
È inutile che ti dica di controllare che il sensore sia ben chiuso ..... a me inizialmente mi era sfuggito aperto
.
Ciao

5a2v0 il 12/10/2013, 9:41
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
nono, completamente chiuso. Devo provare con una lampadina da 100watt se la trovo cosi da vedere se legge bene il valore anche di quella con lo stesso fattore di conversione.

5a2v0 il 12/10/2013, 15:13
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (ElettroshockNow @ 12/10/2013, 10:02) [quote]Così differente !!!! Pensavo che al massimo avevamo un 10% di differrenza ..
È inutile che ti dica di controllare che il sensore sia ben chiuso ..... a me inizialmente mi era sfuggito aperto
.
Ciao

mmmm... nono non va comunque il tutto.. collegando una lampada a incandescenza da 60 watt mi segnala 90 watt poi !!! ci deve essere qualcosa che non va... tu hai trovato qualche soluzione ?

ElettroshockNow il 12/10/2013, 15:44
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (5a2v0 @ 12/10/2013, 16:13) [quote]ci deve essere qualcosa che non va... tu hai trovato qualche soluzione ?

No
......
Per ora ho aumentato il tempo campionato da 20mS a 200mS e non ho ridotto il prescaler, lasciandolo al valore originale ed ho tarato il tutto con un assorbimento di 3Kw.
Cosi' ho parzialmente tamponato ,ma bisogna trovare una soluzione per l'uso di questi sensori.

Stavo leggendo il codice segnalato da Elia ,forse li' c'è la soluzione definitiva
.

Ciao

Ps: vorrei dire W gli ACS ...... ma ho paura
.....

5a2v0 il 12/10/2013, 20:24
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
allora... solo ora grazie all'accortezza di un amico sono riuscito a risolvere in parte il problema...

io ho il sensore sct-013-030 (30 ampere) e non il sct-013-000 (100 ampere) !!!

Cosa cambia ? guardando il datasheet, il sensore da 100 (che usano su openenergy) NON HA nessuna resistenza interna quindi io avevo usato le formule di openenergy e mi ero calcolato una resistenza da 105ohm da mettere tra il sensore e la porta analogica !!!

[u]Il sensore da 30ampere mio invece ha già all'interno una res. da 62ohm !!![/u]

Per cui avendo già la resistenza ed essendo quindi (si suppone) tarato per dare a 0 a 1v per la lettura da 0 a 30 ampere, io sfalsavo i parametri avendo un altra resistenza sul circuito !!!

Scollegata quella e impostato 0.166 come fattore di conversione (non poi così lontano dal tuo 0.108) riesco a leggere:
- 24watt per la lampada da 25;
- 57watt per la lampada da 60;
- 84 se entrambe sono accese !!!

Che sia un punto di svolta ?

ElettroshockNow il 12/10/2013, 21:24
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (5a2v0 @ 12/10/2013, 21:24) [quote]Che sia un punto di svolta ?

Lo spero ... cmq i risultati sono molto incoraggianti
.
Quindi la resistenza di shunt è già integrata nel sensore ? ..... io ci son cascato con tutte le scarpe aggiungendone un'altra da 100ohm .....

Grazie
Ps: appena posso metto tutto sotto torchio ..... analizzo tutto sull'oscilloscopio e poi voglio vedere l'onda che vede Arduino ......
Molti test li ho eseguiti con un Mega (quindi un Atmega2560) e senza troppe preoccupazioni li ho trasferiti sull'uno ..... Forse i due convertitori A/D si comportano diversamente quando si modifica la velocità di conversione .....
Bisogna testare

Ciao e nuovamente grazie
ElettroshockNow

5a2v0 il 13/10/2013, 12:30
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
datasheeets:
- modello 30 A
- modello 100 A

Io i valori che ho letto ieri li ho ottenuti lasciando sempre 20ms e con la stringa che aumenta la velocità...dovrei provare a mettere 200ms e commentare la riga e appena provo ti faccio sapere le letture...

bye

P.s. giusto per non fare copia incolla di un valore, per cercare di capire...

il tuo valore 0.055 che usavi con ACS e 0.108 usato con il tuo SCT, lo hai in qualche modo calcolato o lo hai ottenuto leggendo un carico noto e ricavandoti quindi il fattore di conversione ?

5a2v0 il 13/10/2013, 19:20
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
se imposto come te 200ms di tempo e levo l'impostazione del prescaler, senza carico mi segna 36 anzichè 0 però la lampada da 25 appena accesa poi mi dice 30 e quella da 60 mi dice qualcosa piu'.... insieme accese mi danno 87 !!!!

Ma xkè 36 senza carico O.o

5a2v0 il 14/10/2013, 16:27
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
mi rispondo da solo in quanto mi è capitato di leggere questo valore anche con il prescaler impostato a 16mhz.

In pratica, ogni tanto in base a cosa non so, anzichè leggere 508 senza carichi, l'arduino mi legge 509 !!! In questo caso quell' 1 in più moltiplicato 0.166 (fattore di conversione) e poi per 230 (tensione) mi restituisce quel consumo.

La cosa positiva è che se in quel momento accendo la lampada da 25 o da 60 o entrambe, non mi sballa la lettura sommando le lampade al valore letto già senza carico ma mi riporta solo il valore delle lampade !!!

Quindi a questo punto in realtà nel mio caso forse cambia poco tra lasciare il prescaler a default o portarlo a 16mhz !!!

Farò un po di prove e vi faccio sapere...

5a2v0 il 14/10/2013, 20:24
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Allego attuale sketch:
CITAZIONE [quote][color=#7E7E7E]//Includo la libreria per il corretto funzionamento del display
#include <[color=#CC6600]LiquidCrystal.h>
[color=#7E7E7E]// Dichiaro i pin del display
[color=#CC6600]LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
[color=#7E7E7E]// Dichiaro il pin a cui sono collegati i bottoni e la variabile in cui viene memorizzato il valore letto dal pin
[color=#CC6600]int buttonPin = A0;
[color=#CC6600]int buttonValue = 0;
[color=#7E7E7E]//Dichiaro il pin del sensore di corrente, la variabile in cui sarà memorizzato il valore letto dal sensore e una variabile per il test del sensore
[color=#CC6600]int sensorPin = A5;
[color=#CC6600]float sensorValue = 0.00;
[color=#CC6600]int sensorTest = 0;
[color=#7E7E7E]//Dichiaro il valore dell'offset, ovvero il valore letto da arduino sulla porta del sensore in assenza di carico
#define sensorOffset 510
[color=#7E7E7E]//Dichiaro le variabili in cui sarà memorizzato il valore di ampere totali assorbiti ed il numero di letture effettuate
[color=#CC6600]float ampere = 0.00;
[color=#CC6600]int numeroCampionamenti = 0;
[color=#CC6600]long inizioCampionamenti = 0;
[color=#7E7E7E]//Dichiaro la variabile della tensione stabilita a 230V
[color=#CC6600]float tensione = 230.00;
[color=#7E7E7E]//Dichiaro la variabile per il calcolo del consumo in watt
[color=#CC6600]int consumo = 0;
[color=#7E7E7E]//Dichiaro i pin del buzzer, dei led e dei relè
[color=#CC6600]int buzzer = 6;
[color=#CC6600]int verde1 = 7;
[color=#CC6600]int verde2 = 8;
[color=#CC6600]int rosso1 = 1;
[color=#CC6600]int rosso2 = 13;
[color=#CC6600]int bagni = 9;
[color=#CC6600]int stanze = 10;
[color=#7E7E7E]//Dichiaro variabili per memorizzare lo stato (0 o 1) dei relè e dei bottoni
[color=#CC6600]int rele1 = 0;
[color=#CC6600]int rele2 = 0;
[color=#CC6600]int buttonState = 0;
[color=#7E7E7E]//Variabili per prevenire ritardi ai pulsanti e regolare il refresh del display
#define intervallcd 3000
[color=#CC6600]unsigned [color=#CC6600]long previousMillslcd = 0;
#define interval1 2000
[color=#CC6600]unsigned [color=#CC6600]long previousMills1 = 0;
#define interval2 2000
[color=#CC6600]unsigned [color=#CC6600]long previousMills2 = 0;


[color=#CC6600]void [color=#CC6600]setup() {
[color=#7E7E7E]//Setta ADC prescaler a 16 Mhz cambiando quindi la velocita delle letture analogiche
ADCSRA&=0X90+ 0b100;
[color=#7E7E7E]//Definisco la porta seriale per leggere dati dal monitor seriale. NB: causa l'accensione del led sul PIN 1
[color=#7E7E7E]//Serial.begin(9600);
[color=#7E7E7E]//Inizializzo il display
lcd.[color=#CC6600]begin(16, 2);
[color=#7E7E7E]//Imposto i pin dei led, del buzzer e dei relè come uscite digitali
[color=#CC6600]pinMode(verde1, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(verde2, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(rosso1, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(rosso2, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(bagni, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(stanze, [color=#006699]OUTPUT);
[color=#CC6600]pinMode(buzzer, [color=#006699]OUTPUT);
[color=#7E7E7E]//Accendo i due led verdi e tengo spenti i due rossi
[color=#CC6600]digitalWrite(verde1, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(verde2, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(rosso1, [color=#006699]LOW);
[color=#CC6600]digitalWrite(rosso2, [color=#006699]LOW);
[color=#7E7E7E]//I relè sono normalmente chiusi e con HIGH la bobina non viene eccitata
[color=#CC6600]digitalWrite(bagni, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(stanze, [color=#006699]HIGH);
}


[color=#CC6600]void [color=#CC6600]loop() {
[color=#7E7E7E]//Eseguo solo una volta all'accensione delle letture a vuoto per l'assestamento dei valori ottenuti dal sensore di corrente
[color=#CC6600]if (sensorTest == 0) {
[color=#CC6600]do {
sensorValue = [color=#CC6600]analogRead(sensorPin);
lcd.[color=#CC6600]setCursor(0,0);
lcd.[color=#CC6600]print([color=#006699]"Check in corso...");
lcd.[color=#CC6600]setCursor(0,1);
[color=#7E7E7E]//Calcolo e scrivo una percentuale sul display in relazione alla seguente equazione
[color=#7E7E7E]//sensorOffset : 100% = sensorValue : x %
sensorTest = (sensorValue / sensorOffset) * 100;
lcd.[color=#CC6600]print(sensorTest);
lcd.[color=#CC6600]print([color=#006699]"% ");
[color=#7E7E7E]//Riga utilizzata per leggere il valore senza carico in fase di programmazione
[color=#7E7E7E]//lcd.print(sensorValue);
[color=#7E7E7E]//Se il sensore legge prima dei 10 secondi il giusto valore di offset, accorcia l'attesa e parte con il vero loop
[color=#CC6600]if (sensorValue == sensorOffset) {
lcd.[color=#CC6600]clear();
[color=#CC6600]break;
}
}
[color=#7E7E7E]//Sono necessari circa 10 secondi affinchè l'alimentazione e i condensatori forniscano un valore stabile alla linea 5v usata dal sensore
[color=#CC6600]while([color=#CC6600]millis() < 10000);
sensorTest = 1;
[color=#7E7E7E]//Note di fine check e test funzionamento buzzer
[color=#CC6600]tone(buzzer, 4699, 125);
[color=#CC6600]delay(160);
[color=#CC6600]noTone(buzzer);
[color=#CC6600]tone(buzzer, 4699, 125);
[color=#CC6600]delay(160);
[color=#CC6600]noTone(buzzer);
}


[color=#7E7E7E]//Lettura dati del sensore e calcolo della corrente assorbita e del consumo in watt
ampere = 0.00;
numeroCampionamenti = 0;
inizioCampionamenti = [color=#CC6600]millis() ;
[color=#CC6600]do
{
numeroCampionamenti++;
[color=#7E7E7E]//sensorOffset è la lettura senza carico quindi l'offset e lo sottraiamo alle letture
sensorValue = ([color=#CC6600]analogRead(sensorPin) - sensorOffset);
[color=#7E7E7E]//Alcune letture potrebbero avere valore negativo per cui noi consideriamo il valore assoluto
ampere+= [color=#CC6600]abs(sensorValue);
}
[color=#7E7E7E]//20 sono i millisecondi che verranno campionati
[color=#CC6600]while(([color=#CC6600]millis() - inizioCampionamenti) < 20);
[color=#7E7E7E]//Per ottenere gli ampere reali moltiplichiamo la media di ampere letti nei 20ms per 0.166 che è il fattore di conversione
ampere=(ampere / numeroCampionamenti) * 0.166;
[color=#7E7E7E]//Infine moltiplichiamo gli ampere per la tensione stabilita per ottenere il consumo in Watt
consumo = ampere * tensione;
[color=#7E7E7E]//Per evitare letture negative in assenza di carico
[color=#CC6600]if (consumo < 0) consumo = 0;


[color=#7E7E7E]//Lettura pin dei bottoni e azioni di distacco manuale o ripristino della corrente tramite i relè
buttonValue = [color=#CC6600]analogRead(buttonPin);
[color=#CC6600]if ([color=#CC6600]millis() - previousMills1 > interval1 ) {
previousMills1 = [color=#CC6600]millis();
[color=#7E7E7E]//Codice che viene eseguito per il bottone relativo alla linea "bagni"
[color=#CC6600]if ((buttonValue >= 150) && (buttonValue <= 200)) {
[color=#CC6600]switch (rele1) {
[color=#7E7E7E]//Se rele1 == 0 e viene premuto il bottone, bisogna accendere il relativo led rosso, spegnere il verde ed eccitare la bobina del relè
[color=#CC6600]case 0:
[color=#7E7E7E]//Il codice viene eseguito solo se il bottone nel precedente loop non era già premuto così da doverlo lasciare e ripremere per eseguire un'altra azione
[color=#CC6600]if (buttonState == 0) {
[color=#CC6600]digitalWrite(verde1, [color=#006699]LOW);
[color=#CC6600]digitalWrite(rosso1, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(bagni, [color=#006699]LOW);
lcd.[color=#CC6600]clear();
lcd.[color=#CC6600]setCursor(0,0);
lcd.[color=#CC6600]print([color=#006699]"istacco manuale");
lcd.[color=#CC6600]setCursor(0,1);
lcd.[color=#CC6600]print([color=#006699]"Linea 1 OFF");
[color=#CC6600]analogWrite(buzzer, 20);
[color=#CC6600]delay(1000);
[color=#CC6600]analogWrite(buzzer, 0);
[color=#7E7E7E]//Cambio lo stato del relè e specifico che il bottone è attualmente premuto
rele1 = 1;
buttonState = 1;
}
[color=#CC6600]break;
[color=#7E7E7E]//Se rele1 == 1 e viene premuto il bottone, bisogna accendere il relativo led verde, spegnere il rosso e diseccitare la bobina del relè
[color=#CC6600]case 1:
[color=#7E7E7E]//Il codice viene eseguito solo se il bottone nel precedente loop non era già premuto così da doverlo lasciare e ripremere per eseguire un'altra azione
[color=#CC6600]if (buttonState == 0) {
[color=#CC6600]digitalWrite(verde1, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(rosso1, [color=#006699]LOW);
[color=#CC6600]digitalWrite(bagni, [color=#006699]HIGH);
lcd.[color=#CC6600]clear();
lcd.[color=#CC6600]setCursor(0,0);
lcd.[color=#CC6600]print([color=#006699]"Intervento:");
lcd.[color=#CC6600]setCursor(0,1);
lcd.[color=#CC6600]print([color=#006699]"Linea 1 ON");
[color=#CC6600]tone(buzzer, 4699, 125);
[color=#CC6600]delay(160);
[color=#CC6600]noTone(buzzer);
[color=#CC6600]tone(buzzer, 4699, 125);
[color=#CC6600]delay(160);
[color=#CC6600]noTone(buzzer);
[color=#7E7E7E]//Resetto lo stato del relè e specifico che il bottone è attualmente premuto
rele1 = 0;
buttonState = 1;
}
[color=#CC6600]break;
}
}
}
[color=#CC6600]if ([color=#CC6600]millis() - previousMills2 > interval2 ) {
previousMills2 = [color=#CC6600]millis();
[color=#CC6600]if ((buttonValue >= 800) && (buttonValue <= 900)) {
[color=#CC6600]switch (rele2) {
[color=#7E7E7E]//Se rele2 == 0 e viene premuto il bottone, bisogna accendere il relativo led rosso, spegnere il verde ed eccitare la bobina del relè
[color=#CC6600]case 0:
[color=#7E7E7E]//Il codice viene eseguito solo se il bottone nel precedente loop non era già premuto così da doverlo lasciare e ripremere per eseguire un'altra azione
[color=#CC6600]if (buttonState == 0) {
[color=#CC6600]digitalWrite(verde2, [color=#006699]LOW);
[color=#CC6600]digitalWrite(rosso2, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(stanze, [color=#006699]LOW);
lcd.[color=#CC6600]clear();
lcd.[color=#CC6600]setCursor(0,0);
lcd.[color=#CC6600]print([color=#006699]"istacco manuale");
lcd.[color=#CC6600]setCursor(0,1);
lcd.[color=#CC6600]print([color=#006699]"Linea 2 OFF");
[color=#CC6600]analogWrite(buzzer, 20);
[color=#CC6600]delay(1000);
[color=#CC6600]analogWrite(buzzer, 0);
[color=#7E7E7E]//Cambio lo stato del relè e specifico che il bottone è attualmente premuto
rele2 = 1;
buttonState = 1;
}
[color=#CC6600]break;
[color=#7E7E7E]//Se rele2 == 1 e viene premuto il bottone, bisogna accendere il relativo led verde, spegnere il rosso e diseccitare la bobina del relè
[color=#CC6600]case 1:
[color=#7E7E7E]//Il codice viene eseguito solo se il bottone nel precedente loop non era già premuto così da doverlo lasciare e ripremere per eseguire un'altra azione
[color=#CC6600]if (buttonState == 0) {
[color=#CC6600]digitalWrite(verde2, [color=#006699]HIGH);
[color=#CC6600]digitalWrite(rosso2, [color=#006699]LOW);
[color=#CC6600]digitalWrite(stanze, [color=#006699]HIGH);
lcd.[color=#CC6600]clear();
lcd.[color=#CC6600]setCursor(0,0);
lcd.[color=#CC6600]print([color=#006699]"Intervento:");
lcd.[color=#CC6600]setCursor(0,1);
lcd.[color=#CC6600]print([color=#006699]"Linea 2 ON");
[color=#CC6600]tone(buzzer, 4699, 125);
[color=#CC6600]delay(160);
[color=#CC6600]noTone(buzzer);
[color=#CC6600]tone(buzzer, 4699, 125);
[color=#CC6600]delay(160);
[color=#CC6600]noTone(buzzer);
[color=#7E7E7E]//Resetto lo stato del relè e specifico che il bottone è attualmente premuto
rele2 = 0;
buttonState = 1;
}
[color=#CC6600]break;
}
}
}
[color=#7E7E7E]//Codice da eseguire ad ogni loop mentre nessun bottone è premuto per aggiornare lo stato delle linee ed il consumo in watt
[color=#CC6600]if ((buttonValue >= 0) && (buttonValue <= 100)) {
[color=#CC6600]if ([color=#CC6600]millis() - previousMillslcd > intervallcd ) {
previousMillslcd = [color=#CC6600]millis();
lcd.[color=#CC6600]clear();
lcd.[color=#CC6600]setCursor(0,1);
lcd.[color=#CC6600]print([color=#006699]"Watt: ");
lcd.[color=#CC6600]setCursor(7,1);
lcd.[color=#CC6600]print(consumo);
}
[color=#7E7E7E]//In base allo stato delle variabili rele1 e rele2, scrivo sul display l'attuale stato delle linee
lcd.[color=#CC6600]setCursor(0,0);
[color=#CC6600]if ((rele1 == 0) && (rele2 == 0)) {
lcd.[color=#CC6600]print([color=#006699]"Linee ON");
}
[color=#CC6600]if ((rele1 == 0) && (rele2 == 1)) {
lcd.[color=#CC6600]print([color=#006699]"L1 ON L2 OFF");
}
[color=#CC6600]if ((rele1 == 1) && (rele2 == 0)) {
lcd.[color=#CC6600]print([color=#006699]"L1 OFF L2 ON");
}
[color=#CC6600]if ((rele1 == 1) && (rele2 == 1)) {
lcd.[color=#CC6600]print([color=#006699]"Linee OFF");
}
[color=#7E7E7E]//Specifico che nessun bottone è premuto così da rendere possibili gli interventi sulle linee
buttonState = 0;
}
}


5a2v0 il 23/10/2013, 15:51
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
ElettroshockNow hai fatto altri boom ?


non ti si legge + !!!

io intanto ho modificato un bel po il codice che avevo postato appena sopra adattandolo di piu alle mie esigenze..

ho trovato anche il manuale del contatore enel monofase dove sono specificate le soglie e i tempi di intervento in modo da fare agire prima arduino


appena raggiungo una versione più definitiva (per ora è in test) riposto il codice...

P.s. Siccome faccio uso dei millis() molte volte per valorizzare delle variabili per contare quanto tempo è passato dall'ultima volta che si sono verificati degli eventi (tipo esuberi, azioni di distacco), ho letto nelle reference di Arduino che dopo circa 50giorni di stare sempre acceso si arriva al limite per la funzione millis che si azzera e inizia a contare da 0 appunto ...

per prevenire problemi legati a questo fenomeno avevo pensato di mettere al termine del loop:

totalmillis = millis();

e all'inizio del loop un controllo del tipo:

if (millis() < totalmillis) {
//azzera le variabili che facevano uso del valore precedente
previousmillis_xxxxxx = millis();
previousmillis_yyyyyy = millis();
previousmillis_zzzzzzz = millis();
goto to continua:
}

e per questo loop controllerà quindi solo i bottoni se premuti o meno, aggiornerà il display ma eviterà i controlli del carico che verranno ripresi dal successivo loop...

unica pecca è che se il sistema stava già contando i secondi perchè c'era un esubero in corso, conterà di nuovo da capo... ma mi sembra un bug piccolo...

altrimenti potrei fare che al termine del loop:

totalmillis = millis();

e all'inizio del loop un controllo del tipo:

if (millis() < totalmillis) {
//sottraggo a tutte le variabili con il precedente valore di millis (elevato) il valore max che può contenere la funzione millis() ottenendo così un valore negativo
previousWattReset -= 4294967296
previousmillis_yyyyyy -= 4294967296
previousmillis_zzzzzzz -= 4294967296
}

e dove poi c'è:

if (consumo <= limitWatt) {
if (millis() - previousWattReset > intervalWattReset)
previousWattReset = millis();

ECC ECC

in teoria cosi facendo il timer non viene mai perso


che ne dite ?

ElettroshockNow il 24/10/2013, 18:34
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (5a2v0 @ 23/10/2013, 16:51) [quote]ElettroshockNow hai fatto altri boom ?


non ti si legge + !!!

Ho perso il sincronismo con il tempo
.

Devo chiudere delle cose in sospeso e torno per miglirare la lettura dell'SCT ...... per ora il mio powermeter lavora ,anche se non soddisfa minimamente i miei requisiti ....

Ciao
ElettroshockNow

PS:Ti consiglio di aprire una discussione per il tuo progetto,in quanto merita un suo palco
.

prius2008 il 9/11/2013, 12:13
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao ragazzi.......una domanda forse stupida.....dovrei misurare i watt prodotti dai pannelli fotovoltaici e anche i watt che consuma l'inverter. è possibile con un bel display? O con due. Il mio, è un impianto a 24v e ho a disposizione due shunt da 150A/ 75mv. Grazie in anticipo!

Daniele Idrogeno il 16/11/2013, 18:01
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
B.sera a tutti. Mi chiamo Daniele è sono appassionato dall' elettronica. seguo molto le vostre discussioni che trovo interessanti. Ora sto trovando interessante arduino e in particolar modo il progetto di Elettroshock e a cui vorrei fargli una domanda. Io sto facendo un circuito fatto dal signor Marco Plessi. La mia domanda è posso interfacciare entrambi i progetti? Se si come potrei fare? Grazie a tutti voi anticipante

http://www.tecnovolt.altervista.org/index....tro-con-arduino
A scusate ho dimanticato il disegno del progetto che vorrei interfacciare.



ElettroshockNow il 16/11/2013, 20:44
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao Daniele,
interessante progetto ,ma aimè per fonderlo con il mio ben più semplice realizzazione, bisognerebbe stravolgere il codice .
Il motivo è perchè vengono usati interrupt nella libreria FreqPeriod che contrasterebbero con il flusso del mio programma
.

Ciao
ElettroshockNow

5a2v0 il 17/11/2013, 9:43
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
piccolo aggiornamento VIDEO della situazione:

parte 1


parte2




ElettroshockNow il 17/11/2013, 10:41
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
oohhhhh mi piace ...
Sono felice che vai avanti con la sperimentazione ottenendo come vedo degli ottimi risultati ...
Io non ho ancora migliorato lo sketch , ma dovrò farlo ..... almeno che non lo hai fatto te
.

Nuovamente bel lavoro

5a2v0 il 16/12/2013, 9:24
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
ri-ciao a tutti.. ho montato (finalmente) a parete il tutto dentro una "graziosa" scatoletta e collegato all'impianto di casa !!
Ora vedo di postare qualche foto..

Ho notato un problema dovuto CREDO a qualche interferenza... quando stacco e riattacco i relè, [u]se fatto troppo velocemente[/u] a volte mi spuntano dei caratteri strani nello schermo Lcd... ma questo è il male minore perchè ogni 1,5 secondi ho il refresh e scompaiono subito... il problema vero e proprio è se l' interferenza è TALE da far scomparire i caratteri dal monitor !!!!!!!

Il sistema infatti resta attivo e funzionante... legge i consumi e suona se sono alti, i bottoni continuano a staccare e/o riattaccare le linee solo che il display rimane soltanto retroilluminato senza nessun carattere a vista ! Non spunta piu' nulla finche non riavvio arduino!

per fortuna mi è capitato solo 2 volte quando praticamente avevo finito di montare e ho provato un po di volte con i bottoni manualmente a fare i distacchi e i riallacci per vedere se avevo collegato tutto bene..

Non esiste un modo per "riavviare" solo la parte monitor senza dover riavviare arduino completamente ?

ElettroshockNow il 16/12/2013, 9:52
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Hai inserito i diodi in parallelo alle bobine dei relè ?

ElettroshockNow il 16/12/2013, 11:06
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ops ... usi i moduli gia' fatti ...
Ma il difetto lo fa' anche senza carichi connessi ?
Se è no, prova ad allontanare i relè ....
Se è si ... aggiungi un condensatore da 100nF in parallelo all'alimentazione sul display ...

Per la parte software non saprei in quanto è il display che si impalla...
Una soluzione potrebbe essere usare un piedino di arduino per alimentare il display e resettarlo a piacimento....

5a2v0 il 16/12/2013, 11:51
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Qui un po di fotine:
https://imageshack.com/a/mKLb/1

Se basta disattivare e riattivare qualche piedino in particolare, posso farlo semplicemente con la pressione di un bottone !!!


Si può fare ? Se si, su che pin del display devo lavorare per riavviare il display?

ElettroshockNow il 16/12/2013, 12:32
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE [quote]



gran bel lavoro
...

5a2v0 il 19/12/2013, 9:48
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ho trovato soluzione al problema dell'interferenza !!!

Per il momento per provare ho messo un IF..

Se premo i 2 bottoni contemporaneamente, arduino fa un bel
CODICE
CITAZIONE (5a2v0, 03/01/2014 16:44:30 ) [quote]
LCD.BEGIN viene invece fatto SEMPRE subito dopo ogni distacco o riallaccio così da non presentarsi mai il problema dei caratteri strani...


Grazie del trucchetto condiviso ....

Sarebbe interessante capirne il motivo ,ma anche arginare il problema và cmq bene

Ciao

alealfredo il 14/1/2014, 23:39
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Salve a tutti,visto che, restando nel tema del fai da te, mi sono autocostruito una pdc aria/acqua per il riscaldamento dei pannelli radianti e ora vorrei monitorare il tutto per valutarne la reale resa/convenienza della macchina.
Volevo quindi chidere al nostro caro ElettroshockNow se il progetto del powermeter, si poteva adattare anche al monitoraggio di assorbimento e temperature acqua al fine di stilare un resoconto sui costi di gestione.
CIAO

ciccioro il 2/2/2014, 10:41
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Salve ho visto questo progetto simpatico per la regolazione dei carichi di casa
possibile capire dove si trova lo schema
sono nuovo e anche scompetente mi aiutate?
Grazie anticipatamente

calcola il 9/2/2014, 9:45
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Scusate, ma i sensori SCT-013-030 riuscite ad usarli anche con corrente continua? Probabilmente mi sono perso qualche passaggio della discussione.

ElettroshockNow il 9/2/2014, 10:02
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (calcola, 09/02/2014 09:45:12 ) [quote]Scusate, ma i sensori SCT-013-030 riuscite ad usarli anche con corrente continua? Probabilmente mi sono perso qualche passaggio della discussione.

No,sono in grado di misurare solo AC.
Per la DC aimè devi proseguire sui classici ACS .... oppure LEM ... oppure il Ronwal Sensor (anello di ferro che si richiude su un A1302 e nell'anello ci passi il cavo di alimentazione DC).

Ciao

ElettroshockNow il 9/2/2014, 10:06
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (ciccioro, 09/02/2014 10:02:01 ) [quote]Salve ho visto questo progetto simpatico per la regolazione dei carichi di casa
possibile capire dove si trova lo schema
sono nuovo e anche scompetente mi aiutate?
Grazie anticipatamente

Il progetto di 5a2v0 non è stato fornito di schema di collegamenti,ma lo puoi estrapolare dal listato che ha condiviso nella pagina precedente.
Ciao

calcola il 9/2/2014, 14:30
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Elettro grazie, avevo capito male. Conosco il progetto di Ronwal, preferirei qualcosa di commerciale. Al momento uso degli acs758 già con basetta, purtroppo non sono molto precisi.

ElettroshockNow il 9/2/2014, 17:54
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Hai ragione.
Maggiore sara' il fondoscala e minore sara' la sensibilità.
Però se il problema è aumentare la sensibilità con basse correnti puoi amplificare il segnale del sensore e usare un secondo ingresso analogico.
In pratica avrai due sensibilità con due fondi scala.
Il circuito è realizzabile con un semplice operazionale e puoi prendere spunto del circuito da questo....
5a2v0 il 18/3/2014, 20:08
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (ElettroshockNow, 09/02/2014 17:54:42 ) [quote]CITAZIONE (ciccioro, 09/02/2014 10:02:01 ) [quote]Salve ho visto questo progetto simpatico per la regolazione dei carichi di casa
possibile capire dove si trova lo schema
sono nuovo e anche scompetente mi aiutate?
Grazie anticipatamente

Il progetto di 5a2v0 non è stato fornito di schema di collegamenti,ma lo puoi estrapolare dal listato che ha condiviso nella pagina precedente.
Ciao


Oltre al fatto che vedendo che "funziona" quello che ho già, pur sapendo che lo posso migliorare mi sono un po cullato sugli allori...
Sono stato inoltre preso da altri "purtroppo troppi" progetti che ho in corso ma non ho assolutamente abbandonato...anzi !!! XD

Ho addirittura acquistato un Arduino Yun per sperimentare qualcosa di aggiuntivo per il mio progetto. In particolare sin ora ho fatto:

- Preso Arduino Yun;

- Comprato e collegato un lcd più grande (20x4) al posto del 16x2 precedente e l'ho collegato tramite adattatore seriale (interfaccia I2C) cosi da usare solo 2 pin digitali anzichè 6 !!!

- Attualmente montati ho 3 sensori SCT-013-030 e ne ho un 4° (e ultimo penso) in arrivo...

Ho in parte modificato lo sketch, in modo che grazie alle potenzialità di Arduino Yun, io possa collegarmi da casa e da fuori casa ad una pagina web che gira su Arduino (connesso al router tramite wifi presente su YUN) e visualizzare i consumi in qualsiasi momento.

I sensori sono diventati 4 perchè oltre a leggere il consumo totale, voglio leggere anche i consumi nelle sezioni "cucina, bagni e stanze".
Cosi posso staccare quella che effettivamente consuma piuttosto di andare secondo una logica prestabilita (priorità da me assegnate) che magari mi stacca una sezione con consumo basso/bassimo/zero...

Per ora Yun è montato su breadboard in modo che testo le varie funzioni che vado scrivendo (anche se ho esaurito lo spazio per gli sketch e devo "pulire" il codice fatto fin ora).

Appena mi sento "pronto" stacco la cassetta con Arduino Uno e ci trasferisco dentro lo Yun... vi terrò informati

supermomo717 il 18/4/2014, 14:36
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Il progetto di questo misuratore è veramente notevole e infatti sto aspettando mi arrivi il materiale per poterlo realizzare. Quello che mi piace in modo particolare è il poter gestire le uscite in funzione dei carichi misurati e delle soglie impostate.
Tuttavia, sempre se riesco a farlo funzionare, vorrei provare una soluzione, che potrebbe risolvermi diverse problematiche inerenti agli utilizzatori e la loro ubicazione. Ma vi spiego meglio il motivo e cosa vorrei ottenere ...
Il motivo principale è che mi piacciono le cose pulite e funzionali e non per ultimo, mi sono chiesto che cosa posso fare se conosco i consumi della mia casa, se conosco la produzione del mio FV ma non posso gestire i miei carichi se non in prossimità di Arduino?
Ho visto dei blog dove degli smanettoni di arduno sono riusciti a controllare delle "prese telecomandate" (facilmente ed economicamente recuprabili) direttamente con il modulo 433 mhz, inviando alle prese dei segnali di accensione/spegnimento, operando una sorta di "emulazione" del telecomando originale. Il tutto quindi andrebbe ad impegnare una sola uscita digitale di arduino ma quello che è veramente il plus della cosa è che non siamo vincolati dai fili.
In pratica potrei decidere di accendere un utilizzatore in una stanza superata una certa soglia, accendere un condizionatore o pompa di calore in una diversa oltre la successiva soglia e così via.
Qundi andrei a sperimentare per prima cosa il lavoro fatto da ElettroshockNow e da quanti hanno cooperato e sfruttare il lavoro fatto da altri di cui vi parlavo e provare a metterli insieme. Io di mio non ho queste capacità di scrivere codice anche perchè lo sto cercando di imparare ma sono alle prime armi e dunque mi destreggio nel copia/incolla.
Dite che arduino posso avere le risorse per gestire questo ulteriore carico di lavoro?
Buona Pasqua!

ElettroshockNow il 18/4/2014, 15:47
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (supermomo717, 18/04/2014 14:36:34 ) [quote]Io di mio non ho queste capacità di scrivere codice anche perchè lo sto cercando di imparare ma sono alle prime armi e dunque mi destreggio nel copia/incolla.
Dite che arduino posso avere le risorse per gestire questo ulteriore carico di lavoro?
Buona Pasqua!

Allora siamo in due.
Se vedi i miei codici fanno pena ,ma funzionano .

Arduino ? ... Lo può fare tranquillamente ....
Devi però recuperare il protocollo che usano le prese ... dobbiamo sapere che lingua parlano

BUONA PASQUA

supermomo717 il 19/5/2014, 14:48
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ho fatto un po diverso del lavoro che avevo in mente. Ho modificato il codice del ricevente e ho realizzato un PowermeterRemo. In pratica arrivando tutti i dati belli e pronti dall'arduino Master, ho lavorato con le variabili IF ELSE per gestire le uscite esattamente come sul powermeter.Adesso però dispongo di molte uscite e direttamente nel loco di utilizzo, svincolandomi dai fili. Se qualcuno vuole il codice client remoto lo posso postare se ElettroshockNow acconsente in quanto la creatura è sua, io l'ho solo adattata alle mie esigenze.

ElettroshockNow il 19/5/2014, 15:12
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (supermomo717, 19/05/2014 14:48:43 ) [quote]Se qualcuno vuole il codice client remoto lo posso postare se ElettroshockNow acconsente in quanto la creatura è sua, io l'ho solo adattata alle mie esigenze.

Ci mancherebbe che devo dare il consenso violerebbe il mio modo di essere ...
e poi .... vedere il progetto evolversi e migliorarsi mi fà solo piacere .

supermomo717 il 3/6/2014, 23:12
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Perdonate la poca esperienza ma ho cercato comunque di fare del mio meglio.
Stuzzicato dal progetto che ElettroshockNow ha presentato in questo 3d, ho voluto realizzare un ricevitore che accoppiato al trasmettitore Powermeter3_5 potesse permettermi di godere di maggiore "libertà di movimento", in pratica avere le uscite da gestire non vincolate fisicamente (fili) al ricevitore stesso.
Modificando il codice del ricevitore che ElettroshockNow ha gentilmente offerto alla community, me lo sono personalizzato come dicevo, facendolo diventare un aggieggino simpatico da tenere anche in vista per gli ospiti, dipende da quanto siete "artistici" e fantasiosi.
Veniamo al dunque con le caratteristiche:
- Niente fili dei sensori, quindi trasportabile dove volete compatibilmente con le prestazioni dei piccoli moduli wireless.
- Numero uscite a piacere, anche se 2 mi sono più che sufficienti.
- Niente display, solo indicatore a led di veloce lettura della potenza monitorata.
- Led che informa la corretta ricezione dei segnale del TX
- Led che informa che la produzione FV è minore del consumo domestico.
- 2 Tasti, Up e Down per modifica delle soglie impostate senza bisogno di pc.
- Led indicatore ad impulsi (ogni impulso sono 100 watt) di quanto è impostata la nuova soglia una volta modificata.
- Introduzione di un misuratore di intervallo di tempo prima che le uscite vengano disattivate al raggiungimento della soglia di spegnimento impostata.

Il lavoro grosso è svolto naturalmente dal TX mentre questo ricevitore elabora solamente i dati che riceve e opera di conseguenza.

Mettendo mano allo sketch potete fare qualsiasi cosa; la cosa più difficile? capire cosa si vuole fare.


[quote]

[color=#7E7E7E]/* Progetto RemoteRice Powermeter 1.2
[color=#7E7E7E]    "" Energia Alternativa & Energia Fai Da Te ""
[color=#7E7E7E]  http://www.energialternativa.org/
[color=#7E7E7E]  Ricevitore personalizzato da Supermomo717 per PowerMeter_TX3_5 realizzato da ElettroshockNow.
[color=#7E7E7E]  Si tratta di un sistema remoto per gestione uscite , 2 in questo caso.
[color=#7E7E7E]  Il Ricevitore Remote Powermeter 1.2, rielavora i valori ricevuti dal PowerMeter_TX3_5
[color=#7E7E7E]  e ne gestisce i carichi, collegati. 
[color=#7E7E7E]  - Introdotti 4 Led di controllo della potenza che si desidare monitorare, con soglie a 
[color=#7E7E7E]  diversi valori impostabili.
[color=#7E7E7E]  - Introdotto Led di avviso ricezione segnale da TX
[color=#7E7E7E]  - Introdotto intervallo di tempo antecedente lo spegnimento a raggiungimento una determinata soglia (per ovviare al problema che
[color=#7E7E7E]  un carico in avvio possa far leggere al ricevitore un raggiungimento di sottosoglia e staccare 
[color=#7E7E7E]  l'uscita al momento in cui il carico stesso dovrebbe avviarsi).
[color=#7E7E7E]  - Introdotti pulsanti per aumento delle soglie di accensione e spegnimento.
[color=#7E7E7E]  */

#include 

[color=#CC6600]const [color=#CC6600]int Uscita2 = 12; [color=#7E7E7E]//assegnazione pin uscita 2
[color=#CC6600]const [color=#CC6600]int Uscita1 = 10; [color=#7E7E7E]//assegnazione pin uscita 1
[color=#CC6600]const [color=#CC6600]int LedNegativo = 9; [color=#7E7E7E]//assegnazione pin uscita led consumo da rete
[color=#CC6600]const [color=#CC6600]int Led1 = 8; [color=#7E7E7E]//assegnazione pin led1
[color=#CC6600]const [color=#CC6600]int Led2 = 7; [color=#7E7E7E]//assegnazione pin led2
[color=#CC6600]const [color=#CC6600]int Led3 = 6; [color=#7E7E7E]//assegnazione pin led3
[color=#CC6600]const [color=#CC6600]int Led4 = 5; [color=#7E7E7E]//assegnazione pin led4
[color=#CC6600]const [color=#CC6600]int LedControllo = 4; [color=#7E7E7E]//assegnazione pin led controllo segnale e soglie
[color=#CC6600]const [color=#CC6600]int PulsanteUp = 3; [color=#7E7E7E]// pulsante aumento soglie
[color=#CC6600]const [color=#CC6600]int PulsanteDown = 2; [color=#7E7E7E]//pulsante diminuzione soglie


[color=#CC6600]const [color=#CC6600]int ledPin = 13; [color=#7E7E7E]//pin del led per controllo segnale da scheda
[color=#CC6600]int a=0; [color=#7E7E7E]// usata per impulsi al led quando cambio le soglie
[color=#CC6600]int b=0; [color=#7E7E7E]// contatore degli impulsi al led per cambio soglie
[color=#CC6600]int ledState = [color=#006699]LOW; [color=#7E7E7E]// ledState usato per settare il led
[color=#CC6600]long previousMillis = 0; [color=#7E7E7E]//conteggio per led quando c'è verifica segnale
[color=#CC6600]long interval = 100;


[color=#CC6600]int statoPulsanteUp = 0;
[color=#CC6600]int statoPulsanteDown = 0;

[color=#CC6600]byte monitor = 1;

[color=#CC6600]int Uscita_1_ON ;
[color=#CC6600]int Uscita_1_Time_On ;
[color=#CC6600]int Uscita_1_Time_Off ;
[color=#CC6600]unsigned [color=#CC6600]long TUscita1in = 0;
[color=#CC6600]unsigned [color=#CC6600]long TUscita1out = 0;
[color=#CC6600]int Uscita_1_OFF ;

[color=#CC6600]int Uscita_2_ON ;
[color=#CC6600]int Uscita_2_Time_On;
[color=#CC6600]int Uscita_2_Time_Off ;
[color=#CC6600]unsigned [color=#CC6600]long TUscita2in = 0;
[color=#CC6600]unsigned [color=#CC6600]long TUscita2out = 0;
[color=#CC6600]int Uscita_2_OFF;

[color=#CC6600]int Led1_On;
[color=#CC6600]int Led2_On;
[color=#CC6600]int Led3_On;
[color=#CC6600]int Led4_On;


[color=#CC6600]int PotenzaMon;[color=#7E7E7E]//Potenza da Monitorare

[color=#CC6600]int Tensione;
[color=#CC6600]int PotenzaPro;
[color=#CC6600]int PotenzaAss;
[color=#CC6600]float CorrentePro;
[color=#CC6600]float CorrenteAss;
[color=#CC6600]float TotalePro;
[color=#CC6600]float TotaleAss;

[color=#CC6600]void [color=#CC6600]setup()
{
  
  [color=#7E7E7E]//aggiunta dami
  [color=#CC6600]pinMode(Uscita1, [color=#006699]OUTPUT);
  [color=#CC6600]digitalWrite(Uscita1, [color=#006699]LOW);
  [color=#CC6600]pinMode(Uscita2, [color=#006699]OUTPUT);
  [color=#CC6600]digitalWrite(Uscita2, [color=#006699]LOW);
  [color=#CC6600]pinMode(LedControllo, [color=#006699]OUTPUT);
  [color=#CC6600]digitalWrite(LedControllo, [color=#006699]LOW);
  [color=#CC6600]pinMode(LedNegativo, [color=#006699]OUTPUT);
  [color=#CC6600]digitalWrite(LedNegativo, [color=#006699]LOW);
  [color=#CC6600]pinMode(Led1, [color=#006699]OUTPUT);
  [color=#CC6600]digitalWrite(Led1, [color=#006699]LOW);
  [color=#CC6600]pinMode(Led2, [color=#006699]OUTPUT);
  [color=#CC6600]digitalWrite(Led2, [color=#006699]LOW);
  [color=#CC6600]pinMode(Led3, [color=#006699]OUTPUT);
  [color=#CC6600]digitalWrite(Led3, [color=#006699]LOW);
  [color=#CC6600]pinMode(Led4, [color=#006699]OUTPUT);
  [color=#CC6600]digitalWrite(Led4, [color=#006699]LOW);
  
  [color=#CC6600]pinMode(PulsanteUp, [color=#006699]INPUT);
  [color=#CC6600]pinMode(PulsanteDown, [color=#006699]INPUT);
  
  [color=#CC6600]pinMode(ledPin, [color=#006699]OUTPUT);
  
  monitor = 3; [color=#7E7E7E]//Potenza da monitorare 1=prodotta - 2=assorbita - 3 = prodotta-assorbita - 4= assorbia-prodotta

    Uscita_1_ON = 800; [color=#7E7E7E]//Accendi a XXX Watt
    Uscita_1_Time_On = 20; [color=#7E7E7E]//Accendi dopo TOT secondi raggiunti XXX Watt
    Uscita_1_Time_Off = 10; [color=#7E7E7E]//Spegni dopo TOT secondi raggiunti YYY Watt
    Uscita_1_OFF = 0; [color=#7E7E7E]//Spegni a YYY Watt
    Uscita_2_ON = 2000; [color=#7E7E7E]//Accendi a xxx Watt
    Uscita_2_Time_On = 5; [color=#7E7E7E]//Accendi dopo tot secondi raggiunti xxx Watt
    Uscita_2_Time_Off = 5; [color=#7E7E7E]//Spegni dopo tot secondi raggiunti yyy Watt
    Uscita_2_OFF = 1000 ; [color=#7E7E7E]//Spegni a yyy Watt
    
    [color=#7E7E7E]//Parte visiva
    Led1_On = 250; [color=#7E7E7E]//Accendi led 1 superati determinati watt
    Led2_On = 500; [color=#7E7E7E]//Accendi led 2 superati determinati watt
    Led3_On = 750; [color=#7E7E7E]//Accendi led 3 superati determinati watt
    Led4_On = 1000; [color=#7E7E7E]//Accendi led 4 superati determinati watt
  
  
[color=#CC6600]Serial.[color=#CC6600]begin(9600); [color=#7E7E7E]// Debugging only
[color=#CC6600]Serial.[color=#CC6600]println([color=#006699]"setup");

[color=#7E7E7E]// Initialise the IO and ISR
vw_set_ptt_inverted([color=#CC6600]true); [color=#7E7E7E]// Required for DR3100
vw_setup(2000); [color=#7E7E7E]// Bits per sec

vw_rx_start(); [color=#7E7E7E]// Start the receiver PLL running
}

[color=#CC6600]void [color=#CC6600]loop()
{
  statoPulsanteUp = [color=#CC6600]digitalRead(PulsanteUp);
  statoPulsanteDown = [color=#CC6600]digitalRead(PulsanteDown);
  
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;

[color=#CC6600]if (vw_get_message(buf, &buflen)) [color=#7E7E7E]// Non-blocking
{
  
  [color=#7E7E7E]// parte relativa al lampeggio del led di controllo quando RX ha segnale da TX
  [color=#CC6600]unsigned [color=#CC6600]long currentMillis = [color=#CC6600]millis();
 
  [color=#CC6600]if(currentMillis - previousMillis > interval) {
    [color=#7E7E7E]// save the last time you blinked the LED
    previousMillis = currentMillis;   

    [color=#7E7E7E]// if the LED is off turn it on and vice-versa:
    [color=#CC6600]if (ledState == [color=#006699]LOW)
      ledState = [color=#006699]HIGH;
    [color=#CC6600]else
    
      ledState = [color=#006699]LOW;
    [color=#7E7E7E]// set the LED with the ledState of the variable:
    [color=#CC6600]digitalWrite(LedControllo, ledState); [color=#7E7E7E]// originale è ledPin per lampeggio led 13 su Arduino
     
[color=#7E7E7E]/*
[color=#7E7E7E]int i;
[color=#7E7E7E]digitalWrite(13, true); // Flash a light to show received good message
[color=#7E7E7E]// Message with a good checksum received, dump it.
[color=#7E7E7E]Serial.print("Got: ");

[color=#7E7E7E]for (i = 0; i < buflen; i++)
[color=#7E7E7E]{
[color=#7E7E7E]Serial.print(buf[i], DEC);
[color=#7E7E7E]Serial.print(" ");
[color=#7E7E7E]}
[color=#7E7E7E]*/
Tensione = buf[1];
PotenzaPro = ([color=#CC6600]int(buf[3]<<8)+buf[2]);
PotenzaAss = ([color=#CC6600]int(buf[5]<<8)+buf[4]);
CorrentePro = [color=#CC6600]float([color=#CC6600]int(buf[7]<<8)+buf[6])/100;
CorrenteAss = [color=#CC6600]float([color=#CC6600]int(buf[9]<<8)+buf[8])/100;
TotalePro = [color=#CC6600]float([color=#CC6600]long(buf[12]<<16)+[color=#CC6600]int(buf[11]<<8)+buf[10])/10;
TotaleAss = [color=#CC6600]float([color=#CC6600]long(buf[15]<<16)+[color=#CC6600]int(buf[14]<<8)+buf[13])/10;

[color=#7E7E7E]/*
[color=#7E7E7E]Serial.write ("Tensione= ");
[color=#7E7E7E]Serial.print(Tensione);
[color=#7E7E7E]Serial.println(" Volt");
[color=#7E7E7E]Serial.write ("Potenza Assorbita= ");
[color=#7E7E7E]Serial.print(PotenzaAss);
[color=#7E7E7E]Serial.println(" Watt");
[color=#7E7E7E]Serial.print ("Potenza Prodotta= ");
[color=#7E7E7E]Serial.print(PotenzaPro);
[color=#7E7E7E]Serial.println(" Watt");
[color=#7E7E7E]Serial.write ("Corrente Assorbita= ");
[color=#7E7E7E]Serial.print(CorrenteAss);
[color=#7E7E7E]Serial.println(" Amper");
[color=#7E7E7E]Serial.write ("Corrente Prodotta= ");
[color=#7E7E7E]Serial.print(CorrentePro);
[color=#7E7E7E]Serial.println(" Amper");
[color=#7E7E7E]Serial.write ("Totale Consumata= ");
[color=#7E7E7E]Serial.print(TotaleAss);
[color=#7E7E7E]Serial.println(" Kwh");
[color=#7E7E7E]Serial.write ("Totale Prodotta= ");
[color=#7E7E7E]Serial.print(TotalePro);
[color=#7E7E7E]Serial.println(" Kwh");
[color=#7E7E7E]*/

[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]"Registro una Potenza Prodotta di ");
[color=#CC6600]Serial.[color=#CC6600]print(PotenzaPro);
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]" Watt");
[color=#CC6600]Serial.[color=#CC6600]println([color=#006699]"");
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]"Registro una Potenza Assorbita di ");
[color=#CC6600]Serial.[color=#CC6600]print(PotenzaAss);
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]" Watt");
[color=#CC6600]Serial.[color=#CC6600]println([color=#006699]"");
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]"Immetto in rete una Potenza di ");
[color=#CC6600]Serial.[color=#CC6600]print(PotenzaMon);
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]" Watt");
[color=#CC6600]Serial.[color=#CC6600]println([color=#006699]"");
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]"Accensione Uscita 1 Impostata a ");
[color=#CC6600]Serial.[color=#CC6600]print(Uscita_1_ON);
[color=#CC6600]Serial.[color=#CC6600]println([color=#006699]"");
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]"Spegnimento Uscita 1 Impostata= ");
[color=#CC6600]Serial.[color=#CC6600]print(Uscita_1_OFF);
[color=#CC6600]Serial.[color=#CC6600]println([color=#006699]"");
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]"Accensione Uscita 2 Impostata a ");
[color=#CC6600]Serial.[color=#CC6600]print(Uscita_2_ON);
[color=#CC6600]Serial.[color=#CC6600]println([color=#006699]"");
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]"Spegnimento Uscita 2 Impostata= ");
[color=#CC6600]Serial.[color=#CC6600]print(Uscita_2_OFF);
[color=#CC6600]Serial.[color=#CC6600]println([color=#006699]"");
[color=#CC6600]Serial.[color=#CC6600]write ([color=#006699]"Totale Prodotta= ");
[color=#CC6600]Serial.[color=#CC6600]print(TotalePro);
[color=#CC6600]Serial.[color=#CC6600]println([color=#006699]" Kwh");
[color=#CC6600]Serial.[color=#CC6600]println([color=#006699]"");



[color=#7E7E7E]//Serial.println("");
[color=#CC6600]digitalWrite(13, [color=#CC6600]false);

[color=#CC6600]switch (monitor){ [color=#7E7E7E]//Non modificare sopra non qui. Selettore potenza da monitorere
              [color=#CC6600]case 1:
                PotenzaMon=PotenzaPro;
              [color=#CC6600]break;
              [color=#CC6600]case 2:
                PotenzaMon=PotenzaAss;
              [color=#CC6600]break;
              [color=#CC6600]case 3:
                PotenzaMon=PotenzaPro-PotenzaAss;
              [color=#CC6600]break;
              [color=#CC6600]case 4:
                PotenzaMon=PotenzaAss-PotenzaPro;
              [color=#CC6600]break;
            }    
            [color=#CC6600]if (PotenzaMon();
  [color=#CC6600]else [color=#CC6600]if ([color=#CC6600]millis()>(Uscita_1_Time_On*1000+TUscita1in)) [color=#CC6600]digitalWrite(Uscita1,[color=#006699]HIGH);
          [color=#CC6600]if (PotenzaMon>Uscita_1_OFF) TUscita1out=[color=#CC6600]millis();
  [color=#CC6600]else [color=#CC6600]if ([color=#CC6600]millis()>(Uscita_1_Time_Off*1000+TUscita1out)) [color=#CC6600]digitalWrite(Uscita1,[color=#006699]LOW);

  
            [color=#CC6600]if (PotenzaMon();
  [color=#CC6600]else [color=#CC6600]if ([color=#CC6600]millis()>(Uscita_2_Time_On*1000+TUscita2in)) [color=#CC6600]digitalWrite(Uscita2,[color=#006699]HIGH);
            [color=#CC6600]if (PotenzaMon>Uscita_2_OFF) TUscita2out=[color=#CC6600]millis();
  [color=#CC6600]else [color=#CC6600]if ([color=#CC6600]millis()>(Uscita_2_Time_Off*1000+TUscita2out)) [color=#CC6600]digitalWrite(Uscita2,[color=#006699]LOW);
  
     
  [color=#CC6600]if (PotenzaMon>Led1_On) [color=#CC6600]digitalWrite(Led1,[color=#006699]HIGH);
  [color=#CC6600]else [color=#CC6600]digitalWrite(Led1,[color=#006699]LOW);
  
  [color=#CC6600]if (PotenzaMon>Led2_On) [color=#CC6600]digitalWrite(Led2,[color=#006699]HIGH);
  [color=#CC6600]else [color=#CC6600]digitalWrite(Led2,[color=#006699]LOW);
  
  [color=#CC6600]if (PotenzaMon>Led3_On) [color=#CC6600]digitalWrite(Led3,[color=#006699]HIGH);
  [color=#CC6600]else [color=#CC6600]digitalWrite(Led3,[color=#006699]LOW);
  
  [color=#CC6600]if (PotenzaMon>Led4_On) [color=#CC6600]digitalWrite(Led4,[color=#006699]HIGH);
  [color=#CC6600]else [color=#CC6600]digitalWrite(Led4,[color=#006699]LOW);
  
 [color=#CC6600]if (PotenzaAss>PotenzaPro) [color=#CC6600]digitalWrite(LedNegativo,[color=#006699]HIGH);
 [color=#CC6600]else [color=#CC6600]digitalWrite(LedNegativo,[color=#006699]LOW);
  
}
[color=#7E7E7E]// parte relativa ai tasti di modifica soglie intervento
}
[color=#CC6600]if (statoPulsanteUp == [color=#006699]LOW){
  [color=#CC6600]Serial.[color=#CC6600]print([color=#006699]"Aumento Soglie Intervento, accensione Uscita 1 a ");
  Uscita_1_ON = Uscita_1_ON + 100;
  Uscita_2_ON = Uscita_2_ON + 100;
  Uscita_1_OFF = Uscita_1_OFF + 100;
  Uscita_2_OFF = Uscita_2_OFF + 100;
  [color=#CC6600]Serial.[color=#CC6600]print(Uscita_1_ON);
  [color=#CC6600]Serial.[color=#CC6600]print([color=#006699]" e uscita 2 a ");
  [color=#CC6600]Serial.[color=#CC6600]print(Uscita_2_ON);
  [color=#CC6600]delay(500);
  [color=#CC6600]while (b  {[color=#CC6600]digitalWrite(LedControllo, [color=#006699]HIGH);
  [color=#CC6600]delay(300);
  [color=#CC6600]digitalWrite(LedControllo, [color=#006699]LOW);
  [color=#CC6600]delay(300);
  b++;
  }
  
    b=0;
  }
     
  [color=#CC6600]else [color=#CC6600]if (statoPulsanteDown == [color=#006699]LOW){
  [color=#CC6600]Serial.[color=#CC6600]print([color=#006699]"Diminuzione Soglie Intervento, accensione Uscita 1 a ");
  Uscita_1_ON = Uscita_1_ON - 100;
  Uscita_2_ON = Uscita_2_ON - 100;
  Uscita_1_OFF = Uscita_1_OFF - 100;
  Uscita_2_OFF = Uscita_2_OFF - 100;
  [color=#CC6600]Serial.[color=#CC6600]print(Uscita_1_ON);
  [color=#CC6600]Serial.[color=#CC6600]print([color=#006699]" e uscita 2 a ");
  [color=#CC6600]Serial.[color=#CC6600]print(Uscita_2_ON);
  [color=#CC6600]delay(500);
  [color=#CC6600]while (b  {[color=#CC6600]digitalWrite(LedControllo, [color=#006699]HIGH);
  [color=#CC6600]delay(300);
  [color=#CC6600]digitalWrite(LedControllo, [color=#006699]LOW);
  [color=#CC6600]delay(300);
  b++;
  

b=0;

}






5a2v0 il 16/7/2014, 11:15
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Rieccomi...finalmente ho potuto testare il lavoro realizzato in questo ultimo periodo e come promesso al mio post precedente, vi aggiorno sulla situazione:

Messo da parte Arduino Uno, ho "inscatolato" il nuovo Yun, con una proto-shield leggermente modificata dalla precedente per leggere tutti i sensori e per collegare il display via I2C e usare solo 2 pin digitali anzichè 6pin come con il normale collegamento..
Ho inoltre sostituito il buzzer usato per le segnalazioni acustiche, con una cassa (


Lo sketch differisce quindi per la parte che si occupa della comunicazione dei dati ottenuti (consumi) da arduino alla sua parte linux che poi sarebbe quella che mi permette di leggere i dati e interagire con i relè anche da remoto

Ma per quanto riguarda il calcolo dei consumi, lo sketch è basato sulla stessa logica di prima e quindi del lavoro di ElettroshockNow !

Subito dopo il montaggio (avevo cercato di curare al meglio lo sketch per non avere sorprese) ho visto che in linea generale, funzionava...


I sensori riportavano valori dei consumi delle linee monitorate attendibili, MA: nelle linee in cui non avevo carichi, per esempio, la linea bagni con a monte il magnetotermico messo su OFF, arduino mi riportava un consumo "fantasma" di circa 80 - 90 watt !!

Ho provato addirittura a staccare TUTTI i magnetotermici del quadro elettrico (tranne quello che da l'alimentazione ad arduino) e mi aspettavo quindi un bel 0 dai sensori CUCINA, BAGNI, STANZE e qualcosa (MA POCO) dal TOTALE... questo test con Arduino UNO l'avevo effettuato ed effettivamente riportava una manciata di watt.

Purtroppo con Yun e con quello sketch ho ottenuto il consumo "fantasma" su tutti e 4 i sensori... ora, potrei anche fare finta di nulla, tanto alla fine è una condizione rara quella in cui non ci sia davvero nessun utilizzatore che assorbe un po di corrente in ogni stanza, ma il problema è che potenzialmente questo consumo "fantasma" si va ad aggiungere alle letture reali quando invece il consumo C'E', inoltre avendo sviluppato anche l'app per android che mi mostra:

Consumo Totale
Consumo Cucina
Consumo Bagni
Consumo Stanze

non è particolarmente bello leggere valori come (esempio):

totale 2250 watt
cucina 2200 watt
bagni 90 watt
stnze 80 watt

perchè giustamente fa capire che qualcosa non va !!
(riporto la parte di codice che effettua la lettura)
[code]
//###################
//LETTURA SENSORI ###
//###################
//Lettura dati dei sensori e calcolo della corrente assorbita e dei consumi in watt
ampereTot = 0.00;
ampereCucina = 0.00;
ampereStanze = 0.00;
ampereBagni = 0.00;
numeroCampionamenti = 0;
inizioCampionamenti = millis() ;
do
{
numeroCampionamenti++;
sensorTotValue = analogRead(sensorTotPin);
sensorCucinaValue = analogRead(sensorCucinaPin);
sensorStanzeValue = analogRead(sensorStanzePin);
sensorBagniValue = analogRead(sensorBagniPin);
//offsetValue è la lettura senza carico quindi lo sottraiamo alle letture dei sensori
offsetValue = analogRead(offsetPin);
sensorTotValue -= offsetValue;
sensorCucinaValue -= offsetValue;
sensorStanzeValue -= offsetValue;
sensorBagniValue -= offsetValue;
//Alcune letture potrebbero avere valore negativo per cui noi consideriamo il valore assoluto
ampereTot += abs(sensorTotValue);
ampereCucina += abs(sensorCucinaValue);
ampereStanze += abs(sensorStanzeValue);
ampereBagni += abs(sensorBagniValue);
}
//20 sono i millisecondi che verranno campionati
while ((millis() - inizioCampionamenti) < 20);
//Per ottenere gli ampere reali moltiplichiamo la media di ampere letti nei 20ms per 0.166 che è il fattore di conversione calcolato con un carico noto
ampereTot = (ampereTot / numeroCampionamenti) * fattoreConversione;
ampereCucina = (ampereCucina / numeroCampionamenti) * fattoreConversione;
ampereStanze = (ampereStanze / numeroCampionamenti) * fattoreConversione;
ampereBagni = (ampereBagni / numeroCampionamenti) * fattoreConversione;
//Infine moltiplichiamo gli ampere per la tensione stabilita per ottenere il consumo in Watt
consumoTot = ampereTot * tensione;
consumoCucina = ampereCucina * tensione;
consumoStanze = ampereStanze * tensione;
consumoBagni = ampereBagni * tensione;


Ho provato allora a moficare qualcosa (aumentando SOLO il tempo di campionamento) visto che ora avevo più sensori, magari serviva più tempo per effettuare un adeguato numero di letture per ogni porta analogica e fare una giusta media ecc ecc... --> Nulla di risolto

Allora ho provato tante altre modifiche, ma senza raggiungere mai buoni risultati, anzi ho addirittura incontrato un NUOVO problema, ovvero:

Facendo consecutivamente tante letture analogiche di porte DIVERSE, alcune letture (le prime) di ogni pin vengono influenzate dalla lettura precedene del pin precedente in quanto (se ho ben capito) la parte che si occupa di effettuare la lettura analogica, per farlo, carica un condensatore che quindi va a falsare la lettura del prossimo pin, specialmente se le tensioni sono molto simili..

io in particolare con lo sketch eseguivo nei 20ms le letture così:

A1, A2, A3, A4, A5, A1, A2, A3, A4, A5, e cosi via quindi l'ADC cambiava la porta ad ogni lettura falsando quindi TUTTE le letture...

Seguendo un consiglio ottenuto sul forum di arduino, ho provato il seguente codice:

[code]
do
{
numeroCampionamenti++;
//offsetValue è la lettura senza carico quindi lo sottraiamo alle letture dei sensori
offsetValue = analogRead(offsetPin);
offsetValue = analogRead(offsetPin);
sensorTotValue = analogRead(sensorTotPin);
sensorTotValue = analogRead(sensorTotPin) - offsetValue;
sensorCucinaValue = analogRead(sensorCucinaPin);
sensorCucinaValue = analogRead(sensorCucinaPin) - offsetValue;
sensorStanzeValue = analogRead(sensorStanzePin);
sensorStanzeValue = analogRead(sensorStanzePin) - offsetValue;
sensorBagniValue = analogRead(sensorBagniPin);
sensorBagniValue = analogRead(sensorBagniPin) - offsetValue;
//20 sono i millisecondi che verranno campionati
while ((millis() - inizioCampionamenti) < 20);


che avrebbe dovuto effettuare una lettura a vuoto per ogni pin analogico per avere la seconda lettura più precisa, ma avevo sempre problemi con le letture..

In preda alla disperazione, o forse colto da un improvvisa ispirazione, ho pensato che la strada giusta fosse quella di fare tante letture consecutive per ogni pin e POI cambiare e leggere il successivo, così ho riscritto la parte delle letture così:

[code]
//###################
//LETTURA SENSORI ###
//###################
//Lettura dati dei sensori e calcolo della corrente assorbita e dei consumi in watt
sensorTotValue = 0;
sensorCucinaValue = 0;
sensorStanzeValue = 0;
sensorBagniValue = 0;
offsetValue = 0;
//SENSORE BAGNI
numeroCampionamenti = 0;
inizioCampionamenti = millis() ;
do
{
numeroCampionamenti++;
sensorBagniValue += analogRead(sensorBagniPin);
}
//20 sono i millisecondi che verranno campionati per ogni sensore
while ((millis() - inizioCampionamenti) < 20);
sensorBagniValue /= numeroCampionamenti;
//SENSORE STANZE
numeroCampionamenti = 0;
inizioCampionamenti = millis() ;
do
{
numeroCampionamenti++;
sensorStanzeValue += analogRead(sensorStanzePin);
}
//20 sono i millisecondi che verranno campionati per ogni sensore
while ((millis() - inizioCampionamenti) < 20);
sensorStanzeValue /= numeroCampionamenti;
//SENSORE CUCINA
numeroCampionamenti = 0;
inizioCampionamenti = millis() ;
do
{
numeroCampionamenti++;
sensorCucinaValue += analogRead(sensorCucinaPin);
}
//20 sono i millisecondi che verranno campionati per ogni sensore
while ((millis() - inizioCampionamenti) < 20);
sensorCucinaValue /= numeroCampionamenti;
//SENSORE TOTALE
numeroCampionamenti = 0;
inizioCampionamenti = millis() ;
do
{
numeroCampionamenti++;
sensorTotValue += analogRead(sensorTotPin);
}
//20 sono i millisecondi che verranno campionati per ogni sensore
while ((millis() - inizioCampionamenti) < 20);
sensorTotValue /= numeroCampionamenti;
//OFFSET
numeroCampionamenti = 0;
inizioCampionamenti = millis() ;
do
{
numeroCampionamenti++;
//offsetValue è la lettura senza carico che poi sottraiamo alle letture dei sensori
offsetValue += analogRead(offsetPin);
}
//20 sono i millisecondi che verranno campionati per ogni sensore
while ((millis() - inizioCampionamenti) < 20);
offsetValue /= numeroCampionamenti;
sensorTotValue -= offsetValue;
sensorCucinaValue -= offsetValue;
sensorStanzeValue -= offsetValue;
sensorBagniValue -= offsetValue;
//Alcune differenze potrebbero avere valore negativo per cui noi consideriamo il valore assoluto
sensorTotValue = abs(sensorTotValue);
sensorCucinaValue = abs(sensorCucinaValue);
sensorStanzeValue = abs(sensorStanzeValue);
sensorBagniValue = abs(sensorBagniValue);
//Per ottenere gli ampere reali moltiplichiamo la media di ampere letti nei 20ms per 0.166 che è il fattore di conversione calcolato con un carico noto
ampereTot = sensorTotValue * fattoreConversione;
ampereCucina = sensorCucinaValue * fattoreConversione;
ampereStanze = sensorStanzeValue * fattoreConversione;
ampereBagni = sensorBagniValue * fattoreConversione;
//Infine moltiplichiamo gli ampere per la tensione stabilita per ottenere il consumo in Watt
consumoTot = ampereTot * tensione;
consumoCucina = ampereCucina * tensione;
consumoStanze = ampereStanze * tensione;
consumoBagni = ampereBagni * tensione;


Con 5 cicli do-while (1 per ogni porta analogica) ho ottenuto finalmente dei bei 0 (o valori comunque bassi e accettabili) in condizioni di NIENTE CARICO, cosa STRANA invece in condizioni di carico dove leggo si un consumo ma BASSO rispetto all'assorbimento di utilizzatori NOTI..(esempio un phon da max 1800 watt me lo leggeva 160watt)

Facendo di nuovo prove sul TEMPO DI CAMPIONAMENTO, ho provato ad abbassarlo per tutti e 5 i cicli do-while da 20ms a 10ms e magicamente spunta il consumo VERO... ma ancora con un altro problema:

il consumo è letto ad intervalli (esempio): phon max 1800watt acceso, il consumo Totale mi mostra 1750watt (ok) dopo 1 secondo mi dice 1780watt (ok) dopo ancora mi dice 1740watt (ok) dopo mi dice di colpo 500watt e dopo magari riprende con valori attendibili ma sempre con un valore nettamente inferiore in mezzo..

altro esempio: consumo STANZE con 1 pc acceso, qualche tv in preaccensione, modem, switch ecc ecc mi da 160 watt circa (ci può stare) poi 190 poi 200 ma ogni tanto mi dice 30!

Ho provato ad abbassare ulteriormente e poi anche ad aumentare oltre i 20ms il tempo di campionamento, ma i risultati peggioravano addirittura...

Diciamo che rispetto all'inizio non ho più le letture fantasma ma ho sempre qualche problemino.. sono sicuro che mi sfugge qualcosa, ma non so cosa, per cui chiedo aiuto a Voi...

Che mi consigliate ?

ElettroshockNow il 16/7/2014, 20:06
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao,
Misura a vuoto tutti gli input , probabilmente l'offset è diverso.
Se invece usi una tensione offset in comune per tutti i sensori devi necessariamente usare un operazionale per abbassare l'impedenza , altrimenti i sensori si disturbano a vicenda, in quesyo caso potrai usare un pin analogico per misurare tale valore e sottrarlo in tempo reale hai valori dei sensori.

A titolo di curiosità:
Visto che stai usando yun , testa anche quanti campionamenti riesce ad eseguire a periodo di default..

5a2v0 il 17/7/2014, 11:38
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Attualmnte ho rimesso questo codice (che era quello che avevo preparato per yun prima ancora di montarlo, sulla base di quello che usavo per UNO):

[code]
//###################
//LETTURA SENSORI ###
//###################
//Lettura dati dei sensori e calcolo della corrente assorbita e dei consumi in watt
ampereTot = 0.00;
ampereCucina = 0.00;
ampereStanze = 0.00;
ampereBagni = 0.00;
numeroCampionamenti = 0;
inizioCampionamenti = millis() ;
do
{
numeroCampionamenti++;
sensorTotValue = analogRead(sensorTotPin);
sensorCucinaValue = analogRead(sensorCucinaPin);
sensorStanzeValue = analogRead(sensorStanzePin);
sensorBagniValue = analogRead(sensorBagniPin);
//offsetValue è la lettura senza carico quindi lo sottraiamo alle letture dei sensori
offsetValue = analogRead(offsetPin);
sensorTotValue -= offsetValue;
sensorCucinaValue -= offsetValue;
sensorStanzeValue -= offsetValue;
sensorBagniValue -= offsetValue;
//Alcune letture potrebbero avere valore negativo per cui noi consideriamo il valore assoluto
ampereTot += abs(sensorTotValue);
ampereCucina += abs(sensorCucinaValue);
ampereStanze += abs(sensorStanzeValue);
ampereBagni += abs(sensorBagniValue);
}
while ((millis() - inizioCampionamenti) < 80);
/*Serial.print(offsetValue);
Serial.println(sensorTotValue);
Serial.println(sensorCucinaValue);
Serial.println(sensorBagniValue);
Serial.println(sensorStanzeValue);
Serial.println("-------------------");*/
//Per ottenere gli ampere reali moltiplichiamo la media di ampere letti nei 20ms per 0.166 che è il fattore di conversione calcolato con un carico noto
ampereTot = (ampereTot / numeroCampionamenti) * fattoreConversione;
ampereCucina = (ampereCucina / numeroCampionamenti) * fattoreConversione;
ampereStanze = (ampereStanze / numeroCampionamenti) * fattoreConversione;
ampereBagni = (ampereBagni / numeroCampionamenti) * fattoreConversione;
//Infine moltiplichiamo gli ampere per la tensione stabilita per ottenere il consumo in Watt
consumoTot = ampereTot * tensione;
consumoCucina = ampereCucina * tensione;
consumoStanze = ampereStanze * tensione;
consumoBagni = ampereBagni * tensione;


Che in fin dei conti mi da il problema minore, ovvero qualche lettura più alta del normale in assenza di carico...

Per completezza preciso che uso un partitore di tensione in comune per tutti i sensori e per l'offset ed effettuando prove sia con tester sia con sketch appositamete modificato, senza sensori collegati, il voltaggio arriva uguale ad ogni porta!

p.s. allego stavolta un (seppur elementare) schema fatto con Fritzing..

Andrò a cercare qualche info sugli "operazionali" che mi hai menzionato per vedere come funzionano e cercare di capire come posso usarlo nel mio caso..
" />
" />
?1275" />


ElettroshockNow il 17/7/2014, 12:21
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Occhio stai usando Vin ? è voluta ?
C'è il rischio di danneggiare gli ingressi analogici se lo alimenti dal jack DC.

Prova cosi'(vanno bene moltissimi operazionali ;) )

dovresti risolvere .

Se non hai la necessità di un gran fondo scala (visto che hai sezionato in 4 zone) potresti anche aumentare la sensibilità riducendo il valore di R3 portandolo ad esempio a 220 Ohm , oppure mantenendo gli attuali 100 Ohm far passare il filo due volte nel sensore.


Ricordati di ricalcolare il fattore di conversione .....

Nuovo_fattore_di_conversione = Potenza_reale * Attuale_fattore_di_conversione /Potenza_letta

Ciao
Elettro


5a2v0 il 17/7/2014, 16:18
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Alimento sia la shield sia arduino Yun tramite il Vin della shield.
Gli erogo 5.08v da un alimentatore stabilizzato..

Voluto perchè:

1) Yun non ha un regolatore di tensione per la linea dei 5v

2) Alimentando Yun dalla micro-USB, sul piedino della +5v si hanno 4,xx v in base all'assorbimento dei vari led, lcd, ecc che si hanno collegati allo Yun..

Per il discorso del fondo scala, è vero che io ho sezionato, ma uno dei sensori monitora il cavo in arrivo dal contatore enel, quindi il mio "Totale"..

Per gli operazionali, tu intendi che dovrei metterne uno solo prima del pin che mi misura l'offset? O che dovrei metterne uno per ogni porta analogica alla quale collego un sensore ?

ElettroshockNow il 18/7/2014, 10:35
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (5a2v0, 17/07/2014 16:18:56 ) [quote]Alimento sia la shield sia arduino Yun tramite il Vin della shield.
Gli erogo 5.08v da un alimentatore stabilizzato.....


Chiarissimo ,non avrei mai pensato che avrebbero tolto il regolatore e ho ritenuto il Vin come il vecchio Uno .

[quote]Per il discorso del fondo scala, è vero che io ho sezionato, ma uno dei sensori monitora il cavo in arrivo dal contatore enel, quindi il mio "Totale"..

Puoi tranquillamente avere diversi fondi scala con diversi fattori di conversione.

[quote]Per gli operazionali, tu intendi che dovrei metterne uno solo prima del pin che mi misura l'offset? O che dovrei metterne uno per ogni porta analogica alla quale collego un sensore ?

Ne basta uno per tutti ;)
In pratica la tensione di offset attuale la disconetti e la invii al pin + dell'operazionale e riprelevi la nuova tensione di offset (uguale come valore ) dal pin OUT e -.
Il tutto alimentandolo con i 5V e GND

5a2v0 il 18/7/2014, 17:40
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ok, ma in pratica, usando l'operazionale in questo modo, l'offset sarà ancora più stabile, giusto?
Però non potrei comunque avere problemi dovuto al Sample&Hold dell'ADC che magari quando legge prima il sensore Bagni (supponiamo con un carico grosso) resti "carico" di quella tensione e quindi più del voltaggio dell' offset e quando poi legge il successivo sensore per esempio Stanze (supponiamo con un carico minimo o 0) venga restituito un consumo anche per Stanze ?


Io intanto per completezza posto 4 screenshot dell'app per Android che ho realizzato..


[/URL]
[/URL]
[/URL]
[/URL]

ElettroshockNow il 18/7/2014, 18:06
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Molto molto bello :clap.gif:

Io stò cercando di far funzionare Processing con Android .... ma per ora vince lui .

Per quanto riguarda l'offset ,essa deve essere una tensione di riferimento stabile immune da ciò che accade sui sensori.
Quindi qualsiasi valore misurino i sensori ,la tensione di offset non deve batter ciglio.
Per un solo sensore è sufficiente un partitore resistivo ,ma se vuoi un solo Voffset per tutti i sensori con la comodità di monitorarlo con un solo pin ,dovrai necessariamente usare un operazionale (soluzione più economica).
Altrimenti potresti anche usare un REF03Z oppure LT1019 2.5V (soluzione ancore più performante).
Io personalmente vistà la qualità del tuo operato opterei per la seconda ;)

PS: qualche dritta per i programmi Android

5a2v0 il 21/7/2014, 13:03
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Guarda, per creare il programmino Android io mi sono servito della piattaforma online messa a disposizione dal sito:



Con questa piattaforma, prima ti crei graficamente l'interfaccia dell'app, trascinando all'interno di un display virtuale gli oggetti come:
campi di testo, bottoni, immagini etc etc

Poi in una seconda schermata (blocchi) vai a "incastrare" (letteralmente) le tessere a mo' di puzzle per definire le azioni...

Il tutto testabile su dispositivi android anche in fase di costruzione tramite un app che si installa direttamente sul cell oppure tramite emulatore (java che si apre sul tuo pc) che crea un telefono virtuale e ti ci apre dentro l'app ! ;)

ElettroshockNow il 21/7/2014, 13:45
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
:angel1.gif: grazie .... è una genialata ...

semplice e intuitivo ....

Valisi il 21/7/2014, 15:55
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao ElettroshockNow, sono un nuovo iscritto e saluto tutti. Vorrei fare anch'io un amperometro con Arduino, sempre per controllare la corrente prodotta da un grid tie rispetto a quella consumata... Stavo valutando le varie ipotesi di utilizzo di sensori come quelli effetto Hall da te usati, oppure dei trasformatori amperometrici...

Stavo guardavo la foto del "doppio sensore in scatola" del post n.1 e la domanda che vorrei porti è, visto che li hai impachettati bene con nastro autoagglomerante, non ci sono problemi di surriscaldamento?
Sicuramente no, visto che l'hai fatto, ma rimangono proprio freddi o c'è un certo riscaldamento?
Perchè sono perplesso dal fatto che possano circolare fino a 30A in un integrato così piccolo...

Grazie, ciao.

ElettroshockNow il 21/7/2014, 16:18
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao Valisi .... hai parzialmente ragione ;)

Se la corrente resta nei limiti funzionano perfettamente restando praticamente freddi ,ma ... ma .... come si sbaglia loro passano a miglior vita.
I kA raggiunti in un possibile corto ( :crutch.gif: ) vaporizzano il piccolo chip ....

Sfogliando la discussione a pagina 6 ----->
)

Ciao
Elettro

Valisi il 21/7/2014, 16:48
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Interessante ragguaglio. Grazie. ;)

supermomo717 il 28/7/2014, 23:41
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Alla fine l'ho rifatto il PowerMeter Remoto.
Questa versione include il display e la tastiera esattamente come fa il PowerMeter originale.
Ho inserito solo le seguenti funzioni aggiuntive:
- Impostazione del tempo di stacco del carico (in modo che l'avvio del carico collegato non crei un abbassamento istantaneo della potenza tale da far staccare l'alimentazione immediatamente dopo l'avvio creando un loop).
- Segnalazione diretta sul display di IMMISSIONE/PRELIEVO da rete e in quale misura.
- Segnalazione diretta sul display di ricezione corretta del segnale radio da parte del PowerMeter.
- Spegnimento del display dopo 60 secondi (impostabile) dalla pressione dell'ultimo tasto a meno che la produzione non sia maggiore del consumo (così il display non consuma nel momento il cui prelevo da rete mentre resta acceso durante il giorno così senza toccarlo lo si può leggere comodamente come se fosse un normalissimo indicatore).
La comodità di questa versione è il fatto di essere portatile, quindi trasferibile nel posto più congeniale. Non volete usare le uscite? diventa ottimo come semplice visualizzatore remoto dei propri dati domestici.


supermomo717 il 28/7/2014, 23:44
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Lato alimentazione e presa per il carico. La seconda l'aggiungo appena un connettore mi passa per le mani. Il cavo Usb della foto è naturalmente staccabile in qualsiasi momento. Il tasto e il led sono Collegati, devo solo decidere cosa far fare loro....


supermomo717 il 30/9/2014, 9:31
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Buongiorno, ho modificato ancora il Powermeter adattandolo alle mie esigenze e adesso mi fa anche questo che vedete in figura... Un RTC sostituirà a breve il numero progressivo con l'orario effettivo. Vedrò di postare la mia esperienza in questo progetto, non si sa mai che possa tornare utile a qualcuno.


ElettroshockNow il 30/9/2014, 10:08
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Che bello


supermomo717 il 3/10/2014, 12:00
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
I tempi sono maturi, quindi ecco il nuovo PowerMeter 4.0
Innanzitutto allego lo schema del nuovo PowerMeterTx 4.0.
Non ci si fa molto se usato da solo, al massimo va bene come ispirazione.

ecco il codice:


*Progetto PowerMeterTx 4.0

***Trasmettitore***

Modifiche apportate rispetto alla precedente versione di ElettroshockNow:
- Aggiunto nuovo sensore per monitorare GSE , CONSUMO e EXTRA (*)
- Inserito invio Potenza Extra al ricevitore remoto
- Inserito salvatagio in eeprom Potenza Extra
- N°1 Uscita per controllo soglie (impostate da sketch) o gestione carico
- Utilizzo display senza tastiera inclusa nello shield (soglie non modificabili)
- Invio segnale radio max ogni 2 secondi
- Led2 per segnalazione esubero di produzione (**)

(*) Casomai ci sia un inverter tie grid aggiuntivo oltre al vostro impianto fotovoltaico
(**) L'esubero si verifica quando le utenze prelevano meno energia di quanta prodotta da EXTRA

Ottimo per lavorare in abbinamento con PowerMeterRx 4.0 ***Ricevitore** (opzionali: PowerDimmer 4.0 - PowerLogger 4.0 - PowerWeb 4.0)

Per tutte le connessioni fare riferimento allo Sketch.
Ciscuito Alimentazione come per Powermeter Rev3.5
Saluti
Supermomo717
-------------------------------------------------------------------------------------
Progetto Powermeter Rev3.5
Un sentito ringraziamento al Forum
"" Energia Alternativa & Energia Fai Da Te ""
http://energialternativa.org/

Saluti
ElettroshockNow
----------------------------------------------------------------------------
INFO:il Powermeter dispone di memoria eeprom interna nella quale salva a cadenza di
4 ore il valore contenuto nei contatori e le soglie impostate.
Se si desidera resettare i contatori e ricaricare le soglie di default :
-disalimentare il circuito
-premere e mantenere premuto il pulsante (il Pulsante connesso al Pin2)
-alimentare il circuito
-attendere la scritta "ATTENZIONE RESET CONTATORI TRA 4H"
-rilasciare il pulsante
A questo punto il reset e' armato e sara' attivato allo scadere delle 4H.
Quindi se erroneamente si resettano i contatori ,bastera' disalimentare e rialimentare il
circuito per recuperare l'ultimo Backup.
-----------------------------------------------------------------
*/
//IMPOSTAZIONI UTENTE (Scegliere le preferenze)

const boolean ConfigB = false; //Configurazione B ? true or false
//Scegli lo schema di installazione piu' adatto
//false = doppio contatore simultaneo
//true = doppio contatore funzionamento selettivo

const byte PagDefault = 0; // Scegli la schermata di default..:-)
//0 = Wattmetro
//1 = Voltmetro + stato UPS
//2 = Amperometro
//3 = Contatori

const boolean Retroilluminazione = false; // Retroilluminazione Display
//true= con timer (solo con pulsante)
//false= sempre ON

const int TempoLed = 200; //Scegli il Tempo della retroilluminazione
//allo spengimento si imposterà la pagina di Default
//Ogni unita vale circa 2 secondi :-)


//------------------------------------------------------------
// LIBRERIE
#include
#include
#include


//-----------------------------------------------------------
// VARIABILI E COSTANTI
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); //ASSEGNAZIONE PIN LCD
const int BACKLIGH_PIN = 10; //Assegnazione Retroilluminazione

String keyString = "";
int localKey = 0; //Select-1;Left-2;Up-3own-4;Right-5;
const int ProdottaPin = A2; //Sensore GSE
const int AssorbitaPin = A3; //Sensore Assorbimento
const int TensionePin = A4; //Alimentatore Powermeter
const int ProdottaPin2 = A5; //Sensore EXTRA
const int transmit_pin = 8; //Pin Trasmettitore
const int receive_pin = 14;
const int transmit_en_pin = 15;
const int Uscita1 = 11;
const int Uscita2 = 12;
const int ADR=100;//Indirizzo PowerMeter
const int ResetPin = 9; //se posto a 1 resetta i contatori
const int PagPin = 9; //se premuto scorre le pagine
byte pagina = PagDefault; //PAGINA DA VISUALIZZARE SULL'LCD
byte monitor = 1; //Potenza da monitorare
int Timeout = TempoLed;//Timeout
unsigned long lcd_Time;
byte Tensione = 0;
byte Frequenza = 50;
unsigned long ProdottaMedia = 0;//Somma delle campionature
unsigned long ProdottaMedia2 = 0;//Somma delle campionature
unsigned long AssorbitaMedia = 0;//Somma delle campionature
float ProdottaMediaP = 0;//Amper Prodotti
float ProdottaMediaP2 = 0;//Amper Prodotti
float AssorbitaMediaP = 0;//Amper Assorbiti
int PotenzaPro;//Potenza Prodotta (Amper Prodotti*Tensione)
int PotenzaPro2;//Potenza Prodotta (Amper Prodotti*Tensione)
int PotenzaAss;//Potenza Assorbita (Amper Assorbiti*Tensione)
int PotenzaMon;//Potenza da Monitorare
unsigned long time = 0;//Tempo dall'ultimo invio via radio
unsigned long Tmemoria = 0;//Tempo dall'ultimo BackUp
unsigned long TCampionature = 0;//Tempo dall'ultima Campionatura
float TotProdotta = 0;//Contatore Totale Prodotta
float TotProdotta2 = 0;//Contatore Totale Prodotta
float TotAssorbita = 0;//Contatore Totale Assorbita
int Uscita_1_ON ;
int Uscita_1_Time ;
unsigned long TUscita1 = 0;
int Uscita_1_OFF ;




void setup() {
ADCSRA&=0X90+0b100;
Serial.begin(9600);

vw_set_tx_pin(transmit_pin);
vw_set_rx_pin(receive_pin);
vw_set_ptt_pin(transmit_en_pin);
vw_set_ptt_inverted(true);
vw_setup(2000);
pinMode(Uscita1, OUTPUT);
digitalWrite(Uscita1,LOW);
pinMode(Uscita2, OUTPUT);
digitalWrite(Uscita2,LOW);
pinMode(ResetPin, INPUT);
lcd.begin(16, 2);
pinMode(BACKLIGH_PIN, OUTPUT);
digitalWrite(BACKLIGH_PIN, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PowerMeter V4.0");
lcd.setCursor(0,1);
lcd.print("By Supermomo717");
delay(2000);

//recupero dati contatori dal BackUp
monitor=EEPROM.read(0x0F);
unsigned char k,mem;
for (k=0;k<4;k++){
mem = EEPROM.read(0x00+k);
((unsigned char*) &TotProdotta)[k]=mem;
}
for (k=0;k<4;k++){
mem = EEPROM.read(0x05+k);
((unsigned char*) &TotAssorbita)[k]=mem;
}
for (k=0;k<2;k++){
mem = EEPROM.read(0x10+k);
((unsigned char*) &Uscita_1_ON)[k]=mem;
}
for (k=0;k<2;k++){
mem = EEPROM.read(0x12+k);
((unsigned char*) &Uscita_1_Time)[k]=mem;
}
for (k=0;k<2;k++){
mem = EEPROM.read(0x14+k);
((unsigned char*) &Uscita_1_OFF)[k]=mem;
}
for (k=0;k<2;k++){
mem = EEPROM.read(0x20+k);
((unsigned char*) &TotProdotta2)[k]=mem;
}

if (digitalRead(ResetPin) == HIGH) {//se premuto Resetta i contatori
monitor = 1;
TotProdotta = 0;
TotAssorbita = 0;
Uscita_1_ON = 1800;
Uscita_1_Time = 10;
Uscita_1_OFF = 500;
TotProdotta2 = 0;

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ATTENZIONE RESET");
lcd.setCursor(0,1);
lcd.print("CONTATORI TRA 4H");
delay(5000);
}
}


void loop() {


//-----------------------------------------------------------------
//MISURA I SENSORI E CALCOLA LE CORRENTI E LE POTENZE E LA TENSIONE
int Tensionepicco = 0;
ProdottaMedia = 0 ;
ProdottaMedia2 = 0 ;
AssorbitaMedia = 0 ;
for (int i=0;i<1000;i++){
ProdottaMedia += abs(analogRead(ProdottaPin)-511);
ProdottaMedia2 += abs(analogRead(ProdottaPin2)-511);
AssorbitaMedia += abs(analogRead(AssorbitaPin)-510);
int Tensioneinst = analogRead(TensionePin);
if (Tensionepicco }
Tensione=Tensionepicco*.53;//Taratura sensore Tensione 0,45 ooriginale

ProdottaMediaP= (ProdottaMedia*.000079)-0.032;//calcola gli Amper istantanei Prodotti
ProdottaMediaP2= (ProdottaMedia2*.000079)-0.032;//calcola gli Amper istantanei Prodotti
AssorbitaMediaP= (AssorbitaMedia*.000079)-0.032;//calcola gli Amper istantanei Assorbiti
if (ConfigB & AssorbitaMediaP > 0.2)ProdottaMediaP=0;
PotenzaPro=int(ProdottaMediaP*Tensione/10)*10;//Calcola Potenza istantanea Prodotta (Step da 10W)
PotenzaPro2=int(ProdottaMediaP2*Tensione/10)*10;//Calcola Potenza istantanea Prodotta (Step da 10W)
PotenzaAss=int(AssorbitaMediaP*Tensione/10)*10;//Calcola Potenza istantanea Assorbita (Step da 10W)

//Calcola e memorizza in EEPROM i Contatori Potenze
if (micros()>TCampionature){// if è per prevenire il reset del contatore ogni 70ore!!
TotProdotta+=ProdottaMediaP*Tensione*(micros()-TCampionature)/1000000/3600/1000;//Calcola i Kwh Prodotti GSE
TotProdotta2+=ProdottaMediaP2*Tensione*(micros()-TCampionature)/1000000/3600/1000;//Calcola i Kwh Prodotti EXTRA
TotAssorbita+=AssorbitaMediaP*Tensione*(micros()-TCampionature)/1000000/3600/1000;//Calcola i Kwh Consumati
}
TCampionature=micros();
if (millis()>(Tmemoria + 14400000)){//BackUp ogni 4 ore= 14400000mS
EEPROM.write(0x0F,monitor);
unsigned char k,mem;
for (k=0;k<4;k++){
mem = ((unsigned char*) &TotProdotta)[k];
EEPROM.write(0x00+k,mem);
}
for (k=0;k<4;k++){
mem = ((unsigned char*) &TotAssorbita)[k];
EEPROM.write(0x05+k,mem);
}
for (k=0;k<2;k++){
mem = ((unsigned char*) &Uscita_1_ON)[k];
EEPROM.write(0x10+k,mem);
}
for (k=0;k<2;k++){
mem = ((unsigned char*) &Uscita_1_Time)[k];
EEPROM.write(0x12+k,mem);
}
for (k=0;k<2;k++){
mem = ((unsigned char*) &Uscita_1_OFF)[k];
EEPROM.write(0x14+k,mem);
}
for (k=0;k<2;k++){
mem = ((unsigned char*) &TotProdotta2)[k];
EEPROM.write(0x20+k,mem);
}

Tmemoria=millis();
}
//---------------------------------------------------------------


//VISUALIZZA E SPENGE IL DISPLAY SE NON USATO
if (digitalRead(PagPin) == HIGH & Timeout<=0){
digitalWrite(BACKLIGH_PIN, HIGH);//accendi LCD
Timeout=TempoLed;
delay(1000);
}
if (Timeout>0) {
digitalWrite(BACKLIGH_PIN, HIGH);//accendi LCD
if (Retroilluminazione)Timeout--;
if (digitalRead(PagPin) == HIGH){
pagina++;

delay(300);

if (pagina>8)pagina=0;
}

switch (monitor){ //Seleziona la Potenza da Monitorare
case 1:
PotenzaMon=PotenzaPro;
break;
case 2:
PotenzaMon=PotenzaAss;
break;
case 3:
PotenzaMon=PotenzaPro+PotenzaPro2-PotenzaAss;
break;
case 4:
PotenzaMon=PotenzaAss-PotenzaPro-PotenzaPro2;
break;
}


if (PotenzaMon else if (millis()>(Uscita_1_Time*1000+TUscita1)) digitalWrite(Uscita1,HIGH);
if (PotenzaMon

if((millis()>(lcd_Time+1000))

supermomo717 il 3/10/2014, 12:06
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Al PowerMeterTx potete abbinare, prestissimo in condivisione, i seguenti dispositivi via radio:
- PowerMeterRx 4.0 , ricevitore con 2 uscite a relè
- PowerLogger 4.0 nuovo datalogger su SD di tutte le letture del PowerMeterTx 4.0
- PowerWebber 4.0, per visualizzare i dati dell'impianto su WEB
- PowerDimmer 4.0, attaccateci una stufetta elettrica e gestirete la vostra produzione in esubero o quello che volete nella maniera che più vi piacerà.
Stay tuned....

supermomo717 il 3/10/2014, 12:13
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
PowerMeterRx 4.0

Ecco il codice e lo schema!

/* Progetto PowerPowerMeterRx 4.0

***Ricevitore***

"" Energia Alternativa & Energia Fai Da Te ""
http://www.energialternativa.org/
Ricevitore rivisitato da Supermomo717 del PowerMeter_3_5 realizzato da ElettroshockNow.
Si tratta di un sistema remoto per Trasmettitore Powermeter 4.0 per gestione di 2 uscite.
Il Ricevitore Powermeter 4.0 rielabora i valori ricevuti dal Trasmettitore PowerMeter 4.0
e ne gestisce i carichi, collegati.
Caratteristiche:
- Introdotto Display Lcd con keypad per modifica diretta delle soglie intervento uscite.
- Introdotto avviso ricezione segnale da TX direttamente da LCD.
- Introdotto intervallo di tempo antecedente lo spegnimento a raggiungimento una determinata
soglia minima (per ovviare al problema che un carico in avvio possa far leggere al
Ricevitore un raggiungimento di sottosoglia e staccare
l'uscita al momento in cui il carico stesso dovrebbe avviarsi).
- Il display si spegne automaticamente dopo 2 minuti se la produzione dell'impianto è
minore dell'assorbimento. Per Accendere il display premere pulsante scorrimento pagine.
- Introdotto LED esterno per controllo ricezione corretta segnale da TX
- Introdotte nuove visualizzazioni pagine con diverse combinazioni di potenze monitorabili

Necessario funzionamento in abbinamento a PowerMeterTx 4.0 ***Trasmettitore***

Per tutte le connessioni fare riferimento solo allo Sketch.

Saluti
Supermomo717
*/


#include
#include

const byte PagDefault = 1; // Scegli la schermata di default..:-)
//0 = Wattmetro
//1 = Voltmetro + Stato sistema (immissione o prelievo).
//2 = Amperometro
//3 = Contatori

byte pagina = PagDefault; //PAGINA DA VISUALIZZARE SULL'LCD

const int PagPin = 2;//Pulsante normalmente chiuso, se premuto scorre le pagine
const int Uscita2 = 3; //assegnazione pin uscita 2
const int Uscita1 = 12; //assegnazione pin uscita 1
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);//ASSEGNAZIONE PIN LCD SHIELD SAINSMART
const int BACKLIGH_PIN = 10;//Assegnazione pin Retroilluminazione
unsigned long StandBy; // Tempo StandBy display LCD
//pin 11 assegnato a ricevitore
const int ledPin = 13; //pin del led per controllo ricezione segnale da TX
unsigned long lcd_Time;
int ledState = LOW; // ledState usato per settare lo stato del led
long previousMillis = 0; //conteggio durata impulso led verifica segnale
long interval = 100; //durata impulso led

byte monitor = 1;

// impostazioni uscite

int Uscita_1_ON ;
int Uscita_1_Time_On ;
int Uscita_1_Time_Off ;
unsigned long TUscita1in = 0;
unsigned long TUscita1out = 0;
int Uscita_1_OFF ;

int Uscita_2_ON ;
int Uscita_2_Time_On;
int Uscita_2_Time_Off ;
unsigned long TUscita2in = 0;
unsigned long TUscita2out = 0;
int Uscita_2_OFF;

int PotenzaMon; //Potenza da Monitorare

int Tensione;
int PotenzaPro;
int PotenzaPro2;
int PotenzaAss;
float CorrentePro;
float CorrentePro2;
float CorrenteAss;
float TotalePro;
float TotalePro2;
float TotaleAss;

//impostazioni relative alla Tastiera della shield

int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5

// read the buttons
int read_LCD_buttons()
{
adc_key_in = analogRead(0); // read the value from the sensor
// my buttons when read are centered at these valies: 0, 144, 329, 504, 741
// we add approx 50 to those values and check to see if we are close
if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 150) return btnUP;
if (adc_key_in < 280) return btnDOWN;
if (adc_key_in < 450) return btnLEFT;
if (adc_key_in < 650) return btnSELECT;

return btnNONE; // when all others fail, return this...
}

void setup()
{

lcd.begin(16, 2);
pinMode(BACKLIGH_PIN, OUTPUT);
digitalWrite(BACKLIGH_PIN, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("RicePwMeter V4.0");
lcd.setCursor(0,1);
lcd.print("By Supermomo717");
delay(3000);

//Settaggio porte uscite

pinMode(Uscita1, OUTPUT);
digitalWrite(Uscita1, LOW);
pinMode(Uscita2, OUTPUT);
digitalWrite(Uscita2, LOW);


pinMode(ledPin, OUTPUT);

monitor = 3; // DEFAULT Potenza da monitorare
//1 = Totale Prodotta (GSE+ EXTRA)
//2 = Totale Assorbita
//3 = Totale Prodotta - Assorbita
//4 = Assorbita - Totale Prodotta
//5 = Esubero = EXTRA - Assorbita
//6 = GSE
//7 = EXTRA

Uscita_1_ON = 800; //Accendi a XXX Watt ** Variabile da tastiera **
Uscita_1_Time_On = 10; //Accendi dopo TOT secondi raggiunti XXX Watt ** Variabile da tastiera **
Uscita_1_Time_Off = 10; //Spegni dopo TOT secondi raggiunti YYY Watt NON Variabile da tastiera
Uscita_1_OFF = 100; //Spegni a YYY Watt ** Variabile da tastiera **
Uscita_2_ON = 1800; //Accendi a xxx Watt ** Variabile da tastiera **
Uscita_2_Time_On = 10; //Accendi dopo tot secondi raggiunti xxx Watt ** Variabile da tastiera **
Uscita_2_Time_Off = 10; //Spegni dopo tot secondi raggiunti yyy Watt NON Variabile da tastiera
Uscita_2_OFF = 1700 ; //Spegni a yyy Watt



Serial.begin(9600); // Debugging only

Serial.println("Inizializzazione");

// Initialise the IO and ISR
vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000); // Bits per sec

vw_rx_start(); // Start the receiver PLL running
}

void loop()
{

uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;

if (vw_get_message(buf, &buflen)) // Non-blocking
{

// parte relativa al lampeggio del led di controllo quando RX ha segnale da TX
unsigned long currentMillis = millis();

if(currentMillis - previousMillis > interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;

// if the LED is off turn it on and vice-versa:
if (ledState == LOW)
ledState = HIGH;
else

ledState = LOW;
// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState); // originale è ledPin per lampeggio led 13 su Arduino

}
/*
int i;
digitalWrite(13, true); // Flash a light to show received good message
// Message with a good checksum received, dump it.
Serial.print("Got: ");

for (i = 0; i < buflen; i++)
{
Serial.print(buf[i], DEC);
Serial.print(" ");
}
*/
Tensione = buf[1];
PotenzaPro = (int(buf[3]<<8)+buf[2]);
PotenzaPro2 = (int(buf[5]<<8)+buf[4]);
PotenzaAss = (int(buf[7]<<8)+buf[6]);
CorrentePro = float(int(buf[9]<<8)+buf[8])/100;
CorrenteAss = float(int(buf[11]<<8)+buf[10])/100;
TotalePro = float(long(buf[14]<<16)+int(buf[13]<<8)+buf[12])/10; //Prodotta GSE
TotaleAss = float(long(buf[17]<<16)+int(buf[16]<<8)+buf[15])/10; //Cosnumata
TotalePro2= float(long(buf[20]<<16)+int(buf[19]<<8)+buf[18])/10; //Prodotta Extra


Serial.write ("Potenza GSE ");
Serial.print(PotenzaPro);
Serial.println (" Watt");
Serial.write ("Potenza EXTRA ");
Serial.print(PotenzaPro2);
Serial.println (" Watt");
Serial.write ("Potenza Prodotta TOTALE ");
Serial.print(PotenzaPro+PotenzaPro2);
Serial.println (" Watt");
Serial.write ("Potenza Assorbita di ");
Serial.print(PotenzaAss);
Serial.println (" Watt");
Serial.write ("Immetto in rete una Potenza di ");
Serial.print(PotenzaMon);
Serial.println (" Watt");
Serial.write ("Accensione Uscita 1 Impostata a ");
Serial.print(Uscita_1_ON);
Serial.println("Watt");
Serial.write ("Spegnimento Uscita 1 Impostata= ");
Serial.print(Uscita_1_OFF);
Serial.println("Watt");
Serial.write ("Accensione Uscita 2 Impostata a ");
Serial.print(Uscita_2_ON);
Serial.println("Watt");
Serial.write ("Spegnimento Uscita 2 Impostata= ");
Serial.print(Uscita_2_OFF);
Serial.println("Watt");
Serial.write ("Totale Prodotta GSE= ");
Serial.print(TotalePro);
Serial.println(" Kwh");
Serial.write ("Totale Prodotta EXTRA= ");
Serial.print(TotalePro2);
Serial.println(" Kwh");
Serial.write ("Totale Consumata= ");
Serial.print(TotaleAss);
Serial.println(" Kwh");
Serial.println("");

}


switch (monitor){ //Selettore potenza da monitorare
case 1:
PotenzaMon=PotenzaPro+PotenzaPro2; //potenza totale
break;
case 2:
PotenzaMon=PotenzaAss; //potenza Assorbita
break;
case 3:
PotenzaMon=PotenzaPro+PotenzaPro2-PotenzaAss; //potenza Prodotta - potenza Assorbita
break;
case 4:
PotenzaMon=PotenzaAss-PotenzaPro-PotenzaPro2; //potenza Assorbita - potenza Prodotta
break;
case 5:
PotenzaMon=PotenzaPro2-PotenzaAss; //Potenza in Esubero
break;
case 6:
PotenzaMon=PotenzaPro; //potenza GSE
break;
case 7:
PotenzaMon=PotenzaPro2; //potenza EXTRA
break;

}
if (PotenzaMon else if (millis()>(Uscita_1_Time_On*1000+TUscita1in)) digitalWrite(Uscita1,LOW);
if (PotenzaMon>Uscita_1_OFF) TUscita1out=millis();
else if (millis()>(Uscita_1_Time_Off*1000+TUscita1out)) digitalWrite(Uscita1,HIGH);


if (PotenzaMon else if (millis()>(Uscita_2_Time_On*1000+TUscita2in)) digitalWrite(Uscita2,LOW);
if (PotenzaMon>Uscita_2_OFF) TUscita2out=millis();
else if (millis()>(Uscita_2_Time_Off*1000+TUscita2out)) digitalWrite(Uscita2,HIGH);


if ((digitalRead(PagPin) == LOW) && digitalRead (BACKLIGH_PIN == LOW)) // Prima pressione pulsante accende display

{
digitalWrite(BACKLIGH_PIN, HIGH);
StandBy=millis();
delay(200);
}

if (digitalRead(PagPin) == LOW) // Pressione pulsante per cambio pagina
{
pagina++;
StandBy=millis();
delay(200);
if (pagina>11)pagina=0;
}

if ((millis() > StandBy+120000) && (PotenzaPro+PotenzaPro2)-PotenzaAss <0) digitalWrite(BACKLIGH_PIN, LOW); //Spegne display se non usato dopo 120 secondi

lcd_key = read_LCD_buttons(); // read the buttons

if (pagina<11&lcd_key==btnDOWN) {
pagina++;
delay(200);
}
if (pagina>0&lcd_key==btnUP) {
pagina--;
delay(200);
}
if (pagina==4&&lcd_key==btnRIGHT&&monitor<7) {
monitor++;
delay(200);
}
if (pagina==4&&lcd_key==btnLEFT&&monitor>1) {
monitor--;
delay(200);
}
if (pagina==5&lcd_key==btnRIGHT) Uscita_1_ON=Uscita_1_ON+1;
if (pagina==5&lcd_key==btnLEFT) Uscita_1_ON=Uscita_1_ON-1;
if (pagina==6&lcd_key==btnRIGHT) Uscita_1_Time_On=Uscita_1_Time_On+1;
if (pagina==6&lcd_key==btnLEFT) Uscita_1_Time_On=Uscita_1_Time_On-1;
if (pagina==7&lcd_key==btnRIGHT) Uscita_1_OFF=Uscita_1_OFF+1;
if (pagina==7&lcd_key==btnLEFT) Uscita_1_OFF=Uscita_1_OFF-1;
if (pagina==8&lcd_key==btnRIGHT) Uscita_2_ON=Uscita_2_ON+1;
if (pagina==8&lcd_key==btnLEFT) Uscita_2_ON=Uscita_2_ON-1;
if (pagina==9&lcd_key==btnRIGHT) Uscita_2_Time_On=Uscita_2_Time_On+1;
if (pagina==9&lcd_key==btnLEFT) Uscita_2_Time_On=Uscita_2_Time_On-1;
if (pagina==10&lcd_key==btnRIGHT) Uscita_2_OFF=Uscita_2_OFF+1;
if (pagina==10&lcd_key==btnLEFT) Uscita_2_OFF=Uscita_2_OFF-1;

if((millis()>(lcd_Time+500))

supermomo717 il 3/10/2014, 13:29
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
PowerLogger 4.0

Essenzialmente serve per il monitoraggio dettagliato dei consumi, delle produzioni ecc attraverso l'analisi del datalog che viene creato. Utilizzando il grafico con excell e un minomo di dimestichezza con le tabelle e grafici di pivot si può scoprire un mondo di info.

Il codice:


/* Progetto PowerLogger 4.0
Funzionamento con EthernetShiel 5100 originale arduino e microSD formattata in fat 32 dove verrà salvato il datalog.txt
Orario mantenuto dalla shield RTC basata su DS1307 connesso tramite I2C
Dati impostazioni ed informazioni utili direttamente in sketch.
Uso esclusivo in abbinamento com PowerMeter Tx 4.0
Necessario funzionamento in abbinamento a PowerMeterTx 4.0 ***Trasmettitore***

Per tutte le connessioni fare riferimento solo allo Sketch.

Saluti
Supermomo717
*/

#include
#include "RTClib.h"
RTC_DS1307 rtc;

#include
#include
const int chipSelect = 4;
const int receive_pin = 9; //pin connesso a ricevitore 315 Mhz
int Tensione;
int PotenzaPro;
int PotenzaPro2;
int PotenzaAss;
float CorrentePro;
float CorrenteAss;
float TotalePro;
float TotalePro2;
float TotaleAss;
byte ledpin=13; // led di controllo ricezione segnale
boolean statoled=HIGH; // stato led di controllo ricezione segnale

unsigned long previousMillis = 0;
long interval = 15000; //Intervallo tra un log e l'altro in millisecondi

unsigned long Tempo;
void setup()
{
//inizio Sezione RTC
#ifdef AVR
Wire.begin();
#else
Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
rtc.begin();

if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
//rtc.adjust(DateTime(2014, 10, 01, 18, 12, 30));
}
//Fine Sezione RTC

//Inizio sezione SD

Serial.print("Initializing SD card...");
// make sure that the default chip select pin is set to
// output, even if you don't use it:
pinMode(10, OUTPUT);
pinMode(ledpin, OUTPUT);

Serial.begin(9600); // Debugging only
Serial.println("setup");

// Initialise the IO and ISR
vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000); // Bits per sec
vw_set_rx_pin(receive_pin);
vw_rx_start(); // Start the receiver PLL running

if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
Serial.println("card initialized.");

//Fine sezione SD

}

void loop()
{
DateTime now = rtc.now(); //Recupero Orario

uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;

if (vw_get_message(buf, &buflen)) // Non-blocking
{
if (statoled==LOW) statoled = HIGH;
else statoled==LOW;

digitalWrite(ledpin, statoled);

/*
int i;
digitalWrite(13, true); // Flash a light to show received good message
// Message with a good checksum received, dump it.
Serial.print("Got: ");

for (i = 0; i < buflen; i++)
{
Serial.print(buf[i], DEC);
Serial.print(" ");
}
*/
Tensione = buf[1];
PotenzaPro = (int(buf[3]<<8)+buf[2]);
PotenzaPro2 = (int(buf[5]<<8)+buf[4]);
PotenzaAss = (int(buf[7]<<8)+buf[6]);
CorrentePro = float(int(buf[9]<<8)+buf[8])/100;
CorrenteAss = float(int(buf[11]<<8)+buf[10])/100;
TotalePro = float(long(buf[14]<<16)+int(buf[13]<<8)+buf[12])/10; //Prodotta GSE
TotaleAss = float(long(buf[17]<<16)+int(buf[16]<<8)+buf[15])/10; //Consumata
TotalePro2 = float(long(buf[20]<<16)+int(buf[19]<<8)+buf[18])/10; //Prodotta Extra


Serial.write ("Tensione= ");
Serial.print(Tensione);
Serial.println(" Volt");
Serial.write ("Potenza Assorbita= ");
Serial.print(PotenzaAss);
Serial.println(" Watt");
Serial.print ("Potenza Prodotta= ");
Serial.print(PotenzaPro);
Serial.println(" Watt");
Serial.write ("Corrente Assorbita= ");
Serial.print(CorrenteAss);
Serial.println(" Amper");
Serial.write ("Corrente Prodotta= ");
Serial.print(CorrentePro);
Serial.println(" Amper");
Serial.write ("Totale GSE= ");
Serial.print(TotalePro);
Serial.println(" Kwh");
Serial.write ("Totale Extra= ");
Serial.print(TotalePro2);
Serial.println(" Kwh");
Serial.write ("Totale Consumata= ");
Serial.print(TotaleAss);
Serial.println(" Kwh");


//Creazione della stringa di LOG

Tempo=millis();

String dataString = "";

dataString += String(Tempo/1000);
dataString += ",";
dataString += String(now.year(), DEC);
dataString += ",";
dataString += String(now.month(), DEC);
dataString += ",";
dataString += String(now.day(), DEC);
dataString += ",";
dataString += String(now.hour(), DEC);
dataString += ",";
dataString += String(now.minute(), DEC);
dataString += ",";
dataString += String(now.second(), DEC);
dataString += ",";
dataString += String(Tensione);
dataString += ",";
dataString += String(PotenzaPro);
dataString += ",";
dataString += String(PotenzaPro2);
dataString += ",";
dataString += String(PotenzaAss);
/* Da testare

dataString += ",";

int GSE=TotalePro;
int EXTRA=TotalePro2;
int ASS=TotaleAss;

dataString += String(GSE);
dataString += ",";
dataString += String(EXTRA);
dataString += ",";
dataString += String(ASS);
*/

unsigned long currentMillis = millis();

if(currentMillis - previousMillis > interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;

// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
File dataFile = SD.open("datalog.txt", FILE_WRITE);

// if the file is available, write to it:
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
// print to the serial port too:
Serial.println(dataString);
}
// if the file isn't open, pop up an error:
else {
Serial.println("error opening datalog.txt");
}

}
}
}



--------------------
c'è pure lo schema....

ah, il codice fa schifo lo so, ma funziona....
PowerLogger_bb.jpg

supermomo717 il 3/10/2014, 13:35
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Il grafico è vecchio e risale a quando nn avevo il RTC ma rende l'idea. Adesso in luogo del tempo progressivo è riportata l'ora effettiva delle letture.
I grafici ovviamente possono essere personalizzati, come del resto il codice e un po di fantasia si ottengono cose notevoli! buon divertimento!


supermomo717 il 3/10/2014, 14:08
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Anticipazione del PowerDimmer 4.0

Nel video si vede solo l'effetto. Collegandolo a delle lampadine si vede la variazione continua di intensità in base alla produzione.
In questo caso sto facendo in modo che il PowerDimmer 4.0 valuti la corrente prodotta e valuti la consumata, perciò quando la produzione supera il consumo il PowerDimmer aumenta l'intensità della luce nonchè il consumo cercando di mantenere sempre a zero l'immissione. Se cala la produzione il PowerDimmer fa in modo di abbassare l'assorbimento e cercare in modo continuato l'equilibrio voluto cioè zero immissione. Ci sono 26 livelli di assorbimento, quindi con un carico totale di 160watt che ho ora, ogni step è di 6.4 watt.
Stay tuned...
" />
" />
?1313" />


Il_Salentino il 10/11/2014, 10:22
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Dopo un periodo di assenza dovuto alle verifiche di funzionamento del mio impianto ad isola realizzato nel 2013, vengo a sottoporre un nuovo quesito agli esperti del forum.
Avendo comprato i componenti per realizzare il powermeter ma non realizzato per le tante modifiche apportate allo stesso dai tanti esperti del forum, chiedo se è possibile utilizzare arduino per realizzare uno strumento per gestire la corrente prodotta dai pannelli fotovoltaici.Vorrei realizzare con il vostro aiuto e con l'ausilio di un tecnico elettronico amico, uno strumento che mi consenta di utilizzare l'energia prodotta dal FV direttamente senza farla passare dalle batterie e l'eventuale surplus consenta di caricare le batterie per l'accumulo per le ore notturne.Ringrazio anticipatamente quanti volessero darmi qualche consiglio ed in attesa saluto.
Francesco

MarKoZaKKa il 13/11/2014, 14:05
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
...hai visto la

Il_Salentino il 15/12/2014, 22:13
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ho letto le 72 pagine ma come al solito dal progetto iniziale si arriva a stravolgere il tutto dagli esperti;chi più ne sà più ne fà.
Per il momento mi limito a leggere sono in attesa di modificare anche il mio impianto con l'aggiunta di altri pannelli fv.
Ad impianto ultimato vedrò di cosa ho bisogno e magari ci sentiamo per realizzare qualcosa di già funzionante che potrebbe fare al caso mio.
Ciao Franco

ElettroshockNow il 16/12/2014, 6:58
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ad oggi il progetto PowerMeter presentato in questa discussione misura e gestisce il mio impianto .
Unica modifica (consigliatissima) dall'originale in prima pagina è stata la sostituzione dei sensori (modifica anch'essa descritta in discussione).

Pro:semplicità di realizzazione e riproduzione in diverse varianti
Contro:bassa precisione

Nei prossimi mesi riprenderò il progetto e lo fondero' con il progetto "Protezione Rete" migliorando la precisione di lettura portandola a 5W e con 5 ingressi ;)

Ciao
Elettro

ElettroshockNow il 16/12/2014, 7:01
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (Il_Salentino, 16/12/2014 06:58:07 ) [quote]Ho letto le 72 pagine .......

72?
Me ne mancano 60 a rapporto:blink:

Il_Salentino il 16/12/2014, 13:51
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Caro elettro le 72 pagine non sono di questa discussione, ma di quella indicata da Marko sul Solar Platform.
Cmq mi cimenterò a realizzare il Powermeter in questi giorni di feste, Vi farò sapere gli sviluppi.
P.S. posso utilizzare i sensori che hanno indicato nella discussione del Solar Platform che hai anche tu realizzato?
Per il momento ringrazio.
Franco

ElettroshockNow il 16/12/2014, 15:19
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
:woot: ora tornano i conti .
Per il sensore bisogna usare gli SCT .... però nessuno ti vieta di adattarlo e renderlo compatibile con il Ronwal sensor ...

Ciao e buon powermeter
Elettro

Il_Salentino il 16/12/2014, 16:06
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Scusami elettro ho posto un problema nella discussione Come gestire 1 inverter grid tie e Luca mi ha risposto di non aver capito il problema...
Te lo ripropongo: ho 2 inverter grid tie che sono collegati al mio impianto elettrico di casa; quando sono ad isola immettono regolarmente corrente, quando le batterie scendono sotto 25V e passo ad Enel, 1 dei 2 inverter grid tie non immette corrente, si blocca.
Grazie per la risposta.
Franco

ElettroshockNow il 16/12/2014, 18:19
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Sisi avevo letto e come luca non avevo capito!!!

Ora è chiaro.

Si blocca durante lo scambio ?

Prova con casa alimentata dall'enel un inverter alla volta e poi tutti e due .

Forse bisogna solo aumentare i tempi di pausa nello scambio.... forse ....

Il_Salentino il 16/12/2014, 18:48
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
No ho fatto tutte le prove è da 1 anno e mezzo che provo e con differenti inverter come sai ne ho rotti diversi ma anche con quelli sostituiti si verifica la stessa cosa... a volte però quello che non immetteva, collegato a delle batterie ogni tanto vedevo dal monitor di controllo dell?OWL CM160 che immetteva alcuni Watt. Non riesco a spiegarmi questo.
Ciao e grazie per la risposta
Franco

kemas il 29/12/2014, 12:34
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Buongiorno a tutti, complimenti per il progetto,
io sto avendo problemi nel caricarlo mi da questo tipo di errore:


power_meter_problemi.ino: In function 'void loop()':
power_meter_problemi.ino:132:19: error: 'tensioneinst' was not declared in this scope
Errore durante la compilazione

chi gentilmente mi aiuta?
grazie anticipatamente.
Massimo

ElettroshockNow il 29/12/2014, 13:30
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao Kemas,
Probabilemente mancano delle linee nel copia incolla .
Prova scaricando la versione nel
kemas il 29/12/2014, 13:48
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
già fatto anche cosi ma niente, addirittura dal link mi da i seguenti errori
sono 3 giorni che ci combatto

Arduino:1.5.8 (Windows 7), Scheda:"Arduino Uno"

Build options changed, rebuilding all

sketch_dec29d.ino: In function 'void loop()':
sketch_dec29d.ino:170:23: error: 'tensioneinst' was not declared in this scope
sketch_dec29d.ino:274:18: error: 'uscita_1_on' was not declared in this scope
sketch_dec29d.ino:276:18: error: 'uscita_1_off' was not declared in this scope
sketch_dec29d.ino:278:18: error: 'uscita_2_on' was not declared in this scope
sketch_dec29d.ino:280:18: error: 'uscita_2_off' was not declared in this scope
Errore durante la compilazione

Il_Salentino il 1/1/2015, 11:51
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Nell'augurare a tutti un Felice Anno nuovo, colgo l'occasione per chiedere se è possibile con Powermeter o altro (PPTEA) gestire 2 impiaanti ad isola distanti tra loro 30 metri, ma facenti parte dello stesso impianto elettrico.
Ringrazio anticipatamente quanti volessero darmi una mano per realizzare quello che occorre.
Franco

ElettroshockNow il 1/1/2015, 23:23
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao kemas
Ti allego la versione compressa della Revisione 3.5 ... fammi sapere.

A seguito dell'esperienza sul progetto
" />
?1390" />


kemas il 2/1/2015, 11:57
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Perfetto grazie adesso lo carico tranquillamente.
Grazie ancora a presto
in questi giorni vedo di realizzare il tutto.
alla prossima.

grazie ancora
Massimo

mappintosh il 4/1/2015, 19:02
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Salve a tutti.
Scusate l'ignoranza, ma nell'algoritmo di calcolo per la potenza attiva ho visto che è stata usata una tensione efficace costante moltiplicata per un valore di corrente che sarebbe una media di 1000 campionamenti raddrizzando la semi-onda negativa della stessa....Ma La potenza attiva non è il valore medio di quella istantanea? dove P(t)=V(t)*I(t) nella quale, sostituendo i fattori con le funzioni di tensione e corrente, e eseguendo l'integrale della stessa per un lasso di tempo pari al periodo del segnale si ottine più semplicemente che Pa(potenza attiva in watt)=Vrms*Irms*cosδ.
Con quell'algoritmo non si vanno a rilevare i VA assorbiti e prodotti? scusate nuovamente la mia nubbata! :angel1.gif:
Cordiali saluti a tutti

ElettroshockNow il 4/1/2015, 20:41
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Si è un semplice wattmetro che misura solo la potenza apparente .
Lo scopo del progetto era monitorare la potenza prodotta e assorbita di un impianti ongrid senza troppe pretese.



Se a te interessa un wattmetro che misuri la potenza attiva ; reattiva ; cosfi e che analizzi l'onda della tensione misurandone il THD e che visualizzi su un display la forma della tensione e corrente puoi vedere il progetti Protezione Rete nella sezione Arduino.

Ciao
Elettro

mappintosh il 4/1/2015, 23:42
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
ti ringrazio per il chiarimento, ora provvedo a visitare la sezione da te indicata. ti ringrazio moltissimo.
P.S. utile al mio scopo o meno grazie al tuo progetto mi si sono aperte nuove strade.
Cordiali saluti

kemas il 11/1/2015, 17:20
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (kemas, 04/01/2015 23:42:28 ) [quote]Perfetto grazie adesso lo carico tranquillamente.
Grazie ancora a presto
in questi giorni vedo di realizzare il tutto.
alla prossima.

grazie ancora
Massimo

buonasera a tutti, ho realizzato il tutto ma ho alcuni problema con il display, mi spiego meglio, cambiano continuamente i menu cose se il pulsante viene premuto.
ho provato anke a scollegare tutto lasciando solo arduino ed il Display ma niente.
chi mi da una dritta?
grazie anticipatamente
saluti

ElettroshockNow il 11/1/2015, 22:24
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Manca la resistenza PullDown sul Digital PIN 2

[quote]Come collegare il pulsante ...
Il Pulsante deve portare il +5V quando premuto al piedino DIGITAL 2,quindi semplicemente dovrai mettere una resistenza da 10KOhm tra il Digital 2 e negativo ed aggiungere un pulsante normalmente aperto tra il Digital 2 e il +5 (il +5 è lo stesso positivo che porti ai sensori )



Nella discussione troverai anche le risposte alle future domande e se non le troverai sarò lieto di aiutarti.

Ciao
ElettroshockNow

anthony.ars il 5/2/2015, 11:22
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
ciao

con questo circuito si potrebbe calcolare anche il fattore di potenza ?

grazie

ElettroshockNow il 5/2/2015, 11:40
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (anthony.ars, 05/02/2015 11:22:33 ) [quote]ciao

con questo circuito si potrebbe calcolare anche il fattore di potenza ?

grazie


Attualmente No ...
Per farlo bisogna modifica la sezione che rileva la tensione e parte del codice.

Ciao
Elettro

Il_Salentino il 11/3/2015, 16:39
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Un saluti a tutti i partecipanti del Forum,
avrei una richiesta da fare sperando che qualcuno mi aiuti nella possibile realizzazione; ho 4 regolatori di carica PWM da 30A collegati ai pannelli FV poi ho 1 regolatore di carica tristar MPPT 60A ed un regolatore di carica incorporato all'inverter che alimenta l'isola; vorrei se possibile realizzare, avendo comprato tutti i componenti per il powermeter, e disponendo di 2 display, realizzare qualcosa che mi facesse la somma degli Ah prodotti e la relativa potenza in Kw. Nel ringraziare anticipatamente quanti volessero darmi un aiuto, saluto tutti ed attendo consigli ed istruzioni, considerando che il mio hobby è il fai da te, ma non sono esperto di elettronica, devo avvalermi della collaborazioni di un amico. Attendo fiducioso.
Ciao Franco

eolo1234 il 26/4/2015, 22:08
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
salve a tutti
da un po di tempo sto usando la corrente in piu prodotta da i miei pannelli (4 x 100w) che ricaricano le batterie della mia isola deviando 2 di essi quando le batterie sono cariche verso un inverter tie riversando nella rete la corrente prodotta considerando che producono circa dai 70 ai 120 w ora a seconda delle condizioni del sole.
il mio sistema funziona perfettamente se non fosse che mi e venuta l idea di ampliarlo ma considerato che io ho un consumo medio di 200w ora (di media senza carichi ) non vorrei riversare la corrente prodotta da altri pannelli nella rete enel e doverli pagare
per il momentoi evito questo con un rele amperometrico che stacca i pannelli quando arrivo a 20w e li riattacca a circa 200w cosi da stare dentro.
Vi chiedo avendo letto di questo progetto se era possibile adattarlo alle mie esigenze cosiderando che non ho nessuna idea di come si programma arduino ma ho tanta voglia di imparare

dovrebbe poter leggere il voltaggio batteria e far si che quando sono cariche consenta di deviare i pannelli da carica a grid e quando la batteria scende sotto una soglia reversa da grid a carica (cosi da eliminare il mio circuito che gia lo fa)

dovrebbe anche leggere i miei consumi e abilitare con soglie impostate inserimeto di piu pannelli tramite rele ( questo leggendo tra le paggine ho visto che lo fa purtroppo io con il mio sistema sono limitato solo da due soglie)

mantenere tutte le letture che Elettroshock ha gia inserito


se vorrete aiutarmi nel mio progetto vorrei sapere quello che devo comprare se potreste postarmi i vari componenti considerando che vorrei inserire nell impianto di casa solo sensori non invasivi
ho notato che a pag 3 Elettroshock ha gia inserito una lista ma vorrei ulteriore conferma.e come anticipato un grane aiuto con la programmazione.

ringrazio chiunque voglia aiutarmi con questo progetto

eolo1234 il 29/4/2015, 11:41
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao
rileggendo il forum mi sono accorto che è proprio quello che serve a me e ieri ho comprato tutto quello che serve per realizzarlo
ho letto e riletto e mi sono venuti dei dubbi
1 arduino si alimenta con il circuito ho ha bisogno anche del suo alimentatore
2 i sensori non invasivi li posso mettere a una distanza di 20 metri
3ĺ l ultimo aggiornamento il 3.5 nella pagina 12 Elettroshock dici 3 rele io ho scaricato a me sembra che c'è ne sono 2ma siccome sono scarso nella programmazione sicuramente mi sbaglio
grazie per eventuali risposte

eolo1234 il 30/4/2015, 20:47
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Si comincia in attesa che arriva il resto


ElettroshockNow il 1/5/2015, 9:55
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
:clap.gif: ....
Mi dispiace solo non poter dedicare tempo ad integrare il tutto dentro un unico Arduino.

Sono speranzoso che qualcuno possa contribuire modificando e magari migliorando il codice originale ,scritto alle prime armi di Arduino ...
Cmq ancora funzionante ;)

Ciao e buone realizzazioni

eolo1234 il 1/5/2015, 23:02
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao mi potresti dire se i sensori non invasivi mi potrebbero dare dei problemi se sono a 20 metri da arduino

ElettroshockNow il 1/5/2015, 23:48
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (eolo1234, 01/05/2015 23:02:53 ) [quote]Ciao mi potresti dire se i sensori non invasivi mi potrebbero dare dei problemi se sono a 20 metri da arduino

Se usa cavo schermato di buona qualità (prolunghe audio con jack) forse raggiungi i 5m , ma non credo oltre

eolo1234 il 2/5/2015, 23:48
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Grazie per la risposta
non è che si possa amplificare in qualche modo ( cosi da arrivare a 15 metri )almeno 1 dei 2 sensori.
L ho buttata la così magari a qualcuno viene un idea
Grazie per eventuali risposte.

eolo1234 il 4/5/2015, 8:24
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Buon giorno
Mi è venuto un dubbio sto facendo il circuito per sct-013-30H la resistenza da 100 la devo mettere oppure no perché se non ho capito male la resistenza e integrata al sensore .
vi ringrazio e attendo conferma

eolo1234 il 10/5/2015, 10:58
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao cortesemente potreste dirmi che letture dovrei avere all'uscita del circuito di alimentazione perché io ho delle letture che non mi convincono e non vorrei che ho sbagliato a assemblare il circuito
grazie

ElettroshockNow il 10/5/2015, 12:58
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento

La resistenza da 100 Ohm è la shunt indispensabile per il funzionamento del sensore e non é integrata nel sensore.

Terminato l'assemblaggio deve essere eseguita la procedura di calibrazione modificando i fattori di conversione.

Ricordo inoltre che il circuito in questione misura solo la potenza apparenze.

Ciao
Elettro

eolo1234 il 10/5/2015, 13:15
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao grazie ma io mi riferivo al circuito di alimentazione subito dopo il trasformatore 8 4 12 io ho dei valori che non mi convincono se misuro con il tester a3 con gnd ho 3 volt se misuro gnd arduino vin ho 18 a vuoto credo che non sia corretto

ElettroshockNow il 10/5/2015, 14:10
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
La tensione A3 è corretta.
La tensione Vin è elevata in quanto è misurata a vuoto. Vedrai che calerà con pochi mA di assorbimento.
Cmq anche i 18V sono ben tollerati da Arduino

eolo1234 il 10/5/2015, 14:30
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Grazie allora procedo a collegare il tutto e poi ti faccio sapere
ti ringrazio ancora del tempo che mi stai dedicando

eolo1234 il 11/5/2015, 20:50
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao ho appena caricato il programma ma non funzionano i tasti probabilmente lo shield non è uguale a quello per cui è programmato (considerato che l ho montato direttamente su arduino ) allego il sito del mio http://www.dfrobot.com/wiki/index.php?title=Arduino_LCD_KeyPad_Shield_(SKU:_DFR0009)#Pin_Allocation
come avevo detto con la programmazione non capisco nulla potreste aiutarmi riscrivendolo per la mia tastiera il 3.5 grazie mille

ElettroshockNow il 11/5/2015, 21:02
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Non ci sono pulsanti :blink:

Ne ho installato uno solo su un pin digitale (vedi nel listato c'è scritto tutto )

eolo1234 il 11/5/2015, 23:12
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao quindi per capirci questi nella foto dello shield non funzioneranno .
se e cosi non c e modo di farli funsionare?
grazie delle risposte ElettroshockNow




ElettroshockNow il 12/5/2015, 8:13
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Sisi certo che puoi farli funzionare.
Sono io che ho scelto di gestire tutto con un comodo e generoso pulsante.
In fin dei conti deve solo cambiare menù ed eventualmente resettare i contatori.
Cmq includi la libreria per la gestione della tastiera e il gioco è fatto ;)

eolo1234 il 13/5/2015, 9:01
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
buon giorno
sto montando il pulsante (-D2=ingresso Pulsante (Mettere una resistenza pullDown da 10K e il pulsante NA tra il +5 e il pin D2 )
allego l immagine del circuito che ho trovato su internet credo che i collegamenti da fare siano questi non vorrei fare cazz


ElettroshockNow il 13/5/2015, 10:25
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Perfetto :clap.gif:
Puoi anche non installare la resistenza da 220 Ohm.

Ciao
Elettro

eolo1234 il 13/5/2015, 22:54
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao grazie Elettro il pulsante e ok ora passiamo a finire di saldare gli ultimi componenti del circuito dei sensori

eolo1234 il 14/5/2015, 11:41
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao
ultimi aggiornamenti
finito di montare sensori data corrente accendo col pulsante premuto e rilascio come da manuale di Elettro
mi dice assorbita 0w prodotta 4760w
qualcosa è sbagliato ?
chiaramente il tutte senza carichi


ElettroshockNow il 14/5/2015, 11:56
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Prendi in voltmetro e misura tra Gnd e gli ingressi.
Sull'ingresso tensione dovrai trovare circa 3V e su quelli corrente 2.5V.

eolo1234 il 14/5/2015, 12:29
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Grazie ma non sono molto ferrato in elettronica potresti farmi uno schema dove dovrei mettere i puntali del tester per misurare tensione e corrente
scusami credo di aver capito
misuro tra il filo che va sul pin gnd e il filo che va sul pin a3 mi dovrebbe dare 3 v
gnd a2 2.5v sempre sul filo
gnd a1 2.5v


giusto o ho detto un altra cazz

ElettroshockNow il 14/5/2015, 19:36
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Giusto ;)

eolo1234 il 14/5/2015, 19:53
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ora sto lavorando :construction.gif: alle 22 sono a casa provo e ti faccio sapere subito i valori
comunque sei mmmmmmmmmolto gentile mi stai aiutando tantissimo in questo progetto è spero che tutto ciò che sto sperimentando sia utile a qualcuno che come me per paura di sbagliare non lo realizza
tutto questo grazie a te Elettro


eolo1234 il 14/5/2015, 21:57
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
gnd A3 1.44v
gnd A2 2.53v
gnd A1 oscilla da 1 a 1.9 v
nella pagina tensione mi da 174v
in contiua DCV
Le letture sopra sono state fatte con i fili inseriti su arduino quelle che metto ora sono fatte con i fili tolti da arduino quindi solo sui fili

gnd a3 1.4v
gnd a2 2.5v
gnd a1 2.5v

iannez il 15/5/2015, 9:34
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao ragazzi,
ho visto sullo sketch di 5a2v0 una parte di codice che sembra calcoli
in automatico l'offset.
non ho capito pero cosa ha integrato nel pin per far questo.
a seguire uno stralcio...

[code]

void loop() {
//##################
//CHECK INIZIALE ###
//##################
//Eseguo solo una volta all'accensione delle letture a vuoto per l'assestamento dei valori ottenuti dal sensore di corrente
if (sensorTest == 0) {
do {
offsetValue = analogRead(offsetPin);
sensorTotValue = analogRead(sensorTotPin);
lcd.setCursor(0,0);
lcd.print("Check in corso...");
lcd.setCursor(0,1);
//Calcolo e scrivo una percentuale sul display in relazione alla seguente equazione
//5000 : 100% = millis() : x %
lcd.print(millis() / 50);
lcd.print("% ");
}
//Sono necessari circa 5 secondi affinchè le letture si stabilizzino
while(millis() < 5000);
//Note di fine check e test funzionamento buzzer
tone(buzzer, 4699, 125);
delay(160);
noTone(buzzer);
tone(buzzer, 4699, 125);
delay(160);
noTone(buzzer);
//Azzero la variabile utilizzata in fase di check e specifico che il test iniziale è concluso
sensorTotValue = 0;
sensorTest = 1;
delay(1000);
}
//###################
//LETTURA SENSORI ###
//###################
//Lettura dati dei sensori e calcolo della corrente assorbita e dei consumi in watt
ampereTot = 0.00;
ampereCucina = 0.00;
ampereStanze = 0.00;
numeroCampionamenti = 0;
inizioCampionamenti = millis() ;
do
{
numeroCampionamenti++;
//offsetValue è la lettura senza carico quindi lo sottraiamo alle letture dei sensori
offsetValue = analogRead(offsetPin);
sensorTotValue = analogRead(sensorTotPin);
sensorCucinaValue = analogRead(sensorCucinaPin);
sensorStanzeValue = analogRead(sensorStanzePin);
//Codice per eventuale controllo dei valori letti
//Serial.println("OFFSET");
//Serial.println(offsetValue);
//Serial.println("SENSORE");
//Serial.println(sensorTotValue);
//Serial.println("---------");
sensorTotValue = (sensorTotValue - offsetValue);
sensorCucinaValue = (sensorCucinaValue - offsetValue);
sensorStanzeValue = (sensorStanzeValue - offsetValue);
//Alcune letture potrebbero avere valore negativo per cui noi consideriamo il valore assoluto
ampereTot+= abs(sensorTotValue);
ampereCucina+= abs(sensorCucinaValue);
ampereStanze+= abs(sensorStanzeValue);
}
//20 sono i millisecondi che verranno campionati
while((millis() - inizioCampionamenti) < 20);
//Per ottenere gli ampere reali moltiplichiamo la media di ampere letti nei 20ms per 0.166 che è il fattore di conversione calcolato con un carico noto
ampereTot = (ampereTot / numeroCampionamenti) * fattoreConversione;
ampereCucina = (ampereCucina / numeroCampionamenti) * fattoreConversione;
ampereStanze = (ampereStanze / numeroCampionamenti) * fattoreConversione;
//Infine moltiplichiamo gli ampere per la tensione stabilita per ottenere il consumo in Watt
consumoTot = ampereTot * tensione;
consumoCucina = ampereCucina * tensione;
consumoStanze = ampereStanze * tensione;



mi spiegate il ragionamento dietro questo principio?

tnx

eolo1234 il 15/5/2015, 11:29
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Rispetto ai valori che ho descritto poco sopra cosa dovrei fare per sistemare il tutto
( ho paura per il gnd A1 che oscilla da 1 a 1.9 non vorrei che ho fritto arduino )
grazie per eventuali risposte

iannez il 16/5/2015, 10:39
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
ciao eolo,
attendo anche io un intervento di aiuto,
sono alla prova di controllo voltaggio ma i
valori mi sballano troppo e non ho certezza che sia
la logica dello sketch o il partitore non efficiente.

eolo1234 il 16/5/2015, 22:05
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (iannez, 16/05/2015 10:39:01 ) [quote]ciao eolo,
attendo anche io un intervento di aiuto,
sono alla prova di controllo voltaggio ma i
valori mi sballano troppo e non ho certezza che sia
la logica dello sketch o il partitore non efficiente.


ciao
ma tu che letture hai ?
le puoi inserire cortesemente

iannez il 16/5/2015, 22:50
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
ho letture sfalsate nel senso che il valore del sensore non è costante
ma sale e scende durante la lettura in un ciclo for di 1000 campionamenti
di tutta l onda sinusoidale.
sembra che abbia risolto con un pezzo di codice che è in prima pagina qui.

[code]

if (Tensionepicco < Tensioneinst) Tensionepicco = Tensioneinst;



questo lo rende stabile.

pero ho dubbi vari su partitore, offset e varie.

vediamo se piano piano qualcuno di aiuta.

iannez il 19/5/2015, 13:59
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Elettro è possibile via codice automatizzare la lettura
e quindi il calcolo dell offset dei sensori?

hai un schema semplice di come utilizzare un partitore e/o
un operazionale per creare l'offset che mi pare sia necessario
ad arduino per gestire l intera onda sinusoidale?

tnx

ElettroshockNow il 19/5/2015, 16:42
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (iannez, 19/05/2015 13:59:33 ) [quote]Elettro è possibile via codice automatizzare la lettura
e quindi il calcolo dell offset dei sensori?

hai un schema semplice di come utilizzare un partitore e/o
un operazionale per creare l'offset che mi pare sia necessario
ad arduino per gestire l intera onda sinusoidale?

tnx


Certo che è fattibile,ma non ho niente di pronto(ho perso i codici).

Ti spiego a grandi linee come fare.

int TensioneOffsetPin = A0;
int CorrenteOffsetPin = A1;
int TensionePin = A2;
int CorrentePin = A3;
int Fattore_Conversione_Tensione = 1; //da calcolare
int Fattore_Conversione_Corrente = 1; //da calcolare

float Tensionemax ;
float Tensionemin ;
float TensioneRMS ;
float CorrenteRMS ;
float PotenzaAttiva;
float PotenzaApparente;
float FattorediPotenza;
float SommaV;
float SommaI;
float SommaP;


void setup() {
ADCSRA&=0X90+ 0b100; //Setta ADC prescaler a 16
}

void loop() {
int NumCampionamenti = 0;
int OffsetTensione = analogRead(TensioneOffsetPin);
int OffsetCorrente = analogRead(CorrenteOffsetPin);
unsigned long start = micros() ;
while (micros() < (start + 20000)){
float Tensioneinst = (analogRead(TensionePin)-OffsetTensione)*Fattore_Conversione_Tensione;
float Correnteinst = (analogRead(CorrentePin)-OffsetCorrente)*Fattore_Conversione_Corrente;

if ( Tensionemax < Tensioneinst ) Tensionemax=Tensioneinst;
if ( Tensionemin > Tensioneinst ) Tensionemin=Tensioneinst;


SommaV += pow(Tensioneinst,2);
SommaI += pow(Correnteinst,2);
SommaP += (Tensioneinst*Correnteinst);
NumCampionamenti++;
}

TensioneRMS = sqrt(SommaV / NumCampionamenti);
CorrenteRMS = sqrt(SommaI / NumCampionamenti);
if (CorrenteRMS < 0.10) {//soglia minima
CorrenteRMS=0;
SommaP=0;}
PotenzaAttiva = SommaP/ NumCampionamenti;
PotenzaApparente = TensioneRMS * CorrenteRMS;
FattorediPotenza = PotenzaAttiva/PotenzaApparente;
}


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

Ciao
Elettro


iannez il 19/5/2015, 16:56
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
grazie elettro,
cerco di capire e provare quanto hai consigliato.

vedo di mettere il partitore su basetta cosi da finire il pacchetto
che per ora gira ma non molto bene ehehehe

yeah


ElettroshockNow il 19/5/2015, 17:01
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
:clap.gif: Bellissimo .
Se implementi il codice sopra postato ,potrai misurare anche potenza attiva - reattiva e apparente ,oltre al cosfi ;)

Le modifiche hardware non sono difficili (vista l'opera che hai realizzato)
Se ho tempo (e non ne ho) disegno il nuovo schema del PowerMeter Enhanced

eolo1234 il 19/5/2015, 20:30
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
buona sera a tutti
scusate non vorrei essere insistente ma non c e propio nessuno che puo aiutarmi

grazie

ElettroshockNow il 19/5/2015, 23:07
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (eolo1234, 19/05/2015 20:30:10 ) [quote]buona sera a tutti
scusate non vorrei essere insistente ma non c e propio nessuno che puo aiutarmi

grazie


Prova a caricare un programma semplice per testare gli ingressi analogici.

Poi controlla nuovamente le uscite dalla scheda adattatrice :
- circa 2,5V per i sensori
- circa 3V per la tensione (metti un condensatore per il test,poi lo rimuovi quando lo connetti ad arduino)

Fatto ciò controlla come alimenti Arduino.

Deve prendere alimentazione dal Vin e devi usare l'uscita 5V per creare l'offset dei sensori corrente.

Ciao
Elettro

eolo1234 il 20/5/2015, 9:23
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao grazie Elettro provo a fare come mi hai detto

Ma vorrei sapere una cosa dopo l'alimentatore 4v 8v e la scheda che stabilizza i voltaggi va messa un altro circuito oppure esco e vado diretto su arduino come da schema ( perché da quel poco che capisco di elettronica mi sembra che esce in alternata e non vorrei che devo trasformarla in contiua )

iannez il 20/5/2015, 14:40
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao Eolo,
l'uscita a 8v viene poi raddrizzata e filtrata per alimentare arduino.
per cui va bene cosi.

l altra è quella che tramite il partitore serve poi per leggere
l intera forma dell'onda tramite l ingresso di arduino.

eolo1234 il 20/5/2015, 14:54
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
grazie iannez
quindi per l uscita 3v devo creare il partitore non ce uno schema cosi lo costruisco
invece quella da 8v la devo attaccare direttamente ad arduino ? oppure devo raddrizzarla e filtrarla se e cosi mi serve lo schema anche di quello

grazie

ElettroshockNow il 20/5/2015, 15:00
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (iannez, 20/05/2015 14:40:28 ) [quote]l altra è quella che tramite il partitore serve poi per leggere
l intera forma dell'onda tramite l ingresso di arduino.


non proprio tutta ,ma solo le semionde positive.

Perchè?
Se sapevo che il progetto avrebbe nutrito interesse mi sarei impegnato di più.
Quando lo realizzai ,ho aperto il cassetto e ho visto quello che avevo.

La scelta migliore sarebbe stata due piccoli trasformatori isolati.
Uno dedicato all'alimentazione (andava benissimo anche il già bello e pronto alimentatorino con spina) e uno per ridurre la 220 a livelli accettabili.

Il segnale cosi' ridotto (Vpp di circa 3V) lo avrei addizionato ad un offset di 2,5V (tensione prelevata tramite partitore e condensatori di livellamento usando i +5V di Arduino),in maniera tale da ottenere una sinusoide avente Vmin =1V e Vmax=4V e ovviamente zero a 2,5V.

Gli stessi 2,5V possono essere usati anche per i sensori corrente purchè nel partitore resistivo scorrano almeno 20mA per evitare fluttuazioni durante i piccoli assorbimenti del convertitore.

Ancora meglio è usare un generatore di tensione di riferimento da 2,5V dove prelevare gli offset.

Poi un ingresso analogico sul nodo offset e un ingresso per ogni segnale (uno per la tensione ... uno per la corrente1 ... uno per la corrente2 ....)

Questo è quello che farei oggi ....

Ieri ho aperto il cassetto ed ho trovato quel trasfo ... che non mi ha consentito di :
-essere immune a disturbi introdotti da assorbimenti di Arduino
-avere un offset e di conseguenza misurare tutta l'onda della tensione (quindi perdita della potenza attiva e reattiva)


Vabbè il progetto è da rifare ...,ma è più semplice di quello che sembra ...

Le linee guida le ho scritte e sarei onorato se qualcuno le sfruttasse e condividesse .

Ciao
Elettro

ElettroshockNow il 20/5/2015, 16:13
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ecco la versione grafica di quello che ho descritto nel post precedente.
Accoppiato al codice allegato (Da testare) vi consentirà di avere un Powermeter con i fiocchi (ancora migliorabile) senza paragoni con il progetto originale della discussione.



//**************************************************

#include < LiquidCrystal.h >
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);//ASSEGNAZIONE PIN LCD
const int BACKLIGH_PIN = 10;

int OffsetPin = A4;
int TensionePin = A1;
int CorrentePin_1 = A2;
int CorrentePin_2 = A3;
float Fattore_Conversione_Tensione = 1.03; //da calcolare
float Fattore_Conversione_Corrente_1 = .2212; //da calcolare
float Fattore_Conversione_Corrente_2 = .2212 ; //da calcolare
float TensioneRMS ;
float CorrenteRMS_1 ;
float CorrenteRMS_2 ;
float PotenzaAttiva_1;
float PotenzaAttiva_2;
float PotenzaApparente_1;
float PotenzaApparente_2;
float FattorediPotenza_1;
float FattorediPotenza_2;

void setup() {
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);
lcd.clear();
ADCSRA&=0X90+ 0b101; //Setta ADC prescaler a 32


}

void loop() {
float SommaV=0;
float SommaI_1=0;
float SommaI_2=0;
float SommaP_1=0;
float SommaP_2=0;
int NumCampionamenti = 0;
int Offset = analogRead(OffsetPin);
unsigned long start = micros() ;
while (micros() < (start + 20000)){
float Tensioneinst = (analogRead(TensionePin)-Offset)*Fattore_Conversione_Tensione;
float Correnteinst_1 = (analogRead(CorrentePin_1)-Offset)*Fattore_Conversione_Corrente_1;
float Correnteinst_2 = (analogRead(CorrentePin_2)-Offset)*Fattore_Conversione_Corrente_2;


SommaV += pow(Tensioneinst,2);
SommaI_1 += pow(Correnteinst_1,2);
SommaI_2 += pow(Correnteinst_2,2);
SommaP_1 += (Tensioneinst*Correnteinst_1);
SommaP_2 += (Tensioneinst*Correnteinst_2);
NumCampionamenti++;
}

TensioneRMS = sqrt(SommaV / NumCampionamenti);
CorrenteRMS_1 = sqrt(SommaI_1 / NumCampionamenti);
CorrenteRMS_2 = sqrt(SommaI_2 / NumCampionamenti);
if (CorrenteRMS_1 < 0.10) {//soglia minima
CorrenteRMS_1=0;
SommaP_1=0;}
if (CorrenteRMS_2 < 0.10) {//soglia minima
CorrenteRMS_2=0;
SommaP_2=0;}
PotenzaAttiva_1 = SommaP_1/ NumCampionamenti;
PotenzaAttiva_2 = SommaP_2/ NumCampionamenti;
PotenzaApparente_1 = TensioneRMS * CorrenteRMS_1;
PotenzaApparente_1 = TensioneRMS * CorrenteRMS_1;
FattorediPotenza_1 = PotenzaAttiva_1/PotenzaApparente_1;
FattorediPotenza_2 = PotenzaAttiva_2/PotenzaApparente_2;


lcd.setCursor(0, 0);
lcd.print(TensioneRMS,0);
lcd.print("V ");
lcd.setCursor(5, 0);
lcd.print(CorrenteRMS_1,1);
lcd.print("A ");
lcd.setCursor(11, 0);
lcd.print(CorrenteRMS_2,1);
lcd.print("A ");
lcd.setCursor(0,1);
lcd.print(PotenzaAttiva_1,0);
lcd.print("W ");
lcd.setCursor(6,1);
lcd.print(PotenzaAttiva_2,0);
lcd.print("W ");
lcd.setCursor(12,1);
lcd.print(FattorediPotenza_1,2);
lcd.print(" ");

}
//***************************************************




Ciao
ElettroshockNow

PS:levare gli spazi su < LiquidCrystal.h >

Modificato da ElettroshockNow - 20/05/2015, 19:57:20

eolo1234 il 20/5/2015, 18:36
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
ciao Elettro

il circuito non mi sembra complicato neanche per uno scarso come me
avrei sempre il solito problema offset e programmazione


ElettroshockNow il 20/5/2015, 18:43
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (eolo1234, 20/05/2015 18:36:07 ) [quote]ciao Elettro

il circuito non mi sembra complicato neanche per uno scarso come me
avrei sempre il solito problema offset e programmazione



Lo stò Testando .... ;)

eolo1234 il 20/5/2015, 18:46
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Elettro sei un grande

io nel frattempo sto testando arduino
ma per il trasformatore non si puo usare lo stesso usando la porta 8v

quello che non capisco perche se io copio un programma gia testato e corretto con i vari parametri e offset perche non dovrebbe funsionare

ElettroshockNow il 20/5/2015, 19:26
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (eolo1234, 20/05/2015 18:46:21 ) [quote]Elettro sei un grande

io nel frattempo sto testando arduino
ma per il trasformatore non si puo usare lo stesso usando la porta 8v

quello che non capisco perche se io copio un programma gia testato e corretto con i vari parametri e offset perche non dovrebbe funsionare

Perchè ci sono in gioco le tolleranze.

Programma testato e funzionante (Qualche errore )
A breve lo allego con qualche info per la taratura e ovviamente video ;)

Poi una volta che avete tutti i dati ,ognuno lo può personalizzare a piacimento.

iannez il 20/5/2015, 19:27
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
appena ho un momento replico lo schema e provo, per ora tnxx 1000

ho un paio di domande forse banali...

- perche usiamo campionare cosi:

unsigned long start = micros() ;
while (micros() < (start + 20000)){
qualcosa da fare
}

piuttosto che un ciclo for classico da 0 a n iterazioni?

- sto facendo test con un partitore ad cazzum come si suol dire
ma che funziona.
leggo in rms 250v corretti che ci sono nella mia abitazione.
poi ho estesto il codice utilizzando una lettura tensionemax
che sommo e poi divido per il numero dei campionamenti per
avere una media istantanea... solo che i valori differiscono cosi:

250vrms 160v circa istantanea... è normale?

mi sarei aspettato un 250*0.707 che non da 160v

tutto questo perche vorrei visualizzare anche la tensione non rms
come la corrente non rms insieme chiaramente a tutti gli altri valori
calcolati.

cosa sto sbagliando a livello concettuale?

ElettroshockNow il 20/5/2015, 20:07
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (iannez, 20/05/2015 19:27:37 ) [quote]
- perche usiamo campionare cosi:

unsigned long start = micros() ;
while (micros() < (start + 20000)){
qualcosa da fare
}


Per semplicità .
Faccio eseguire nel ciclo while più conversioni possibili nel tempo di 20mS (Arduino usa il Timer0).
Cosi' facendo è possibile aumentare o diminuire il prescaler dell'ADC senza dover calcolare il tempo necessario per ogni conversione e il conseguente numero di campionamenti necessari per campionare un'onda intera.
Calcola che se un giorno vorrai aggiungere un ulteriore sensore ti basterà copiare e incollare alcune linee di codice ;)

Per il resto ... perchè vuoi rinunciare al True RMS .
Il mio PowerMeter ne è sprovvisto e ne sento la necessità .

Con alti carichi induttivi la potenza attiva è molto distante dall'apparente .

Ciao
Elettro

PS:Codice aggiornato e FUNZIONANTE

A breve video e procedura per tarare sensori.

eolo1234 il 20/5/2015, 20:15
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Elettro aggiornerai la versione 3.5 cosi come e con i 2 rele?

iannez il 20/5/2015, 20:17
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
tnx ma il tempo 20ms è un dato particolare uscito da qualche
specifica o è indicativo e cioe poteva essere chesso 50ms?

no elettro no voglio rinunciare a niente anzi!!!
aggiungevo frequenza e anche la V non rms e I non rms

ma è il conto che non mi torna.

in pratica ho aggiunto questo:

if ( Correntemax < Correnteinst ) Correntemax=Correnteinst;
if ( Correntemin > Correnteinst ) Correntemin=Correnteinst;

Tensionemax += Tensioneinst;
Correntemax += Correnteinst;

} // chiudo ciclo campionamento

Tensionemax /= NumCampionamenti;
Correntemax /= NumCampionamenti;

poi li printo su lcd ma con il risultato di cui sopra.

mi aspetto si una discrepanza ma non cosi
non mi tornano i conti.

sbaglio concettualmente sicuramente.



ElettroshockNow il 20/5/2015, 21:14
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (iannez, 20/05/2015 20:17:08 ) [quote]tnx ma il tempo 20ms è un dato particolare uscito da qualche
specifica o è indicativo e cioe poteva essere chesso 50ms?


20mS è il Periodo di un'onda a 50Hz
Ma nel nostro calcolo possiamo usare suoi multipli.

Ci sarà cmq un errore dato dallo scostamento della frequenza rispetto alla cononica 50Hz ,ma non superiore all' 1% (con le nuove normative ci adegueremo più avanti )

CITAZIONE (iannez, 20/05/2015 20:17:08 ) [quote]
sbaglio concettualmente sicuramente.



Il contrario era più esatto.
Cioè misuri la tensione di picco e di conseguenza (tenendo sempre in condiderazione un'onda sinusoidale pura) calcoli il valore efficace dividendolo per 1.41.

Per la corrente invece sommi più letture e dividi per il numero delle campionature per ottenere una corrente media in una unità di tempo.

ElettroshockNow il 20/5/2015, 21:38
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento



Il codice allegato associato allo schema proposto qualche post fà consente di misurare Tensione RMS,2 Correnti RMS,2 Potenze Attive-Reattive-Apparenti e conseguenti cosfi.
Non è in grado di misurare la frequenza ,ma se implementiamo la derivata (Grazie Bolle) possiamo calcolare anche lei ;)

Per chi realizzerà il nuovo schema dovrà tarare il circuito.

Per farlo sarà sufficiente segnarsi su un foglio le letture lette da strumenti campioni e il valore misurato da Arduino.

Di seguito usare la formula:

Nuovo_Fattore_Conversione=Valore_Reale/Valore_Arduino*Fattore_Conversione_Attuale

Valido sia per la tensione che per la corrente.

Il codice è il cuore del PowerMeter Enhanced ,poi ognuno è libero di aggiungere linee di codice per personalizzarlo.

Tipo :

if(PotenzaApparente_1>3000)digitalWrite(Rele1, LOW);
else if (PotenzaApparente_1<1000)digitalWrite digitalWrite(Rele1, HIGH);


che consente di scollegare un carico se l'assorbimento oltrepassa i 3000W (non VA ) e di ricollegarlo se l'assorbimento scende sotto i 1000W

Ciao
ElettroshockNow#####ALLEGATO-" />
" />
?1584" />


eolo1234 il 20/5/2015, 22:04
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
grazie Elettro ma per quelli come me non potresti aggiornare il 3.5

Un altra cosa con cosa alimentero arduino (vedi sull immagine pagina precedente alimentazione )

ElettroshockNow il 20/5/2015, 23:49
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (eolo1234, 20/05/2015 22:04:43 ) [quote]grazie Elettro ma per quelli come me non potresti aggiornare il 3.5

Un altra cosa con cosa alimentero arduino (vedi sull immagine pagina precedente alimentazione )


Ma che problema ha la 3.5 ?

eolo1234 il 21/5/2015, 6:04
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao io non ho nessun problema con la versione 3.5 ma visto che hai modificato parte del programma e io non sono in grado di inserirlo nella 3.5 avrei piacere se lo modificassi tu per me evolvendo il programma
A meno che non ho capito io e funziona anche così come è
Scusami se mi ripeto ma di programmazione non capisco nulla.

eolo1234 il 21/5/2015, 20:57
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
questo e quello che ho fatto rispetto il tuo schema Elettro devo solo testarlo e inserire i parametri
poi spero che qualcuno mi puo aiutare con il porogramma


iannez il 21/5/2015, 21:43
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
ottimo lavoro eolo!

certo che troverai aiuto! anche io mi sono appassionato
e provo a fare del mio meglio

eolo1234 il 26/5/2015, 8:01
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao Elettro
Potresti inserire nel Powermeter_Enhanced_Simple1 il programma per azionare 2 relè (o renderlo simile al 3.5 ) io sono giorni che ci provo con scarsi risultati come già accennato di programmazione non capisco nulla
Grazie

supermomo717 il 27/5/2015, 13:45
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Fantastico! Appena realizzo l'HW provvedo a integrare tutte le parti SW relative alla trasmissione dei dati, ai salvataggi in memoria e alla gestione delle uscite. Con il precedente PowerMeter ho pure integrato l'ESP8266 per controllare da internet alcune funzioni.
Bel lavoro Elettro, complimenti!

iannez il 2/6/2015, 19:47
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Eolo appena ho un secondo provo a compilare lo sketch di Elettro
nuovo aggiungendo la parte relativa ai rele.

pero questa è una cosa soggettiva, cioe capire il tempo di apertura,
quando aprire, quando chiudere eccetera, sono cose che vanno
viste nel proprio impianto domestico perche il modo di utilizzo
e le combinazioni cambiano di volta in volta.

a presto.

eolo1234 il 2/6/2015, 20:48
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Grazie iannez

iannez il 2/6/2015, 21:13
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
aveva gia scritto le linee interessate Elettro all'inizio di questa pagina:

[quote]

Il codice è il cuore del PowerMeter Enhanced ,poi ognuno è libero di aggiungere linee di codice per personalizzarlo.

Tipo :

if(PotenzaApparente_1>3000)digitalWrite(Rele1, LOW);
else if (PotenzaApparente_1<1000)digitalWrite digitalWrite(Rele1, HIGH);

che consente di scollegare un carico se l'assorbimento oltrepassa i 3000W (non VA ) e di ricollegarlo se l'assorbimento scende sotto i 1000W




per cui Eolo basta che inserisci il pin corretto e le potenze che vuoi gestire e poi sei apposto.

chiaramente devi avere l'hardware corretto per essere pilotato adeguatamente.

spero ti sia chiaro perche è un codice intuibile e facilmente integrabile
e modificabile.

eolo1234 il 2/6/2015, 21:23
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Si lo aveva detto Elettro ma io ho provato ma non ci sono riuscito l ho detto di programmazione sono una se...... potresti inserirli tu
Grazie

iannez il 3/6/2015, 11:18
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
Ciao Eolo,
il mio hardware è differente, non ho i rele, i due sensori,
i tasti per il menu ed il mio lcd è un 20x4.

per cui anche volendo non riuscirei a riscrivere il codice al volo
perche non in grado di testarlo a fondo.

attendiamo che Elettro quando libero da impegni possa aiutarci.


ribadisco che il cuore del controllo dei rele è questa parte:

[code]
if (PotenzaMon < Uscita_1_ON) TUscita1=millis();
else
if (millis()>(Uscita_1_Time*1000+TUscita1)) digitalWrite(Uscita1,HIGH);
if (PotenzaMon < Uscita_1_OFF) digitalWrite(Uscita1,LOW);


[code]
if (PotenzaMon < Uscita_2_ON) TUscita2=millis();
else
if (millis()>(Uscita_2_Time*1000+TUscita2)) digitalWrite(Uscita2,HIGH);
if (PotenzaMon < Uscita_2_OFF) digitalWrite(Uscita2,LOW);


tratta dal powermeter-3.5

eolo1234 il 3/6/2015, 17:39
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
grazie iannez
continuero a provare a inserire i codici dei rele ( un po di copia e incolla )di piu non so fare.
ma credo che è come dici tu (attendiamo che Elettro quando libero da impegni possa aiutarci).

cdj il 8/6/2015, 9:14
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
CITAZIONE (ElettroshockNow, 03/06/2015 17:39:19 ) [quote]Ecco la versione grafica di quello che ho descritto nel post precedente.
Accoppiato al codice allegato (Da testare) vi consentirà di avere un Powermeter con i fiocchi (ancora migliorabile) senza paragoni con il progetto originale della discussione.



//**************************************************

#include < LiquidCrystal.h >
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);//ASSEGNAZIONE PIN LCD
const int BACKLIGH_PIN = 10;

int OffsetPin = A4;
int TensionePin = A1;
int CorrentePin_1 = A2;
int CorrentePin_2 = A3;
float Fattore_Conversione_Tensione = 1.03; //da calcolare
float Fattore_Conversione_Corrente_1 = .2212; //da calcolare
float Fattore_Conversione_Corrente_2 = .2212 ; //da calcolare
float TensioneRMS ;
float CorrenteRMS_1 ;
float CorrenteRMS_2 ;
float PotenzaAttiva_1;
float PotenzaAttiva_2;
float PotenzaApparen
te_1;
float PotenzaApparente_2;
float FattorediPotenza_1;
float FattorediPotenza_2;

void setup() {
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);
lcd.clear();
ADCSRA&=0X90+ 0b101; //Setta ADC prescaler a 32


}

void loop() {
float SommaV=0;
float SommaI_1=0;
float SommaI_2=0;
float SommaP_1=0;
float SommaP_2=0;
int NumCampionamenti = 0;
int Offset = analogRead(OffsetPin);
unsigned long start = micros() ;
while (micros() < (start + 20000)){
float Tensioneinst = (analogRead(TensionePin)-Offset)*Fattore_Conversione_Tensione;
float Correnteinst_1 = (analogRead(CorrentePin_1)-Offset)*Fattore_Conversione_Corrente_1;
float Correnteinst_2 = (analogRead(CorrentePin_2)-Offset)*Fattore_Conversione_Corrente_
2;


SommaV += pow(Tensioneinst,2);
SommaI_1 += pow(Correnteinst_1,2);
SommaI_2 += pow(Correnteinst_2,2);
SommaP_1 += (Tensioneinst*Correnteinst_1);
SommaP_2 += (Tensioneinst*Correnteinst_2);
NumCampionamenti++;
}

TensioneRMS = sqrt(SommaV / NumCampionamenti);
CorrenteRMS_1 = sqrt(SommaI_1 / NumCampionamenti);
CorrenteRMS_2 = sqrt(SommaI_2 / NumCampionamenti);
if (CorrenteRMS_1 < 0.10) {//soglia minima
CorrenteRMS_1=0;
SommaP_1=0;}
if (CorrenteRMS_2 < 0.10) {//soglia minima
CorrenteRMS_2=0;
SommaP_2=0;}
PotenzaAttiva_1 = SommaP_1/ NumCampionamenti;
PotenzaAttiva_2 = SommaP_2/ NumCampionamenti;
PotenzaApparente_1 = TensioneRMS * CorrenteRMS_1;
PotenzaApparente_1 = TensioneRMS * CorrenteRMS_1;
FattorediPotenza_1 = PotenzaAttiva_1/PotenzaApparente_1;
FattorediPotenza_2 = PotenzaAttiva_2/PotenzaApparente_2;


lcd.setCursor(0, 0);
lcd.print(TensioneRMS,0);
lcd.print("V
");
lcd.setCursor(5, 0);
lcd.print(CorrenteRMS_1,1);
lcd.print("A ");
lcd.setCursor(11, 0);
lcd.print(CorrenteRMS_2,1);
lcd.print("A ");
lcd.setCursor(0,1);
lcd.print(PotenzaAttiva_1,0);
lcd.print("W ");
lcd.setCursor(6,1);
lcd.print(PotenzaAttiva_2,0);
lcd.print("W ");
lcd.setCursor(12,1);
lcd.print(FattorediPotenza_1,2);
lcd.print(" ");

}
//***************************************************




Ciao
ElettroshockNow

PS:levare gli spazi su < LiquidCrystal.h >

Modificato da ElettroshockNow - 20/05/2015, 19:57:20


Salve a tutti, mi sto imbattendo in questo post in quanto voglio realizzare un power meter con arduino con SCT-013. Nel post di cui sopra ho visto che vengono utilizzati due sensori, io vorrei fare una cosa semplice che mi legge la potenza istantanea utilizzata su un analog in di arduino e basta (o al limite anche su lcd. Nelle 17 pagine precedenti ho trovato diversi schemi... quale mi conviene usare per fare una cosa semplice che funzioni ? grazie in anticipo
Dario

ElettroshockNow il 8/6/2015, 10:18
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
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

supermomo717 il 8/6/2015, 16:17
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
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;//Calcola 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.

cdj il 8/6/2015, 17:44
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
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

maiktech il 15/6/2015, 14:14
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
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:

natluc56 il 17/6/2015, 9:47
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
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.

5a2v0 il 26/6/2015, 10:08
Re:Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
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 ;)

Vorrei approfittare e chiederti come mai hai usato:
[code]while (micros() < (start + 20000)){
anziche il vecchio:
[code]while (millis() - previousMillis >= 20)

poi perchè:
[code]ADCSRA&=0X90+ 0b101; //Setta ADC prescaler a 32
(prima mi sembra lo settavi a 16?)

e ancora qui:
[code]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 ?

ElettroshockNow il 7/9/2015, 18:50
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
Ciao 5a2v0 e bentornato

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

senzasperanza il 23/9/2015, 21:50
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
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

iannez il 18/11/2015, 15:06
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
ciao ragazzi,
avete avuto modo di calcolare anche la frequenza con uno
degli sketch che sono riportati nel thread?

come monitoring credo sarebbe interessante

ElettroshockNow il 10/12/2015, 14:14
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
iannez :
ciao ragazzi,
avete avuto modo di calcolare anche la frequenza con uno
degli sketch che sono riportati nel thread?

come monitoring credo sarebbe interessante



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

ElettroshockNow il 18/9/2017, 13:51
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
Più potenza ...grazie all'STM32 .
Ora la precisione è al watt con due ingressi .
Seguirà lo schema base (uguale al powermeter con offset)

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("-------------------");
 
}
 
}


danye il 18/9/2017, 23:18
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
Il mitico Elettro colpisce ancora! Grazie! 

ElettroshockNow il 19/9/2017, 13:30
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
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 
Ora bisogna salvare i dati nella flash per quando manca la corrente


Allegati:
monitor1.jpg

ElettroshockNow il 19/9/2017, 14:41
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
Ecco il codice ...poi lo miglioro dopo i test

//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("-------------------");
 
}
 
}


Allegati:
2017-09-19_15_05_18.jpg

2017-09-19_15_12_30.jpg

EnergyMeter1.jpg

ElettroshockNow il 20/9/2017, 9:36
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
[color=#0000ff]...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  ...mi piace

//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("-------------------");
 
}
 
}




Allegati:
EnergyMeter2.jpg

supermomo717 il 7/1/2019, 0:31
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
Ho realizzato il tutto , per sperimentare il nuovo Powermeter. E funziona, funziona molto bene. Peccato che non riesco in nessun modo a portare fuori i dati che rileva con la virtualwire, e anche con la libreria wire non ci sono santi di estrarre qualcosa. Purtroppo l'STM32 non è ricco di librerie e di informazioni come lo può essere arduino uno.
Ci sono secondo voi possibilità di esportare i dati verso un secondo arduino a cui far ritrasmettere quanto rilevato dal STM32?

djamelo fotso il 21/10/2019, 18:36
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
Gran bel problema........
In alternativa...potesti fare un concentratore di sensori con Arduino (li' i protocolli ModBus ci
LINK) poi lo interroghi via seriale dal raspberry.....
Certo aggiungi un pezzo al puzzle, ma cosi il lavoro sporco lo farebbe Arduino e al Rasp solo (!!) la grafica. ........

djamelo constant il 2/4/2020, 15:24
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
In alternativa...potesti fare un concentratore di sensori con Arduino (li' i protocolli ModBus ci sono) poi lo interroghi via seriale
LINK raspberry.....
Certo aggiungi un pezzo al puzzle, ma cosi il lavoro sporco lo farebbe Arduino e al Rasp solo (!!) la grafica.

redgenewton il 26/11/2021, 17:03
Re: Voltmetro, Amperometro, Wattmetro, Contatori Assor
ciao elettroShockNow. hai fatto una cosa meravigliosa e utile come questa. Sto progettando di creare il mio misuratore di potenza, ma userò la frequenza di 60 hz. Quali valori sul codice devo modificare per correggere la frequenza a 60hz? scusate per le povere parole italiane, traduco solo il mio inglese in italiano. ;)



TOP100-SOLAR Galleria Immagini EnergiAlternativa