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 <div class=spoiler align=center><div class=code_top align=left>
SPOILER (<a href=javascript:spoiler()>clicca per visualizzare)</div><div class=code align=left>#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);
}
} [/quote]
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 <div class=spoiler align=center><div class=code_top align=left>
SPOILER (<a href=javascript:spoiler()>clicca per visualizzare)</div><div class=code align=left>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");
}
}
} [/quote]
Attenzione :Se optate per la grafica "Processing" dovete sostituire sull'Arduino il codice con questo <div class=spoiler align=center><div class=code_top align=left>
SPOILER (<a href=javascript:spoiler()>clicca per visualizzare)</div><div class=code align=left>#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);
}
} [/quote]
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