

The ACS712 Hall Effect Current Sensor, manufactured by Allegro MicroSystems, is a linear current sensor designed to measure both AC and DC currents. It utilizes the Hall effect principle to provide an analog voltage output proportional to the current flowing through its input terminals. The sensor is widely used in applications requiring current monitoring, such as motor control, power management, and overcurrent protection. Its compact design, electrical isolation, and high accuracy make it a popular choice for both industrial and hobbyist projects.








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 |
| Measurement Range | ±5A, ±20A, ±30A (depending on variant) |
| Supply Voltage (Vcc) | 4.5V to 5.5V |
| Output Voltage | Analog (proportional to current) |
| Sensitivity | 185 mV/A (±5A), 100 mV/A (±20A), 66 mV/A (±30A) |
| Bandwidth | 80 kHz |
| Response Time | 5 µs |
| Isolation Voltage | 2.1 kV RMS |
| Operating Temperature Range | -40°C to 85°C |
| Package Type | SOIC-8 |
The ACS712 is typically available in an 8-pin SOIC package. Below is the pinout and description:
| Pin Number | Pin Name | Description |
|---|---|---|
| 1, 2 | IP+ | Current input terminal (positive side of the current path) |
| 3, 4 | IP- | Current input terminal (negative side of the current path) |
| 5 | GND | Ground connection |
| 6 | VIOUT | Analog output voltage proportional to the measured current |
| 7 | FILTER | Optional external capacitor connection to set bandwidth |
| 8 | VCC | Supply voltage (4.5V to 5.5V) |
Below is an example of how to use the ACS712 with an Arduino UNO to measure current:
// Include necessary libraries
const int analogPin = A0; // Connect VIOUT to Arduino analog pin A0
const float sensitivity = 0.185; // Sensitivity in V/A (for ±5A variant)
const float zeroCurrentVoltage = 2.5; // Output voltage at 0A (in volts)
void setup() {
Serial.begin(9600); // Initialize serial communication
}
void loop() {
int sensorValue = analogRead(analogPin); // Read analog value from ACS712
float voltage = sensorValue * (5.0 / 1023.0); // Convert ADC value to voltage
float current = (voltage - zeroCurrentVoltage) / sensitivity;
// Calculate current in Amperes
Serial.print("Current: ");
Serial.print(current, 3); // Print current with 3 decimal places
Serial.println(" A"); // Append unit
delay(1000); // Wait for 1 second before next reading
}
sensitivity value in the code with the appropriate value for your ACS712 variant (e.g., 0.1 for ±20A or 0.066 for ±30A).Incorrect Current Readings:
No Output Signal:
High Noise in Output:
Overheating:
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 is the maximum current the ACS712 can handle?
The maximum current depends on the variant: ±5A, ±20A, or ±30A. Ensure you select the appropriate variant for your application.
Q3: How do I interpret the output voltage?
At zero current, the output voltage is approximately 2.5V. Positive currents increase the voltage above 2.5V, while negative currents decrease it below 2.5V.
Q4: Can I use the ACS712 with a 3.3V microcontroller?
Yes, but you need to ensure the output voltage range of the ACS712 is compatible with the ADC input range of your microcontroller. You may need a voltage divider or level shifter.
Q5: Is the ACS712 suitable for high-frequency current measurements?
The ACS712 has a bandwidth of 80 kHz, making it suitable for most low- to mid-frequency applications. For higher frequencies, consider alternative sensors with higher bandwidth.