กลับไปหน้ารวมไฟล์
interfacing-dht22dht11-with-arduino-uno-3349f8.md

ในบทนี้เราจะมาดูวิธีการเชื่อมต่อเซ็นเซอร์ DHT22 และ DHT11 กับ Arduino Uno กัน เริ่มแรกเราต้องรู้จักอุปกรณ์พวกนี้ให้ละเอียดก่อน งั้นมาเริ่มกันเลย!!!

DHT22 กับ DHT11 นี่คือเซ็นเซอร์วัดอุณหภูมิและความชื้นพื้นฐานสุดๆ ทั้งคู่ใช้เทอร์มิสเตอร์ (Thermistor) และเซ็นเซอร์วัดความชื้นแบบ capacitive ในการวัดค่าอากาศรอบตัว เซ็นเซอร์วัดความชื้นแบบ capacitive ใช้สำหรับวัดความชื้นสัมพัทธ์ (Relative Humidity) ในช่วง 5 ถึง 95% RH ส่วนเทอร์มิสเตอร์คือตัวต้านทานที่ค่าความต้านทานเปลี่ยนไปตามอุณหภูมิ เราวัดค่าความต้านทานของมันได้ด้วยโอห์มมิเตอร์ เซ็นเซอร์ทั้งสองตัวทำงานค่อนข้างช้านะ แต่ข้อดีคือกินไฟน้อยและเสถียรในระยะยาว DHT22 นี่แม่นยำและดีกว่า DHT11 เยอะเลย DHT11 วัดความชื้นได้ในช่วง 5-95% RH ด้วยความแม่นยำ ±5% และวัดอุณหภูมิได้ -20 ถึง 60℃ ด้วยความแม่นยำ ±2% ส่วน DHT22 วัดความชื้นได้ 0 ถึง 99.9% RH แม่นยำ ±2% และวัดอุณหภูมิได้ -40 ถึง 80℃ แม่นยำ ±0.5℃

พื้นฐานการตรวจจับสภาพแวดล้อมแบบดิจิทัล

โปรเจคนี้เป็นคู่มือครบวงจรสำหรับการดึงข้อมูลอุณหภูมิและความชื้นความแม่นยำสูงโดยใช้เซ็นเซอร์ดิจิทัลตระกูล DHT ที่ฮิตกัน เซ็นเซอร์พวกนี้สื่อสารด้วยโปรโตคอลดิจิทัลที่แม่นยำ:

  • การจับมือด้วยเวลาแบบ Single-Wire: Arduino จะเริ่มการสื่อสารโดยดึงขา Data ลงลอว์ (Low) เป็นเวลา 1ms (เป็นสัญญาณเริ่มต้น) เซ็นเซอร์ DHT จะตอบกลับด้วยชุดพัลส์ความกว้าง 80µs ฟิร์มแวร์ของ Arduino จะวัดความกว้างของพัลส์เหล่านี้เพื่อถอดรหัสแพ็กเก็ตข้อมูล 40 บิตที่ประกอบด้วยค่าความชื้น, อุณหภูมิ และ checksum
  • การตรวจสอบข้อผิดพลาดด้วย CRC: Arduino จะคำนวณ checksum จากบิตข้อมูลความชื้นและอุณหภูมิที่ได้รับ ถ้าผลรวมที่คำนวณได้ไม่ตรงกับ parity byte ที่เข้ามา ฟิร์มแวร์จะเพิกเฉยข้อมูลนั้น ทำให้มั่นใจได้ว่ามีเฉพาะค่าที่แม่นยำเท่านั้นที่จะถูกแสดงผล
  • ช่วงเวลาการสุ่มตัวอย่างที่เหมาะสม: โค้ดจะบังคับให้มี "ช่วงพัก (Rest Period)" 2 วินาทีระหว่างการอ่านค่าแต่ละครั้ง ตามที่ระบุใน datasheet ของ DHT เพื่อป้องกันไม่ให้ความร้อนภายในตัวเซ็นเซอร์เอง (self-heating) ส่งผลต่อความแม่นยำของข้อมูลอุณหภูมิห้อง

ขา (Pinout) ของ DHT11 และ DHT22

เซ็นเซอร์ทั้งสองตัวมีขาเรียงคล้ายกันมาก มีทั้งหมด 4 ขา คือ Gnd, Vcc, Analog และ Data

  • Gnd ต้องต่อกับกราวด์ (Ground) ของ Arduino หรือวงจร
  • Vcc ต่อได้กับไฟเลี้ยง 3.3V หรือ 5V ของ Arduino
  • ขา Data จะส่งออกข้อมูลอุณหภูมิและความชื้นผ่านข้อมูลแบบอนุกรม (Serial Data) และต้องต่อกับขา Digital Pin ใดขาหนึ่งของ Arduino ตามที่กำหนดในโค้ด

Pinout of DHT11

Pinout of DHT22

Arduino Uno

Arduino Uno คือไมโครคอนโทรลเลอร์ที่ใช้ชิป ATmega328p มีขา Digital 14 ขา, ขา Analog 6 ขา, คริสตัลเรโซเนเตอร์ 16 MHz, พอร์ต USB, ช่องเสียบไฟ, เฮดเดอร์ ICSP และปุ่มรีเซ็ต จ่ายไฟได้จากแท็บเล็ต, โน้ตบุ๊ค, มือถือผ่านสาย USB หรือใช้แบตเตอรี่ภายนอก Arduino Uno ถูกโปรแกรมโดยใช้ซอฟต์แวร์ Arduino IDE

Arduino Uno

มาเริ่มต่อวงจรกันเถอะ การต่อสายมีดังนี้:

  • ขา Gnd (-) ของ DHT22/DHT11 ต่อกับ Gnd ของ Arduino Uno
  • ขา Data/Out ของ DHT22/DHT11 ต่อกับ ขา Digital Pin 9 ของ Arduino Uno
  • ขา Vcc (+) ของ DHT22/DHT11 ต่อกับ 5V ของ Arduino Uno

หมายเหตุ: วงจรที่ให้ด้านล่างเป็นการเชื่อมต่อ DHT22 กับ Arduino Uno ใช้การต่อสายแบบเดียวกันได้เลยสำหรับ DHT11

Interfacing of DHT22 and Arduino uno

โค้ดสำหรับโปรเจคอยู่ด้านล่าง ถ้าอยากเชื่อมต่อ Arduino Uno กับ DHT11 ก็แค่เปลี่ยนประเภท DHT จาก DHT22 เป็น DHT11 ในโค้ด บรรทัดที่ 3 ก่อนอัปโหลดโค้ดลงไมโครคอนโทรลเลอร์ ต้องแน่ใจว่าได้ดาวน์โหลดไลบรารีของเซ็นเซอร์มาแล้ว ขั้นตอนการดาวน์โหลดไลบรารีมีดังนี้:

  1. ไปที่เมนู Tools ในซอฟต์แวร์ IDE

ในเมนู Tools นะน้อง จะมีตัวเลือกนึงชื่อว่า "Manage libraries" อยู่ พอกดเข้าไปแล้ว จะเจอช่องให้ค้นหา (search) ตรงนั้นแหละ หาคำว่า DHT11 หรือ DHT22 ก็เจอไลบรารี่สำหรับเซ็นเซอร์ทั้งสองตัวเลย

ไลบรารี่ของ Adafruit นี่แหละตัวดี ใช้ได้กับทั้ง DHT11 และ DHT22 จัดไปวัยรุ่น

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

apps:
  - "1x Arduino IDE"
author: "electronicsfan123"
category: ""
components:
  - "1x Jumper wires (generic)"
  - "1x Breadboard (generic)"
  - "1x Arduino UNO"
  - "1x DHT11 Temperature & Humidity Sensor (4 pins)"
  - "1x DHT22 Temperature Sensor"
description: "มาเรียนวิธีต่อเซนเซอร์วัดอุณหภูมิและความชื้น DHT22/DHT11 กับบอร์ด Arduino Uno กันเถอะ วัยรุ่น! จะได้ทำโปรเจคเทพๆ จัดไปแบบไม่ต้องง้อใคร"
difficulty: "Easy"
documentationLinks: []
downloadableFiles: []
encryptedPayload: "U2FsdGVkX1/kKumoS+YU+h1xWiyv/hDzSH+pWAXc3xl0XHBV0OL/reGpP4U6dDL4j/xtgjV7XGsGdMxbRVdvEnP+0tVBE8abZ1q43sRXDX4="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/interfacing-dht22dht11-with-arduino-uno-3349f8_cover.jpg"
lang: "en"
likes: 2
passwordHash: "b07bcb251617f02aa59b15471efd36e530b9fbac0f4f1d3f53a7a45fde17301d"
price: 870
seoDescription: "Learn how to interface DHT22 and DHT11 sensors with Arduino uno in this step-by-step tutorial."
tags: []
title: "วัดอุณหภูมิ-ความชื้นแบบตึงๆ ด้วย DHT22/DHT11 + Arduino Uno งานง่ายแต่หล่อ!"
tools: []
videoLinks: []
views: 4545