Arduino Control INA219 DC Current and Voltage Sensor Module
สำหรับการทดลองนี้เป็นการใช้โมดูล INA219 สำหรับวัดค่าแรงดัน (Voltage) และกระแส (Current) แบบสำเร็จและนำมาต่อร่วมกับบอร์ดควบคุม Arduino เพื่ออ่านค่าที่ได้ โดยเราสามารถนำไปประยุกต์ใช้ในการควบคุมกระแสและแรงดันให้กับแหล่งจ่ายไฟเลี้ยงกระแสตรงต่างๆ ได้ง่ายด้วยการเขียนโปรแกรม นอกจากนี้รูปแบบของการสื่อสารระหว่างโมดูล INA219 และบอร์ดควบคุม Arduino จะเป็นแบบ I2C Protocol ช่วยให้ใช้ขาควบคุมระหว่างกันใช้เพียง 2 ขา (SDA, SCL) รวมทั้งสามารถสื่อสารได้รวดเร็วอีกด้วย
รูปที่ 1 และรูปที่ 2 แสดงค่าพารามิเตอร์ที่สำคัญของไอซี INA219 เช่นช่วงแรงดันอินพุตในการใช้งาน, ค่าแรงดันในการตรวจจับกระแสที่ตำแหน่ง Rshunt และตัวอย่างของการต่อใช้งานไอซี INA219 ให้เข้าใจได้ง่ายขึ้น
Datasheet for INA219 I2C interface DC Current and Voltage Sensor
รูปที่ 3 และรูปที่ 4 แสดงลักษณะของโมดูล INA219 ที่สามารถสั่งซื้อในร้านค้าออนไลน์ทั่วไป และโดยปกติจะเป็นแบบอุปกรณ์แยกชิ้นกัน ซึ่งเรานำอุปกรณ์เหล่านั้นมาประกอบเข้าได้ง่ายตามขนาดรูเจาะในแผ่น PCB และลักษณะที่ประกอบเสร็จแสดงในรูปที่ 4
รูปที่ 6 จะเห็นว่ามีการต่อตัวต้านทานคงที่ขนาด 2.2 โอห์มเข้าที่คอนเน็กเตอร์ (สีฟ้า) ทั้งนี้เนื่องจากในการทดลองเบื้องต้น การวัดค่ากระแสที่ได้ของโมดูลจะมีความคลาดเคลื่อนเล็กน้อยจึงปรับแต่งให้การวัดค่ากระแสระหว่างการวัดค่าจริงและค่าที่แสดงผลบนคอมพิวเตอร์ (Serial monitor) ใกล้เคียงกันมากที่สุด
รูปที่ 7 แสดงลักษณะของการทดลองโมดูล INA219 และการเชื่อมต่อสายสัญญาณระหว่างบอร์ดควบคุม Arduino UNO และโมดูล INA219
Arduino Library INA219 I2C interface DC Current and Voltage Sensor
// // FILE: INA219_demo.ino // AUTHOR: Rob Tillaart // PURPOSE: demo // DATE: 2021-05-18 // URL: https://github.com/RobTillaart/INA219 #include "INA219.h" #include "Wire.h" INA219 INA(0x40); void setup() { Serial.begin(9600); Serial.println(__FILE__); Serial.print("INA219_LIB_VERSION: "); Serial.println(INA219_LIB_VERSION); Wire.begin(); if (!INA.begin() ) { Serial.println("could not connect. Fix and Reboot"); } INA.setMaxCurrentShunt(5, 0.002); delay(1000); } void loop() { Serial.println("\nVin(V)\tSHUNT(mV) CURRENT(mA) POWER(mW)"); for (int i = 0; i < 10; i++) { Serial.print(INA.getBusVoltage(), 2); Serial.print("\t"); Serial.print(INA.getShuntVoltage_mV(), 2); Serial.print("\t "); Serial.print(INA.getCurrent_mA(), 2); Serial.print("\t "); Serial.print(INA.getPower_mW(), 2); Serial.println(); delay(500); } delay(100); }
รูปที่ 8 แสดงการต่อวงจรสำหรับทดลองโมดูล INA219 กับแหล่งจ่ายไฟเลี้ยง (PSU : 20V/2A) และทำงานร่วมกับบอร์ดควบคุม Arduino UNO นอกจากนี้โปรแกรมการทดลองโมดูล สามารถดาวน์โหลดได้ตามลิ้งก์เว็บไซต์อ้างอิงข้างล่าง [Ref.6] โดยในการทดลองครั้งนี้จะปรับแต่งโปรแกรมเดิมเล็กน้อยเพื่อให้เข้าใจง่ายขึ้น [Arduino Program Ref : URL: https://github.com/RobTillaart/INA219]
ในรูปที่ 9 ถึงรูปที่ 11 เป็นการทดลองที่ 1 ด้วยการจ่ายไฟเลี้ยงจากเพาเวอร์ซัพพลายที่ 10V จากนั้นสังเกตการอ่านค่าที่ได้จากโมดูล INA219 ซึ่งผลที่ได้จะใกล้เคียงกับการวัดค่ามัลติมิเตอร์จริงดังในรูปที่ 11
สำหรับในรูปที่ 12 ถึงรูปที่ 14 เป็นการทดลองที่ 2 ด้วยการปรับค่าไฟเลี้ยงจากเพาเวอร์ซัพพลายเพิ่มขึ้นที่ 15V และสังเกตการอ่านค่าที่ได้จากโมดูล INA219 ซึ่งผลที่ได้ดังในรูปที่ 14
รูปที่ 15 ถึงรูปที่ 17 เป็นการทดลองที่ 3 ลักษณะเดียวกันด้วยการปรับค่าไฟเลี้ยงเพิ่มขึ้นที่ 20V และสังเกตการอ่านค่าที่ได้จากโมดูล INA219 ซึ่งผลที่ได้ดังในรูปที่ 17 ซึ่งจากการทดลองทั้ง 3 ครั้งตัวโมดูล INA219 ให้ผลการวัดค่าที่ได้เป็นที่น่าพอใจ
สำหรับการทดลองใช้งานโมดูล INA219 ครั้งนี้ พอจะสรุปการใช้งานได้ว่าเป็นโมดูลที่สามารถนำมาใช้งานต่างๆ ได้ง่ายและสะดวก สามารถควบคุมการจ่ายพลังงานไฟฟ้าให้กับโหลดได้ดี แต่จะเหมาะสำหรับการพลังงานไฟฟ้าที่ไม่สูงมากนัก (ไม่เกิน 10 วัตต์) ทั้งนี้ข้อจำกัดจะเป็นที่ตัวโมดูลรองรับกระแสไม่สูงมากนัก ในกรณีที่เราต้องการใช้กับการจ่ายพลังงานไฟฟ้าที่สูงขึ้น แนะนำให้ออกแบบส่วนของตัวต้านทานตรวจจับกระแสให้เหมาะสม (Rshunt) แล้วให้ชิฟไอซี INA219 รับสัญญาณเข้ามาประมวลผลแยกจากกันจะช่วยให้เราสามารถประยุกต์ใช้งานได้หลายรูปแบบเพิ่มขึ้น
Reference
- https://www.ti.com/lit/ds/symlink/ina219.pdf
- https://www.ti.com/product/INA219
- https://diyprojectslab.com/arduino-energy-meter-using-ina219/
- https://microcontrollerslab.com/ina219-current-sensor-module-pinout-interfacing-with-arduino-oled/
- https://how2electronics.com/how-to-use-ina219-dc-current-sensor-module-with-arduino/
- https://www.arduinolibraries.info/libraries/ina219
- https://learn.adafruit.com/adafruit-ina219-current-sensor-breakout/arduino-code