การดัดแปลงเครื่องวัดอุณหภูมิหน้าร้านสะดวกซื้อให้เป็น AIIoT ตอนที่ #1
สวัสดีครับวันนี้ทาง Maker [LAB] จะมาเล่าเรื่องราวของการดัดแปลงเครื่องวัดอุณหภูมิรุ่นยอดนิยมที่เราพบได้ตามหน้าร้านสะดวกซื้อทั่วไป จนตอนนี้เริ่มใช้กับตามอาคารต่างๆแล้วด้วย โดยเราเริ่มเล่าตั้งแต่การเริ่มแกะค่าที่ส่งออกจากเครื่องวัดว่าค่าที่มันส่งมาคืออะไร แปลงค่ายังไง ไปจนถึงการแกะชำแหละดูวงจรข้างในว่าเราจะหาทางดัดแปลงมันยังไงได้บ้าง เอาบอร์ด TTGO ESP32 มาต่อยังไงและโปรแกรมตัวอย่างง่ายๆ เขียนอย่างไร พร้อมแล้วใช่มั้ยครับ พร้อมแล้วก็มาลองไปด้วยกันเลย มาทำความรู้จักกับเครื่องวัดก่อนแงะก่อน เครื่องที่ทาง Maker [LAB] นำมาทดลองใช้งานคือเครื่องวัดรุ่น K3 สำหรับยี่ห้อไม่ปรากฎแน่ชัดครับ ตาม specs ที่ระบุไว้ที่ตัวเครื่องคือ สามารถอ่านค่าอุณภูมิได้ที่ความแม่นยำ +-0.2C ช่วงในการวัดอยู่ที่ 10C-40C สามารถทำงานได้จากแหล่งพลังงานในตัวเป็นถ่าน 18650 หรือเสียบสาย USB ก็ได้เช่นกัน หน้าตาเป็นแบบนี้ครับ การใช้งานจริง ๆ ตามคู่มือคือใช้วัดที่หน้าผากหรือช่องหูนะครับไม่ใช่ฝ่ามือ โดยเมื่อเข้าไปในระยะของเซ็นเซอร์วัดระยะก็จะสั่งให้ทำการวัดค่าอุณหภูมิแบบไร้การสัมผัส Previous Next ซึ่งด้วยความที่เราเห็นว่าเจ้าเครื่องนี้มีโปรแกรมบนคอมพิวเตอร์ให้สามารถใช้งานได้ด้วยอยู่แล้ว และก็มีช่องทางในการเชื่อมต่อกับคอมพิวเตอร์ได้ผ่านทาง USB เท่านั้นเราก็มาทดลองเสียบสาย USB เข้ากับเครื่องคอมพิวเตอร์ของเราก่อนเลยดีกว่าครับ โดยเมื่อเราต่อเรียบร้อยก็จะตรวจพบว่าเจออุปกรณ์เป็น Serial port ขึ้นมา Chip ที่ใช้ก็เป็น CH340 รุ่นยอดนิยมนั่นเอง ไม่รอช้าเราก็เปิดโปรแกรม Real Term ขึ้นมาเพื่อทดลองอ่านค่ากันดูดีกว่าครับ การทดลองของเราง่าย ๆ คือเริ่มจากทดลองเปลี่ยน baud rate ไปเรื่อย ๆ จาก 9600 ไปจนมันอ่านค่าที่ส่งออกมาได้ ทดลองอยู่ไม่นานไล่จาก 9600 ไปจนถึง 115200 เราก็ประสบความสำเร็จครับ อ่านค่าออกมาได้ดังนี้ การแปลงค่าที่อ่านได้จาก Serial จากค่าด้านบนคือข้อมูลเมื่อเราทดลองให้เครื่องวัดตรวจวัดอุณหภูมิได้ 1 ครั้ง ก็จะได้ค่าออกมา 1 แถวจำนวน 7 ฺByte ตามภาพ ตามหลักการข้อมูล Byte สุดท้ายน่าจะเป็น Checksum เราก็ทดลองบวกค่าตั้งแต่ Byte แรกจนถึง Byte ที่ 6 แล้วทดลองคำนวนแบบ CheckSum8 Modulo 256 ก็ได้ค่าออกมาตรงกับข้อมูลใน Byte สุดท้ายโอเคเป็น Checksum ถูกต้อง งั้นมาลองดู Byte ถัดมาคือค่า 0x6C 0x01,0x6D 0x01 ดีกว่าเพราะจากการสังเกตค่าที่แตกต่างของสองบรรทัดนี้ก็แปรผันกับค่าอุณหภูมิที่แสดงออกทางหน้าจอ LED 7-segment ของเครื่องวัดด้วย 0x6C ก็คือค่า 108 ในฐาน 10 0x01 ก็คือ 1 ในฐาน 10 ค่าที่อ่านได้จากเครื่องวัดคือ 36.4 C งั้นเรามาลองดูกันว่าจะทำยังไงให้ 0x6C รวมกับ 0x01 ได้ค่าออกมาดูใกล้เคียงกับ 36.4 ได้บ้าง เราก็ทดลองดูเรื่อง Byte order กันต่อ ว่าข้อมูลที่ส่งมาเป็น Big endian รึเปล่าหรือเป็น Little endian กันแน่ ลองแปลงค่ากันครับระหว่าง 0x6C1 , 0x16C อะไรมันจะให้ค่าที่ตรงกับที่เราหากันแน่ 0x6C1 คือค่า 1,729 ในฐาน 10 ส่วน 0x16C คือ 364 ในฐาน 10 เอ๊ะ 364 กับ 36.4 เริ่มเข้าเค้าแล้วใช่มั้ยครับจับ / 10 หรือ x 0.1 ก็ได้ 36.4 แล้ว จบไป 1 ข้อครับ ใครอ่านถึงตอนนี้แล้วจะไปเขียนโปรแกรมบนคอมพิวเตอร์ไม่ทำแล้ว MCU ก็ตามสบายครับ งัดแงะเครื่องกันดีกว่า หลังจากเราอ่านค่าได้ถูกต้องแล้วเราก็มาลองดูความเป็นไปได้ว่าจะสามารถต่อเอาค่าจากเครื่องวัดมาต่อกับ ESP32 ได้รึเปล่ากันต่อครับ เพราะว่า ESP32 ยังไม่รอบรับการใช้งานเป็น USB host เราต้องการต่อ UART ระหว่างบอร์ดของเครื่องวัดกับบอร์ด ESP32 ของเราตรงๆ งั้นแงะกันเลยนะครับ เราก็จะพบว่า USB2Serial ของเราเป็นเบอร์ CH340N เราก็ไปหา Datasheet มากันต่อได้เลยว่าจะต่อสัญญาณออกไปยังไง จาก Pinout เราจะเห็นว่า IC CH430N นั้นแต่ละขามีหน้าที่อะไรบ้าง เพื่อที่ว่าเราจะได้ไปดึงสัญญาณ TX จาก MCU ที่จะส่งไปให้ CH340N แปลงเป็น USB มาใช้ได้ตรงๆ โอเคเราเจอแล้วว่าต้องต่อที่ขา 7 หรือ RXD ตามรูปนั่นเองครับ ปัญหาต่อมาคือเราไม่รู้ว่าระดับของแรงดันที่ส่งมาจาก MCU คือกี่ Volt งั้นเราไปดูกันต่อว่า MCU เป็นเบอร์อะไร ก็เจอว่าตัว MCU ที่ใช้ในบอร์ดวัดค่าอุณหภูมิคือ STM32F031K6T6 จาก STMicroelectronics นั่นเองครับ ซึ่งเมื่อไปเปิด Datasheet ดูก็จะพบว่าทำงานที่แรงดัน 2-3.6 V ซึ่งก็เป็นช่วงเดียวกันกับ ESP32 เช่นเดียวกันดังนั้นเราก็สามารถที่จะต่อได้เลยไม่ต้องผ่านวงจร level shiter แต่ประการใด หลังจากนั้นเรา ก็จะมาต่อเข้ากับ ESP32 กันครับ โดยบน ESP32 เนี่ยมี UART 3 ชุดให้ใช้ได้คือ […]
การดัดแปลงเครื่องวัดอุณหภูมิหน้าร้านสะดวกซื้อให้เป็น AIIoT ตอนที่ #1 Read More »



