

The ACS712, manufactured by Allegro MicroSystems, is a Hall effect-based linear current sensor designed to measure both AC and DC currents. It provides an analog voltage output proportional to the current flowing through the sensor. The device is widely used in applications requiring current monitoring, such as motor control, power management, and overcurrent protection. Its integrated Hall effect sensor ensures electrical isolation between the current-carrying conductor and the output signal, making it a safe and reliable choice for various systems.








The ACS712 is available in different variants based on the current range it can measure. Below are the key technical details:
| Parameter | Value |
|---|---|
| Manufacturer | Allegro MicroSystems |
| Part Number | ACS712 |
| Current Measurement Range | ±5A, ±20A, ±30A (depending on variant) |
| Supply Voltage (Vcc) | 4.5V to 5.5V |
| Output Voltage Range | 0V to Vcc |
| Sensitivity | 185 mV/A (±5A), 100 mV/A (±20A), 66 mV/A (±30A) |
| Isolation Voltage | 2.1 kV RMS |
| Response Time | 5 µs |
| Operating Temperature Range | -40°C to 85°C |
The ACS712 is typically available in an 8-pin SOIC package. Below is the pinout description:
| Pin Number | Pin Name | Description |
|---|---|---|
| 1 | IP+ | Positive current input terminal (connect to the current-carrying conductor) |
| 2 | IP- | Negative current input terminal (connect to the current-carrying conductor) |
| 3 | NC | Not connected |
| 4 | GND | Ground (connect to circuit ground) |
| 5 | VIOUT | Analog output voltage proportional to the sensed current |
| 6 | NC | Not connected |
| 7 | NC | Not connected |
| 8 | VCC | Supply voltage (4.5V to 5.5V) |
Below is an example of how to interface the ACS712 with an Arduino UNO to measure current:
// Include necessary libraries (if any)
// Define the analog pin connected to the ACS712 output
const int sensorPin = A0;
// Define the sensitivity of the ACS712 (e.g., 185 mV/A for ±5A variant)
const float sensitivity = 0.185; // Sensitivity in V/A
// Define the supply voltage (Vcc)
const float Vcc = 5.0; // Supply voltage in volts
// Define the zero-current voltage (Vcc/2)
const float zeroCurrentVoltage = Vcc / 2;
void setup() {
Serial.begin(9600); // Initialize serial communication
}
void loop() {
// Read the analog value from the sensor
int sensorValue = analogRead(sensorPin);
// Convert the analog value to voltage
float sensorVoltage = (sensorValue / 1023.0) * Vcc;
// Calculate the current in amperes
float current = (sensorVoltage - zeroCurrentVoltage) / sensitivity;
// Print the current value to the Serial Monitor
Serial.print("Current: ");
Serial.print(current);
Serial.println(" A");
delay(1000); // Wait for 1 second before the next reading
}
sensitivity variable based on the ACS712 variant you are using.No Output Signal:
Inaccurate Readings:
Output Voltage Saturation:
High Noise in Output:
Q1: Can the ACS712 measure both AC and DC currents?
Yes, the ACS712 can measure both AC and DC currents. The output voltage varies proportionally with the instantaneous current.
Q2: What happens if the current exceeds the rated range?
Exceeding the rated current range may cause inaccurate readings or damage the sensor. Always use the appropriate variant for your application.
Q3: How do I know which ACS712 variant I have?
The variant is typically marked on the package (e.g., ACS712-05B for ±5A, ACS712-20A for ±20A, etc.).
Q4: Can I use the ACS712 with a 3.3V microcontroller?
Yes, but you must ensure the output voltage range of the ACS712 is compatible with the ADC input range of your microcontroller.