การดึงข้อมูลจาก Infrared Thermometer Q3 pro ด้วย ESP32


รูป infrared thermometer Q3 pro


Infrared thermomter Q3 pro เป็นอุปกรณ์ในการวัดอุณหภูมิแบบไม่สัมผัส  ใช้วิธีนำหน้าผากไปส่องหรือผ่ามือไปใกล้อุปกรณ์  ก็จะวัดอุณหภูมิออกมาได้  เนื่องจากอุปกรณ์ไม่มี port serial หรือ chip usb-to-uart ทำให้ไม่สามารถดึงข้อมูลของอุปกรณ์ผ่านสาย micro-usb ได้  ดังนั้น วิธีหนึ่งที่เลือกใช้ในการอ่านข้อมูลคืออ่านจาก ic ที่ใช้ควบคุมการแสดงผลของ 7-segment ของอุปกรณ์


รูป ic TM1650 สำหรับแสดงผล 7-segment


รูปผังวงจรการใช้ ic TM1650 กับ 7-segment


การแสดงผลของ 7-segment คือกำหนดลอจิก 1 ให้ส่วนที่ต้องการแสดงผล  จากรูปด้านบนตัวเลขจะประกอบด้วย A B C D E F และ DP( จุด ) ตอนส่งข้อมูลไปแสดงผลตามลำดับ ดังนี้ 

DP G F E D C B A


ตัวอย่างข้อมูลที่ส่งไปเพื่อแสดงตัวเลข

DP GFE DCBA

 0   011  1111 0x3F, // 0

 0   000  0110        0x06, // 1

 0   101  1011       0x5B, // 2

 0   100  1111        0x4F, // 3

 0   110 0110          0x66, // 4

 0   110  1101         0x6D, // 5

 0   111 1101           0x7D, // 6

 0   000  0111         0x07, // 7

 0   111 1111            0x7F, // 8

 0   110 1111             0x6F, // 9

 


ตัวอย่างข้อมูลที่ส่งไปเพื่อแสดงตัวเลขที่มีจุด

DP GFE DCBA

 1   011  1111 0xBF, // 0.

 1   000  0110        0x86, // 1.

 1   101  1011       0xDB, // 2.

 1   100  1111        0xCF, // 3.

 1   110 0110          0xE6, // 4.

 1   110  1101         0xED, // 5.

 1   111 1101           0xFD, // 6.

 1   000  0111           0x87, // 7.

 1   111 1111            0xFF, // 8.

 1   110 1111           0xEF, // 9.


address ของเลขแต่ละหลัก

หลักที่ 1 0x6C

หลักที่ 2 0x6A (เลขทศนิยม)

หลักที่ 3 0x68


ตัวอย่างข้อมูลที่อ่านได้จากการแสดงผล

35.8 อ่านได้ 0x4F 0xED 0x7F

35.9 อ่านได้ 0x4F 0xED 0x6F

วิธีดึงข้อมูล

ใช้วิธีวิเคราะห์สัญญาณข้อมูลทีละบิต  แล้วหาสัญญาณที่บ่งบอกว่าเป็น start transmission จากนั้นก็ดูว่าข้อมูลที่ได้ต่อจากนั้นอีก 2 bytes คืออะไร  โดย byte แรกคือข้อมูลหลักของตัวเลขที่จะแสดงผล  ส่วน byte ถัดมาคือข้อมูลตัวเลข ในชุดสัญญาณหนึ่งจะมีข้อมูล 8 bytes ให้สนใจเฉพาะ 6 bytes แรกก็พอเพราะทุกๆ 2 bytes จะบอกข้อมูลตัวเลขแต่ละหลักที่แสดงบน 7-segment และตามด้วย ACK เนื่องจากบน infrared thermometer ที่เราใช้มีเลข 3 หลัก ข้อมูลใน 2 bytes สุดท้ายจึงไม่ได้ใช้งาน





การจับสัญญาณ ic TM1650 ด้วย Logic Analyzer


ใช้อุปกรณ์ Login Analyzer ในการจับข้อมูลที่ขา SCL และ SDA ของ ic TM1650 ซึ่งเป็นชิปที่ใช้ส่งข้อมูลมาแสดงผลบนหน้าจอ 7-segment โดยเราสามารถนำสัญญาณนี้มาแปลงเป็นตัวเลขผลการวัดอุณหภูมิได้  สัญญาณ SCL 1 ลูกคลื่นมีขนาด 0.1134 ms 

ในการวัดสัญญาณ SDA มีการต่อตัวต้านทาน 220 โอห์ม ลง GND จากนั้นใช้แรงดันที่ตกคร่อมตัวต้านทานในการอ่านสัญญาณ SDA และให้เชื่อม GND ของบอร์ด MCU กับ Infrared thermometer ด้วย


รูปสัญญาณของ ic TM1650 ที่แสดงผลการวัดอุณหภูมิ


รูปสัญญาณแสดงผลวัดอุณหภูมิ


สัญญาณนี้อ่านได้ 36.4 มีรายละเอียด ดังนี้

  • 0x68 คือหลักของเลขทศนิยม 0x66 คือเลข 4

  • 0x6A คือเลขหลักหน่วย 0xFD คือเลข 6. ในหลักนี้บน 7-segment แสดงเครื่องหมายจุดด้วย

  • 0x6C คือเลขหลักสิบ 0x4F คือเลข 3


รูปสัญญาณแสดงผลวัดอุณหภูมิส่วนสุดท้าย


การแสดงผลส่วนนี้ไม่ได้ใช้งานเนื่องจาก 7-segment ที่ใช้มีเพียง 3 หลักแต่ ic TM1650 สามารถควบคุมการแสดงผล 7-segment ได้ 4 หลัก ทำให้สัญญาณในส่วนนี้ไม่ได้ถูกนำไปใช้งาน


รูปสัญญาณ start transmission


รูปสัญญาณ ACK ที่ใช้แบ่งการส่งข้อมูลแต่ละหลัก


รูปสัญญาณ stop transmission



ผลการเขียนโปรแกรมอ่านสัญญาณข้อมูล


มีโอกาสที่จะดักจับสัญญาณข้อมูลไม่ได้  วิธีแก้คือปรับจูนความถี่ในการอ่านค่าสัญญาณให้อยู่ระหว่าง 20 - 50 us เนื่องจากความกว้างครึ่งสัญญาณ SCL คือประมาณ 56 us ถ้ากำหนดความถี่มาก

กว่านี้จะอ่านค่าไม่ได้


รูปทดสอบอ่านค่าอุณหภูมิแล้วส่งขึ้น Netpie2020


จากการทดลอง  การใช้คำสั่ง Serial มีผลกับความถี่ในการอ่านค่าจากสัญญาณ ic TM1650 จากการนำโค้ดส่วนส่งข้อมูลขึ้น Netpie2020 มารวมกับการอ่านสัญญาณส่งผลให้อ่านค่าไม่ได้ด้วยเช่นกัน จึงแก้ปัญหาโดยแยกการทำงานโดยใช้ 2 บอร์ด บอร์ดหนึ่งทำหน้าที่อ่านข้อมูลจาก ic TM1650 แล้วส่งค่าสัญญาณผ่าน Serial ส่วนอีกบอร์ดทำการอ่านค่าจาก Serial แล้วนำมาส่งขึ้น Netpie2020


ข้อเสนอแนะ ถ้าจะใช้งานบอร์ดเดียวทั้งอ่านและส่งข้อมูลขึ้น Netpie2020 อาจใช้การแบ่ง tasks ของบอร์ด ESP32 หรือใช้การ interrupt ในการอ่านค่าสัญญาณจาก ic TM1650 เพื่อแยกการทำงานการอ่านค่าสัญญาณกับการใช้งาน wifi หรืออื่นๆออกจากกันโดยไม่กระทบการทำงานกัน


โค้ด https://github.com/phongyanon/infraredMeter


เอกสารอ้างอิง

https://www.youtube.com/watch?v=Kal8Ndoed6E

https://github.com/mozgy/Mozz_TM1650/blob/master/src/TM1650.h

https://www.sunrom.com/p/tm1650-led-displaykeypad-driver


ความคิดเห็น