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