This post shows hot to use a current clamp to measure current and power using an op-amp based rectifier, and A to D and the Raspberry Pi. This is an extract from the e-book on Interfacing the Raspberry Pi to Analogue Signals.
When working with
analogue signals sometimes there is a requirement to measure AC voltages. Up to
now we have only dealt with DC voltages that vary dependent on the input but do
not vary in time. AC signals vary all the time and normally have a frequency
(or a number of frequencies) associated with them.
For example, mains
voltage varies at 50 Hz which means that it varies 50 times a second. Musical
tones vary at hundreds of Hz a siren at thousands of Hz.
The process of
turning an AC signal to a DC signal is known as rectification. For large
signals this can be done with diodes as shown below.
The circuit below
shows a simple rectifier circuit. The diode allows current to flow one way but
not the other. The capacitor charges up to the peak value of the signal coming
in.
While the circuit
here works well for large signals of a few Volts, it can present problems when
measuring small signals of less than 1 V. The diode will not conduct until the
input voltage is more than about 0.5V so this will cause inaccuracies.
The way to overcome
this is to use an Op-amp as shown in the circuit below. This will overcome the
problem with using a diode on its own.
When dealing with
small AC signals, it might be necessary to introduce some amplification before
rectification. The circuit below shows how this can be done. The amplification
is set by the ratio of R1 to R2 and here it is x 10.
The circuit here can
be used to measure the output from a current clamp to work out power
consumption of an appliance. It can also be used to measure the power consumed
in a home if clamped to the main cable going to the distribution board.
A range of
split-core current clamp that can be used for this is shown below. They come in
different current ranges and output 0.33V hen the maximum rated current is
flowing through the cable that it is clamped around.
When measuring the
current flowing into an appliance it is important to clamp around the Live or
Neutral wire. It may be necessary to make a special extension lead as shown
here. Please take care to insulate the wires.
The current clamp
can also be used to measure all the power being consumed in a building. To do
this one has to first locate the main power cable and fuse coming into the
building. The photo below shows a current clamp in place. Please take care when
doing – if in doubt get help from a competent person.
As the maximum
output from the clamp is 0.33V and the range of the ADC is 3.3V we need an
amplification of around 10. The output from the clamp is an AC voltage at 50 Hz
and we need to rectify this signal to a DC before we measure it using the
circuit described earlier.
When we measure the
voltage and work out the current, first we just have to remember to divide by
10 in the software to allow for the x10 gain of the circuit. Then we have to
divide by 1.414 to convert the rectifies peak value to an Root Mean Square
(RMS) value which represents the true ‘average’ value of the current.
The Python code for
working out the current and power is presented below. Here we assume that the
voltage is 240V and multiply the current by this figure to get the power.
#!/usr/bin/env python
# Python code for Measuring
Current and Power using Clamp
# www.sf-innovations.co.uk
import time
import smbus
import math
#********************************************
#I2C addresses
add= 0x4F
bus=smbus.SMBus(1)
#DtoA channel select
ch0= 0x00
ch1= 0x01
ch2= 0x02
ch3= 0x03
def readanalog(add):
#
bus.write_byte_data(add,ch0,0x00)
analog=bus.read_byte(add)
return analog
def writedtoa(add,value):
bus.write_byte_data (add, 0x44, value)
#******************************************
while True:
writedtoa(add,0)
an0= readanalog(add)
an0 = readanalog(add)
print "channel 0 raw AtoD = ",
an0
V = 3.3 * an0 / 256
V = round (V, 3)
print "channel 0 Voltage = ", (V)
Curr = 80 * V/(0.33)
Curr = Curr / 10 #adjust for opamp gain of 10
Curr = Curr / 1.414 #work out RMS from peak value
Curr = round (Curr , 1)
print "Curr (I) = ", Curr
Power = Curr * 240 /1000
Power = round (Power, 1)
print "Power (kW) = ", Power
print "*****"
time.sleep(2)
When executed, this program
measures the power taken by the appliance (or the building) every 2 seconds. A
useful development of this program is to monitor this integrate this over time
and work out the energy consumed. The unit for this is kWhr. This will allow
one to estimate the cost of the electricity consumed as the rate for this is
quoted in pence per kWhr.
Note: Multiplying
the measured current by the assumed voltage only gives an approximation of the
power consumed. IN practice, the voltage and current can be out of phase and
one will need to measure this to get a really accurate value.
No comments:
Post a Comment