
ตัวอย่างการใช้งาน 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 บอร์ดเซ็นเซอร์ 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

จากวงจรจะเห็นได้ว่า ที่บอร์ดเซ็นเซอร์ต่อขา 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 จากนั้นแปลงเป็นกระแสที่เซ็นเซอร์วัดได้ โดยเริ่มจากแปลงเป็นค่าแรงดันก่อน โดยเทียบบัญญัติไตรยางศ์

ดังนั้น

ปกติสัญญาณที่วัดได้จากบอร์ดเซ็นเซอร์ เป็นสัญญาณอนาล็อก 0-5V ถ้าเซ็นเซอร์วัดกระแสได้ 0A สัญญาณที่ออกมาจะอยู่ที่ประมาณ 2.5 V จากภาพ ดังนั้น ถ้าต้องการวัดเฉพาะกระเเสไฟฟ้า DC (ไฟฝั่งบวก) โดยไม่นำด้านไฟกระแสด้านลบมาใช้ คือไม่นำกระแสด้านลบมาคิด (ตัด 2.5 V ออก) จึงให้โปรแกรมลบครึ่งหนึ่งของค่าที่วัดได้ 1024/2 = 512 จากนั้นแปลงเป็นกระแสโดยคูณค่า Sensitivity ของเซ็นเซอร์ คือ V/185mA หรือ 1000/185 จากนั้นเก็บค่าไว้ในตัวแปร outputValue และส่งค่าตัวแปร outputValue ผ่านทางพอร์ต Serial โดยหน่วงเวลาทุกๆ 10 ms
ทดสอบเซ็นเซอร์ ACS714 โดยต่อใช้งานจริง


หลังจากที่อัพโหลดโค้ดแล้ว บอร์ด Arduino จะส่งค่าที่วัดได้ผ่านทางพอร์ต Serial (ดังภาพ ด้านขวาบน)

ทดสอบเซ็นเซอร์ โดยใช้ DC Supply ปรับแรงดัน 0-24 V จำลองโหลดโดยใช้ Programmable Load ต่อเซ็นเซอร์ก่อนเข้าโหลดปรับการกินกระแสของโหลดโดย เปลี่ยนค่าความต้านทานบน Programmable Load


เมื่อนำเซ็นเซอร์ 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)

ผลการทดลอง



จากตารางผลการทดสอบจะเห็นได้ว่า เมื่อเปรียบเทียบค่าที่ได้จากการวัดของดิจิตอลมิเตอร์ และที่วัดได้จากเซ็นเซอร์ 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

จากวงจรจะเห็นได้ว่า แรงดันที่ออกมาจากเซ็นเซอร์จะเป็นสัญญาณ DC ที่แปรผันจากกระแสที่วัดได้ เนื่องจากกระแสที่วัดเป็น AC ทำให้สัญญาณที่ออกมาจากเซ็นเซอร์ในฝั่งกระแสบวก คือ มากกว่า 2.5V แต่ไม่เกินแรงดันที่่ขา VCC (5V) และฝั่งกระแสลบ น้อยกว่า 2.5V แต่ไม่ต่ำกว่า 0V โดยตัวอย่างนี้จะแสดงโค้ดตัวอย่างการวัดกระแสเฉลี่ย (Irms) และแสดงค่าที่อ่านได้ผ่านพอร์ต Serial

1. แนะนำ Emon Library
Emon Library เป็น Library ที่ใช้ในโปรเจค OpenEnergyMonitor โดยใช้ Arduino เป็น MCU อ่านค่าสัญญาณ โดยมีฟังก์ชั่นคำนวณค่า Irms และ Vrms ง่ายต่อการใช้งาน

หน้าเว็บไซต์โปรเจค OpenEnergyMonitor http://openenergymonitor.org/emon/

โหลด Emon Library จากหน้าเว็บไซต์ GitHub https://github.com/openenergymonitor/EmonLib

ติดตั้ง 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 โดยต่อใช้งานจริง

ทดสอบเซ็นเซอร์ ASC-714 วัดไฟกระแส AC 220V โดยให้โหลดเป็นหลอดไฟจำนวน 4 หลอด


เมื่อนำเซ็นเซอร์ ASC-714 วัดไฟกระแส AC จะเห็นได้ว่าสัญญาณที่ขา VIOUT เป็นสัญญาณไฟ DC ที่มีสัญญาณ AC ผสมอยู่ จะวัดค่าได้ 0A (กรณีไม่มีโหลด) และวัดค่าสัญญาณได้ประมาณ 2.5V เมื่อโหลดกินกระแสมากขึ้น แรงดันสัญญาณจะมีแอมพลิจูดเพิ่มขึ้นแต่จะไม่เกินกว่า 5V (แรงดันแหล่งจ่ายของเซ็นเซอร์)
การทดลอง

ทด
ลองต่อบอร์ดเซ็นเซอร์ ASC-714 ร่วมกับบอร์ด Arduino UNO R3 แล้วทำการจ่ายเเรงดันไฟกระเเสสลับ AC ที่แรงดัน 220V/0.44A, 220V/0.88A, 220V/1.32A แล้วทำการวัดค่ากระเเสที่บอร์ดเซ็นเซอร์ ASC-714 อ่านค่าได้จริง (บอร์ด Arduino จะส่งค่าที่วัดได้ผ่านทางพอร์ต Serial) เทียบกับดิจิตอลมิเตอร์ Fluke รุ่น DM119
ผลการทดลอง



จากตารางผลการทดสอบจะเห็นได้ว่า เมื่อเปรียบเทียบค่าที่ได้จากการวัดของดิจิตอลมิเตอร์ และที่วัดได้จากเซ็นเซอร์ มีความคลาดเลื่อนประมาณ 0.15 % (220V/0.44A), 3.15% (220V/0.88A) และ 1.50% (220V/1.32A) การชดเชยค่า Error เซ็นเซอร์ อาจทำได้โดยการเก็บตัวอย่างค่าที่วัดได้มากขึ้น ซึ่งจะทำให้ทราบค่าที่ Error ได้แม่นยำมากขึ้น และนำค่า Error นี้ไปปรับในโค้ดโปรแกรมบน Arduino ให้ชดเชยค่าคงที่ในการหาแรงดันและกระแสที่ผู้ผลิตกำหนดไว้