

The ACS712 Current Sensor, 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 ACS712 is widely used in power management, motor control, overcurrent protection, and energy monitoring systems due to its high accuracy, compact size, and ease of integration.








The ACS712 is available in multiple variants, each with a different current sensing range. Below are the key technical details:
| Parameter | Value |
|---|---|
| Manufacturer | Allegro MicroSystems |
| Part Number | ACS712 |
| Current Sensing Range | ±5A, ±20A, ±30A (depending on variant) |
| Supply Voltage (Vcc) | 4.5V to 5.5V |
| Output Voltage Range | 0V to Vcc |
| Sensitivity (Typ.) | 185 mV/A (±5A), 100 mV/A (±20A), 66 mV/A (±30A) |
| Bandwidth | 80 kHz |
| Response Time | 5 µs |
| 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 | IP+ | Positive current input terminal |
| 2 | IP- | Negative current input terminal |
| 3 | NC | Not connected (leave floating or grounded) |
| 4 | GND | Ground reference for the sensor |
| 5 | VIOUT | Analog output voltage proportional to the sensed current |
| 6 | NC | Not connected (leave floating or grounded) |
| 7 | NC | Not connected (leave floating or grounded) |
| 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) of the ACS712
const float Vcc = 5.0; // Supply voltage in volts
// Define the zero-current output 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 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.Incorrect Output Voltage:
No Output Signal:
Noisy 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 linearly with the current in either direction.
Q2: How do I determine the current direction?
The output voltage will be greater than VCC/2 for positive currents (IP+ to IP-) and less than VCC/2 for negative currents.
Q3: 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.
Q4: Can I use the ACS712 with a 3.3V microcontroller?
Yes, but the output voltage range will be limited. Ensure the microcontroller's ADC can accurately read the sensor's output within this range.
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 medium-frequency applications. For higher frequencies, consider alternative sensors.