Skip to content
A

Electrical / Current

Interfacing ACS712 Electrical / Current with Arduino Uno

What is the ACS712?

The ACS712 is a Hall-effect based linear current sensor IC that measures AC or DC current by sensing the magnetic field generated as current flows through an internal low-resistance conductor, with the input and output sides fully isolated. It outputs a simple analog voltage proportional to current, centered at half of the supply voltage, making it a popular building block for energy monitors, overcurrent protection circuits, and battery/motor current logging in maker projects.

Specifications

Sensor typeHall-effect linear current sensor with internal galvanic isolation
Operating voltage5 V DC
OutputAnalog voltage centered at Vcc/2 (~2.5V at 5V), scaling up or down with current direction
Current range variants±5A, ±20A, or ±30A, selected by the specific ACS712 part number
Sensitivity185 mV/A (5A version), 100 mV/A (20A version), 66 mV/A (30A version)
Bandwidth80 kHz typical, suitable for both AC and DC current sensing
Internal resistance~1.2 mΩ conductor path, minimal voltage drop and power loss
InterfaceAnalog output — read directly with an ADC / analogRead()

ACS712 Pinout

PinNameDescription
1VCCPower, 5V DC
2GNDGround
3OUTAnalog output voltage, proportional to sensed current
4IP+Current path input terminal — wire in series with the load/source being measured
5IP-Current path output terminal — completes the series current loop

IP+ and IP- carry the actual load current and must be wired in series with the circuit being measured (not in parallel like a voltmeter); VCC/GND/OUT are the separate low-power signal side. Because the output rides on a Vcc/2 offset, most projects calibrate the zero-current reading in software before scaling by the sensitivity constant for their specific part variant.

Setting Up ACS712 with Arduino Uno

Wiring

Component pinArduino Uno pinNote
VCC5V
GNDGND
OUTA0Analog voltage output, centered at ~2.5V with no current flowing
IP+ / IP-In series with the load — not connected to the ArduinoThe current to be measured flows through these two screw terminals, in series with the load's supply wire

Example code

C++

ACS712 comes in 5A, 20A, and 30A variants with different sensitivity constants — check which one you have and update SENSITIVITY accordingly, or every reading will be wrong by a fixed ratio. The 2.5V zero-point drifts slightly per unit; for accurate work, measure your specific module's output with 0A flowing and use that instead of the datasheet value.

Related Guides & Projects