About
In this post, I will show you the contactless clamp power meter I made. I used a readily available SCT-013 current transformer clamp.
The great thing about this is that you can measure the current flowing through a wire without having to put an amp meter in series with the load and source. This means you also don’t have to expose yourself to a potentially dangerous voltage.
The downside of using what is essentially a transformer is that we can’t measure DC this way. If you want to make a contactless measurement for DC you have to use a clamp with a magnetic field strength(hall-effect) sensor.
Another downside of this method is that we can’t measure the actual voltage. We can only assume that the voltage is constant. In my case, I plan to use this for measuring mains power so I have hardcoded the voltage to be 230V. If the actual grid voltage is a bit higher/lower the calculated power will also be a bit higher/lower the the actual power. I should also mention that only apparent power can be measured this way as we don’t know about any potential phase shift between the voltage and current.
Hardware used:
- #adAmazon LinkCT Clamp
- #adAmazon LinkLiPo Charger Circuit
- #adAmazon LinkLiPo Battery
- #adAmazon LinkArduino Nano
- #adAmazon LinkSSD1306 OLED Display
Hardware
Code
//Include libraries
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "EmonLib.h"
//Uncomment to enable debug serial print.
//#define DEBUG
//Put pin number of SCK into constructor.
Adafruit_SSD1306 display(4);
//Create energy monitopr instance
EnergyMonitor emon;
void setup() {
//Initialize display by providing the diplay type and it's I2C address.
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
#ifdef DEBUG
Serial.begin(9600);
#endif
//Set the text size and color.
display.setTextSize(1);
display.setTextColor(WHITE);
display.setRotation(2);
//current(input pin, calibration)
emon.current(1, 111.1);
}
void loop() {
//Clear previous image.
display.clearDisplay();
double current = emon.calcIrms(1480);
double power = current*230.0; //Adjust to the votage you will be measuring.
display.setCursor(0,5);
display.print("Current:");
display.setCursor(0,15);
display.print((String)current+"A");
display.setCursor(70,5);
display.print("Power:");
display.setCursor(70,15);
display.print((String)power+"W");
#ifdef DEBUG
Serial.print("Current: ");
Serial.print(current);
Serial.print("A");
Serial.println("");
Serial.print("Power: ");
Serial.print(power);
Serial.print("W");
Serial.println("");
#endif
//delay(1000);
//Display changes if any were made.
display.display();
delay(1);
}





