รูป 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
ความคิดเห็น
แสดงความคิดเห็น