You can use a current-transformer (CT) sensor with an Arduino to measure AC current, but do not normally connect the sensor straight to an analog pin. A current-output CT needs a burden resistor; the AC waveform also needs a DC midpoint bias so it stays within the Arduino’s input range. Then the Arduino samples the waveform and calculates its RMS value. The exact circuit depends on the CT’s model suffix and the board’s ADC reference.
Safety first: A current-output CT must not be left open-circuit while current flows through its primary. Keep its burden connected, and de-energize equipment before changing the wiring. A clamp-on CT avoids cutting the conductor, but does not make work inside a mains panel safe.
Identify the CT model before wiring it
“SCT-013” is a family of sensors, not one interchangeable part. Check the exact suffix and datasheet: it determines the current range, whether the output is current or voltage, and whether a burden resistor is already inside the sensor. OpenEnergyMonitor’s CT interface guide distinguishes current-output models such as the SCT-013-000 from voltage-output variants.
| CT type | What the output means | External burden | What to check |
|---|---|---|---|
| Current-output; example: SCT-013-000 | Secondary current proportional to primary AC current. OpenEnergyMonitor describes this example as a 0–100 A CT with about a 2,000:1 turns ratio. | Required. Select it for the CT ratio, current range and ADC headroom. | Confirm the exact model and ratio; keep the burden connected whenever primary current may flow. |
| Voltage-output; some SCT-013 variants | Voltage output, commonly specified for a particular current range. | Usually already built in; do not add another unless the exact manufacturer specification calls for it. | Verify the suffix, built-in burden and rated output voltage in the exact model’s documentation. |
If you cannot establish which type you have, do not guess at the wiring. A current-output CT without a burden is not equivalent to a voltage-output sensor.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problems#1 Best Overall
- Name: ACS712 current sensor module, current sensor chip: ACS712ELC-05B.
- Pin 5V power supply, built-in power indicator.
- Accuracy range:The module can measure 5A positive and negative current, which corresponds to 185mV/A analog output; IP = 0 A, that is, when no detection current flows, the output voltage is VCC/2.
- Applications: Laster detection and management in the area of electric motors and over -current error protection in the area of switching power supplies and various electronic products.
- Reminder:ACS712 is based on the principle of Hall detection, try to avoid the influence of magnetic fields when using it.
What a CT measures—and why it needs signal conditioning
A current transformer senses the changing magnetic field around a conductor. The conductor acts as its primary winding and the clamp contains a secondary winding. A split-core CT can measure AC current without cutting the wire and provides galvanic isolation between the conductor and its secondary circuit when correctly installed. It does not measure DC current or line voltage. Accuracy depends on the sensor, load, frequency, burden, installation and calibration; performance can deteriorate at low currents or near saturation. See OpenEnergyMonitor’s CT introduction.
The CT produces an AC signal that swings both above and below its reference. A single-supply Arduino analog input cannot read a negative voltage, so the circuit shifts that signal to sit around a DC midpoint. The analog pin then sees a waveform centered near half the ADC reference rather than one centered at zero. Software removes that midpoint and calculates RMS.
Clamp around one conductor only
Clamp the CT around just one current-carrying conductor: for example, the hot/live wire, or the neutral if that is the conductor you intend to measure. Do not clamp it around an intact two-wire cord containing both. In a normal circuit, hot and neutral currents flow in opposite directions, so their magnetic fields largely cancel and the reading can be close to zero. Use an appropriately rated split-core clamp and do not expose or separate mains conductors unless the work is safe and within your competence.
Rank #2
- Name: ACS712 current sensor module, current sensor chip: ACS712ELC-20A.
- PIN 5V power supply, integrated operating display.
- Accuracy area: The module can measure a positive and negative current of 20 A, which corresponds to an analog output of 185 mv/a; IP = 0 A, that is, if no detection current flows, the output voltage is VCC/2.
- Applications: Laster detection and management in the area of electric motors and over -current error protection in the area of switching power supplies and various electronic products.
- Memory: ACS712 is based on the principle of Hall recognition, try to avoid the influence of magnetic fields if you use it.
Safety rules for a CT and mains wiring
- Never open-circuit a current-output CT under load. If the burden is omitted, disconnected or unplugged while current flows through the primary, the secondary can develop a dangerously high voltage. Keep the burden permanently connected or use a CT with an integrated burden/protection network. OpenEnergyMonitor explains this hazard in its CT safety guidance.
- Use a split-core clamp so the conductor does not need to be cut or disconnected. Keep the CT secondary electrically separate from mains conductors.
- De-energize equipment before changing the clamp or wiring. Do not handle exposed mains conductors or use an exposed breadboard for mains wiring.
- Use enclosures, connectors, insulation, strain relief and protection appropriate to the installation. A CT’s isolation does not certify the complete assembly as safe.
- For breaker-panel work, use a qualified electrician. Do not treat a hobby Arduino circuit as a certified meter or a permanent electrical-installation product.
Build a midpoint-biased input for a 5 V Arduino
The following is a conceptual single-ended circuit for a current-output CT. It assumes an Arduino ADC referenced to its 5 V supply. The burden is placed across the two CT leads; one side of that pair is tied to the bias midpoint and the other goes to A0. This makes A0’s AC waveform swing around the midpoint. The bias divider and capacitor stabilize that midpoint. Verify the actual board’s input limits and ADC reference before using the circuit.
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now → Rbias1 Rbias2
5 V ───────────////───┬────────────////─── GND
│
Vbias (about 2.5 V)
│
├──────||────── GND
│ capacitor
│
CT lead 1 ───────────────┘
│
├────── Rburden ─────┐
│ │
CT lead 2 ───────────────┴────────────── A0
In this arrangement, the burden is connected directly across the CT leads, and one end of that pair shares the bias node. The signal at A0 is the other end. Do not combine this with a different “one-sided” input circuit without checking its complete schematic: the CT, burden and bias connections must work together.
For a 5 V ADC reference, the nominal midpoint is about 2.5 V. For a 3.3 V reference, it is about 1.65 V. Use a matching bias supply and keep the full waveform—including peaks and component tolerances—within the ADC’s permitted input range. OpenEnergyMonitor documents related bias configurations and explains why the bias must match the board in its Arduino CT interface guide.
Rank #3
- 【Perfect Combination】Using this product can measure both voltage and current, very suitable for DIY electronic design projects.
- 【Current Sensor Module】Chip: ACS712ELC-30A; Pin 5V power supply, on-board power indicator; The module can measure positive and negative current of 30 amperes, corresponding to analog output of 66mV/A.
- 【Voltage Sensor Module】Voltage input range: DC0-25V; Voltage detection range: DC0.02445V-25V; Voltage Analog Resolution: 0.00489V; DC input connector: Terminal cathode connected to VCC, GND negative pole; Output interface: "+" then 5/3.3V, "-" then GND, "s" then the for Arduino AD pins.
- 【Package Included】2 x ACS712 Hall Effect Current Sensor Module + 2 x Voltage Sensor Module DC0-25V Voltage Tester Terminal Sensor
OpenEnergyMonitor gives 33 Ω as an example burden for a 5 V setup and 18 Ω for a 3.3 V example; those are examples, not universal values. Its energy-monitor guide and current-only guide describe these arrangements. The resistor must suit your sensor, maximum expected current, ADC range and required headroom.
Calculate the burden resistor
For a current-output CT, first estimate the peak secondary current at the maximum primary RMS current:
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →Isecondary_peak = Iprimary_RMS × √2 ÷ turns_ratio
Rburden = desired_secondary_peak_voltage ÷ Isecondary_peak
For the SCT-013-000 example, assume 100 A RMS maximum primary current, a 2,000:1 turns ratio and a 5 V ADC reference. Targeting approximately 2.5 V peak across the CT secondary gives:
Rank #4
- INA219 I2C IIC Bi-Directional DC Current Power Supply Sensor Breakout Module Power Monitoring Senso
- Low power : 350 μa (typical)
- Single-supply operation: 1.8 v to 3.6 v
- The high-precision products combine the advantages of 12-bit resolution. This module can be sensed bus voltage range is 0 V to +26 V.
- Used for I2C port zero drift / bidirectional current / power monitoring sensor module
Isecondary_peak = 100 × 1.414 ÷ 2000 ≈ 0.0707 A
Rburden = 2.5 ÷ 0.0707 ≈ 35.4 Ω
A 33 Ω burden is a commonly used practical value for this 5 V example, as in the cited OpenEnergyMonitor interface guidance. It is not a guarantee of suitability for every board, CT or installation. Check the sensor’s intended range, resistor power rating and peak voltage. A smaller burden gives more voltage headroom but a smaller signal; a larger burden improves signal amplitude but raises the risk of CT saturation, waveform distortion and ADC clipping. OpenEnergyMonitor’s SCT-013-000 test report discusses saturation and distortion.
Wire and test the circuit in a safe order
- Read the exact CT suffix and specification. Establish whether the output is current or voltage, its range and ratio, and whether a burden is built in.
- For a current-output CT, connect the selected burden across its output first. Do not energize the measured conductor with the CT secondary open. For a voltage-output CT, follow that model’s documentation instead of adding a second burden by default.
- Build the bias network with the measured circuit de-energized. Use equal divider resistors and the bias capacitor in the topology shown, with values suited to your board and signal circuit.
- Power the Arduino and measure the bias node. It should be near half the board’s ADC reference: about 2.5 V for a 5 V reference or 1.65 V for a 3.3 V reference.
- Connect the CT/burden pair to the bias node and A0 as shown. Check the wiring and confirm the current-output CT remains loaded.
- Upload an RMS-reading sketch and inspect raw samples. With no measured current, raw readings near the ADC midpoint can be normal; look for a waveform around the midpoint when AC current flows.
- Test with a known, low-risk load and calibrate. Compare against a trusted reference and check for noise, clipping and plausible scaling before considering a permanent installation.
Sample the waveform and calculate RMS current
A single analogRead() cannot determine AC RMS current. The sketch below collects one sample window, computes the mean offset from those same samples, removes that offset, and calculates the RMS voltage at A0. The example uses a nominal 5 V ADC reference and 10-bit counts (0–1023), as on a standard Uno-style ADC configuration; change those assumptions to match your board and configuration. It reports the RMS voltage across the burden, not amperes.
#include <math.h>
const int CT_PIN = A0;
const float ADC_REFERENCE = 5.0; // Match the actual ADC reference
const float ADC_MAX_COUNTS = 1023.0; // For a 10-bit ADC
const unsigned long WINDOW_US = 200000; // 200 ms
void setup() {
Serial.begin(115200);
}
void loop() {
const unsigned long start = micros();
double sum = 0.0;
double sumSquares = 0.0;
unsigned long samples = 0;
while ((unsigned long)(micros() - start) < WINDOW_US) {
const int raw = analogRead(CT_PIN);
sum += raw;
sumSquares += (double)raw * raw;
samples++;
}
if (samples > 0) {
const double offset = sum / samples;
const double variance = (sumSquares / samples) - (offset * offset);
const double rmsCounts = sqrt(variance > 0.0 ? variance : 0.0);
const double rmsVolts = rmsCounts * ADC_REFERENCE / ADC_MAX_COUNTS;
Serial.print("Burden RMS voltage: ");
Serial.println(rmsVolts, 4);
}
delay(300);
}
This is a useful starting point, not a precision meter. The 200 ms window spans several cycles at common 50 Hz and 60 Hz mains frequencies, but results also depend on sampling behavior, signal shape and timing. For a more complete implementation, OpenEnergyMonitor’s EmonLib supports waveform sampling, offset removal, RMS calculations and calibration for supported circuits. Its current-only example uses emon1.current(1, 111.1); the second argument is a calibration constant specific to the CT, burden, ADC reference and wiring, not a universal setting. See the current-only Arduino example.
Best Value
- ZMCT103C 5A AC Current Sensor Current Transformer Module
- 5A can be measured within an alternating current, the analog output corresponding to 5A/5mA
- On-board micro-precision current transformer and sampling resistor
- Single Phase Active Analog Signal Output with OP Amp
Convert RMS voltage to amperes and calibrate
Once the software has removed the DC bias, the RMS voltage across a current-output CT’s burden converts to primary current as follows:
Isecondary_RMS = Vburden_RMS ÷ Rburden
Iprimary_RMS = Isecondary_RMS × turns_ratio
Iprimary_RMS = Vburden_RMS × turns_ratio ÷ Rburden
Use the actual burden resistance and CT ratio. Do not include the DC bias voltage in the RMS signal value. For a voltage-output CT, use the exact model’s voltage/current relationship instead of applying the current-output formula unchanged.
- Put the clamp around one conductor carrying a known load. A resistive load is a useful calibration starting point.
- Compare the Arduino’s reading with a trusted clamp meter or other suitable reference.
- Adjust the software calibration factor to agree at that operating point.
- Repeat at low, medium and high current across the range you expect to measure.
- Inspect the waveform for clipping and check for nonlinearity. If the reading departs from the reference as current rises, investigate saturation, the burden value and the ADC range rather than compensating for clipped samples in software.
One-point calibration may not reveal low-current noise, resistor tolerance, CT behavior at higher currents or distortion. OpenEnergyMonitor’s current-only guide describes calibration, while its SCT-013-000 report documents sensor behavior under test.
Current, apparent power and real power are different
A current-only circuit measures RMS current. If you multiply it by an assumed nominal mains voltage, you get an estimate of apparent power in volt-amperes (VA), not necessarily real power in watts. For example, using a nominal 120 V supply gives VA ≈ IRMS × 120; actual voltage may differ, and the result remains an estimate.
Real power is the average of instantaneous voltage multiplied by instantaneous current: P = average(v(t) × i(t)). Measuring it accurately requires sampling the AC voltage and current waveforms and accounting for their relative phase. Motors, LED drivers, switch-mode supplies, dimmers and other nonlinear or reactive loads can draw current that makes the current-times-nominal-voltage estimate differ from real watts. Energy in kWh likewise requires real-power measurement accumulated over time. OpenEnergyMonitor explains the distinction in its current-only monitor guide and voltage-and-current energy-monitor guide.
Troubleshoot common CT-to-Arduino symptoms
| Symptom | Likely causes and checks |
|---|---|
| Current reading stays at zero | Check that the clamp surrounds one conductor rather than both; confirm the measured load is on; verify the CT type, burden wiring, bias node and A0 connection. |
| Raw ADC sits near half-scale with no load | This can be normal: the bias holds the input near half the reference. Remove the offset before calculating AC RMS current. |
| Reading is noisy at low current | Possible causes include ADC resolution, interference, long unshielded leads, unstable bias or current below the circuit’s useful resolution. Try multiple-cycle sampling and averaging, inspect the bias, and calibrate across the intended range. OpenEnergyMonitor discusses low-current resolution in its CT documentation. |
| Waveform reaches the ADC rails or current jumps at high load | The burden may be too large, the bias may be wrong, the CT may be overloaded or saturated, or the signal may exceed the ADC range. Reduce the burden if appropriate, select a range suited to the load and inspect the waveform; do not scale clipped readings as if they were valid. |
| Unexpectedly high voltage appears at the CT output | Suspect an open or disconnected secondary on a current-output CT while primary current flows. Restore a suitable burden only after making the situation safe; never disconnect the burden under load. |
| Reading is about twice or half the expected value | Check the exact CT ratio and type, burden value, calibration constant and whether software confuses peak and RMS values. Also check for an unusual conductor arrangement through the clamp. |
| RMS current is negative | RMS current should be nonnegative. Check offset removal, squaring and scaling. A signed result can occur in instantaneous current or real-power calculations, where polarity and phase carry meaning. |
| Works on a lamp but not as expected on a motor | Motor startup current, distorted waveforms or a current range beyond the CT/ADC design can affect readings. Size the circuit for the expected peaks and do not infer real watts from current alone. |
Choose an interface that matches the project
| Option | Best suited to | Trade-off |
|---|---|---|
| Bare current-output CT | A known measurement range and a builder who can select the burden and analog conditioning. | Flexible, but requires more circuit design and careful protection against an open secondary. |
| Voltage-output CT | Simpler interfacing when the exact model’s internal burden and output rating are verified. | Less flexible because the built-in burden fixes the voltage/current relationship; the output still needs suitable ADC biasing. |
| CT interface board or energy-monitoring shield | A repeatable circuit, multiple channels, or a more complete protected input than a breadboard build. | Check the interface’s CT compatibility, isolation, connectors and board voltage. OpenEnergyMonitor documents CT input hardware and monitoring options at its CT sensor documentation hub. |
| Hall-effect current sensor | DC current, bidirectional current, or situations where a CT cannot be placed around a single conductor. | Can measure DC, but performance, offset drift, supply needs and isolation depend on the specific device. |
| Dedicated energy-monitoring IC or isolated meter | Projects needing real power, power factor, reactive power, energy accumulation or safety-certified measurement. | More specialized than a hobby Arduino circuit; choose equipment appropriate to the installation and applicable requirements. |
Match the CT’s current range to the load: a high-range CT may be convenient for a large circuit but offer poor practical resolution for a small appliance. For long-term or panel installations, a documented purpose-built monitoring system is preferable to an exposed breadboard experiment. An Arduino-plus-CT hobby circuit is not a certified utility meter.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

