กลับไปหน้ารวมไฟล์
test-dht22-sensors-with-arduino-and-matlab-30767a.md

คุณเคยเจอปัญหาเวลาซื้อเซนเซอร์วัดอุณหภูมิและความชื้นแบบยกชุดมา แล้วไม่แน่ใจว่าควรเลือกตัวไหนมาใช้งานในโปรเจคจริงหรือไม่? หรือคุณเคยสงสัยไหมว่าค่าที่อ่านได้จากเซนเซอร์แต่ละตัวมีความคลาดเคลื่อน (Tolerance) มากน้อยเพียงใด? หากคุณกำลังมองหาวิธีการตรวจสอบความแม่นยำและการทำ Data Correction เพื่อปรับจูนค่าให้เสถียร โปรเจคนี้คือคำตอบสำหรับคุณครับ

โปรเจคนี้ได้รับแรงบันดาลใจมาจาก MATLAB tutorial เกี่ยวกับการพล็อตกราฟข้อมูลแบบ Real-time จาก Arduino โดยผมได้นำเซนเซอร์ DHT22 จำนวน 5 ตัวมาทดสอบพร้อมกัน เพื่อวิเคราะห์หาค่าความเบี่ยงเบนและตรวจสอบว่าประสิทธิภาพของเซนเซอร์แต่ละตัวยังอยู่ในช่วงที่ผู้ผลิตกำหนดไว้หรือไม่

การแสดงผลกราฟความชื้นและอุณหภูมิแบบ Live Plot ผ่าน MATLAB

เจาะลึกการทำงานของระบบ (System Architecture)

ในเชิงวิศวกรรมฝังตัว การอ่านค่าจากเซนเซอร์หลายตัวพร้อมกัน (Multi-sensor Synchronization) ต้องคำนึงถึงเรื่องของ Timing และสัญญาณรบกวน ระบบนี้ประกอบด้วยส่วนสำคัญ 3 ส่วน:

  1. Hardware Layer (Arduino & DHT22): ใช้ Arduino เป็นหน่วยประมวลผลกลาง ทำหน้าที่สื่อสารกับเซนเซอร์ DHT22 ทั้ง 5 ตัวผ่านโปรโตคอล Single-Bus แม้ว่า DHT22 จะมีตัวต้านทาน Pull-up ภายในมาให้แล้ว แต่ในโปรเจคนี้เรามีการเพิ่มตัวต้านทาน 10 kOhm ภายนอกเข้าไปด้วยเพื่อเพิ่มความเสถียรของสัญญาณ (Noise Immunity) โดยเฉพาะเมื่อต้องเดินสายสัญญาณยาวๆ
  2. Communication Layer (Serial Interface): ข้อมูลจะถูกส่งจาก Arduino ไปยังคอมพิวเตอร์ผ่าน Serial Communication โดยมีจุดที่ต้องระวังคือ "Auto-Reset" ของ Arduino เมื่อมีการเปิด Serial Port ใน MATLAB วิธีการแก้ปัญหาที่มืออาชีพเลือกใช้คือการต่อ Capacitor ขนาด 10uF ระหว่างขา GND และ RESET เพื่อยับยั้งสัญญาณ DTR ไม่ให้รีเซ็ตบอร์ดขณะกำลังรับส่งข้อมูล
  3. Software Layer (MATLAB Analysis): ข้อมูลที่ได้รับจะถูกนำไปประมวลผลใน MATLAB เพื่อสร้างกราฟเปรียบเทียบ หาค่าเฉลี่ย (Averaging) และสร้างแถบความคลาดเคลื่อน (Error Bands)
กราฟสรุปผลข้อมูลพร้อมค่าเฉลี่ยและแถบแสดงความคลาดเคลื่อน (Error Bands)

การวิเคราะห์ลอจิกของโปรแกรม

Arduino Side: ตัวโปรแกรมจะทำการวนลูปอ่านค่าจาก Digital Pin ที่เชื่อมต่อกับเซนเซอร์แต่ละตัว โดยเว้นระยะห่างการอ่าน (Sampling Rate) อย่างเหมาะสม เนื่องจาก DHT22 ต้องการเวลาในการประมวลผลประมาณ 2 วินาทีต่อการอ่านหนึ่งครั้ง ข้อมูลจะถูก Pack เป็น String และส่งออกไปทาง Serial Port เพื่อให้ MATLAB นำไปแยกแยะ (Parsing) ต่อไป

MATLAB Side: สคริปต์ใน MATLAB จะทำหน้าที่เป็น Data Logger และ Visualization Engine:

  • Live Plotting: ใช้การวนลูปรับค่าและอัปเดตกราฟแบบทันที ทำให้เราเห็นการตอบสนองของเซนเซอร์ต่อสภาพแวดล้อมได้ชัดเจน
  • Data Correction & Calibration: จากการทดสอบพบว่าเซนเซอร์หมายเลข 5 ให้ค่าที่แม่นยำที่สุดเมื่อเทียบกับเครื่องมือวัดมาตรฐานในห้องปฏิบัติการ (Laboratory Instrument) ผมจึงใช้ค่าจากตัวที่ 5 เป็นค่าอ้างอิง (Reference) แล้วนำมาคำนวณหาค่า Offset เพื่อปรับจูน (Calibrate) เซนเซอร์ตัวอื่นๆ ให้มีค่าใกล้เคียงกันที่สุด
  • Data Export: เมื่อสิ้นสุดการทดสอบ ข้อมูลทั้งหมดจะถูกส่งออกเป็นไฟล์ Spreadsheet เพื่อนำไปวิเคราะห์ทางสถิติต่อไป
ข้อมูลที่ถูกส่งออกมาเป็นไฟล์ Spreadsheet เพื่อการวิเคราะห์เชิงลึก

ข้อแนะนำในการใช้งาน

  1. การตั้งค่า MATLAB: ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง MATLAB Support Package สำหรับ Arduino และกำหนด Serial Port ให้ตรงกับที่ใช้งานจริง
  2. การปรับแต่ง Code: ในส่วนของ Data Correction ผมได้คอมเมนต์ (Comment) ไว้ในโค้ด เพื่อให้ MATLAB พล็อตกราฟตามค่าจริงที่อ่านได้จากเซนเซอร์ก่อน หากคุณต้องการทำ Calibration สามารถเปิดใช้งานส่วนนี้และแก้ไขฟังก์ชันการแก้ค่า (Correction Function) ตามผลการทดสอบของคุณได้เลย
  3. Hardware Tips: อย่าลืมเรื่อง Capacitor 10uF ระหว่าง GND และ RESET หากคุณพบว่า MATLAB ทำการรีเซ็ตบอร์ดทุกครั้งที่เริ่มรันสคริปต์ ซึ่งสามารถอ่านรายละเอียดเพิ่มเติมได้ที่ Arduino Playground

โปรเจคนี้ไม่เพียงแต่ช่วยให้คุณเลือกเซนเซอร์ที่ดีที่สุดได้เท่านั้น แต่ยังเป็นพื้นฐานที่ดีในการเรียนรู้เรื่อง Data Validation และการสื่อสารระหว่าง Microcontroller กับซอฟต์แวร์วิเคราะห์ระดับสูงอย่าง MATLAB อีกด้วยครับ

ข้อมูล Frontmatter ดั้งเดิม

title: "Test DHT22 Sensors with Arduino and MATLAB"
description: "This project shows how to use MATLAB and Arduino to acquire and fix data from a bundle of DHT22 sensors, live plot, and export the results."
author: "dancili"
category: "Sensors & Environment"
tags:
  - "environmental sensing"
  - "data collection"
views: 18024
likes: 10
price: 299
difficulty: "Intermediate"
components:
  - "1x Capacitor 10 µF"
  - "1x Jumper wires (generic)"
  - "1x Pushbutton switch 12mm"
  - "1x Resistor 1k ohm"
  - "5x Resistor 10k ohm"
  - "1x Breadboard (generic)"
  - "1x Arduino UNO"
  - "5x DHT22 Temperature Sensor"
tools: []
apps:
  - "1x Arduino IDE"
  - "1x MATLAB"
downloadableFiles:
  - "https://projects.arduinocontent.cc/0668c4a5-405f-41ec-9c4e-85ea724d8f8f.ino"
  - "https://projects.arduinocontent.cc/0668c4a5-405f-41ec-9c4e-85ea724d8f8f.ino"
  - "https://projects.arduinocontent.cc/58539425-3850-4a96-833c-6aaf8f3d90d8.m"
documentationLinks: []
passwordHash: "1104b9ad50432d57ae0d393fbc8c39fded0db5bf08c66e9f2d93c63ad260bee1"
encryptedPayload: "U2FsdGVkX1/atMMVJLWmnO0oBKC4IgyXqZFeEedjFYrSOypgZXNp7OQ+/HfCT0ROHBAiMziu14V30ibzMxt0ljyx5nElkuGoqjHRIOyh1x8="
seoDescription: "Learn to test DHT22 Sensors using Arduino and MATLAB with live plot and data export features."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/test-dht22-sensors-with-arduino-and-matlab-30767a_cover.jpg"
lang: "en"