กลับไปหน้ารวมไฟล์
dht22-and-4-digit-7-segment-display-89a58b.md

ชื่อโปรเจกต์: 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 นี้ประกอบด้วย:
    1. 16 Bits สำหรับ Relative Humidity (ความละเอียด 0.1%)
    2. 16 Bits สำหรับ Temperature (-40°C ถึง +80°C, ความแม่นยำสัมบูรณ์ $\pm0.5^\circ\text{C}$)
    3. 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 และการจัดวางวงจรไฟฟ้า

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

title: "DHT22 and 4-digit 7-segment display"
description: "To display temperature & humidity readings"
author: "c010rblind3ngineer"
category: "Environmental Sensing"
tags:
  - "weather"
  - "DHT22"
  - "7-segment"
  - "monitoring"
views: 4423
likes: 0
price: 870
difficulty: "Intermediate"
components:
  - "1x Breadboard (generic)"
  - "1x Jumper wires (generic)"
  - "1x Arduino UNO"
  - "1x DHT22 Temperature Sensor"
  - "1x 4-digit 7-segment display"
  - "4x Resistor 1k ohm"
  - "1x Resistor 10k ohm"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles:
  - "https://projects.arduinocontent.cc/f22a3e65-250b-4119-b156-1380a368720b.ino"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/dht22-and-4-digit-7-segment-display-89a58b_cover.jpg"
lang: "th"