

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 device is widely used in applications requiring current monitoring, such as motor control, power management, and overcurrent protection. Its compact design, high accuracy, and electrical isolation make it a popular choice for both hobbyists and professionals.








The ACS712 is available in different variants based on the current range. Below are the key specifications:
| 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 (Typ.) | 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 has 8 pins, as described in the table below:
| Pin Number | Pin Name | Description |
|---|---|---|
| 1, 2 | IP+ | Current input terminal (positive side of the load) |
| 3, 4 | IP- | Current input terminal (negative side of the load) |
| 5 | GND | Ground pin |
| 6 | FILTER | External capacitor connection for bandwidth control |
| 7 | VIOUT | Analog output voltage proportional to current |
| 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:
// Define the analog pin connected to the ACS712 output
const int sensorPin = A0;
// Sensitivity of the ACS712 (e.g., 185 mV/A for ±5A variant)
const float sensitivity = 0.185; // in volts per ampere
// Voltage at 0A (VCC/2 for a 5V supply)
const float zeroCurrentVoltage = 2.5; // in volts
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 * (5.0 / 1023.0);
// 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 with the appropriate value for your ACS712 variant (e.g., 0.1 for ±20A or 0.066 for ±30A).No Output Signal:
Inaccurate Readings:
Output Voltage Stuck at VCC/2:
Q: Can the ACS712 measure both AC and DC currents?
A: Yes, the ACS712 can measure both AC and DC currents. The output voltage varies proportionally with the instantaneous current.
Q: How do I select the correct ACS712 variant?
A: Choose a variant based on the maximum current you need to measure. For example, use the ±5A variant for low-current applications and the ±30A variant for high-current applications.
Q: What is the purpose of the FILTER pin?
A: The FILTER pin allows you to connect an external capacitor to control the sensor's bandwidth and reduce noise in the output signal.
Q: Is the ACS712 suitable for high-voltage applications?
A: Yes, the ACS712 provides electrical isolation up to 2.1 kV RMS, making it safe for high-voltage applications.
By following this documentation, you can effectively integrate the ACS712 Current Sensor into your projects and achieve accurate current measurements.