Household energy consumption could be the highest contributor in one's carbon footprint.  By measuring how much energy we consume each day we may be able to adjust our usage patterns to save.  There are several ways to measure household energy, both invasive and non-invasive methods.  In this project, the focus will be on non-invasive method, specifically using a split core type current transformer sensor to create a power meter.  Hall-effect is another type of non-invasive method, such as using the ACS712 chip, which will be blogged another time.


(Current transformer) CT sensors are used to measure alternating current.  As any transformer, it has a primary winding, a magnetic core and secondary winding.  Split-type CTs can be clamped around the supply line of an electrical load to tell how much current is flowing through it.  It does this by acting as an inductor and responding to the magnetic field around the current carrying conductor.  In this case the primary will be the live or neutral wire (not both) and passed through the hole of the CT sensor.  The secondary is made up of multiple fine wires enclosed inside the transformer.  By reading the amount of current being produced by the coil, we can then calculate how much current is passing through the conductor. 

The CT sensor used in this project is a current output type and for this data to be useful, the induced current needs to be converted to voltage using a burden resistor.  This specific sensor has the following characteristics: 30A nominal, 60A maximum rated primary current and 2000 turns ratio.


The blog post in this link has a good explanation in the circuit design process and will be used as a guideline in designing a power meter for Texas Instrument's CC3200 Launchpad XL.



First, we need to know the maximum measurable peak current as:

Imax_measured = √2 * Imax_rms = √2 * (60A) = 84.8528 A

The current at the output would be proportional to the turns ratio, 1:2000.

Isensor = Imax_measured / no_of_turns = 84.8528 / 2000 = 0.04243A


The CC3200 ADC recommended maximum input level should be less than 1.45V, thus 1.4V will be used in this instance.  For maximum measurement resolution, the maximum voltage at the burden resistor will be half the maximum ADC input level.


Vburden = Vadc_max / 2 = 1.4V / 2 = 0.7 V


Given voltage and current values, we can derive the value for the burden resistor as:


Rburden = Vburden / Isensor = 0.7V / 0.04243A = 16.49 Ω


The ideal burden resistor is 16.49Ω, we will use the standard 16.5Ω value for this specific application.  We now have a basic circuit as shown in figure below.  Simulation was ran through Texas Intruments' TINA-TI Spice based program.


Remember that the voltage signal across the burden resistor is still AC (see right image above), and the ADC is not capable of measuring negative voltage.  So we have to add this AC voltage by 0.7V to make the voltage measurable between 0 and 1.4V.  This can be achieved by adding a clamping circuit as shown below.  The resistor values where calculated using the voltage divider equation to achieve 0.7V across R2 set at 10kΩ.


This completes the electronic design part of the power meter.

For the software, we will be porting EmonLib an Arduino Library from to a more portable C library.  Using the ported library, we can calculate the apparent power.  With the apparent power now known we can average the samples over a period of a second to resolve energy in Watt-sec which will determine the carbon footprint usage where 1KWh = 1.52 lbs CO2 (estimated EPA).  Snippet below.


static float aveS = 0;          // average apparent power
static uint32 n = 0;
float Irms = EmonC_CalculateIrms(1480);
float S = Irms * VAC_MAINS;    // S - apparent power, VAC_MAINS 230Vac

WEIGHTED_AVE(&aveS, &n);

  float co2 = CONVERT_TO_KWH(aveS) * 1.52f;
  DEBUG_LOG("co2: %3.2f\r\n", co2);
  ReportCO2(co2);          // send data to central hub  
  newSecond = false;



Attached partially ported energy monitor library.  Only RMS current calculation is ported atm as there is no hardware support for VI calculation for this project.

Update 2:

Its just now that I was able to verify this feature.  After some calibration and including the power factor (set at 50%), I got the power usage close enough to match a power meter.  There is a bit of difference but I guess that is caused by the resolution of calculation and that the meter would probably be calculating the actual power factor as well.  Anyways, I think its good enough for now.



Next posts will be about the enclosure, installation and actual testing.


Current monitoring with non-invasive sensor and arduino | Homautomation

How to build an arduino energy monitor - measuring current only | OpenEnergyMonitor

1 kilowatt-hour · BlueSkyModel