![ACS714 Current Sensor2](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor2.png)
ตัวอย่างการใช้งาน Current Sensors (เซ็นเซอร์วัดกระเเส)
ประเภท Hall Effect Current Sensor
จาก ตารางเปรียบเทียบคุณสมบัติของ Current Sensor (เซ็นเซอร์วัดกระแส) รุ่นต่างๆ ในบทความ “ความรู้เบื้องต้นเกี่ยวกับ Current Sensor (เซ็นเซอร์วัดกระเเส)” Current Sensors ประเภท Hall Effect Sensors จะมีอยู่ 9 รุ่นคือ รหัส ESEN226, EPLL053, EPLL048, EPLL047, EPLL003, EPLL004, EPLL002, ESEN050, ESEN033 ซึ่งทั้ง 9 รุ่นนี้จะต่างกันตรงย่านการวัด และบางรุ่นอาจมีเพิ่มขาพิเศษ แต่การหลักการใช้งานเหมือนกัน ทางผู้เขียนจึงขอยกตัวอย่างการใช้งานเฉพาะรุ่น EPLL003 (ACS714 Current Sensor Carrier -5 to +5)
![ACS714 Current Sensor](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor.png)
![ACS714 Current Sensor2](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor2-1.png)
วงจรบอร์ดเซ็นเซอร์ ACS714 บอร์ดเซ็นเซอร์ ACS714
จาก วงจรบอร์ดเซ็นเซอร์ ACS714 จะเห็นได้ว่าประกอบไปด้วย IC เบอร์ ACS714 ขาที่ 1,2 (IP+) คือวัดกระแสไหลเข้า ขาที่ 3,4 (IP-) คือวัดกระแสไหลออก ขา VIOUT คือขาสัญญาณเอาท์พุต มีแรงดันตั้งแต่ 0-VCC มี C1 ค่า 0.1uF ต่อคร่อมระหว่างขา VCC และ GND เป็น Bypass Capacitors ตัวกรองสัญญาณรบกวนที่เข้ามาจากแหล่งจ่าย ภายใน IC ประกอบด้วยวงจร RC สำหรับกำหนดย่านความถี่ (Bandwidth) โดยมี R ค่า 1.7 KΩ อยู่ภายใน และต่อ C2a ภายนอกไว้เป็น C ที่เซ็นเซอร์ใช้เป็นค่ามาตรฐานโดยผู้ผลิตกำหนดไว้ที่ 1.0 nF คือ Bandwidth ไม่เกิน 90 kHz ผู้ใช้งานสามารถเปลี่ยนค่า Bandwidth ใหม่โดยต่อ C เพิ่มที่ C2b โดยหาค่าได้จากสูตร
F = 1 / (2πRC) = 1 / (11kΩ * (1 nF + Cf))
โดย F คือ ความถี่ที่ถูกลดทอน
Cf คือ ค่า C2b ต่อที่ขา Filter
ตัวอย่างการต่อใช้งาน ACS714 Current Sensor ร่วมกับบอร์ด Arduino เพื่อใช้วัดกระเเสไฟ DC
![ACS714 Current Sensor DC](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor_DC.jpg)
จากวงจรจะเห็นได้ว่า ที่บอร์ดเซ็นเซอร์ต่อขา IP+ เข้ากับขั้วบวกของแบตเตอรี่ เพราะกระแสไหลจากแบตเตอรี่เข้าสู่โหลด และต่อขา IP- เข้ากับโหลดดังภาพ และต่อไฟเลี้ยง +5V และ GND เข้ากับบอร์ดเซ็นเซอร์ ขา VIOUT ต่อเข้ากับขา A0 ของบอร์ด Arduino UNO R3 เพื่อแปลงค่าและส่งค่าที่อ่านได้ผ่านทางพอร์ต Serial ดังนี้
ตัวอย่างโค้ดโปรแกรม
int analogInPin = A0; // Analog input pin that the carrier board OUT is connected to int sensorValue = 0; // value read from the carrier board int outputValue = 0; // output in milliamps void setup() { // initialize serial communications at 9600 bps: Serial.begin(9600); } void loop() { sensorValue = analogRead(analogInPin); // read the analog in value: outputValue = (((long)sensorValue * 5000 / 1024) - 512 ) * 1000 / 185; // convert to milli amps Serial.print("sensor = " ); // print the results to the serial monitor: Serial.print(sensorValue); Serial.print("\t Current (ma) = "); Serial.println(outputValue); delay(10); // wait 10 milliseconds before the next loop }
อธิบายโค้ดโปรแกรม
void setup() { Serial.begin(9600); }
ในฟังชั่น Setup ก่อนที่จะเริ่มอ่านค่าจากเซ็นเซอร์ ให้เปิดใช้งาน Hardware Serial (ขา 0,1) โดยกำหนด Baud Rate เป็น 9600 bps
จากโค้ดโปรแกรม จะเห็นว่า
void loop() { sensorValue = analogRead(analogInPin); // read the analog in value: outputValue = (((long)sensorValue * 5000 / 1024) - 500 ) * 1000 / 185; // convert to milli amps Serial.print("sensor = " ); // print the results to the serial monitor: Serial.print(sensorValue); Serial.print("\t Current (ma) = "); Serial.println(outputValue); delay(10); // wait 10 milliseconds before the next loop }
ในฟังชั่น loop อ่านค่า Analog จากขา A0 และเก็บค่าที่อ่านได้ไว้ในตัวแปร sensorValue จากนั้นแปลงเป็นกระแสที่เซ็นเซอร์วัดได้ โดยเริ่มจากแปลงเป็นค่าแรงดันก่อน โดยเทียบบัญญัติไตรยางศ์
![Sensor Value](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_Sensor_Value.png)
ดังนั้น
![Sensor Value2](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_Sensor_Value2.png)
ปกติสัญญาณที่วัดได้จากบอร์ดเซ็นเซอร์ เป็นสัญญาณอนาล็อก 0-5V ถ้าเซ็นเซอร์วัดกระแสได้ 0A สัญญาณที่ออกมาจะอยู่ที่ประมาณ 2.5 V จากภาพ ดังนั้น ถ้าต้องการวัดเฉพาะกระเเสไฟฟ้า DC (ไฟฝั่งบวก) โดยไม่นำด้านไฟกระแสด้านลบมาใช้ คือไม่นำกระแสด้านลบมาคิด (ตัด 2.5 V ออก) จึงให้โปรแกรมลบครึ่งหนึ่งของค่าที่วัดได้ 1024/2 = 512 จากนั้นแปลงเป็นกระแสโดยคูณค่า Sensitivity ของเซ็นเซอร์ คือ V/185mA หรือ 1000/185 จากนั้นเก็บค่าไว้ในตัวแปร outputValue และส่งค่าตัวแปร outputValue ผ่านทางพอร์ต Serial โดยหน่วงเวลาทุกๆ 10 ms
ทดสอบเซ็นเซอร์ ACS714 โดยต่อใช้งานจริง
![ACS714 Current Sensor3](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor3.png)
![ACS714 Current Sensor4](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor4.png)
หลังจากที่อัพโหลดโค้ดแล้ว บอร์ด Arduino จะส่งค่าที่วัดได้ผ่านทางพอร์ต Serial (ดังภาพ ด้านขวาบน)
![](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor5-1024x577.jpg)
ทดสอบเซ็นเซอร์ โดยใช้ DC Supply ปรับแรงดัน 0-24 V จำลองโหลดโดยใช้ Programmable Load ต่อเซ็นเซอร์ก่อนเข้าโหลดปรับการกินกระแสของโหลดโดย เปลี่ยนค่าความต้านทานบน Programmable Load
![](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor6.jpg)
![ACS714 Current Sensor7](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor7.jpg)
เมื่อนำเซ็นเซอร์ ASC-714 วัดไฟกระแส DC สัญญาณที่ขา VIOUT จะเป็นสัญญาณไฟ DC เมื่อวัดได้ 0A (ไม่มีโหลด) สัญญาณจะออกประมาณ 2.5V เมื่อโหลดกินกระแสมากขึ้น กระแสไหลจากขา +IP ไปยังขา -IP แรงดันสัญญาณที่วัดได้จะค่อยๆ เพิ่มขึ้น (มากกว่า 2.5V แต่จะไม่เกินกว่า 5V ซึ่งเป็นแรงดันแหล่งจ่ายของเซ็นเซอร์) แต่ถ้ามีกระแสไหลย้อนกลับขึ้นจากขา –IP ไปยังขา +IP สัญญาณออกจากเซ็นเซอร์จะน้อยกว่า 2.5V ลงมาถึง 0V
การทดลอง
ทดลองต่อบอร์ดเซ็นเซอร์ ASC-714 ร่วมกับบอร์ด Arduino UNO R3 แล้วทำการจ่ายเเรงดันจากดิจิตอล DC Power Supply ร่วมกับ Programmable Load เพื่อปรับกระเเสให้ได้ตามค่าที่ตั้งไว้ คือ 10V/1A, 20V/2A, 30V/3A แล้วทำการวัดค่ากระเเสที่บอร์ดเซ็นเซอร์ ASC-714 อ่านค่าได้จริง (บอร์ด Arduino จะส่งค่าที่วัดได้ผ่านทางพอร์ต Serial)
![ACS714 Current Sensor8](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor8-1-1024x577.jpg)
ผลการทดลอง
![ACS714 Current Sensor9](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor9.png)
![ACS714 Current Sensor10](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor10.png)
![ACS714 Current Sensor11](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor11.png)
จากตารางผลการทดสอบจะเห็นได้ว่า เมื่อเปรียบเทียบค่าที่ได้จากการวัดของดิจิตอลมิเตอร์ และที่วัดได้จากเซ็นเซอร์ ASC-714 มีความคลาดเลื่อนประมาณ 13.80% (ที่แรงดัน 10V/1A), 4.45% (ที่แรงดัน 20V/2A)และ 10.10% (ที่แรงดัน 30V/3A) ซึ่งการชดเชยค่า Error ของเซ็นเซอร์ ASC-714 อาจทำได้โดยการเก็บตัวอย่างค่าที่วัดได้ในจำนวนที่มากขึ้น ทำให้ทราบค่าที่ Error ได้แม่นยำมากขึ้น และนำค่า Error นี้ไปปรับในโค้ดโปรแกรมบน Arduino ให้ชดเชยค่าคงที่ในการหาแรงดันและกระแสที่ผู้ผลิตกำหนดไว้
ตัวอย่างการต่อใช้งาน ACS714 Current Sensor ร่วมกับบอร์ด Arduino เพื่อใช้วัดกระเเสไฟ AC
![ACS714 Current Sensor AC](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor_AC.jpg)
จากวงจรจะเห็นได้ว่า แรงดันที่ออกมาจากเซ็นเซอร์จะเป็นสัญญาณ DC ที่แปรผันจากกระแสที่วัดได้ เนื่องจากกระแสที่วัดเป็น AC ทำให้สัญญาณที่ออกมาจากเซ็นเซอร์ในฝั่งกระแสบวก คือ มากกว่า 2.5V แต่ไม่เกินแรงดันที่่ขา VCC (5V) และฝั่งกระแสลบ น้อยกว่า 2.5V แต่ไม่ต่ำกว่า 0V โดยตัวอย่างนี้จะแสดงโค้ดตัวอย่างการวัดกระแสเฉลี่ย (Irms) และแสดงค่าที่อ่านได้ผ่านพอร์ต Serial
![ACS714 Current Sensor24](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor24-1024x267.jpg)
1. แนะนำ Emon Library
Emon Library เป็น Library ที่ใช้ในโปรเจค OpenEnergyMonitor โดยใช้ Arduino เป็น MCU อ่านค่าสัญญาณ โดยมีฟังก์ชั่นคำนวณค่า Irms และ Vrms ง่ายต่อการใช้งาน
![ACS714 Current Sensor14](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor14.png)
หน้าเว็บไซต์โปรเจค OpenEnergyMonitor http://openenergymonitor.org/emon/
![](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor15-1024x576.png)
โหลด Emon Library จากหน้าเว็บไซต์ GitHub https://github.com/openenergymonitor/EmonLib
![ACS714 Current Sensor16](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor16-1.png)
ติดตั้ง Library โดยนำโฟลเดอร์ EmonLib จากที่โหลดมา ไปวางในโฟลเดอร์ libraries ของโปรแกรม Arduino
2. ตัวอย่างโค้ดโปรแกรม
#include "EmonLib.h" // Include Emon Library EnergyMonitor emon1; // Create an instance void setup() { Serial.begin(9600); emon1.current(1, 11.8); // Current: input pin, calibration. } void loop() { double Irms = (emon1.calcIrms(1480)-0.02); // Calculate Irms only Serial.print(Irms*230.0); // Apparent power Serial.print(" "); Serial.println(Irms); // Irms }
3. อธิบายโค้ดโปรแกรม
#include "EmonLib.h" // Include Emon Library EnergyMonitor emon1; // Create an instance
เป็นการดึงคำสั่งจาก Library EmonLib มาใช้ โดยใช้คำสั่ง #include “EmonLib.h” จากนั้นประกาศ Instance ชื่อ emon1
void setup() { Serial.begin(9600); emon1.current(1, 11.8); // Current: input pin, calibration. }
ในฟังก์ชั่น Setup ก่อนที่จะเริ่มอ่านค่าจากเซ็นเซอร์ ให้เปิดใช้งาน Hardware Serial โดยกำหนด Baud Rate เป็น 9600 bps
กำหนดค่าให้ฟังก์ชั่น Current ซึ่งประกอบด้วย ขาอนาล็อกที่เท่าไหร่จากโค้ดเป็น 1 คือขา A1 และ 11.8 คือค่าที่ทำการ Calibrate แล้ว
จากโค้ดจะเห็นได้ว่า
void loop() { double Irms = (emon1.calcIrms(1480)-0.02); // Calculate Irms only Serial.print(Irms*230.0); // Apparent power Serial.print(" "); Serial.println(Irms); // Irms }
ในฟังก์ชั่น Loop วนอ่านสัญญาณอนาล็อกจากเซ็นเซอร์โดยใช้ฟังก์ชั่น calIrms โดยใส่พารามิเตอร์เป็น จำนวนการอ่าน และเก็บค่าไว้ในตัวแปร Irms จากนั้นส่งค่าตัวแปรแสดงผ่านพอร์ต Serial
ทดสอบเซ็นเซอร์ ACS714 โดยต่อใช้งานจริง
![ACS714 Current Sensor17](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor17.png)
ทดสอบเซ็นเซอร์ ASC-714 วัดไฟกระแส AC 220V โดยให้โหลดเป็นหลอดไฟจำนวน 4 หลอด
![ACS714 Current Sensor18](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor18.png)
![ACS714 Current Sensor19](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor19.jpg)
เมื่อนำเซ็นเซอร์ ASC-714 วัดไฟกระแส AC จะเห็นได้ว่าสัญญาณที่ขา VIOUT เป็นสัญญาณไฟ DC ที่มีสัญญาณ AC ผสมอยู่ จะวัดค่าได้ 0A (กรณีไม่มีโหลด) และวัดค่าสัญญาณได้ประมาณ 2.5V เมื่อโหลดกินกระแสมากขึ้น แรงดันสัญญาณจะมีแอมพลิจูดเพิ่มขึ้นแต่จะไม่เกินกว่า 5V (แรงดันแหล่งจ่ายของเซ็นเซอร์)
การทดลอง
![ACS714 Current Sensor20](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor20.png)
ทด
ลองต่อบอร์ดเซ็นเซอร์ ASC-714 ร่วมกับบอร์ด Arduino UNO R3 แล้วทำการจ่ายเเรงดันไฟกระเเสสลับ AC ที่แรงดัน 220V/0.44A, 220V/0.88A, 220V/1.32A แล้วทำการวัดค่ากระเเสที่บอร์ดเซ็นเซอร์ ASC-714 อ่านค่าได้จริง (บอร์ด Arduino จะส่งค่าที่วัดได้ผ่านทางพอร์ต Serial) เทียบกับดิจิตอลมิเตอร์ Fluke รุ่น DM119
ผลการทดลอง
![ACS714 Current Sensor21](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor21.png)
![ACS714 Current Sensor22](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor22.png)
![ACS714 Current Sensor23](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/072_ACS714_Current_Sensor23.png)
จากตารางผลการทดสอบจะเห็นได้ว่า เมื่อเปรียบเทียบค่าที่ได้จากการวัดของดิจิตอลมิเตอร์ และที่วัดได้จากเซ็นเซอร์ มีความคลาดเลื่อนประมาณ 0.15 % (220V/0.44A), 3.15% (220V/0.88A) และ 1.50% (220V/1.32A) การชดเชยค่า Error เซ็นเซอร์ อาจทำได้โดยการเก็บตัวอย่างค่าที่วัดได้มากขึ้น ซึ่งจะทำให้ทราบค่าที่ Error ได้แม่นยำมากขึ้น และนำค่า Error นี้ไปปรับในโค้ดโปรแกรมบน Arduino ให้ชดเชยค่าคงที่ในการหาแรงดันและกระแสที่ผู้ผลิตกำหนดไว้