Se sei già registrato           oppure    

Orario: 28/03/2024 23:40:55  

 

Energia Alternativa ed Energia Fai Da Te > Applicazioni E Realizzazioni Pratiche

VISUALIZZA L'ALBUM

Pagine: (18)   1   2   3   4   5   6   7   8   9   10   [11]   12   13   14   15   16   17   18    (Ultimo Msg)


Voltmetro, Amperometro, Wattmetro, Contatori Assorbimento
FinePagina

5a2v0
Watt


Gruppo:Utente
Messaggi:66

Stato:



Inviato il: 21/07/2014 13:03:05

Guarda, per creare il programmino Android io mi sono servito della piattaforma online messa a disposizione dal sito:

appinventor.mit.edu

però ora è anche disponibile la versione 2 della piattaforma che dovrebbe dare qualche vantaggio in più..

ai2.appinventor.mit.edu

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

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



Inviato il: 21/07/2014 13:45:32

grazie .... è una genialata ...

semplice e intuitivo ....



Modificato da ElettroshockNow - 21/07/2014, 14:05:02
 

Valisi

Avatar
milliWatt


Gruppo:Utente
Messaggi:16

Stato:



Inviato il: 21/07/2014 15:55:19

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

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



Inviato il: 21/07/2014 16:18:40

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 ( ) vaporizzano il piccolo chip ....

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

Attualmente uso gli SCT-013-030 ,ma il nuovo power meter userà nuovamente sensori Hall tipo HASS 100S o equivalenti (in pratica quelli con il buco )

Ciao
Elettro

 

Valisi

Avatar
milliWatt


Gruppo:Utente
Messaggi:16

Stato:



Inviato il: 21/07/2014 16:48:31

Interessante ragguaglio. Grazie.

 

supermomo717
Watt


Gruppo:Utente
Messaggi:68

Stato:



Inviato il: 28/07/2014 23:41:19

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.



Immagine Allegata: Pmetera.jpg
 
ForumEA/B/Pmetera.jpg

 

supermomo717
Watt


Gruppo:Utente
Messaggi:68

Stato:



Inviato il: 28/07/2014 23:44:23

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....



Immagine Allegata: Pmeterb.jpg
 
ForumEA/B/Pmeterb.jpg

 

supermomo717
Watt


Gruppo:Utente
Messaggi:68

Stato:



Inviato il: 30/09/2014 09:31:12

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.



Immagine Allegata: grafico.jpg
 
ForumEA/B/grafico.jpg



Modificato da supermomo717 - 30/09/2014, 09:43:39
 

ElettroshockNow

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



Inviato il: 30/09/2014 10:08:50

Che bello
Faccine/Smileys_0003.gif

 

supermomo717
Watt


Gruppo:Utente
Messaggi:68

Stato:



Inviato il: 03/10/2014 12:00:44

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-3;Down-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))||(pagina>3)){
lcd_Time = millis();
switch (pagina){
case 0 :
lcd.setCursor(0, 0);
lcd.print ("GSE = ");
lcd.print (PotenzaPro);
lcd.print ("W "); ;
lcd.setCursor(0,1);
lcd.print ("Extra = ");
lcd.print (PotenzaPro2);
lcd.print ("W ");
break;
case 1 :
lcd.setCursor(0, 0);
lcd.print ("Tensione= ");
lcd.print (Tensione);
lcd.print ("V ");
lcd.setCursor(0,1);
lcd.print ("Assorbita= ");
lcd.print (PotenzaAss);
lcd.print ("W ");

break;
case 2 :
lcd.setCursor(0, 0);
lcd.print ("Corr.Ass= ");
lcd.print (AssorbitaMediaP,2);
lcd.print ("A ");
lcd.setCursor(0,1);
lcd.print ("Corr.Prod= ");
lcd.print ((ProdottaMediaP+ProdottaMediaP2),2);
lcd.print ("A ");
break;
case 3 :
lcd.setCursor(0, 0);
lcd.print ("TotAss= ");
lcd.print (TotAssorbita,1);
lcd.print ("Kwh ");
lcd.setCursor(0,1);
lcd.print ("TotProd= ");
lcd.print ((TotProdotta+TotProdotta2),1);
lcd.print ("Kwh ");
break;
case 4 :
lcd.setCursor(0, 0);
lcd.print ("<< Monitorare >> ");
lcd.setCursor(0,1);
switch (monitor){
case 1:
lcd.print ("Pot. Prodotta ");
break;
case 2:
lcd.print ("Pot. Assorbita ");
break;
case 3:
lcd.print ("Prod. - Assorb. ");
break;
case 4:
lcd.print ("Assorb. - Prod. ");
break;
}
break;
case 5 :
lcd.setCursor(0, 0);
lcd.print ("Soglia Uscita 1 ");
lcd.setCursor(15, 0);
if (digitalRead(Uscita1))lcd.print("*");
lcd.setCursor(0,1);
lcd.print ("- ON=");
lcd.print (Uscita_1_ON);
lcd.print ("Watt ");
lcd.setCursor(15,1);
lcd.print ("+");
break;
case 6 :
lcd.setCursor(0, 0);
lcd.print ("Soglia Uscita 1 ");
lcd.setCursor(15, 0);
if (digitalRead(Uscita1))lcd.print("*");
lcd.setCursor(0,1);
lcd.print ("- TEMPO=");
lcd.print (Uscita_1_Time);
lcd.print ("Sec ");
lcd.setCursor(15,1);
lcd.print ("+");
break;
case 7 :
lcd.setCursor(0, 0);
lcd.print ("Soglia Uscita 1 ");
lcd.setCursor(15, 0);
if (digitalRead(Uscita1))lcd.print("*");
lcd.setCursor(0,1);
lcd.print ("- OFF=");
lcd.print (Uscita_1_OFF);
lcd.print ("Watt ");
lcd.setCursor(15,1);
lcd.print ("+");
break;
case 8 :
lcd.setCursor(0, 0);
lcd.print ("Prod EXT= ");
lcd.print ((TotProdotta2),1);
lcd.print ("Kwh");
lcd.setCursor(0,1);
lcd.print ("Prod GSE= ");
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 ("Amper RMS Prodotti2= ");
Serial.println(ProdottaMediaP2);

Serial.write ("Potenza assorbita= ");
Serial.println(PotenzaAss);

Serial.write ("Potenza GSE= ");
Serial.println(PotenzaPro);

Serial.write ("Potenza EXTRA= ");
Serial.println(PotenzaPro2);

Serial.write ("Totale consumata= ");
Serial.println(TotAssorbita);

Serial.write ("Totale GSE= ");
Serial.println(TotProdotta);

Serial.write ("Totale EXTRA= ");
Serial.println(TotProdotta2);
/*
Serial.write ("Taratura Sensore Assorbita= ");
Serial.println(AssorbitaMedia);

Serial.write ("Taratura Sensore Prodotta= ");
Serial.println(ProdottaMedia);

Serial.write ("Taratura Sensore Prodotta2= ");
Serial.println(ProdottaMedia2);
*/
Serial.println (" ");

//Verifica Esubero di produzione con segnalazione tramite LED2
if (PotenzaAss else digitalWrite(Uscita2,LOW);


//TRASMETTI DATI OGNI 2 SECONDI OPPURE IMMEDIATAMENTE SE LA POTENZA PRODOTTA
//E' PROSSIMA ALLA POTENZA ASSORBITA
if (ProdottaMediaP != 0 && (ProdottaMediaP > (AssorbitaMediaP - 0.30)) && ConfigB==false || millis() > (time + 2000)){
time = millis();
byte Pro1 = PotenzaPro&0xFF;
byte Pro2=(PotenzaPro&0xFF00)>>8;

byte Pro12 = PotenzaPro2&0xFF;
byte Pro22=(PotenzaPro2&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 TProE1= long(TotProdotta2*10)&0xFF;
byte TProE2= (long(TotProdotta2*10)&0xFF00)>>8;
byte TProE3= (long(TotProdotta2*10)&0xFF0000)>>16;

byte CKS = (ADR+Tensione+Pro1+Pro2+Pro12+Pro22+Ass1+Ass2+CPro1+CPro2+CAss1+CAss2+TPro1+TPro2+TPro3+TAss1+TAss2+TAss3+TProE1+TProE2+TProE3)/21;
char msg[22] = {ADR,Tensione,Pro1,Pro2,Pro12,Pro22,Ass1,Ass2,CPro1,CPro2,CAss1,CAss2,TPro1,TPro2,TPro3,TAss1,TAss2,TAss3,TProE1,TProE2,TProE3,CKS};
digitalWrite(13, true); // Flash a light to show transmitting
vw_send((uint8_t *)msg, 22 );
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13, false);
}

}



Immagine Allegata: Powermeter trasmettirore 3 sensori_bb.jpg
 
ForumEA/B/Powermeter trasmettirore 3 sensori_bb.jpg

 

supermomo717
Watt


Gruppo:Utente
Messaggi:68

Stato:



Inviato il: 03/10/2014 12:06:56

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
Watt


Gruppo:Utente
Messaggi:68

Stato:



Inviato il: 03/10/2014 12:13:31

PowerMeterRx 4.0

Ecco il codice e lo schema!

/* Progetto PowerPowerMeterRx 4.0

***Ricevitore***

"" Energia Alternativa & Energia Fai Da Te ""
http://www.energialternativa.info/
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))||(pagina>3)){
lcd_Time = millis();
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+PotenzaPro2);
lcd.print ("W ");

break;

case 1 :
lcd.setCursor(0, 0);
lcd.print ("Tensione= ");
lcd.print (Tensione);
lcd.print (" V ");
lcd.setCursor(0,1);
if(millis() - previousMillis>2000) lcd.noBlink();
else lcd.blink();
if (PotenzaPro+PotenzaPro2-PotenzaAss >0) // visualizza "immetto" o "prelevo" a seconda del flusso della corrente
{
lcd.print("Immetto= ");
lcd.print(PotenzaPro+PotenzaPro2-PotenzaAss);
lcd.print(" W ");
}
else{
lcd.print("Prelevo= ");
lcd.print(PotenzaPro+PotenzaPro2-PotenzaAss);
lcd.print(" W ");
}

break;

case 2 :
lcd.setCursor(0, 0);
lcd.print ("T.GSE= ");
lcd.print (TotalePro);
lcd.print ("Kwh");
lcd.setCursor(0,1);
lcd.print ("T.EXT= ");
lcd.print (TotalePro2);
lcd.print ("Kwh");

break;

case 3 :
lcd.setCursor(0, 0);
lcd.print ("T.As= ");
lcd.print (TotaleAss,1);
lcd.print (" Kwh ");
lcd.setCursor(0,1);
lcd.print ("T.Pr= ");
lcd.print ((TotalePro+TotalePro2),1);
lcd.print (" Kwh ");

break;

case 4 :
lcd.setCursor(0, 0);
lcd.print ("<< Monitorare >> ");
lcd.setCursor(0,1);
switch (monitor){
case 1:
lcd.print ("Pot.Tot.Prodotta ");
break;
case 2:
lcd.print ("Pot. Assorbita ");
break;
case 3:
lcd.print ("Prod.-Assorb.OK ");
break;
case 4:
lcd.print ("Assorb. - Prod. ");
break;
case 5:
lcd.print ("Potenza Esubero ");
break;
case 6:
lcd.print ("Potenza GSE ");
break;
case 7:
lcd.print ("Potenza EXTRA ");
break;
}

break;

case 5 :
lcd.setCursor(0, 0);
lcd.print ("Avvio Uscita 1 ");
lcd.setCursor(15, 0);
if (digitalRead(Uscita1) == LOW)lcd.print("*");
lcd.setCursor(0,1);
lcd.print ("- ON=");
lcd.print (Uscita_1_ON);
lcd.print ("Watt ");
lcd.setCursor(15,1);
lcd.print ("+");

break;

case 6 :
lcd.setCursor(0, 0);
lcd.print ("Avvio Uscita 1 ");
lcd.setCursor(15, 0);
if (digitalRead(Uscita1) == LOW)lcd.print("*");
lcd.setCursor(0,1);
lcd.print ("- TEMPO=");
lcd.print (Uscita_1_Time_On);
lcd.print ("Sec ");
lcd.setCursor(15,1);
lcd.print ("+");

break;

case 7 :
lcd.setCursor(0, 0);
lcd.print ("Spengo Uscita 1 ");
lcd.setCursor(15, 0);
if (digitalRead(Uscita1) == LOW)lcd.print("*");
lcd.setCursor(0,1);
lcd.print ("- OFF=");
lcd.print (Uscita_1_OFF);
lcd.print ("Watt ");
lcd.setCursor(15,1);
lcd.print ("+");

break;

case 8 :
lcd.setCursor(0, 0);
lcd.print ("Avvio Uscita 2 ");
lcd.setCursor(15, 0);
if (digitalRead(Uscita2) == LOW)lcd.print("*");
lcd.setCursor(0,1);
lcd.print ("- ON=");
lcd.print (Uscita_2_ON);
lcd.print ("Watt ");
lcd.setCursor(15,1);
lcd.print ("+");

break;

case 9 :
lcd.setCursor(0, 0);
lcd.print ("Avvio Uscita 2 ");
lcd.setCursor(15, 0);
if (digitalRead(Uscita2) == LOW)lcd.print("*");
lcd.setCursor(0,1);
lcd.print ("- TEMPO=");
lcd.print (Uscita_2_Time_On);
lcd.print ("Sec ");
lcd.setCursor(15,1);
lcd.print ("+");

break;

case 10 :
lcd.setCursor(0, 0);
lcd.print ("Spengo Uscita 2 ");
lcd.setCursor(15, 0);
if (digitalRead(Uscita2) == LOW)lcd.print("*");
lcd.setCursor(0,1);
lcd.print ("- OFF=");
lcd.print (Uscita_2_OFF);
lcd.print ("Watt ");
lcd.setCursor(15,1);
lcd.print ("+");

break;

case 11 :
lcd.setCursor(0, 0);
lcd.print ("TOT. GSE= ");
lcd.print (PotenzaPro);
lcd.print ("W ");
lcd.setCursor(0,1);
lcd.print ("TOT.EXTRA= ");
lcd.print (PotenzaPro2);
lcd.print ("W ");

break;

}
}
}



Immagine Allegata: Powermeter ricevitore con display_bb.jpg
 
ForumEA/B/Powermeter ricevitore con display_bb.jpg

 

supermomo717
Watt


Gruppo:Utente
Messaggi:68

Stato:



Inviato il: 03/10/2014 13:29:50

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.... :P



Immagine Allegata: Powermeter ricevitore PowerLogger_bb.jpg
 
ForumEA/B/Powermeter ricevitore PowerLogger_bb.jpg

 

supermomo717
Watt


Gruppo:Utente
Messaggi:68

Stato:



Inviato il: 03/10/2014 13:35:32

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!



Immagine Allegata: graf.jpg
 
ForumEA/B/graf.jpg

 

supermomo717
Watt


Gruppo:Utente
Messaggi:68

Stato:



Inviato il: 03/10/2014 14:08:13

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...



Immagine Allegata: PowerDimmer.avi
 
ForumEA/B/PowerDimmer.avi


Scarica allegato

PowerDimmer.avi ( Numero download: 298 )

 
 InizioPagina
 

Pagine: (18)   1   2   3   4   5   6   7   8   9   10   [11]   12   13   14   15   16   17   18    (Ultimo Msg)

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum