DC Current Sensor By using ACS712 Hall Effect

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

DC Current Sensor By using ACS712 Hall Effect
รูปที่ 1 แสดงการประยุกต์ใช้งานของไอซีฮอร์เอฟเฟกเซนเซอร์ [Picture by Ref.1]

รูปที่ 1 การประยุกต์ใช้งานของไอซีฮอร์เอฟเฟกเซนเซอร์ เราสามารถต่อวงจรได้หลายรูปแบบ โดยในรูปที่ 1 นี้จะแสดงลักษณะการต่อการใช้งานเบื้องต้น ลักษณะการนำอุปกรณ์ภายนอกเพื่อให้ไอซีพร้อมใช้งานทั่วไป

DC Current Sensor By using ACS712 Hall Effect
รูปที่ 2 แสดงบล็อกไดอะแกรมของฮอร์เอฟเฟกเซนเซอร์ [Picture by Ref.1]

รูปที่ 2 แสดงบล็อกไดอะแกรมของฮอร์เอฟเฟกเซนเซอร์ ช่วยให้เราเข้าใจโครงสร้างภายในของตัวไอซี ซึ่งจะช่วยให้เราสามารถปรับแต่งวงจรได้ตามที่เราต้องการ

DC Current Sensor By using ACS712 Hall Effect
ตารางที่ 1 แสดงค่าแรงดันเอาต์พุตที่เกิดขึ้นจากสเปกของไอซีแต่ละเบอร์ [Picture by Ref.1]

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

DC Current Sensor By using ACS712 Hall Effect
รูปที่ 3 แสดงลักษณะตัวถังของไอซี [Picture by Ref.1]
DC Current Sensor By using ACS712 Hall Effect
ตารางที่ 2 แสดงฟังก์ชั่นการใช้งานของแต่ขา [Picture by Ref.1]

รูปที่ 3 และตารางที่ 2 แสดงลักษณะตัวถังของไอซี และตำแหน่งขาต่างๆ ช่วยให้เราออกแบบวงจรได้อย่างถูกต้อง รวมทั้งเข้าใจฟังก์ชันการใช้งานของแต่ขา

DC Current Sensor By using ACS712 Hall Effect
รูปที่ 4 กราฟแสดงความสัมพันธ์ระหว่างกระแสที่ไหลผ่านและเอาต์พุตที่เกิดขึ้น [Picture by Ref.1]

ในรูปที่ 4 กราฟแสดงความสัมพันธ์ระหว่างกระแสที่ไหลผ่านไอซีและค่าแรงดันเอาต์พุตที่เกิดขึ้น โดยในตัวอย่างจะเป็นไอซีเบอร์ ACS712ELCTR-05B ซึ่งจะให้ค่าแรงดันเอาต์พุตสูงสุดและต่ำสุดช่วง 1.5V-3.5V และไอซีเบอร์อื่นๆ เราสามารถดูในกราฟลักษณะเดียวกันเพื่อให้เราใช้งานได้อย่างถูกต้อง

การอ่านค่ากระแสไฟฟ้าด้วยบอร์ด Arduino UNO

สำหรับการทดลองที่ 1 นี้เราจะทดลองวัดค่ากระแสที่เกิดขึ้นจากเหล็กฮอร์เอฟเฟกเซนเซอร์ โดยใช้ตัวอย่างโค้ดโปรแกรมจากอ้างอิงที่ 3 (Code Porgram Ref[3]) สำหรับในกรณีที่เราต้องการหาค่ากระแสทั่วไปที่เกิดขึ้นกับโหลดและใช้งานปกติ

DC Current Sensor By using ACS712 Hall Effect
รูปที่ 5 การแสดงข้อความขณะวงจรยังไม่จ่ายกระแสให้กับโหลด
DC Current Sensor By using ACS712 Hall Effect
รูปที่ 6 การทดลองให้วงจรจ่ายกระแสที่ประมาณ 600mA
DC Current Sensor By using ACS712 Hall Effect
รูปที่ 7 การแสดงผลเมื่อวงจรจ่ายกระแสให้กับโหลดที่ประมาณ 600mA
DC Current Sensor By using ACS712 Hall Effect
รูปที่ 8 การทดลองให้วงจรจ่ายกระแสที่ประมาณ 1.2A
DC Current Sensor By using ACS712 Hall Effect
รูปที่ 9 การแสดงผลเมื่อวงจรจ่ายกระแสให้กับโหลดที่ประมาณ 1.2A

จากผลการทดลองทั้ง 2 ครั้งจะเห็นว่า เราสามารถวัดกระแสที่ไหลผ่านโหลด โดยกำหนดให้กระแสไหลระหว่างขา 1 ขา 2 ไปยังขา 3 และขา 4 โดยในทิศทางนี้จะทำให้กระแสเป็นบวก และเราสามารถนำผลที่ได้นี้ไปบันทึกหรือใช้ในข้อมูลที่เราต้องการ สำหรับในส่วนโปรแกรมด้านล่างจะใช้ในการทดลองอ่านค่ากระแสไฟฟ้าด้วย Arduino UNO

/*
   Measuring DC Current Using ACS712
   Code Program by : http://www.energiazero.org/arduino_sensori/acs712%2030a%20range%20current%20sensor.pdf 
 */

 const int analogIn = A0;
 int mVperAmp = 185;    // use 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 / 1024.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,2);
 // the '3' after voltage allows you to display 3 digits after decimal point
 Serial.print("\t Amps = ");       // shows the voltage measured
 Serial.println(Amps,2); 
 // the '3' after voltage allows you to display 3 digits after decimal point
 delay(1000);
 }

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

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

DC Current Sensor By using ACS712 Hall Effect
รูปที่ 10 เพิ่มคำสั่งเมื่อมีกระแสเกิน 1.2A จะให้แอลอีดีติดและแสดงข้อความ Over Current ให้ทราบ
DC Current Sensor By using ACS712 Hall Effect
รูปที่ 11 ต่อแอลอีดีที่บอร์ดเพิ่มขึ้นเพื่อแสดงผล
DC Current Sensor By using ACS712 Hall Effect
รูปที่ 12 แอลอีดีจะแสดงผลให้ทราบเมื่อกระแสเกิน
DC Current Sensor By using ACS712 Hall Effect
รูปที่ 13 การแสดงข้อความกระแสเกินขึ้นเมื่อกระแสเกิน

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

/*
   Measuring DC Current Using ACS712
   Code Program by : http://www.energiazero.org/arduino_sensori/acs712%2030a%20range%20current%20sensor.pdf 
 */
 const int analogIn = A0;
 int mVperAmp = 185;    // use 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);
 pinMode(13,OUTPUT);
 digitalWrite(13,LOW);
 }

 void loop(){
 RawValue = analogRead(analogIn);
 Voltage = (RawValue / 1024.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,2);
 Serial.print("\t Amps = ");       // shows the voltage measured
 Serial.println(Amps,2); 

 //-------- SET Current Limt ------------ 
  if (Amps>1.2) {
     digitalWrite(13,HIGH); 
     Serial.print(" Over Current "); 
     delay(1000);
   }
     digitalWrite(13,LOW);
     delay(1000);
 }

การตรวจสอบทิศทางการไหลของกระแสไฟฟ้าด้วยฮอร์เอฟเฟกเซนเซอร์ ACS712

การตรวจสอบทิศทางการไหลของกระแสด้วยฮอร์เอฟเฟกเซนเซอร์ จะทดลองโดยการตรวจสอบกระแสชาร์จให้กับแบตเตอรี่ชนิดลิเทียมไอออนฟอสเฟต (LiFePO4) เป็นทิศทางที่ 1 และทิศทางที่ 2 จะเป็นการตรวจสอบการจ่ายพลังงานจากตัวแบตเตอรี่ลิเทียมไอออนฟอสเฟตไปยังโหลดต่างๆ ทั้งนี้จะทำให้เราสามารถประยุกต์การใช้งานฮอร์เอฟเฟกเซนเซอร์ได้อีกรูปแบบหนึ่งในการจัดการพลังงานไฟฟ้า (Power management) ให้กับแบตเตอรี่

DC Current Sensor By using ACS712 Hall Effect
รูปที่ 14 เมื่อเราทำการชาร์จแบตเตอรี่ด้วยเพาเวอร์ซัพพลาย

ในรูปที่ 14 เมื่อเราให้วงจรชาร์จแบตเตอรี่ทำงาน และการแสดงข้อความของการชาร์จแบตเตอรี่ จะสังเกตเห็นว่าข้อความจะแสดงปริมาณกระแสที่ใช้ในการชาร์จเป็นปกติตามในกรอบสีแดง

DC Current Sensor By using ACS712 Hall Effect
รูปที่ 15 ปริมาณกระแสชาร์จจากเพาเวอร์ซัพพลายประมาณ 600mA

รูปที่ 15 ลักษณะของการต่อวงจรเพื่อให้เพาเวอร์ซัพพลายจ่ายกระแสชาร์จให้กับแบตเตอรี่ ในรูปกระแสชาร์จจะมีค่าประมาณ 600mA

DC Current Sensor By using ACS712 Hall Effect
รูปที่ 16 การแสดงข้อความในขณะที่แบตเตอรี่จ่ายกระแสให้โหลด

สำหรับรูปที่ 16 จะเป็นการแสดงข้อความในขณะที่แบตเตอรี่จ่ายกระแสให้โหลด โดยใช้ตัวฮอร์เอฟเฟกเซนเซอร์เดิม แต่ทิศทางตรงข้าม จะสังเกคุเห็นว่าข้อความ “RawValue” จะมีเครื่องหมายลบเพิ่มขึ้นเพื่อบอกทิศทาง โดยค่าปริมาณกระแสที่เแบตเตอรี่จ่ายให้โหลดถูกกำหนดให้เป็นค่าบวกเช่นเดิมเพื่อให้เข้าใจง่าย

DC Current Sensor By using ACS712 Hall Effect
รูปที่ 17 ลักษณะของวงจรเมื่อแบตเตอรี่จ่ายกระแสให้โหลด

รูปที่ 17 แสดงลักษณะของวงจรเมื่อแบตเตอรี่จ่ายกระแสให้โหลด โดยในสถานะนี้แอลอีดีจะติดเพื่อแสดงให้ทราบ สำหรับการนำไปใช้งานเราควรพิจารณากระแสโหลดและตัวฮอร์เอฟเฟกเซนเซอร์ให้เหมาะสม

/*
   Measuring DC Current Using ACS712
   Code Program by : http://www.energiazero.org/arduino_sensori/acs712%2030a%20range%20current%20sensor.pdf 
 */

const int analogIn = A0;
 int mVperAmp = 185;    // use 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);
 pinMode(13,OUTPUT);
 digitalWrite(13,LOW);
 }

 void loop(){
 RawValue = analogRead(analogIn);
 if (RawValue>500) {
 Voltage = (RawValue / 1024.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,2);
Serial.print("\t Amps = ");       // shows the voltage measured Serial.println(Amps,2);
digitalWrite(13,LOW);
delay(1000); }   

 else {
RawValue = (1024-RawValue);
Voltage = (RawValue / 1024.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,2);
Serial.print("\t Amps = ");       // shows the voltage measured Serial.println(Amps,2);
digitalWrite(13,HIGH);
delay(1000); }
 }

จากตัวอย่างโปรแกรมที่เห็นข้างบนนั้น จะแบ่งออกเป็น 2 ส่วนคือ ส่วนแรกเมื่อค่าแรงดันฮอร์เอฟเฟกเซนเซอร์มีค่ามากกว่า 500 โปรแกรมจะทำงานในลูป if และในสถานะนี้เราจะเรียกว่าการชาร์จแบตเตอรี่ ซึ่งหมายถึงกระแสจากเพาเวอร์ซัพพลายจะไหลผ่านจากขา 1 และ 2 ไปยังขา 3 และขา 4 ของฮอร์เอฟเฟกเซนเซอร์ แต่ในทางตรงข้ามเมื่อเปลี่ยนสถานะให้แบตเตอรี่จ่ายกระแสที่โหลดกระแสจะไหลจากขา 3 และ 4 ไปยังขา 1 และขา 2 ซึ่งจะทำให้ค่าแรงดันฮอร์เอฟเฟกเซนเซอร์มีค่าน้อยกว่า 500 ลูปคำสั่งจะลงมาทำงานที่ else นั้นเอง

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

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://github.com/RobTillaart/ACS712