Home Power Monitor


The purpose of this project was to be able to monitor the power consumption at my house.  In addition to total usage, I wanted to be able to separately monitor & compare usage of major appliances (water heater, heat pump, furnace, etc.).  This would require current transformers on individual circuits.  At $75+ each, most split-core current transformers I could find were too expense in the quantity I wanted.  Fortunately, CR Magnetics released a new product, CR3110-3000.  This split-core is a little too small to monitor the main power lines, but just right for individual circuits.  And they are reasonably priced, under $13 each, allowing me to complete this project for about $160.

Data Collection

The split-core current transformers are clamped around circuit lines in the breaker box.  I have (6) 240V circuits and (8) 120V circuits.  For the 240V circuits, I put one transformer on one leg only (more on this below).  For the 120V circuits, I doubled them up, putting (2) circuits in each transformer.  Thus (10) current transformers where required.  This fit with the 11-channel A/D I wanted to use, leaving one channel for monitoring line voltage.

Each current transformer is connected across a burden resistors, yielding an AC voltage proportional to the AC current.  The value of the burden resistor (100 ohms) was selected according to the CR3110-3000 datasheet so as to keep the transformer in its linear region of operation to 50+ amps.  The AC voltage is then covered to DC via an interface circuit consisting of a precision half-wave rectifier followed by a low-pass filter w/ 8:1 gain (schematic below).  The output is approximately 0-5V DC for 0-50 Amps AC.  A 12-bit A/D results in a resolution of ~.01 amps or 1.5W for 120V circuits, 3W for 240V.  The line voltage is monitored with a similar interface circuit connected to a 8V AC wall transformer instead of a current transformer/burden resistor.  The output of this circuit is approximately 3V DC for 120V AC, with 12-bit resolution of ~.05V.

The DC voltages are fed into the A/D (TLC2543CN) which is interfaced to a 486/66 PC via parallel printer port.  I used a PC (vs PIC or other) because I had an old one on hand and could use its P/S to power the interface circuits.  The 486/66 is plenty fast enough for the task.  A Borland C program running under MS-DOS continuously reads the values from the A/D (approximately 75 times a second).  They are further averaged and scaled (to match hand held meter), and then displayed (though normally this PC is "headless" - ran without monitor or keyboard).  The C program also calculates the power for each circuit, W = V * A.  This is doubled for 240V circuits (more below).  Every 5 seconds, the values are transmitted out the COM1 serial port to my home automation PC, a Pentium III running WinXP.  Here, a Visual Basic program captures the data from the serial port and stores it in an Access database.  The database can then be read from any PC on my home network and used to create graphs/reports.  As I collect enough data, I will compare it against the energy use reported on my electric bill.

Update 12/04/03

Used WATTCP to add ethernet support under MS-DOS to the 486/66 PC.  Data is now also transmitted over the network via UDP, and captured by the home automation PC with winsock instead of through the serial port..

A GIF schematic of the interface circuits is here .
The C program that runs on the 486/66 PC is here .

Interface Pics

fusebox burden

Inside of fuse box - current transformers snapped on individual circuits.  Leads from current transformers terminate at the blocks on either side.  Hard to see are the 100 ohm burden resistors located at the terminal blocks.  These were soldered on to the ends of the transformer leads to insure they don't come off.  A transformer without a burden resistor across it's leads will induce a large voltage and begin arcing to other things - ask me how I know!  Cat 5 cable runs from the terminal blocks to the interface circuitry inside -


The "panel" (piece of particle board) on the left has all the interface circuitry.  Cat 5 cables from fuse box terminate at the 3 PC boards running down the center.  These are the AC to DC voltage converters (4 per board).  AC wall transformer at top/left connects to bottom PC board for AC line voltage monitoring.  PC board on right/center of panel holds the A/D converter and connects to LPT1 of 486/66 PC on the right.  Terminal block above the A/D PC board is connected to the PC's P/S and provides the power for the interface circuits.  On the screen is a display showing raw A/D values, computed current/voltage/watts and some other stuff.  Normally, no screen is connected to this PC.

Note on 240V circuits

Some 240V appliances may draw 120V current from only one 240V leg.  For example, the motor and timer in my clothes dryer are 120V devices and therefore connected to just one of the 240V legs.  The heater is 240V and so connected to both 240V legs.  The result is an imbalance in amount of current drawn on the two 240V legs - the leg with the motor and timer has a 4.25 amp higher current draw then the other leg.  Simply calculating the power as W = (V * 2) * A, where A = current from one leg, would yield a value either too high or too low.  One way to handle this would be to place current transformers on each 240V leg, then calculate and add the 120V power from each leg, W = (V * A1) + (V * A2).  But this would have added more cost, more interface circuits to construct and required an additional A/D circuit.

Instead, I placed the current transformer on the leg with the higher draw.  Since the motor & timer are always on whenever the dryer is running, the "first" 4.25 amps are 120V.  Any additional current is the heater running @ 240V.  So the power calculation for the dryer circuit is -
            if (A< 4.25) W = V * A;     // all current draw is 120V
            else W = (V * 4.25) + ((V * 2) * (A - 4.25));    // first 4.25A 120V, rest is 240V

On one of the 240V furnace circuits, there is a .17 amp continuous drawn on one leg - most likely the result of the 24V AC thermostat P/S being powered by 120V.  This is handled the same as the dryer.

The stove could also have an imbalance in the 240V legs due to the oven light and timer being 120V.  However, there is really no way to know when this 120V draw is occurring. So I ignore this for the stove, and assume all current draw is 240V.

All the other 240V appliances appear to be drawing current equally on both legs.


I have written some Visual Basic programs to graph the power consumption data.

Instantaneous Total Power Graph

Above is the "instantaneous" power consumption.  Updated every 10 seconds.  Spans the previous 1.5 hours.  Numbers between graphs are minutes (right edge is current).  Top graph is total watts (green) and average over previous hour (yellow).  Bottom graph is voltage.  Values in 120 & 240 frames are watts for individual circuits.  Note Amps in lower right is total line (240V).

Instantaneous 120V Power

Above is "instantaneous" power graph for 120V circuits.  Square wave in yellow is fridge cycling.  Microwave produced the yellow spikes @ 30 & 45.  Green spikes are toaster oven.  Drop in yellow @ 40 is computer monitor going to sleep.  Drop in blue @ 47 is water bed heater turning off.  Remaining blue is TV.  Pulses in red between 00 to 07 are lights turning on/off.

Instantaneous 240V Power

Above is "instantaneous" power graph for 240V circuits. Yellow is heat pump.  Green is water heater (looks to have 2 stage heater).  Blue is furnace blower motor.

1 Hour Power Average

Above is an averaged total power graph.  Top graph is watts averaged over previous hour (green) and averaged over previous day (yellow).  Over the last 3 days, the average hour usage has been hovering around 3kWh, or 72kWh per Day.  I can also view graphs for average usage on individual 120V, 240V circuits.

Bottom graph is voltage averaged over previous hour.  Interesting is the regular fluctuation in line voltage, with peak at 9p and dipping overnight.  This snapshot was taken on Sunday, so first two days are weekdays (Thu & Fri) which always seem be mostly flat from 8a-5p.  Weekend days seem to usually have extra peeks in the day, as shown above with the peek at 12p on both Sat & Sun.

I've had some inquires on creating graphs in VB.  So here's is a VB6 sample - Scroll.zip

What's left?

Update - 3/8/03

The Power Monitor has been running for 1 year (since 3/3/02) without any hiccups!  Finally got around to comparing my kWh numbers to that reported by the electric company.  For this I created the following spreadsheet -

Power Usage Spreadsheet

Column C, "kWh Billed", is the power usage from the electric bill for the period in cols. A & B.  Clicking the button "Calc" in cell A1 runs a VBscript that fills in the rest of the columns from my database.  Col. D, "kWh Measured", is my kWh number for the period & Col. E compares it to electric company's.  Cols. F-O displays the average Wh per Day for each circuit - allows comparison of usage between circuits and periods.

Looks like my numbers where 20% high, then this dropped to 14% - interesting as I had not changed anything.  This error may the result of -


If you have comments or suggestions, email me at -

For another residential power monitor, visit http://www.edcheung.com/automa/power.htm

This page has been hit  times. Last updated 12/04/03   Some of my other projects