Skip to content
Arduino library for ACS712 current sensor
Branch: master
Clone or download
Latest commit 0f426a6 Sep 11, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
examples Minor changes to getCurrentAC() method Feb 11, 2018
img Corrected README for ESP8266 Apr 5, 2018
src Bug fix with default arguments Apr 5, 2018
.gitignore .gitignore added Apr 29, 2018
.travis.yml Travis CI added Apr 29, 2018
LICENSE Create LICENSE Jan 21, 2018 Update Jun 7, 2018
keywords.txt Source code moved to /src directory Apr 22, 2017
library.json Update library.json Sep 11, 2018

ACS712 Build Status

An Arduino library to interact with the ACS712 Hall effect-based linear analog current sensor. Includes DC and RMS AC current measuring. Supports ACS712-05B, ACS712-20A, ACS712-30A sensors. Typical applications include motor control, load detection and management, switch mode power supplies, and overcurrent fault protection.

For more information see the datasheet:

The accuracy of the analog sensors in conjunction with the low resolution of built-in Arduino ADC hardly allows you to accurately measure the current. So, this sensor is not suitable for precise measurements, but it will be useful in cases where you need to detect the presence of current and approximately estimate its amount. For more accurate measurements, I recommend using digital sensors such as Adafruit INA219.



alt arduino


In order to use the sensor with the ESP8266, you definitely need to take care of two things:

  1. You need a 5V power for the sensor (the ESP works on 3.3V), or you can use Vin pin if you powering board with USB.
  2. ESP8266's ADC input works in range 0-1 Volts, it means you need to use voltage divider to convert 0-5V range from sensor to 0-1V (Note that NodeMCU already has built-in voltage divider for 3.3V input, you need to take care about that and add additional resistors or solder wire directly to ESP analog input pin). alt esp8266



ACS712( ACS712_type type, uint8_t _pin )

Constructor has two parameters: sensor model and analog input to which it is connected. Supported models: ACS712_05B, ACS712_20A, ACS712_30A

float getCurrentDC()

This method reads the value from the current sensor and returns it.

float getCurrentAC( uint16_t frequency )

This method allows you to measure AC voltage. Frequency is measured in Hz. By default frequency is set to 50 Hz. Method use the Root Mean Square technique for the measurement. The measurement itself takes time of one full period (1second / frequency). RMS method allow us to measure complex signals different from the perfect sine wave.

int calibrate()

This method reads the current value of the sensor and sets it as a reference point of measurement, and then returns this value. By default, this parameter is equal to half of the maximum value on analog input - 512; however, sometimes this value may vary. It depends on the individual sensor, power issues etc… It is better to execute this method at the beginning of each program. Note that when performing this method, no current must flow through the sensor, and since this is not always possible - there is the following method:

void setZeroPoint( int _zero )

This method sets the obtained value as a zero point for measurements. You can use the previous method once, in order to find out zero point of your sensor and then use this method in your code to set starting point without reading sensor.

You can’t perform that action at this time.