In simple terms, the power monitor shield provides an AC to DC power source for the Arduino and Ethernet Shield, samples the AC voltage waveform for power factor correction, and uses the current transformers to measure current draw of branch circuits in your home breaker box.
* Connectors for easy integration with clamp on current transformers
* Built in 120VAC to 5VDC switching power supply for powering Arduino and Ethernet Shields
* Monitor up to 5 branch circuits at once, of which up to 3 can be two wire single phase 240VAC
* Power factor correction for power measurements
* Code interfaces with Pachube (now COSM) internet of things for data presentation
* Makes your breaker box a mess
DISCLAIMER: This project requires working with 120 and/or 240VAC, which can kill or seriously injure you if you are not careful. Please be aware of and follow all applicable safety practice, electrical code, and Geneva Convention guidelines.
Step 1: BOM
30A split core clamp on current transformer
100A non-invasive AC current sensor
If you need a larger current transformer for getting around the main house service wires (big thick ones) you can get bigger sensors such as:
Split-Core AC Current Sensor SCT-0750
If you go with a current transformer that does not have a 1/8" phono end connector on it you will also need to source and attach them. You can get these from cutting off old headphones, or from Radio Shack, Ax-man for those distinguished enough to have the means, or elsewhere.
It should be noted that the values for a lot of the resistors below depend on the current sensors and measurement ranges you desire to measure. Read up on the web on current transformers for more information.
Part Value Device Package
B1 HD04-RECTIFIER HD04-RECTIFIER MINIDIP-4
C1 10u C-USC0805 C0805
C2 10u C-USC0805 C0805
C3 10u C-USC0805 C0805
C4 10u C-USC0805 C0805
C5 10u C-USC0805 C0805
C6 10u C-USC0805 C0805
C7 330u CPOL-USE3.5-8 E3,5-8
C9 2200u CPOL-USE5-13 E5-13
D1 SCHOTTKY-DIODE SOD123FL
JP1 PINHD-1X2 1X02
JP2 PINHD-1X2 1X02
JP3 PINHD-1X25MM_TERMINAL 5MM_TERMINAL
JP4 PINHD-1X2 1X02
JP5 PINHD-1X2 1X02
L1 330u L-US6000-XXX-RC 6000-XXXX-RC
R1 10k R-US_M0805 M0805
R2 10k R-US_M0805 M0805
R3 10k R-US_M0805 M0805
R4 10k R-US_M0805 M0805
R5 100 R-US_M0805 M0805
R6 10k R-US_M0805 M0805
R7 10k R-US_M0805 M0805
R8 100 R-US_M0805 M0805
R9 10k R-US_M0805 M0805
R10 10k R-US_M0805 M0805
R11 100 R-US_M0805 M0805
R12 10k R-US_M0805 M0805
R13 10k R-US_M0805 M0805
R14 100 R-US_M0805 M0805
R15 10k R-US_M0805 M0805
R16 10k R-US_M0805 M0805
R17 100 R-US_M0805 M0805
R18 10k R-US_M0805 M0805
R19 10k R-US_M0805 M0805
R20 100 R-US_M0805 M0805
R21 100 R-US_M0805 M0805
R22 100 R-US_M0805 M0805
TR1 EI30-1 EI30-1
U$2 LM2575 LM2575 TO263-5
U$3 AUDIO-JACKSMT SJ-3523-SMT-JACK
U$4 AUDIO-JACKSMT SJ-3523-SMT-JACK
U$5 AUDIO-JACKSMT SJ-3523-SMT-JACK
U$6 AUDIO-JACKSMT SJ-3523-SMT-JACK
U$7 AUDIO-JACKSMT SJ-3523-SMT-JACK
U$8 AUDIO-JACKSMT SJ-3523-SMT-JACK
U$9 AUDIO-JACKSMT SJ-3523-SMT-JACK
U$10 AUDIO-JACKSMT SJ-3523-SMT-JACK
Step 2: Schematic and Board
Step 3: Code
Step 4: Mod the Analog Input Pins
First, on the Ethernet Shield you need to cut the traces from the A0 and A1 analog input pins to their pullup resistors for the SD card. You can do this with a dremel cutoff wheel, a knife, or similar. The newer official ethernet shields (06 or v6 and newer) don't appear to require this mod, so look at your board before cutting it up willy-nilly. A good resource is this atlas of Ethernet Shields. In the attached pictures you can see that for the 05 or v5 Ethernet Shield board you need to cut the traces from A0 on the bottom of the PCB and A1 on the top of the PCB.
Step 5: Mod the Reset Pin
Step 6: Mod the Power Monitor Shield
If only using a single current transformer then leave the pins open (unjumpered) and use the first 1/8" jack (viewed from top, counterclockwise), leaving the second jack open. For example, use only 3a and leave 3b and its associated jumper open. Jacks 4 and 5 are single pole only due to space constraints but you could mod my board layout to allow all 5 measurement circuits to be 2 pole if you wish.
The burden resistors are all set to 100 ohms on the schematic as shown and depending on the current transformers or desired currents measured will need to be altered according to the formulas shown at OpenEnergyMonitor.org. For example, I had to lower the burden resistor to 10 on the large main supply current transformers, 49 on the 100A clamp-on CTs, 60 on the 30A clamp-on CTs run in 2-pole, and left the 30A clamp-on CTs in 1-pole mode as 100 ohms.
Step 7: Install
You will also need an ethernet jack and cable or a long cable from your router/switch to plug into the Ethernet Shield. A wi-fi shield may be a better choice if you can't get a network jack nearby, but I can't provide any help there. Search the net and I'm sure someone has done it.
Now, power up the breaker that your monitoring system is wired to, and hopefully you see the LEDs on the Ethernet Shield light up and no magic smoke. Check your Pachube/Cosm feed to see if you are getting data. You should start seeing data pretty quickly (less than 5 minutes) and updated every minute or so. Use the USB port on the Arduino and your laptop to view serial data from the Arduino to troubleshoot.
With everything working, you will want to calibrate the system. Depending on the circuit being monitored, you should plug in a known load into the circuit and see what the Power Monitor reports to the server. You can do this via the Pachube/Cosm website or the serial output of the Arduino environment using the USB connection. It is easier to use the USB connection to a laptop reading the serial data if you can. I used a resistive load as a calibration measurement, it was a simple single burner hot plate which was a 650W load when on HIGH. I measured the load and power factor using a P3 Kill-a-watt meter and then adjusted the scaling factors in the Arduino code until they matched. Adding a less than unity power factor load to the calibration regimen is a good idea if you can, such as a switching power supply or large motor. The larger the load relative to the peak power of the circuit the more accurate your calibration will be. In the code you should have the burden resistor values updated to your actual configuration (variable is ct_burden), you should have the turns ratio adjusted to your actual CT configuration (variable is ct_turns), you should halve the effective turns ratio for 2-pole branches (for example, put 1000 if using a pair of 2000 turn CTs), and then use the calibration constant to adjust the measurement when calibrating using the ICAL variable.