📋 Overview
The ACS712 Hall Effect Current Sensor Module is a compact breakout board that lets you measure both AC and DC current using a simple analog voltage output. It's built around the Allegro ACS712 Hall-effect IC, which senses the magnetic field created by current flowing through an internal conductor and converts it into a proportional voltage — without ever making an electrical connection between the current you're measuring and your microcontroller's circuitry.
This makes it a great way to add current monitoring to a project — whether you're tracking how much power a motor is drawing, watching a battery charge or discharge, or building an overcurrent protection circuit — all without needing to modify your existing wiring beyond routing it through the module. This guide covers all three available versions of the module: 5A, 20A, and 30A, which differ only in their measurement range and sensitivity.
⭐ Key Features
- Available in 5A, 20A, or 30A Ranges — pick the version that matches the current levels in your project
- Hall-Effect Sensing — measures current without inserting a resistor into the circuit
- Electrical Isolation — 2.1kV RMS isolation between the current path and your control electronics
- Analog Voltage Output — simple to read with any microcontroller's analog input
- Measures AC or DC — works for both types of current
- Fast Response — 80kHz bandwidth with a 5µs output rise time
📌 Module Pinout
Looking at the board with the 3-pin header on one side and the 2-position screw terminal on the other:
| Pin | Label | Function |
|---|---|---|
| 1 | Vcc | +5V power input |
| 2 | Out | Analog voltage output, proportional to current |
| 3 | Gnd | Ground |
| Screw Terminal | IP+ / IP- | Current path — the wire whose current you want to measure passes through here |
⚠️ Important: With no current flowing, the Out pin sits at approximately 2.5V (half of Vcc), not 0V. Current in one direction raises this voltage, and current in the other direction lowers it. Your sketch needs to subtract this 2.5V midpoint before calculating current. Also note that the three range versions (5A/20A/30A) are factory-set — the sensitivity cannot be changed by the user, so double-check which version you purchased before wiring up your code.

🔌 Wiring the ACS712 Module to Arduino
📦 Parts Needed
- 1× ACS712 Hall Effect Current Sensor Module (this product — 5A, 20A, or 30A)
- 1× Arduino Uno, Nano, or compatible board
- The circuit or load whose current you want to measure
- Jumper wires
Connection Table
| ACS712 Pin | Arduino Pin |
|---|---|
| Vcc | 5V |
| Out | A0 |
| Gnd | GND |
📝 Note: The screw terminals are wired in series with the positive lead of the circuit being measured — current must physically flow through the module for it to detect the magnetic field. You can use any available analog input pin; just update the pin number in your code accordingly.
🚀 Step 1: Reading Current with Arduino
This basic sketch reads the analog output, converts it to a voltage, and calculates the current based on the sensitivity of your specific module variant. Set the mVperAmp value to match the version you purchased: 185 for the 5A module, 100 for the 20A module, or 66 for the 30A module.
/*
* ACS712 Basic Current Reading
* Envistia Mall - Product Support
*
* Reads current from the ACS712 module and prints it
* to the Serial Monitor.
*
* Connections:
* Vcc -> Arduino 5V
* Out -> Arduino A0
* Gnd -> Arduino GND
*/
const int sensorPin = A0;
const float vRef = 5.0; // Arduino supply voltage
const int adcResolution = 1024;
const float mVperAmp = 100; // 185 for 5A, 100 for 20A, 66 for 30A module
const float acsOffset = 2500; // Output at 0A, in millivolts (typically 2500mV)
void setup() {
Serial.begin(9600);
}
void loop() {
int rawValue = analogRead(sensorPin);
float voltage_mV = (rawValue / (float)adcResolution) * vRef * 1000.0;
float current_A = (voltage_mV - acsOffset) / mVperAmp;
Serial.print("Current: ");
Serial.print(current_A, 2);
Serial.println(" A");
delay(500);
}
How to Use:
- Set
mVperAmpto match your module variant (185 / 100 / 66) - Upload the sketch to your Arduino
- Open the Serial Monitor at 9600 baud
- Observe the current reading update as the load current changes
🎯 Common Applications
- Battery Monitoring — track charge and discharge current on battery packs and solar systems
- Motor Current Sensing — monitor motor load or detect stall conditions
- Power Supply Monitoring — log the current draw of a power supply or inverter
- Overcurrent Protection — trigger a shutdown or alert if current exceeds a safe threshold
- Energy Monitors — build DIY power usage meters for appliances and equipment
🛠️ Troubleshooting
| Problem | Possible Cause | Solution |
|---|---|---|
| Reading is always ~2.5V regardless of current | This is normal at 0A — the module's zero point is 2.5V, not 0V | Subtract the 2.5V (2500mV) offset in your code before calculating current |
| Current reads negative when it shouldn't | Current is flowing through the screw terminal in the reverse direction | Swap the IP+ and IP- wires, or simply use the absolute value in your code |
| Readings are noisy or jump around | Electrical noise on the analog line or unstable power supply | Average multiple analog samples together, and add a small capacitor across Vcc/Gnd near the module |
| Readings seem inaccurate at low current | Wrong variant selected in code, or a low-current signal near the resolution limit of a high-range module | Confirm the correct mVperAmp value for your module, or choose a lower-range variant for small currents |
| Module gets warm during use | Operating near or above the module's maximum rated current | Confirm your load current does not exceed the rated range of your module variant |
| No output change at all | Current path not wired in series, or wiring reversed at Vcc/Gnd | Verify the load is wired through the screw terminals in series, and double-check Vcc/Gnd connections |
💡 Tips for Best Results
- Match the variant to your load — using a 30A module to measure a 200mA signal gives you much less resolution than a 5A module would
- Average your readings — take several analog samples and average them to smooth out noise
- Calibrate your zero point — measure the actual output voltage with no current flowing, since it can vary slightly from the nominal 2.5V, and use that measured value in your code instead of a fixed constant
- Use appropriate wire gauge — make sure the wire passing through the screw terminals is rated for the current you're measuring
- Keep it away from other magnetic fields — nearby motors, transformers, or ferrous metal can affect Hall-effect accuracy
- Never exceed the rated range — sustained overcurrent beyond your module's rating can permanently damage the sensor
🏪 Where to Buy
Buy the ACS712 Hall Effect Current Sensor Module at Envistia Mall.
- 📦 Fast US Shipping
- 🔄 Hassle-Free Returns
- 📧 Responsive Customer Support
📚 Resources & Downloads
- Datasheet: Allegro ACS712 Official Datasheet
- Tutorial Reference: How to measure current using Arduino and ACS712 current sensor at EngineersGarage.
This guide is provided by Envistia Mall for educational and technical reference purposes. The manufacturer and Envistia LLC (dba Envistia Mall) are not responsible for any damages or losses resulting from the use of this product. Always follow proper electrical safety practices when working with electronic components. Specifications are based on manufacturer data and are subject to change without notice.