AC Current Sensor By using ACS712 Hall Effect

สำหรับในบทความที่ผ่านมาได้นำเสนอเกี่ยวกับการใช้ฮอร์เอฟเฟกเซนเซอร์ (ACS712 Hall Effect) ในการวัดค่ากระแสไฟฟ้าแบบกระแสตรง (DC Current Sensor By using ACS712 Hall Effect) ไปแล้วนั้น บทความนี้เป็นการวัดค่ากระแสและการตรวจจับกระแสไฟฟ้าแบบกระแสสลับ กันต่อด้วยฮอร์เอฟเฟกเซนเซอร์ตัวเดิม และนำผลของค่ากระแสที่ได้มาแสดงให้ทราบ โดยส่วนหนึ่งเราสามารถนำค่ากระแสที่วัดได้มาป้องกันกระแสเกินในรูปแบบต่างๆ โดยในบทความจะต่อการใช้งานร่วมกับบอร์ดประมวลผล Arduino UNO

รูปที่ 1 แสดงลักษณะการต่อวงจรเพื่อทดลองวัดค่ากระแส โดยการวัดกระแสโหลดเทียบกับแคมป์มิเตอร์และผลที่ได้จากการประมวลผลด้วยบอร์ด Arduino UNO ซึ่งจะส่งข้อความมาแสดงผล และในการทดลองจะใช้ตัวต้านทานเป็นโหลดขนาด 10 โอห์ม 20 วัตต์ 2 ตัว, แหล่งจ่ายไฟฟ้ากระแสสลับประมาณ 24 โวลต์

รูปที่ 2 ลักษณะการวัดสัญญาณที่เกิดขึ้นจากฮอร์เอฟเฟกเซนเซอร์ ที่เกิดขึ้นทางด้านเอาต์พุตเป็นลักษณะสัญญาณอะนาลอก ซึ่งจะทำให้เราเห็นขนาดของสัญญาณที่เกิดขึ้นและความถี่ของแหล่งจ่ายกำลังไฟฟ้า

ในรูปที่ 3 การแสดงข้อความในสถานะวงจรสแตนบาย (Standby mode) โดยจากการทดลองจะมีค่ากระแสแสดงขึ้นเองบ้างเล็กน้อย โดยเราสามารถแก้ไขได้ด้วยการเพิ่มโปรแกรมในการตรวจสอบและให้การแสดงผลเป็นไปอย่างถูกต้อง
การทดลองวัดค่ากระแสไฟฟ้าที่จ่ายให้โหลดประมาณ 1.2A และ 2.2A


ในรูปที่ 5 ลักษณะสัญญาณที่เกิดขึ้นจากฮอร์เอฟเฟกเซนเซอร์ จะมีค่าประมาณ 800mVp-p และความถี่ 50Hz

ในรูปที่ 6 จะเห็นว่าค่าที่ได้จากการทดลองมีค่าใกล้เคียงกับค่าที่วัดได้ ทั้งนี้ในกรณีที่ผลการทดลองมีความผิดพลาดมาก เราสามารถปรับแต่งค่าที่แสดงผลในโปรแกรมเพื่อให้ได้ค่าที่ถูกต้อง สำหรับการทดลองถัดไปจะให้กระแสไหลผ่านโหลดประมาณ 2.36A ดังแสดงในรูปที่ 7


ในรูปที่ 8 ลักษณะสัญญาณที่เกิดขึ้นจากฮอร์เอฟเฟกเซนเซอร์ จะมีค่าประมาณ 1.36Vp-p และความถี่ 50Hz เราจะสังเกตเห็นว่าขนาดแอมปริจูดจะมีค่าเป็นสัดส่วนกับกระแสที่ไหลผ่านฮอร์เอฟเฟกเซนเซอร์

สำหรับในรูปที่ 6 และ 9 นั้นเป็นการทดลองวัดค่ากระแสแบบเบื้องต้น เราจะเห็นลักษณะการแสดงผลที่เกิดขึ้นจากบอร์ดควบคุม Arduino UNO ซึ่งเราสามารถนำค่าที่ได้ไปใช้ประโยชน์ต่างๆ เช่น การบันทึกข้อมูลการใชัพลังงานไฟฟ้า เป็นต้น ในรูปที่ 5 และ 8 เป็นสัญญาณอะนาลอกที่เกิดขึ้นจากฮอร์เอฟเฟกเซนเซอร์
/*
AC current sensor using ACS712 [Lab1]
Source Program : www.circuitschools.com
*/
const int sensorIn = A0; // pin where the OUT pin from sensor is connected on Arduino
int mVperAmp = 185; // this the 5A version of the ACS712 -use 100 for 20A Module and 66 for 30A Module
int Watt = 0;
double Voltage = 0;
double VRMS = 0;
double AmpsRMS = 0;
void setup() {
Serial.begin (9600);
Serial.println ("ACS712 current sensor");
}
void loop() {
Serial.println ("");
Voltage = getVPP();
VRMS = (Voltage/2.0)0.707; //root 2 is 0.707
AmpsRMS = (VRMS950)/mVperAmp; // 950 calibration factor AmpsRMS
Serial.print(AmpsRMS);
Serial.print(" Amps RMS --- ");
Watt = (AmpsRMS*24/1.3); // 1.3 is an empirical calibration factor
Serial.print(Watt);
Serial.print(" W");
}
float getVPP()
{
float result;
int readValue; // value read from the sensor
int maxValue = 0; // store max value here
int minValue = 1024; // store min value here
uint32_t start_time = millis();
while((millis()-start_time) < 1000) //sample for 1 Sec
{
readValue = analogRead(sensorIn);
// see if you have a new maxValue
if (readValue > maxValue) {
/*record the maximum sensor value*/
maxValue = readValue;
}
if (readValue < minValue){
/*record the minimum sensor value*/
minValue = readValue;
}
}
// Subtract min from max
result = (maxValue - minValue);
// Serial.println(result);
if (result < 20) {
result = 0.01;
}
else {
result = ((maxValue - minValue) * 5.0)/1024.0;
}
return result;
}
การทดลองป้องกันกระแสเกินด้วยฮอร์เอฟเฟกเซนเซอร์
สำหรับการทดลองป้องกันกระแสเกินด้วยฮอร์เอฟเฟกเซนเซอร์ เราจะทำการปรับปรุงโปรแกรมเพื่อตรวจจับกระแสตามที่เรากำหนดและแสดงผลที่เกิดขึ้นเมื่อเกิดกระแสเกิน โดยในตัวอย่างการทดลองข้างล่างนี้เมื่อเกิดกระแสเกินขึ้นจะแสดงข้อความกระแสเกิน รวมทั้งตัวแอลอีดีจะติดเพื่่อแสดงผลให้เราทราบอีกส่วนหนึ่ง

ในรูปที่ 10 แสดงผลการทดลองขึ้นเมื่อกระแสเกินมากกว่าค่าที่กำหนด โดยในตัวอย่างโปรแกรมจะกำหนดกระแสเกินไว้ที่ 2A ซึ่งผลจากการทดลองกระแสเกินไปที่ 2.36A และแอลอีดีก็จะติดแสดงผลให้ทราบ

ในรูปที่ 11 จะเห็นว่าส่วนของโปรแกรมที่ปรับปรุงเพิ่มจะแสดงในกรอบสีเขียว โดยจะกำหนดค่ากระแสเกินไว้ที่ 2A และในส่วนกรอบสีแดงจะการแสดงข้อความเมื่อเกิดสถานะกระแสเกินขึ้น สำหรับโปรแกรมด้านล่างนี้จะเป็นโปรแกรมที่ใช้ในการทดลองข้างต้น
/*
AC current sensor using ACS712 [Lab2]
Source Program : www.circuitschools.com
*/
const int sensorIn = A0; // pin where the OUT pin from sensor is connected on Arduino
int mVperAmp = 185; // this the 5A version of the ACS712 -use 100 for 20A Module and 66 for 30A Module
int Watt = 0;
double Voltage = 0;
double VRMS = 0;
double AmpsRMS = 0;
void setup() {
Serial.begin (9600);
Serial.println ("ACS712 current sensor");
pinMode(13,OUTPUT);
digitalWrite(13,LOW);
}
void loop() {
Serial.println ("");
Voltage = getVPP();
VRMS = (Voltage/2.0)0.707; //root 2 is 0.707
AmpsRMS = (VRMS950)/mVperAmp; // 950 calibration factor AmpsRMS
Serial.print(AmpsRMS);
Serial.print(" Amps RMS --- ");
Watt = (AmpsRMS*24/1.3); // 1.3 is an empirical calibration factor
Serial.print(Watt);
Serial.print(" W");
//-------- SET Current Limt ------------
if ( AmpsRMS > 2.0){ // Current Limt 2.0A
digitalWrite(13,HIGH);
Serial.print(" Over Current ");
delay(1000);
}
digitalWrite(13,LOW);
}
float getVPP()
{
float result;
int readValue; // value read from the sensor
int maxValue = 0; // store max value here
int minValue = 1024; // store min value here
uint32_t start_time = millis();
while((millis()-start_time) < 1000) //sample for 1 Sec
{
readValue = analogRead(sensorIn);
// see if you have a new maxValue
if (readValue > maxValue){
/*record the maximum sensor value*/
maxValue = readValue;
}
if (readValue < minValue){
/*record the minimum sensor value*/
minValue = readValue;
}
}
// Subtract min from max
result = (maxValue - minValue);
// Serial.println(result);
if (result < 20) {
result = 0.01;
}
else {
result = ((maxValue - minValue) * 5.0)/1024.0;
}
return result;
}

สำหรับบทความนี้เป็นการนำฮอร์เอฟเฟกเซนเซอร์ประยุกต์ใช้งาน ซึ่งเป็นตอนต่อเนื่องจากบทความที่ผ่านมา จะเป็นการประยุกต์ในลักษณะการวัดค่ากระแสตรง ทั้งนี้ฮอร์เอฟเฟกเซนเซอร์สามารถหาซื้อได้ง่ายตามร้านค้าออนไลน์ทั่วไป รวมทั้งมีตัวอย่างโค้ดโปรแกรมที่ใช้ร่วมกับบอร์ด Arduino UNO สุดท้ายนี้บทความที่นำเสนอทั้ง 2 ตอนที่ผ่านมา คงจะช่วยให้ผู้อ่านเข้าใจได้ง่ายขึ้น และสามารถนำไปประยุกต์ใช้ในรูปแบบต่างๆ ตามที่ต้องการครับ.
Reference
- https://www.allegromicro.com/en/products/sense/current-sensor-ics/zero-to-fifty-amp-integrated-conductor-sensor-ics/acs712
- https://www.sparkfun.com/datasheets/BreakoutBoards/0712.pdf
- http://www.energiazero.org/arduino_sensori/acs712%2030a%20range%20current%20sensor.pdf
- https://github.com/rkoptev/ACS712-arduino
- https://www.circuitschools.com/measure-ac-current-by-interfacing-acs712-sensor-with-arduino/
- https://github.com/RobTillaart/ACS712