Overview

The ACS712 is a Hall-effect based linear current sensor capable of measuring both AC and DC current. It provides galvanic isolation between the high-current path and the low-voltage output signal, making it safe and reliable for power monitoring applications. The sensor outputs an analog voltage proportional to the measured current, suitable for direct interfacing with microcontrollers.

Technical Specifications

ACS712 Variants Comparison

ACS712-5A ACS712-20A ACS712-30A
Current Range ±20 A ±30 A
Sensitivity 100 mV/A 66 mV/A
Operating Voltage 5 V DC 5 V DC
Zero Current Output 2.5 V 2.5 V
Bandwidth 80 kHz 80 kHz
Response Time 5 µs 5 µs

Key Features

  • Hall-effect based linear current sensing
  • Galvanic isolation up to 2.1 kV RMS
  • Measures both AC and DC current
  • Analog voltage output proportional to current
  • Low noise and high accuracy
  • Fast response time (5 µs)
  • Wide bandwidth up to 80 kHz
  • Integrated overcurrent protection capability

Wiring Diagram

Basic Connection (Arduino Uno)

ACS712 Pin Arduino Pin
VCC 5V
GND GND
OUT Analog Pin A0
IP+ / IP− Load Circuit

Note: The load current must pass through the IP+ and IP− terminals. Do not connect IP pins directly to the Arduino.

Common Applications

Energy Monitoring

Power consumption and load monitoring

Motor Control

Motor current sensing and protection

Battery Management

Charge and discharge current measurement

Power Supplies

Overcurrent detection and load analysis

Quick Info

Difficulty: Beginner
Price Range: ₹70–200
Interface: Analog Output

Sample Code

#define CURRENT_PIN A0
#define SENSITIVITY 185.0   // mV/A for ACS712-5A
#define ZERO_CURRENT 2500.0 // mV at 0 A

void setup() {
  Serial.begin(9600);
  Serial.println("ACS712 Current Sensor");
}

void loop() {
  int sensorValue = analogRead(CURRENT_PIN);
  float voltage = (sensorValue * 5000.0) / 1023.0;
  float current = (voltage - ZERO_CURRENT) / SENSITIVITY;

  Serial.print("Voltage: ");
  Serial.print(voltage);
  Serial.print(" mV | Current: ");
  Serial.print(current);
  Serial.println(" A");

  delay(1000);
}