Sensor – SCT013 – Current sensor
The SCT013 series are sensors of non-invasive, current transformers that measure the intensity of a current that crosses a conductor without needing to cut or modify the conductor itself. We can use these sensors with a processor, like Arduino, to measure the intensity or power consumed by a load.
The SCT013 sensors are current transformers, instrumentation devices that provide a measurement proportional to the intensity that a circuit crosses. The measurement is made by electromagnetic induction.
SCT013 sensors have a split core (like a clamp) that allows the user to turn it on to wrap electrical equipment without having to cut it off.
In the SCT013 series there are models that provide the measurement as a current or a voltage output. It is more preferable to use voltage output because the connection is simpler.
The sensor accuracy can be off by only 1-2%. To ensure highest accuracy, it is critical to confirm that the core has been properly closed. Even a small air gap can cause a 10% deviation.
As a disadvantage, being an inductive load, the SCT013 introduces a variation of the phase angle, whose value is a function of the load that passes through it, being that it is able to reach up to 3º.
Current transformers are common components in the industrial world as well as in electrical distribution, as they allow the points of consumption to be monitored, whereas another form of measurement does not exist. They are also considered multiple measurement instruments, even in portable equipment such as perimeter clamps or network analyzers.
For example, in our electronics and home automation projects, we can use the SCT013 current sensors to measure the electrical consumption of a device, check the status of an electrical installation, and to record the consumption of electricity in home energy monitors. an installation or even access through the internet in real time.
The most common model is SCT013-000, of which the maximum current is 100A, the current output is 50mA (100A:50mA), the maximum current of SCT-013-030 is 30A (30A/1V), and the voltage output is 1V.
Finally, while it is important to have a wide range of measurements, it is important to bear in mind that a higher intensity model will result in less precision. An intensity of 30A to 230V corresponds to a load of 6,900W, which is enough for most home users.
How does the SCT013 work?
The SCT013 sensors are small current transformers, or CTs. Current transformers are instruments widely used for measuring elements.
A current transformer is similar to a voltage transformer and is based on the same operating principles (in fact, they were previously identical). However, they have different objectives and, as a result, are designed and constructed differently.
A current transformer seeks to generate an intensity in the secondary that is proportional to the intensity that passes through the primary. For this, it is desired that the primary is formed by a reduced number of turns.
We can use the current transformer to build non-intrusive current sensors. In the current sensor, the ferromagnetic core can be separated so that the conductor can be opened and rolled up.
So, we have a transformer, it is:
- The cable through which the current to be measured is the primary winding
- The “clamp” is the magnetic core.
- The secondary winding is integrated as part of the probe.
When the alternating current circulates through the conductor, a magnetic flux is generated in the ferromagnetic core, which in turn generates an electrical current in the secondary winding.
The intensity transformation ratio depends on the relationship between the number of turns:
The primary is usually formed by a single loop made by the conductor to be measured. Although, it is possible to wind the driver making this happen more than once inside the “clamp”. The number of turns of the secondary, integrated in the probe, varies from 1000-2000, according to the models of the SCT013.
Unlike voltage transformers, in a current transformer, the secondary circuit should never be opened, because induced currents could damage the component. For this reason, the sensors of SCT13 have protections: resistance burden in the sensors of output by voltage, or diodes of protection in the sensors of exit by the current.
To understand the connection of the sensor SCT013, we have to understand and solve three problems:
* Sensor output in intensity
* Adjustment of the voltage range
* Positive and negative stress
SENSOR OUTPUT IN INTENSITY
The SCT013 are current transformers, that is, the measurement is obtained as an intensity signal proportional to the current flowing through the cable,. Processors, however, are only capable of measuring voltages.
This problem is easy to solve. To convert the output in intensity into a voltage output, we only have to include a resistance (load resistance).
With the exception of model SCT013-100, all other SCT013 models have an internal load resistance so that the output is a voltage signal of 1V. This is why it will not be a concern to worry about.
Only in the case of SCT013-100, there is no resistance internal burden, so the output is a signal of ± 50mA. A resistance of 33Ω in parallel with the sensor will suffice.
Positive and Negative Tensions
Another problem we have to solve is that we are measuring alternating current, and the intensity induced in the secondary is alternating. After passing through the resistance burden, whether internal or external, the voltage output is also alternating.
However, as we know, the analog inputs of the majority of processed currents, including Arduino, can only measure positive voltages.
To measure the voltage at the transformer output, we have several options, ordered here from least to most recommended:
- Rectify the signal through a diode bridge, and measure the wave as positive values. Not advisable given that we lose information as to whether we are in the negative or positive half-period, and because we will have the voltage drop of the diode, and, even worse, the diode does not drive below a voltage meaning the signal will be distorted at the junctions by zero.
- Add an offset in DC by using two resistors and a capacitor that provide a midpoint between GND and Vcc. Much better if we also add an operational amplifier as a voltage follower.
- Add an ADC with differential input, which allows measurements of positive and negative voltages, such as the ADS1115. This is the option that we are going to use.
Voltage Range Adaptation
The last problem is the need to adapt the range of voltages at the sensor output. Arduino can only perform measurements between 0 and Vcc. In addition, the smaller the range, the greater loss of accuracy, so we should adapt to this range.
On the other hand, we must remember that when it comes to AC voltage, RMS values are usually used. Briefly review the peak voltage and peak-to-peak equations:
Therefore, for a sensor with an output of ±1V RMS, the peak voltage is ±1.414V and the
In the case of the SCT013-100, the output will be ±50mA. With an external load resistance of 33Ω, the output voltage is ±1.65V RMS, so the peak voltage is ±2.33V and the peak-to-peak voltage is 4.66V.
For the measurement, it is important that we use only one wire in the “clamp” If we use multiple conductors (two conductors for a single-phase installation and three for a three-phase installation), the role of the conductor will be abolished. This produces a zero inductance, and therefore produces an empty measurement.
The SCT013 sensor has a Jack 3.5 connector, which is very common in the audio field but is not sufficient to use in our electronic projects. To be able to connect it, we must cut off the cable or get a female connector off our welding cable. Fortunately, these terminals are easy to get, but do not rule out cutting off the cables.
This guide details how to build a simple energy monitor on a breadboard that can be used to measure how much electrical energy you use in your home. It measures current, but uses an assumed fixed value for voltage (230V, if you’re in the UK) and calculates apparent power. Although not as accurate as a monitor that measures voltage as well as current, it is a method commonly used in commercially available whole house energy monitors for reasons of simplicity and cost.
Here’s how to build it:
You will need:
1 x Arduino
Current sensing electronics
1 x CT sensor YHDC SCT-013-000
1 x Burden resistor 18 Ohms if supply voltage is 3.3V, or 33 Ohms if supply voltage is 5V
2 x 10k Ohm resistors (or any equal value resistor pair up to 470k Ohm)
1 x 10uF capacitor
A breadboard and some single core wire.
The monitor consists of the current sensor (which produces a signal proportional to the mains current) and the sensor electronics that convert the signal into a form the Arduino can use.
Assemble the components per the diagram.
The sketch is the software that runs on the Arduino. The Arduino converts the raw data from its analog input into human readable values, then sends them to the serial port monitor.
a) Download EmonLib from github and place it in your Arduino libraries folder.
b) Upload the “current only” example:
// Include Emon Library
// Create an instance
emon1.current(1, 111.1); // Current: input pin, calibration.
double Irms = emon1.calcIrms(1480); // Calculate Irms only
Serial.print(Irms*230.0); // Apparent power
Serial.println(Irms); // Irms
c) Open the Arduino serial window
You should now see two columns of values. Apparent power on the left, RMS current on the right.
Arduino with ADS1115
We already have all the components to measure the network intensity with an SCT-013 sensor. We will use a sensor with voltage output ± 1V RMS and internal burden resistance, together, with an ADC like the ADS1115 in differential mode.
Adjusting the gain of the ADS1115 to 2.048V will place it within the range of ± 1.414V. In the case of a 30A sensor we will have an accuracy of 1.87mA, and 6.25 mA for a 100A sensor.
If you use an SCT013-100 with an output of ± 50mA, we will have to add an external load resistor of 33Ω and raise the gain of the ADS1115 to 4.096V to comply with the range of ± 2.33
The connection, seen from Arduino, would only be the power supply of the ADS1115 module as we saw in the entry on the ADS1115.
If you don’t want to use an external ADC, you can also use a more traditional solution that adds a circuit that allows us to add a center offset.
From now on, we will assume that you use an Arduino with Vcc 5V. If you use another processor or an Arduino model with another Vcc (for example, 3.3V), you should correct the part accordingly.
When we added a 2.5V DC offset point, the final range was 1.08V to 3.92V, with Arduino powered at 5V over the analog input range.
When using the SCT013-100 with ±50mA output, we must add a 33 ohm external load resistor. The final range will be from 0.17V to 0.483V, which is also 5V within the Arduino’s analog input range.
Assembly with ADS1115
If you use a component with SCT013 with ±1V RMS output and ADS1115, the required code is similar to the code we see in the input to the ADS1115. You need to consult the Adafruit library for ADS1115.
In order to sample the ADS1115 at a higher speed, we need to modify the file, ‘Adafruit_ADS1015.h’.
With this modification, we will be able to reduce the sampling time from about 8-9 milliseconds (about 100 hertz) to about 1.8 milliseconds (about 500 hertz). As we leave the Nyquist frequency, we improve the measurement behavior.
To connect a CT sensor to an Arduino, the output signal from the CT sensor needs to be conditioned so it meets the input requirements of the Arduino analog inputs, i.e. a positive voltage between 0V and the ADC reference voltage.
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:
- The CT sensor and burden resistor
- 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 leave out the burden resistor, as the burden resistor is built into 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. 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, 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 across the burden resistor at peak-current should be equal to one-half of the Arduino analog reference voltage. (AREF / 2)
If you’re using an Arduino running at 5V: AREF / 2 will be 2.5 Volts. So the ideal burden resistance will be:
Ideal burden resistance = (AREF/2) / Secondary peak-current = 2.5 V / 0.0707 A = 35.4 Ω
35 Ω is not a common resistor value. The nearest values either side of 35 Ω are 39 and 33 Ω. Always choose the smaller value, or the maximum load current will create a voltage higher than AREF. We recommend a 33 Ω ±1% burden. 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.
Here are the same calculations as above in a more compact form:
<strong>Burden Resistor (ohms) = (AREF * CT TURNS) / (2√2 * max primary current)</strong>
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 = <strong>19.1 Ω</strong>
19 Ω is not a common value. We have a choice of 18 or 22 Ω. We recommend using an 18 Ω ±1% burden.
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
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.)
2) 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.
- PIR sensor.fzpz 7,50 kb