Arduino Projects

Measure current with Arduino Split Core Current Transformer CT

Arduino Split Core Current Transformer:

 

Measure current with Arduino Split Core Current Transformer CT Clamp Current Sensor Arduino- In this article, you will learn how to measure AC current with Arduino using a Split Core Current Transformer or CT Clamp Current Sensor which I recently got from the DFRobot. Previously, I used the Max471 and ACS712 current sensor modules for measuring the current. I used The Max471 Current sensor for measuring the current of a 12V DC MCPCB LED module and I used the ACS712 current sensor for measuring the AC current as I had to monitor the Load status. With ACS712 Current sensor I was able to monitor whether the load was normal or it was overloaded.

No doubt, the ACS712 Current sensor module is the cheapest while the Gravity Analog AC Current Sensor is a bit expensive costing 19.9 USD dollars. But still, I recommend the Split Core current transformer over the ACS712 and other low-cost AC current sensor modules. Because, if you go with the ACS712 current sensor module then you will have to cut the wires so that you can connect the ACS712 current sensor in series with the load which is quite a time-consuming job, and also there are high chances of getting an electric shock.

While on the other hand, the Split Core Current Transformer eliminates the need to cut wires. Simply clamp the AC transformer probe on the AC line, and then plug the 3.5mm headphone jack into the signal conversion module to read the AC current value. The analog output is designed to be compatible with 3.3V and 5V compatible microcontroller boards. It can be conveniently used for AC current measurement to monitor AC motors, lighting equipment, air compressors, etc. So, using this Split core current transformer with Arduino you can build yourself a smart home energy meter.

For demonstration purposes, I am going to measure the current of 4 lights, I will be connecting one bulb at a time, and then we will see how the load current varies. So, before I am going to explain the technical specifications, circuit diagram, and programming, first let’s watch the Split core current transformer sensor in action.


Altium Designer:

altium designer sponsor

Altium Designer is the world’s most trusted PCB design system. Altium Designer enables engineers to effortlessly connect with every facet of the electronics design process. Over 35 years of innovation and development focused on a truly unified design environment makes it the most widely used PCB design solution. With Altium Designer you can create PCB designs with an intuitive and powerful interface that connects you to every aspect of the electronics design process. Route it your way through any angle, tune for the delay, Push, Slide, and Walkaround faster than ever. Interact and collaborate with mechanical designers like never before in a photo-realistic, 3D design environment. If you want to get started with the Altium designer, you can click on the get started.



Project Working:

Arduino Split Core Current Transformer

While using these low energy zero watts light bulbs, I didn’t see any prominent change in the current, so I decided to use another bulb that slightly draws more current.

Arduino Split Core Current Transformer

Now, you can see the current is around .1A. You may see small fluctuations between .01 and .04 which are negligible.

With this project, you can monitor the AC current, and this way you can build yourself a smart home energy monitor. Anyways, you can read the current value on the display, and only then you can decide if the load under test is drawing less or more current. It seems quite impractical to sit in front of the display. A better way is to program the Arduino in a way that each time the load/current exceeds a pre-defined value it turns on the Buzzer and then you can go ahead and switch off the unnecessary loads. This is what I am going to do next.

I modified the code and also added a 5V buzzer with the Arduino. Let’s say this is my normal load which draws around 0.1A and I am going to assume 0.2A as the maximum load. So, if the load increases above 0.2A, I want the Arduino to turn ON the buzzer. For demonstration purposes, I will use another bulb that draws more current.

Arduino Split Core Current Transformer

So, if I replace any of these bulbs with this one, the buzzer should turn ON, and also the current value on the Oled display should increase.

Arduino Split Core Current Transformer

You can see on the Oled display module, the current increased to 0.22A and also the buzzer was turned ON, for the practical demonstration, you can watch the video tutorial given at the end of this article.

This is simply amazing! Using only a few electronic components, you can build yourself a smart load monitoring system or a home energy monitor. You can further modify this project, instead of turning ON the buzzer you can use a relay to turn OFF the loads. You can also use a GSM module to send an alert message each time the loads exceed a pre-defined value, I will do it in one of my upcoming videos/Articles. Anyways, now you have got an idea of what exactly you are going to learn after reading this article. So, without any further delay, let’s get started!!!


Amazon Links:

Split Core Current Transformer/CT Current Sensor

Arduino

SSD1306 Oled Display Module

5V Buzzer

Other Tools and Components:

Top Arduino Sensors:

Super Starter kit for Beginners

Digital Oscilloscopes

Variable Supply

Digital Multimeter

Soldering iron kits

PCB small portable drill machines

*Please Note: These are affiliate links. I may make a commission if you buy the components through these links. I would appreciate your support in this way!


Split Core Current Transformer working:

Arduino Split Core Current Transformer

Simply clamp the AC transformer probe on the AC line, the current transformer is further connected with the current sensor module which measures the AC current. Now, you might be thinking about how this CT or current transformer measures the current. As you know that when a current is flowing in the wire a magnetic field is created which is proportional to the current flowing in the wire. The Current transformer will transform this current into a small current. This current will go further to the sensor module which will convert this current into a voltage that is given as the input to the controller for further processing. This sensor can measure up to 20A of current flowing through the wire.   This sensor has high-voltage isolation in the circuit design for safety reasons and a non-conductive acrylic plate has been attached to the bottom of the PCB to prevent accidents such as short circuits, electric shocks, and any other potential danger. It is simple to use and easy to connect to all Arduino compatible boards. It is ideal for any automation control application.

It features, Non-contact measurement which offers high safety, offers multiple ranges for various measurement scenarios, and it’s compatible with 3.3V and 5V microcontroller boards, including Arduino boards, ESP32, ESP8266, STM32, etc.

Arduino Split Core Current Transformer

This is the AC Current Signal Conversion Module. The input voltage range is 3.3V to 5 volts. It comes with a 3 pins interface which makes it extremely easy to use. All the 3 pins are clearly labeled. A is the analog voltage output of 0.2 Volts to 2.8 Volts DC. This pin is connected with the Analog pin of the controller board. The + pin is connected with the 3.3 volts or 5 volts. The – pin is connected with the GND. You can see this A letter with AC sign which means it only works with the AC currents.

Arduino Split Core Current Transformer

This is the Open type of AC transformer Probe or the Split core current transformer probe. Its AC Current range is 0 to 20A. Accuracy is ±1%. The frequency range is 50Hz to 1kHz. The working temperature is -25 ℃ to +70 ℃, and it weighs around 50g. Now, let’s take a look at the circuit diagram.


FEATURES

Non-contact measurement, high safety

Multiple ranges for various measurement scenarios

Compatible with 3V3/5V micro-controller

APPLICATIONS

AC motor automatic monitoring

Lighting and electrical equipment measurement

SPECIFICATION

AC Current Signal Conversion Module

Input Voltage (VCC): 3.3V-5.5V

Interface: Gravity Analog (PH2.0-3P,analog voltage output 0.2-2.8V DC)

AC Voltage Input Range: 0-1V (AC RMS)

Relative Error: ±4%

Dimension: 32×27 mm /1.26×1.06 in

Weight: 5g

Open Type AC Transformer Probe

AC Current Range: 0-20A

Signal Output (standard Φ3.5mm 3P plug): 0-1V AC voltage, linear corresponding range 0-20A

Accuracy: ±1%

Non-linearity: ≤±0.2%

Frequency Range: 50Hz ~1kHz

Cable Length: 1m

Working Temperature: -25 ℃~+70 ℃

Opening Size: 13×13 mm / 0.51×0.51 in

Weight: 50g



Arduino Split Core Current Transformer:

Circuit Diagram:

Arduino Split Core Current Transformer

The split core current transformer probe is connected with the AC Current Signal Conversion Module using a 3.5mm headphone jack. The A pin is connected with Arduino’s Analog pin A0. The + and – pins are connected with the Arduino’s 5 volts and GND pins.

The SSD1306 I2C supported Oled display module ground and VCC pins are connected with the Arduino’s GND and 5 volts. The SCL and SDA pins of the Oled display module are connected with the Arduino’s I2C pins A5 and A4. A5 is the SCL and A4 is the SDA.

On the bottom right side, a 5v Buzzer is connected with the Arduino’s pin5. I am using a 2n2222 NPN transistor to control this buzzer.

On the top left side, you can see a regulated 5V power supply based on the 7805 voltage regulator. You can use this power supply to power up your Arduino using a 12 volts adaptor, 3S or 4S Lipo battery pack, or a 12V lead-acid battery, or a solar panel, etc. J1 is the DC female power jack and this is where you can connect your external power supply. Don’t forget to add these 470uF decoupling capacitors with the input and output legs of the 7805 voltage regulator.


Arduino Split Core Current Transformer Programming:

Before, you start the programming, first of all, make sure you download the Adafruit_GFX and Adafruit_SSD1306 libraries. If you face any issues while using the Oled display module then read my article on the Arduino and Oled display modules. As there are many types of Oled display modules, so make sure you know about your Oled display module.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
 
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
 

float Current_Value = 0;

const int ACPin = A0;         //set arduino signal read pin
#define ACTectionRange 20;    //set Non-invasive AC Current Sensor tection range (5A,10A,20A)
#define VREF 5

int Buzzer = 5; 

void setup() {

  Serial.begin(115200);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  pinMode(Buzzer, OUTPUT);
  delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);

}

void loop() {

float current=0;
float current_value = readACCurrentValue();
Serial.print(current_value);
    Serial.println(" A");
    current += current_value;

    if ( current >= .2 )
    {
      digitalWrite(Buzzer, HIGH);
    }

       if ( current < .2 )
    {
      digitalWrite(Buzzer, LOW);
    }
    
    delay(1000);

Serial.print(current);
  Serial.println("Current: ");
  display.clearDisplay();

  display.setTextSize(2);
  display.setCursor(0,0);
  display.print("Current:");


  display.setTextSize(3);
  display.setCursor(0, 28);
  display.print(current);

  display.setTextSize(1);
  display.setCursor(0, 56);
  display.print("electroniclinic.com");
 
display.display(); 
}
float readACCurrentValue()
{
  float ACCurrtntValue = 0;
  float peakVoltage = 0;
  float voltageVirtualValue = 0;  //Vrms
  for (int i = 0; i < 5; i++)
  {
    peakVoltage += analogRead(ACPin);   //read peak voltage
    delay(1);
  }
  peakVoltage = peakVoltage / 5;
  voltageVirtualValue = peakVoltage * 0.707;    //change the peak voltage to the Virtual Value of voltage

  /*The circuit is amplified by 2 times, so it is divided by 2.*/
  voltageVirtualValue = (voltageVirtualValue / 1024 * VREF ) / 2;

  ACCurrtntValue = voltageVirtualValue * ACTectionRange;

  return ACCurrtntValue;
}

The purpose of this code is to measure the AC current and to turn ON and turn OFF the buzzer when the current increases or decreases below .2A and it also displays the current value on the Oled display module.


Watch Video Tutorial:

 

 

Engr Fahad

My name is Shahzada Fahad and I am an Electrical Engineer. I have been doing Job in UAE as a site engineer in an Electrical Construction Company. Currently, I am running my own YouTube channel "Electronic Clinic", and managing this Website. My Hobbies are * Watching Movies * Music * Martial Arts * Photography * Travelling * Make Sketches and so on...

One Comment

  1. what is the purpose of using /2 in this line. voltageVirtualValue = (voltageVirtualValue / 1024 * VREF ) / 2;
    if we use /2 the voltage will decrease right. please let me know exact reason for using /2 option.

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button