ชื่อโปรเจกต์: DHT22 and 4-digit 7-segment display
Project Overview
โปรเจกต์ "Environmental 7-Segment Monitor" เป็นโปรเจกต์การตรวจจับค่าที่มีความแม่นยำสูง ซึ่งรวมการตรวจสอบสภาพอากาศที่มีความแม่นยำเข้ากับการควบคุมฮาร์ดแวร์แบบพิเศษ โดยใช้ Arduino UNO โปรเจกต์นี้จะอ่านค่าจาก DHT22 (AM2302) sensor—ซึ่งให้ช่วงการวัดและความแม่นยำที่เหนือกว่าเมื่อเทียบกับ DHT11 พื้นฐาน—และแสดงข้อมูลบน 4-digit 7-segment display โปรเจกต์นี้เป็นแบบฝึกหัดพื้นฐานในเรื่อง Display Multiplexing ซึ่งเป็นการใช้ขา microcontroller จำนวนจำกัดเพื่อควบคุมชุด LED ขนาดใหญ่ผ่านการสลับสัญญาณความเร็วสูงและหลักการ "Persistence of Vision"
ลองเล่นกับ 4-digit 7-segment display และ DHT22 เพื่อแสดงค่าอุณหภูมิและความชื้น
รับชมวิดีโอเพื่อดูการทำงาน!
Technical Deep-Dive
- 7-Segment Multiplexing (POV): โดยปกติแล้ว 4-digit display จะต้องใช้ 28 ขาแยกกัน หากแต่ละ segment ถูกขับเคลื่อนทีละส่วน โปรเจกต์นี้ใช้ Time-Division Multiplexing โดยจะเชื่อมต่อทั้งแปด segment (A-G และ DP) ของทั้งสี่หลักแบบขนาน จากนั้น Arduino จะเปิดใช้งานเพียงหนึ่งในสี่ขา "common" ของ segment ในแต่ละครั้ง โดยจะกะพริบตัวเลขตามลำดับด้วยความถี่ที่สูงกว่า 50Hz สิ่งนี้จะหลอกตาของมนุษย์ (Persistence of Vision) ให้เห็นตัวเลขทั้งสี่หลักติดสว่างพร้อมกัน
- DHT22 (AM2302) Precision Protocol: DHT22 ใช้ Single-Bus Digital Interface (OneWire) ที่เป็นเอกลักษณ์ เมื่อ Arduino ดึงสายข้อมูลลงสู่ LOW เป็นเวลา 1-10ms, sensor จะทำงานและส่ง 40-bit packet ซึ่ง packet นี้ประกอบด้วย:
- 16 Bits สำหรับ Relative Humidity (ความละเอียด 0.1%)
- 16 Bits สำหรับ Temperature (-40°C ถึง +80°C, ความแม่นยำสัมบูรณ์ $\pm0.5^\circ\text{C}$)
- 8 Bits สำหรับ Error Checksum
- Firmware Loop Management: Firmware ทำงานในสองลูปที่แตกต่างกัน:
- The Sensor Loop: DHT22 ต้องการเวลาขั้นต่ำ 2 seconds ระหว่างการวัดค่าเพื่อป้องกันการเกิดความร้อนเอง โค้ดจะตรวจสอบให้แน่ใจว่าข้อมูลสภาพอากาศจะถูกรีเฟรชทุกๆ สองสามพัน milliseconds เท่านั้น
- The Refresh Loop: ตรรกะการ multiplexing จะต้องทำงานตลอดเวลาใน background โดยใช้ non-blocking delays (การจับเวลาด้วย
millis()) Arduino จะยังคงรักษา "Persistence of Vision" ของ display ไว้ได้ แม้ในระหว่างการสื่อสารแบบ digital ที่ช้ากับ sensor
- Hardware Interface Stability: 10k ohm resistor ที่ต่อระหว่าง VCC และ Data pin ของ DHT22 ทำหน้าที่เป็น pull-up เพื่อให้แน่ใจว่า bus ยังคงเป็น HIGH เมื่อไม่มีอุปกรณ์ใดดึงลงไป 1k ohm resistors ที่ขา segment แต่ละอันเป็น current-limiters ที่สำคัญ เพื่อปกป้อง digital pins ของ Arduino ไม่ให้เสียหายเนื่องจากกระแส peak สูงของ LEDs
Engineering & Reliability
- Accuracy vs. Cost: DHT22 เป็นที่นิยมในหมู่วิศวกรมากกว่า DHT11 เนื่องจากสามารถวัดอุณหภูมิติดลบและความชื้นได้ตั้งแต่ 0-100% ในขณะที่ DHT11 ถูกจำกัดให้อยู่ในอุณหภูมิที่ไม่ต่ำกว่าจุดเยือกแข็งและความชื้นสัมพัทธ์ 20-80% RH
- Low Component Count: ด้วยการขับเคลื่อน display แบบ "naked" (โดยไม่มี driver chip เฉพาะ เช่น TM1637) โปรเจกต์นี้ช่วยเพิ่มการเรียนรู้เกี่ยวกับการจัดการ bit ระดับต่ำและการควบคุมอิเล็กทรอนิกส์ได้สูงสุด
- Visual Calibration: display มีตรรกะ decimal point (DP) เพื่อแสดงค่าทศนิยม ซึ่งจำเป็นต่อการใช้ประโยชน์จากความละเอียด 0.1-degree ของ DHT22
- I/O Efficiency: บน Arduino UNO, digital pins เกือบทั้งหมดถูกใช้เพื่อจัดการการเดินสายของ display และ sensor ซึ่งทำให้มีข้อผิดพลาดน้อย แต่ก็เป็นบทเรียนที่ดีในการทำ pin mapping และการจัดวางวงจรไฟฟ้า