Arduino ACS712 Current Sensor

The ACS712 is a very easy to use bi-directional current sensor. It comes in 5, 20, and 30 amp versions, and there’s only one line of code that needs to be changed depending on which unit you have. This sensor outputs a small voltage that increases with current flowing through the sensor. It isolates the current being monitored from the Arduino, so there’s no risk to the Arduino. Most breakout boards come with the needed resistors and caps already installed, so physical hookup consists of +5vdc, gnd, and analog out to one of the Arduino analog inputs. The polarity sensitive current sense pins connect in series with one of the power wires to the device being monitored (either production, or consumption).

Become the Maker you were born to be. Try Arduino Academy for FREE!

In the picture above, looking at the lower right image, the left terminal is the more positive terminal, and the right terminal is the more negative terminal. If you reverse these, you will see negative current readings when you expect positive current readings.

Alternative method, using a shunt!

Parts needed:
Arduino UNO
ACS712 5a (20a, or 30a options)

ACS712 Datasheet

Code:

/*
Measuring Current Using ACS712
*/
const int analogIn = A0;
int mVperAmp = 185; // use 185 for 5A Module, 100 for 20A Module and 66 for 30A Module
int RawValue= 0;
int ACSoffset = 2500; 
double Voltage = 0;
double Amps = 0;

void setup(){
Serial.begin(9600);
}

void loop(){

RawValue = analogRead(analogIn);
Voltage = (RawValue / 1023.0) * 5000; // Gets you mV
Amps = ((Voltage – ACSoffset) / mVperAmp);

Serial.print(“Raw Value = “ ); // shows pre-scaled value
Serial.print(RawValue);
Serial.print(“t mV = “); // shows the voltage measured
Serial.print(Voltage,3); // the ‘3’ after voltage allows you to display 3 digits after decimal point
Serial.print(“t Amps = “); // shows the voltage measured
Serial.println(Amps,3); // the ‘3’ after voltage allows you to display 3 digits after decimal point
delay(2500);

}

Become the Maker you were born to be. Try Arduino Academy for FREE!


Additional reading:
http://henrysbench.capnfatz.com/henrys-bench/acs712-current-sensor-user-manual/
Subscribe
Notify of
guest
9 Comments
Joel e E Hobbs
Joel e E Hobbs
2 years ago

New to Arduino but not PLC’s…I would like to use an Arduino ACS712 to monitor current output for a motor.. The result I would like to achieve is if current out of range then** turn off start signal to VFD.
Step 1: Receive input from external source to start VFD in forward direction.
Step 2: If current out of range stop drive input.
Step 3:Then wait 10 seconds. Then send drive signal to output from Arduino to opposite direction input of VFD.
If current to high in this direction stop input to VFD, pause 10 seconds and repeat.
LOgic: If after three attempts motor current is too high;
Step 1: send out put to be used as an external input for alarm mode.
If all is ok set pin High to start motor.

Cooltoad
9 years ago

Hi may i know how to get the AC offset value? If my AC sensor module is a 20A moudle, i have to change the mVperAmp=100; ??
If so will the Acoffset value have to be changed too?

Steve Spence
9 years ago

The offset value is VCC/2 regardless of which module you use. With a 5v input, the offset is 5/2 = 2.5, which is 2500 millivolts.

Unknown
9 years ago

what will be the output of the program?

aizat zaki
9 years ago

can this code measure ac voltage?

Tshering Kiden Lachungpa

CAN THIS CODE MEASURE DC CURRENT?

Steve Spence
8 years ago

Yes. That's exactly what it measures.

Steve Spence
8 years ago

adc value, mv, and amps.

Archives

9
0
Would love your thoughts, please comment.x
()
x