Custom power meter
-
I created a power meter based on emoncms. My code does not work quite correctly. When I run not everything is fine, but after reboot gets below the value of information and does not update.
10-12-2014 12:02:57: 0;0;3;0;9;send: 0-0-6-6 s=255,c=3,t=8,pt=1,l=1,st=fail:0
10-12-2014 12:02:56: 0;0;3;0;9;read: 6-6-255 s=255,c=3,t=7,pt=0,l=0:
10-12-2014 12:02:36: 0;0;3;0;9;send: 0-0-6-6 s=255,c=3,t=8,pt=1,l=1,st=fail:0
10-12-2014 12:02:36: 0;0;3;0;9;read: 6-6-255 s=255,c=3,t=7,pt=0,l=0:
10-12-2014 12:02:16: 0;0;3;0;9;send: 0-0-6-6 s=255,c=3,t=8,pt=1,l=1,st=fail:0My sketch:. If i can improve code help me please
// EmonLibrary examples openenergymonitor.org, Licence GNU GPL V3 ***/ #include <SPI.h> #include <MySensor.h> #include "EmonLib.h" // Include Emon Library EnergyMonitor emon1; // Create an instance EnergyMonitor emon2; // Create an instance EnergyMonitor emon3; // Create an instance #define CHILD_ID 0 #define CHILD_ID2 1 #define CHILD_ID3 2 MySensor gw; unsigned long lastSend; unsigned long SEND_FREQUENCY = 20000; // Minimum time between send (in milliseconds). We don't wnat to spam the gateway. MyMessage realPowerMsg(CHILD_ID,V_VAR1); MyMessage apparentPowerMsg(CHILD_ID,V_VAR2); MyMessage powerFActorMsg(CHILD_ID,V_VAR3); MyMessage supplyVoltageMsg(CHILD_ID,V_VAR4); MyMessage IrmsMsg(CHILD_[link text](CHILD_ID,V_VAR5); MyMessage realPowerMsg2(CHILD_ID2,V_VAR1); MyMessage apparentPowerMsg2(CHILD_ID2,V_VAR2); MyMessage powerFActorMsg2(CHILD_ID2,V_VAR3); MyMessage supplyVoltageMsg2(CHILD_ID2,V_VAR4); MyMessage IrmsMsg2(CHILD_ID2,V_VAR5); MyMessage realPowerMsg3(CHILD_ID3,V_VAR1); MyMessage apparentPowerMsg3(CHILD_ID3,V_VAR2); MyMessage powerFActorMsg3(CHILD_ID3,V_VAR3); MyMessage supplyVoltageMsg3(CHILD_ID3,V_VAR4); MyMessage IrmsMsg3(CHILD_ID3,V_VAR5); void setup() { gw.begin(); // Send the sketch version information to the gateway and Controller gw.sendSketchInfo("Energy Meter x 3", "2.0"); // Register this device as power sensor gw.present(CHILD_ID, S_POWER); gw.present(CHILD_ID2, S_POWER); gw.present(CHILD_ID3, S_POWER); emon1.voltage(A3, 116.26, 1.7); // Voltage: input pin, calibration, phase_shift emon1.current(A0, 29.1); // Current: input pin, calibration. emon2.voltage(A4, 116.76, 1.7); // Voltage: input pin, calibration, phase_shift emon2.current(A1, 29.1); // Current: input pin, calibration. emon3.voltage(A5, 116.46, 1.7); // Voltage: input pin, calibration, phase_shift emon3.current(A2, 29.1); // Current: input pin, calibration. } void loop() { gw.process(); unsigned long now = millis(); emon1.calcVI(20,2000); // Calculate all. No.of half wavelengths (crossings), time-out //emon1.serialprint(); // Print out all variables (realpower, apparent power, Vrms, Irms, power factor) emon2.calcVI(20,2000); // Calculate all. No.of half wavelengths (crossings), time-out //emon2.serialprint(); // Print out all variables (realpower, apparent power, Vrms, Irms, power factor) emon3.calcVI(20,2000); // Calculate all. No.of half wavelengths (crossings), time-out //emon3.serialprint(); // Print out all variables (realpower, apparent power, Vrms, Irms, power factor) bool sendTime = now - lastSend > SEND_FREQUENCY; if (sendTime) { float realPower = emon1.realPower; //extract Real Power into variable float apparentPower = emon1.apparentPower; //extract Apparent Power into variable float powerFactor = emon1.powerFactor; //extract Power Factor into Variable float supplyVoltage = emon1.Vrms; //extract Vrms into Variable float Irms = emon1.Irms; //extract Irms into Variable float realPower2 = emon2.realPower; //extract Real Power into variable float apparentPower2 = emon2.apparentPower; //extract Apparent Power into variable float powerFactor2 = emon2.powerFactor; //extract Power Factor into Variable float supplyVoltage2 = emon2.Vrms; //extract Vrms into Variable float Irms2 = emon2.Irms; //extract Irms into Variable float realPower3 = emon3.realPower; //extract Real Power into variable float apparentPower3 = emon3.apparentPower; //extract Apparent Power into variable float powerFactor3 = emon3.powerFactor; //extract Power Factor into Variable float supplyVoltage3 = emon3.Vrms; //extract Vrms into Variable float Irms3 = emon3.Irms; //extract Irms into Variable gw.send(realPowerMsg.set(realPower,1)); gw.send(apparentPowerMsg.set(apparentPower,1)); gw.send(powerFActorMsg.set(powerFactor,1)); gw.send(supplyVoltageMsg.set(supplyVoltage,1)); gw.send(IrmsMsg.set(Irms,1)); gw.send(realPowerMsg2.set(realPower2,1)); gw.send(apparentPowerMsg2.set(apparentPower2,1)); gw.send(powerFActorMsg2.set(powerFactor2,1)); gw.send(supplyVoltageMsg2.set(supplyVoltage2,1)); gw.send(IrmsMsg2.set(Irms2,1)); gw.send(realPowerMsg3.set(realPower3,1)); gw.send(apparentPowerMsg3.set(apparentPower3,1)); gw.send(powerFActorMsg3.set(powerFactor3,1)); gw.send(supplyVoltageMsg3.set(supplyVoltage3,1)); gw.send(IrmsMsg3.set(Irms3,1)); lastSend = now; } } -
Hi, any progress with this? I would be interested in trying to adapt this to my needs. I have just finished setting up the basic arduino sketch from http://openenergymonitor.org/emon/buildingblocks/how-to-build-an-arduino-energy-monitor-measuring-current-only
and i assume this should just work with the sketch you are working on?
-
Hi, any progress with this? I would be interested in trying to adapt this to my needs. I have just finished setting up the basic arduino sketch from http://openenergymonitor.org/emon/buildingblocks/how-to-build-an-arduino-energy-monitor-measuring-current-only
and i assume this should just work with the sketch you are working on?
-
My hardware is on photo. I prepare hardware from emoncms site for 3 phases. My sketh working good so far about 3 weeks. My controler is pidome and send values to emoncms on mys NAS.




-
My hardware is on photo. I prepare hardware from emoncms site for 3 phases. My sketh working good so far about 3 weeks. My controler is pidome and send values to emoncms on mys NAS.




-
Hello,
I've been looking in to this for quite some time. Here in the US, our residential wiring is usually 220V "split-phase" where we have a neutral/ground connection that allows us to get 120V from either "leg" (not to be confused with phase) to "ground". If you go "leg to leg", you'll get the full 220V of the phase.
I've been searching quite a bit and am a little confused so I was hoping that you could expand on your solution a bit. (schematics, part numbers, full sketch) Your efforts look great. I'm wondering how you've integrated in to MySensors (and your controller, Vera?)
In my case, I think that I will need to do the following:
- Have two CT's - one for each leg
- Have two transformers to measure each leg to neutral
- Somehow convert the voltage-measurement transformers in to something Arduino can read (0-5V)
- Convert the current induced by the CTs to a voltage that the Arduino can read
- Do the "V*I" math to calculate power, etc.
Most US based solutions call for only one transformer/leg-measurement. However, I have seen an imbalance in my utility power. I'm not sure if this is due to underground resistance, faulty utility transformers, etc. But my point is, I think it'd be safer to measure both, do my calculations separately, and then add them accordingly (in software) to get total power consumption.
Can you expand a bit on my thoughts? Has anyone in the US been successful in my above approach?
-
@maglo18 how many is your burden resistor ?
If found a blog where he talk about of turn in the sensor, do you know how many is it ?
http://www.homautomation.org/2013/09/17/current-monitoring-with-non-invasive-sensor-and-arduino/ -
Hi @maglo18 i have been using a current only version of emon for quite some time, i am interested in adding the ac-ac transformer to calculate the apparent power more accurately. Do you have a project page for your build with diagrams and specs? What type of transformers are you using (i can just about read it from picture) and how happy are you with the performance?
Thanks Gambituk
-
Hi All,
Did anyone worked with this sensor SCT-013-000 and Openhab? I would like to ask how can I integrate this with Openhab so to be able to display the apparent power consumption in watts, to display the Kwh starting a certain date lets say starting on 12th this month or from today as for example and to display to total Kwh.
@maglo18 where are you from?Any help or suggestion will be kindly appreciated.
Thanks All!
