ac current measurement using acs712 hall effect current sensor and Arduino



ac current measurement using acs712 hall effect current sensor and Arduino. In this tutorial, you will learn how to design alternating current measurement system using acs712 hall effect current sensor and Arduino Uno R3. But you can apply same concept to Arduino mega, pic microcontroller, 8051 microcontroller or avr microcontroller. you just need make change in code but the rest of the concept will remain same. In my last tutorial, I have shown how to measure dc current using acs712 current sensor. In that tutorial, I have also explained introduction to acs712 hall effect current sensor, working of current sensor and how to measure current from hall effect sensor.  I will apply same concepts in this article to measure ac current with acs712 hall effect current sensor.  you may also like to read how to measure ac voltage using Arduino.



How to measure ac current with acs712 hall effect current sensor

As I have discussed in my last article, acs712 current sensor converts input current into proportional voltage depending on nature of the input current. If input current is dc, the output voltage of current sensor will be dc also. if input current to current sensor is ac, the output voltage of current sensor will be also alternating voltage. Shape of output voltage depend on the shape of input current. if shape of input current is sine wave, then the shape of output voltage will be also sine wave which is usually happens in case of ac current.  The pin out of hall effect current sensor is given below. pinout of acs712 current sensor



so we will get sine wave at the output of hall effect sensor. So we need a method to measure peak of sine wave and then we can convert this peak voltage back into rms voltage by simply multiplying it with square root of 2 which is the relationship between peak value and rms value of voltage. I have explained it more details in my last article on interfacing of acs712 hall effect current sensor with Arduino. I recommend you to read it first, if you want to understand, how to measure this output voltage and how to convert this output voltage back into current using Arduino.

Ac load interfacing with acs712 hall effect current sensorAC load interfacing with acs712 hall effect current sensor

 

 

ac current measurement using acs712 current sensor and Arduino

Circuit diagram for ac current measurement using acs712 current and Arduino is given below:

ac current measurement USING ARDUINO and hall effect sensor acs712

Code for ac current measurement using acs712 current sensor

// include the library code:
#include <LiquidCrystal.h> //library for LCD
 
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
 
//Measuring Current Using ACS712
 
const int analogchannel = 0; //Connect current sensor with A0 of Arduino
int sensitivity = 185; // use 100 for 20A Module and 66 for 30A Module
float adcvalue= 0;
int offsetvoltage = 2500; 
double Voltage = 0; //voltage measuring
double ecurrent = 0;// Current measuring
 
void setup() {
 //baud rate
 Serial.begin(9600);//baud rate at which arduino communicates with Laptop/PC
 // set up the LCD's number of columns and rows:
 lcd.begin(20, 4); //LCD order
 // Print a message to the LCD.
 lcd.setCursor(1,1);//Setting cursor on LCD
 lcd.print("MICROCONTROLLERSLAB");//Prints on the LCD
 lcd.setCursor(4,2);
 lcd.print(".com");
 delay(3000);//time delay for 3 sec
 lcd.clear();//clearing the LCD display
 lcd.display();//Turning on the display again
 lcd.setCursor(1,0);//setting LCD cursor
 lcd.print("Reading Values from");//prints on LCD
 lcd.setCursor(1,1);
 lcd.print("DC Current Sensor");
 lcd.setCursor(5,2);
 lcd.print("ACS 712");
 delay(2000);//delay for 2 sec
}
 
void loop() //method to run the source code repeatedly
{
 unsigned int temp=0;
 float maxpoint = 0;
 int i=0;
 for(i=0;i<500;i++)
 {
 if(temp = analogRead(analogchannel),temp>maxpoint)
 {
 maxpoint = temp;
 }
 }
 adcvalue = maxpoint; 
 Voltage = (adcvalue / 1024.0) * 5000; // Gets you mV
 ecurrent = ((Voltage - offsetvoltage) / sensitivity);
 ecurrent = ( ecurrent ) / ( sqrt(2) );
//Prints on the serial port
 Serial.print("Raw Value = " ); // prints on the serial monitor
 Serial.print(adcvalue); //prints the results on the serial monitor
 
 lcd.clear();//clears the display of LCD
 delay(1000);//delay of 1 sec
 lcd.display();
 lcd.setCursor(1,0);
 lcd.print("adc Value = ");
 lcd.setCursor(13,0);
 lcd.print(adcvalue);
 
 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
 
 lcd.setCursor(1,1);
 lcd.print("Voltage = ");
 lcd.setCursor(11,1);
 lcd.print(Voltage,3);
 lcd.setCursor(17,1);
 lcd.print("mV");//Unit for the voltages to be measured
 
 Serial.print("\t ecurrent = "); // shows the voltage measured 
 Serial.println(ecurrent,3);// the '3' after voltage allows you to display 3 digits after decimal point
 
 lcd.setCursor(1,2);
 lcd.print("ac Current = ");
 lcd.setCursor(11,2);
 lcd.print(ecurrent,3);
 lcd.setCursor(16,2);
 lcd.print("A"); //unit for the current to be measured
 delay(2500); //delay of 2.5 sec
}

In above code,  I have taken 500 samples of output voltage of current sensor and detect the peak value of sine wave. After detecting peak value of voltage, it is converted back into current using the sensitivity formula given in code.



One Response

  1. chong kah meng November 17, 2017

Add Comment

Subscribe to our blog to get updates in your email

Enter your email address to subscribe to this blog and receive notifications of new posts by email.

Join 1,395 other subscribers