การดัดแปลงเครื่องวัดอุณหภูมิหน้าร้านสะดวกซื้อให้เป็น AIIoT ตอนที่ #1

สวัสดีครับวันนี้ทาง Maker [LAB] จะมาเล่าเรื่องราวของการดัดแปลงเครื่องวัดอุณหภูมิรุ่นยอดนิยมที่เราพบได้ตามหน้าร้านสะดวกซื้อทั่วไป จนตอนนี้เริ่มใช้กับตามอาคารต่างๆแล้วด้วย โดยเราเริ่มเล่าตั้งแต่การเริ่มแกะค่าที่ส่งออกจากเครื่องวัดว่าค่าที่มันส่งมาคืออะไร แปลงค่ายังไง ไปจนถึงการแกะชำแหละดูวงจรข้างในว่าเราจะหาทางดัดแปลงมันยังไงได้บ้าง เอาบอร์ด TTGO ESP32 มาต่อยังไงและโปรแกรมตัวอย่างง่ายๆ เขียนอย่างไร พร้อมแล้วใช่มั้ยครับ พร้อมแล้วก็มาลองไปด้วยกันเลย

มาทำความรู้จักกับเครื่องวัดก่อนแงะก่อน

เครื่องที่ทาง Maker [LAB] นำมาทดลองใช้งานคือเครื่องวัดรุ่น K3 สำหรับยี่ห้อไม่ปรากฎแน่ชัดครับ ตาม specs ที่ระบุไว้ที่ตัวเครื่องคือ สามารถอ่านค่าอุณภูมิได้ที่ความแม่นยำ +-0.2C ช่วงในการวัดอยู่ที่ 10C-40C สามารถทำงานได้จากแหล่งพลังงานในตัวเป็นถ่าน 18650 หรือเสียบสาย USB ก็ได้เช่นกัน หน้าตาเป็นแบบนี้ครับ การใช้งานจริง ๆ ตามคู่มือคือใช้วัดที่หน้าผากหรือช่องหูนะครับไม่ใช่ฝ่ามือ โดยเมื่อเข้าไปในระยะของเซ็นเซอร์วัดระยะก็จะสั่งให้ทำการวัดค่าอุณหภูมิแบบไร้การสัมผัส

IMG_20201022_111002-01
IMG_20201022_111013
IMG_20201022_111034

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 ชุดให้ใช้ได้คือ Serial,Serial1,Serial2 เจ้า Serial นี่ต่อกับ USB2Serial ของ ESP32 ที่ใช้สำหรับ upload code ไปแล้วดังนั้นเราก็ต้องใช้ Serial ชุดอื่น ซึ่งเราเลือกใช้ Serial2 ซึ่งตรงกับขา IO16,IO17 เราใช้แค่ขา IO16 ที่เป็นขา Rx ขาเดียวก็พอต่อ Rx ของ ESP32 เข้ากับ Tx ของ STM32F103 หรือขา RXD ของ CH340N นั่นเอง ลองทดสอบด้วย code ง่ายๆ บน Arduino IDE อย่าง Serial bridge ดูได้ครับ

void setup() {
  Serial.begin(115200);
  Serial2.begin(115200);
}

void loop() {
  while (Serial.available())
    Serial2.write(Serial.read());

  while (Serial2.available())
    Serial.write(Serial2.read());
}

ถ้าการต่อสายถูกต้อง เราจะอ่านค่าได้จาก Serial Monitor ของ Arduino ที่ baud rate 115200 ครับก็จะได้ค่าเหมือนตอนทดสอบต่อด้วย USB ในตอนต้นนั่นเอง ซึ่งเราก็จะเอาความรู้จากที่ทดลองในตอนนั้นมาประยุกต์ใช้ของเขียนโปรแกรมบน Arduino กันต่อเป็น code ง่ายๆดังนี้

void loop() {
    uint8_t cnt = 0;
    byte highByteVal = 0;
    
    byte lowByteVal = 0;
    float temperatureVal = 0;
    while (Serial2.available()){
        buf = Serial2.read();
        if(cnt == 4 ){
             lowByteVal = buf;
         }else if(cnt == 5){
             highByteVal = buf;
         }else if(cnt==6){
             temperatureVal = word(highByteVal,lowByteVal)*0.1;
             Serial.print(“Temperature : “);
             Serial.println(temperatureVal);
        }
    }
}

เพียงเท่านี้ก็สามารถที่จะอ่านค่าออกมาได้ถูกต้องเรียบร้อยแล้วครับ จะสามารถไปประยุกต์เขียนเพิ่มเติมเพื่อส่งค่าที่วัดได้ขึ้น MQTT หรือ HTTP กันได้ตามใจชอบได้เลยครับ

โดยในเนื้อหาถัดไปเราจะมาพูดกันถึงเรื่อง AI จากบอร์ด  Corgidude กันต่อว่าจะมาใช้งาน ตรวจจับการสวมหน้ากากอนามัยร่วมกับการวัดอุณหภูมิจากบอร์ดนี้ได้อย่างไร

อดใจรอกันก่อนนะครับเนื่องจากตอนนี้บอร์ด Corgidude ขายดีจนทางเราผลิตบอร์ดไม่ทันเลย บอร์ดจะเอามาทดลองก็ยังขาดแคลนครับ โดยสำหรับผู้ที่สนใจสามารถเข้าไปกดเพื่อซื้อบอร์ดและอุปกรณ์ต่างๆจากทางบริษัทเมกเกอร์ เอเซีย ได้ที่ https://www.aiiotshop.com/ ครับ

สำหรับบริษัทที่สนใจงานพัฒนาผลิตภัณฑ์ต่างๆ สามารถติดต่อเข้ามายัง ติดต่อเรา เพื่อสอบถามเรื่องงานที่ต้องการพัฒนาได้เลยครับเรามีทีมพัฒนาเป็นสัดส่วนตั้งแต่งาน Electronic,Embeded,Mobile App,AI,Cloud ครับ

https://www.youtube.com/watch?v=tyKYK_PPB6M&feature=youtu.be&fbclid=IwAR1OFJDGHtn7dv4DjWu8kM-be8ISAX-L9tZOb3Cuo1_G2ZAfrEcdVH4Mlus

ปล.รุ่นที่ทาง LAB ทดสอบจะมีช่องต่อ Serial ไปเข้าบอร์ด USB2Serial ทำให้เราไม่ต้องบัดกรีวงจรเลยครับต่อตรง ๆ ได้เลย

2 thoughts on “การดัดแปลงเครื่องวัดอุณหภูมิหน้าร้านสะดวกซื้อให้เป็น AIIoT ตอนที่ #1”

Leave a Comment