วิธีใช้งาน Arduino DHT22 AM2302 Module วัดอุณหภูมิและความชื้น
วิธีใช้งาน Arduino DHT22 AM2302 Module วัดอุณหภูมิและความชื้น
บทความนี้จะพาต่อ DHT22 AM2302 Module V3.0 กับ Arduino UNO แล้วเขียนโค้ดอ่านค่าความชื้น (Humidity) กับอุณหภูมิ (Temperature) ออกมาแสดงผลผ่าน Serial Monitor
DHT22 vs DHT11 เลือกตัวไหนดี
DHT22 ย่อมาจาก High Accuracy Digital Temperature and Humidity Sensor ตัวเซ็นเซอร์รวมวัดทั้งอุณหภูมิและความชื้นในตัวเดียว ต่างจาก DHT11 ตรงที่ความแม่นยำสูงกว่า
| สเปค | DHT22 | DHT11 |
|---|---|---|
| ความแม่นยำความชื้น | ±2%RH (สูงสุด ±5%RH) | ±5%RH |
| ความแม่นยำอุณหภูมิ | ±0.5°C | ±2°C |
| รองรับช่วงความชื้น | 0-100%RH | 20-90%RH |
| รองรับช่วงอุณหภูมิ | -40 ถึง 80°C | 0 ถึง 50°C |
| ราคา (ประมาณ) | ~150-200 บาท | ~50 บาท |
ถ้าต้องการวัดค่าแม่นยำแนะนำ DHT22 เลย โค้ด Arduino เขียนเหมือน DHT11 สามารถเปลี่ยนเซ็นเซอร์ได้โดยไม่ต้องแก้โค้ดมาก
อุปกรณ์ที่ต้องเตรียม
- Arduino UNO R3
- DHT22 AM2302 Module V3.0
- สาย USB สำหรับอัพโหลดโค้ด
- บอร์ดทดลอง (Breadboard) ถ้าต้องการจัดวางสายให้เป็นระเบียบ
- สายจัมเปอร์ ผู้-ผู้ หรือ ผู้-เมีย ตามชอบ
วิธีต่อวงจร DHT22 กับ Arduino
DHT22 AM2302 Module V3.0 มีขา 3 ขา ต่องตามนี้
| ขา Module | ต่อกับ | หมายเหตุ |
|---|---|---|
| VCC | 5V (Arduino) | จ่ายไฟ 5V |
| GND | GND (Arduino) | กราวด์ร่วม |
| DAT | ขา D2 (Arduino) | ขาสัญญาณ data |
ข้อดีของ Module V3.0 คือมีตัวต้านทาน Pull-up ติดมาบนบอร์ดแล้ว ต่อสาย 3 เส้นเข้า Arduino ได้เลยไม่ต้องต่อ R ภายนอกเพิ่ม ถ้าใช้ DHT22 แบบแผงเปล่า (ไม่ใช่ Module) ต้องต่อ R 4.7k - 10k ระหว่าง VCC กับ DAT ด้วย
วิธีติดตั้ง Library สำหรับ DHT22
ต้องลง Library 2 ตัว คือ
- DHT-sensor-library - ตัวหลักสำหรับอ่านค่าจาก DHT sensor
- Adafruit_Sensor - dependency ที่ตัวหลักต้องการ
ดาวน์โหลด Library จาก Mediafire ที่ให้ไว้ในบทความต้นทาง หรือหาใน Arduino Library Manager ก็ได้
วิธีลง Library ด้วยไฟล์ zip:
- ดาวน์โหลดไฟล์ .zip ทั้ง 2 ตัว
- แยกไฟล์ด้วย WinRAR หรือ WinZip
- Copy โฟลเดอร์ที่แยกออกมาไปวางใน
Documents/Arduino/libraries/ - ปิด Arduino IDE แล้วเปิดใหม่
โค้ด Arduino อ่านค่า DHT22
#include <DHT.h>
#define DHTPIN 2 // ขา DATA ต่อกับ D2
#define DHTTYPE DHT22 // ประกาศว่าใช้ DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
Serial.println("DHT22 Test Ready");
}
void loop() {
// รอเซ็นเซอร์พร้อมวัด เพราะ DHT22 ใช้เวลา ~2 วินาทีต่อครั้ง
delay(2000);
float humidity = dht.readHumidity();
float temperature = dht.readTemperature(); // Celsius
// ตรวจสอบว่าอ่านค่าได้ไหม
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// แสดงผลความชื้น
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
// แสดงผลอุณหภูมิ
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" *C\t");
// คำนวณ Heat Index (ดัชนีความร้อนที่ผิวสัมผัสรู้สึก)
float heatIndex = dht.computeHeatIndex(temperature, humidity, false);
Serial.print("Heat Index: ");
Serial.print(heatIndex);
Serial.println(" *C");
}
ถ้าต้องการเปลี่ยนไปใช้ DHT11 แทน แก้บรรทัด #define DHTTYPE DHT22 เป็น DHT11 ได้เลย ส่วนขา DATA ก็ปรับได้ตามสะดวกแต่ต้องแก้ DHTPIN ให้ตรงกับขาที่ต่อจริง
วิธีอัพโหลดโค้ดและดูผลลัพธ์
- เปิด Arduino IDE แล้ว Copy โค้ดด้านบนไปวาง
- เลือก Board: Arduino UNO จากเมนู Tools > Board
- เลือก Port ที่บอร์ดเสียบอยู่จากเมนู Tools > Port
- กด Upload (รูปลูกศรขวา) รอจนขึ้น “Done uploading.”
- เปิด Serial Monitor (รูปแว่นขยาย) ตั้งความเร็ว 9600 baud
- จะเห็นค่าความชื้น อุณหภูมิ และ Heat Index แสดงทุก 2 วินาที
[image: หน้าต่าง Serial Monitor แสดงค่า Humidity, Temperature, Heat Index ในรูปแบบตาราง]
ทดสอบ DHT22 ด้วยวิธีง่าย ๆ
หลังจากอ่านค่าได้แล้ว ลองทดสอบความไวของเซ็นเซอร์ด้วยวิธีนี้
ทดสอบด้วยผ้าเย็น
เอาผ้าชื้นเย็นวางบนตัวเซ็นเซอร์ จะเห็นค่าความชื้นเพิ่มขึ้นช้า ๆ แล้วค่อย ๆ ลดลงเมื่อเอาผ้าออก ส่วนอุณหภูมิจะลดลงเร็วกว่า
ทดสอบด้วยลมร้อน
ใช้ไดร์เป่าผมเป่าลมร้อนไปที่หัวเซ็นเซอร์ ค่าความชื้นจะลดลงเร็วมากเพราะความร้อนทำให้ไอน้ำในอากาศระเหยไป พอปิดไดร์ค่าความชื้นจะค่อย ๆ กลับมาเป็นปกติ
[image: กราฟเปรียบเทียบค่าความชื้นและอุณหภูมิเมื่อทดสอบด้วยผ้าเย็นและไดร์เป่าผม]
วิดีโออ้างอิง
สรุป
DHT22 AM2302 Module V3.0 ต่อใช้งานง่ายเพราะมี Pull-up มาบนบอร์ด ต่อสาย 3 เส้น เสียบ Library 2 ตัว แล้วอัพโค้ดไปก็ใช้งานได้เลย ความแม่นยำสูงกว่า DHT11 มาก เหมาะสำหรับงานที่ต้องการวัดอุณหภูมิและความชื้นแบบแม่นยำ เช่น ระบบควบคุมสภาพอากาศ โรงเรือน ห้องเซิร์ฟเวอร์ หรือสถานีตรวจอากาศ
อยากทำโปรเจคแบบนี้?
รับทำโปรเจค Arduino / IoT จบงานไว ส่งงานครบ พร้อมสอน
หากต้องการ รับทำโปรเจคอาดูโน่ หรือระบบ IoT แบบเร่งด่วน สามารถดูรายละเอียดบริการได้ที่หน้ารวมบริการ
จ้างทำโปรเจคเลย