CT sensors – Interfacing with an Arduino

To connect up a CT sensor to an Arduino, the output signal from the CT sensor needs to be conditioned so that it meets the input requirements of the Arduino analog inputs:Β aΒ positive voltage between 0V and the ADC reference voltage.

CT sensors - Interfacing with an Arduino

Note: This page give the example of an Arduino board working at 5 V and of the EmonTx working at 3.3 V. Make sure you use the right supply voltage and bias voltage in your calculations that correspond to your setup.

This can be achieved with the following circuit which consists of two main parts:

  1. The CT sensor and burden resistor
  2. The biasing voltage divider (R1 & R2)

Calculating a suitable burden resistor size

If the CT sensor is a current output type such as the YHDCΒ SCT-013-000, the current signal needs to be converted to a voltage signal with a burden resistor. If it is a voltage output CT you can skip this step and miss out the burden resistor as the burden resistor is already built in to the CT.

1) Choose the current range you want to measure

The YHDCΒ SCT-013-000 CT has a current range of 0 to 100 A so for this example let’s choose 100 A as our maximum current.

2) Convert maximum RMS current to peak-current by multiplying by √2.

Primary peak-current = RMS current Γ— √2 = 100 A Γ— 1.414 = 141.4A

3) Divide the peak-current by the number of turns in the CT to give the peak-current in the secondary coil.

TheΒ YHDCΒ SCT-013-000 CT has 2000 turns and so the secondary peak current will be:

Secondary peak-current = Primary peak-current / no. of turns = 141.4 A / 2000 = 0.0707A

4) To maximise measurement resolution the voltage over the burden resistor at peak-current should be the Arduino analog reference voltage (AREF) divided by 2

If you’re using an Arduino running at 5V: AREF / 2 will be 5 V / 2 = 2.5 V and so the ideal burden resistance will be

Ideal burden resistance = (AREF/2) / Secondary peak-current = 2.5 V / 0.0707 A = 35.4 Ξ©

CT sensors - Interfacing with an Arduino35 Ξ© is not a common resistor value we have a choice of 39 Ξ© or 33 Ξ©. Always choose the next smaller value,Β or the maximum load current will create a voltage higher than AREF.Β We recommend going for 33 Ξ© Β±1%. In some cases using 2 resistors in series will be closer to the ideal burden value. The further from ideal the value is, the lower the accuracy will be. In this case, the peak current will results in an analog value of 4.7V (3822 after Analog to digital conversion using a 12bit ADC).

Here are the same calculations as above in a more compact form:

Burden Resistor (ohms) = (AREF * CT TURNS) / (2√2 * max primary current)

Burden resistor sizing forΒ OpenEnergyMonitor energy monitoring hardware.

emonTx V3Β (see guide)

The emonTx V3 uses a 3.3V regulator, so it’s VCCΒ and thereforeΒ AREF, will always be 3.3V regardless of battery voltage. The standard emonTx V3 uses 22Ξ© burden resistors for CT 1, 2 and 3, and a 120Ξ© resistor for CT4, the high sensitivity channel. See the emonTxΒ V3 technical wiki at:Β https://wiki.openenergymonitor.org/index.php?title=EmonTx_V3#Burden_Resistor_Calculations.

emonPiΒ (see guide)

The EmonPi has two CT channels both with 22Ξ© burden resistors.

emonTx V2

If you’re using a battery powered emonTxΒ V2, AREF will start at 3.3 V and slowly decrease as the battery voltage drops to 2.7 V. The ideal burden resistance for the minimum voltage would therefore be:

Ideal burden resistance = (AREF/2) / Secondary peak-current = 1.35V / 0.0707A = 19.1 Ξ©

19 Ξ© is not a common value. We have a choice of 18 or 22 Ξ©. We recommend using an 18 Ξ© Β±1% burden.


Tool for calculating burden resistor size, CT turns and max IrmsΒ (thanks to Tyler Adkisson for building and sharing this).

(Note: this tool does not take into account maximum CT power output. Saturation and distortion will occur if the maximum output is exceeded. Nor does it take into account component tolerances, so the burden resistor value should be decreased by a few (~5) percent allow some “headroom.” There is more info about component tolerances at:Β ACAC Component tolerances.)

Adding a DC Bias

If you were to connect one of the CT wires to ground and measure the voltage of the second wire, relative to ground, the voltage would vary from positive to negative with respect to ground. However, the Arduino analog inputs require aΒ positiveΒ voltage. By connecting the CT lead we connected to ground, to a source at half the supply voltage instead, the CT output voltage will now swing above and below 2.5 V thus remaining positive.

Resistors R1 & R2 in the circuit diagram above are a voltage divider that provides the 2.5 V source (1.65 V for the emonTx). Capacitor C1 has a lowΒ reactanceΒ – a few hundred ohms – and provides a path for the alternating current to bypass the resistor. A value of 10 ΞΌF is suitable.


Choosing a suitable value for resistors R1 & R2

Higher resistance lowers quiescent energy consumption.

We use 10 kΞ© resistors for mains powered monitors. The emonTx uses 470 kΞ© resistors to keep the power consumption to a minimum, as it is intended to run on batteries for several months.

Arduino Sketch

To use the above circuit to measure RMS current, with an assumed fixed RMS voltage (e.g. 240V) to indicate approximate apparent power, use this Arduino sketch:Β Arduino sketch – current only

CT Sensors


In this Chapter:

For more detail: CT sensors – Interfacing with an Arduino

About The Author

Scroll to Top