AC Current Sensor By using ACS712 Hall Effect

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

AC Current Sensor By using ACS712 Hall Effect
รูปที่ 1 แสดงลักษณะการต่อวงจรเพื่อทดลองวัดค่ากระแส

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

AC Current Sensor By using ACS712 Hall Effect
รูปที่ 2 แสดงลักษณะการวัดสัญญาณที่เกิดขึ้นจากฮอร์เอฟเฟกเซนเซอร์

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

AC Current Sensor By using ACS712 Hall Effect
รูปที่ 3 การแสดงข้อความในสถานะวงจรสแตนบาย

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

การทดลองวัดค่ากระแสไฟฟ้าที่จ่ายให้โหลดประมาณ 1.2A และ 2.2A

AC Current Sensor By using ACS712 Hall Effect
รูปที่ 4 แสดงการทดลองเมื่อกระแสไหลผ่านโหลดประมาณ 1.19A
AC Current Sensor By using ACS712 Hall Effect
รูปที่ 5 แสดงสัญญาณที่เกิดขึ้นจากฮอร์เอฟเฟกเซนเซอร์ที่กระแส 1.19A

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

AC Current Sensor By using ACS712 Hall Effect
รูปที่ 6 การแสดงข้อความที่เกิดขึ้นเมื่อกระแสไหลผ่านโหลดประมาณ 1.19A

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

AC Current Sensor By using ACS712 Hall Effect
รูปที่ 7 แสดงการทดลองเมื่อกระแสไหลผ่านโหลดประมาณ 2.36A
AC Current Sensor By using ACS712 Hall Effect
รูปที่ 8 ลักษณะสัญญาณที่เกิดขึ้นจากฮอร์เอฟเฟกเซนเซอร์ที่กระแส 2.36A

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

AC Current Sensor By using ACS712 Hall Effect
รูปที่ 9 การแสดงข้อความที่เกิดขึ้นเมื่อกระแสไหลผ่านโหลดประมาณ 2.36A

สำหรับในรูปที่ 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;
  }

การทดลองป้องกันกระแสเกินด้วยฮอร์เอฟเฟกเซนเซอร์

สำหรับการทดลองป้องกันกระแสเกินด้วยฮอร์เอฟเฟกเซนเซอร์ เราจะทำการปรับปรุงโปรแกรมเพื่อตรวจจับกระแสตามที่เรากำหนดและแสดงผลที่เกิดขึ้นเมื่อเกิดกระแสเกิน โดยในตัวอย่างการทดลองข้างล่างนี้เมื่อเกิดกระแสเกินขึ้นจะแสดงข้อความกระแสเกิน รวมทั้งตัวแอลอีดีจะติดเพื่่อแสดงผลให้เราทราบอีกส่วนหนึ่ง

AC Current Sensor By using ACS712 Hall Effect
รูปที่ 10 แสดงผลการทดลองที่เกิดขึ้นเมื่อกระแสเกิน

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

AC Current Sensor By using ACS712 Hall Effect
รูปที่ 11 โปรแกรมที่ปรับปรุงเพิ่มเติมและการแสดงข้อความเมื่อกระแสเกิน

ในรูปที่ 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;
  }
AC Current Sensor By using ACS712 Hall Effect
รูปที่ 12 ลักษณะของการทดลอง, อุปกรณ์ และเครื่องมือที่ใช้ในการทดลองต่างๆ

สำหรับบทความนี้เป็นการนำฮอร์เอฟเฟกเซนเซอร์ประยุกต์ใช้งาน ซึ่งเป็นตอนต่อเนื่องจากบทความที่ผ่านมา จะเป็นการประยุกต์ในลักษณะการวัดค่ากระแสตรง ทั้งนี้ฮอร์เอฟเฟกเซนเซอร์สามารถหาซื้อได้ง่ายตามร้านค้าออนไลน์ทั่วไป รวมทั้งมีตัวอย่างโค้ดโปรแกรมที่ใช้ร่วมกับบอร์ด Arduino UNO สุดท้ายนี้บทความที่นำเสนอทั้ง 2 ตอนที่ผ่านมา คงจะช่วยให้ผู้อ่านเข้าใจได้ง่ายขึ้น และสามารถนำไปประยุกต์ใช้ในรูปแบบต่างๆ ตามที่ต้องการครับ.

Reference

  1. https://www.allegromicro.com/en/products/sense/current-sensor-ics/zero-to-fifty-amp-integrated-conductor-sensor-ics/acs712
  2. https://www.sparkfun.com/datasheets/BreakoutBoards/0712.pdf
  3. http://www.energiazero.org/arduino_sensori/acs712%2030a%20range%20current%20sensor.pdf
  4. https://github.com/rkoptev/ACS712-arduino
  5. https://www.circuitschools.com/measure-ac-current-by-interfacing-acs712-sensor-with-arduino/
  6. https://github.com/RobTillaart/ACS712