| ElettroshockNow
| Inviato il: 8/2/2013,19:33
|
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 Rev 3.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 Rev 3.3
/*Progetto Powermeter Rev3.3
Un sentito ringraziamento al Forum "" Energia Alternativa & Energia Fai Da Te "" http://www.energialternativa.info/
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
| Inviato il: 9/2/2013,08:50
|
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
--------------- Impianto Fotovoltaico "eliafino" in Tempo Reale. http://www.eliafino.it:3000/d/solare/impianto-fotovoltaico-eliafino
| | | | NonSoloBolleDiAcqua
| Inviato il: 9/2/2013,09:04
|
Un lavoro notevole,realizzato in tempi ristrettissimi e documentato in modo eccelso: cosa dire? FENOMENALE!!!!!
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | ElettroshockNow
| Inviato il: 9/2/2013,11:45
|
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 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
| Inviato il: 9/2/2013,13:48
|
CITAZIONE CITAZIONE 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
--------------- Impianto Fotovoltaico "eliafino" in Tempo Reale. http://www.eliafino.it:3000/d/solare/impianto-fotovoltaico-eliafino
| | | | ElettroshockNow
| Inviato il: 9/2/2013,13:57
|
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 ... mi accontento per ora della paginetta internet E lasci il Rasp solo soletto nel cassetto ..
Ciao ElettroshockNow
Modificato da ElettroshockNow - 9/2/2013, 14:54
| | | | eliafino
| Inviato il: 9/2/2013,19:34
|
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.
--------------- Impianto Fotovoltaico "eliafino" in Tempo Reale. http://www.eliafino.it:3000/d/solare/impianto-fotovoltaico-eliafino
| | | | Luca450Mhz
| Inviato il: 11/2/2013,12:58
|
CITAZIONE (eliafino @ 9/2/2013, 19:34) ... 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!
--------------- Pannelli: 6975 Wp (poli e mono). Inverter UPS PSW7 6kW 48V toroidale con switch comandato dal mio sistema di domotica (RaspberryPi + vari Wemos D1 Mini - ESP8266). Regolatore di carica: Mpp Solar PCM8048. Batterie: 24 elementi trazione pesante 315Ah C5 48V.
| | | | eliafino
| Inviato il: 11/2/2013,16:15
|
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
--------------- Impianto Fotovoltaico "eliafino" in Tempo Reale. http://www.eliafino.it:3000/d/solare/impianto-fotovoltaico-eliafino
| | | | Luca450Mhz
| Inviato il: 11/2/2013,16:44
|
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!
--------------- Pannelli: 6975 Wp (poli e mono). Inverter UPS PSW7 6kW 48V toroidale con switch comandato dal mio sistema di domotica (RaspberryPi + vari Wemos D1 Mini - ESP8266). Regolatore di carica: Mpp Solar PCM8048. Batterie: 24 elementi trazione pesante 315Ah C5 48V.
| | | | ElettroshockNow
| Inviato il: 13/2/2013,11:45
|
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' 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() 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
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
| | | | | | | | | | fulroc
| Inviato il: 13/2/2013,20:59
|
CITAZIONE (ElettroshockNow @ 13/2/2013, 12:00) 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
| Inviato il: 13/2/2013,21:01
|
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.
| |
| | |
|
Versione Mobile!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|