DHT11 คืออะไร? วิธีใช้งานเซ็นเซอร์วัดอุณหภูมิและความชื้น
DHT11 คือเซนเซอร์ดิจิทัลสำหรับวัด อุณหภูมิ (Temperature) และ ความชื้นสัมพัทธ์ (Relative Humidity) ในอากาศ เป็นหนึ่งในเซนเซอร์ที่ได้รับความนิยมมากที่สุดสำหรับโปรเจกต์ Arduino และงานอดิเรกด้านอิเล็กทรอนิกส์ เนื่องจากใช้งานง่าย, ราคาถูก, และให้ผลลัพธ์ที่แม่นยำในระดับหนึ่ง
ภายในตัว DHT11 ประกอบด้วยตัววัดความชื้นแบบ Capacitive และตัววัดอุณหภูมิแบบ Thermistor พร้อมวงจรแปลงสัญญาณ Analog เป็น Digital ทำให้สามารถส่งข้อมูลออกมาทางสายสัญญาณเพียงเส้นเดียวได้
สเปคของ DHT11
ช่วงวัดความชื้น |
20–90% RH (ความคลาดเคลื่อน ±5% RH) |
ช่วงวัดอุณหภูมิ |
0–50°C (ความคลาดเคลื่อน ±2°C) |
แรงดันไฟเลี้ยง |
3.3V – 5.5V |
สัญญาณเอาต์พุต |
ดิจิทัล (แบบ Single-wire bus) |
อัตราการอ่านข้อมูล |
สูงสุด 1 ครั้งต่อวินาที (1Hz) |
จำนวนขา |
3 หรือ 4 ขา (หากเป็นโมดูลจะใช้จริง 3 ขา) |
การใช้งาน DHT11 กับ Arduino
1. การต่อสาย
ขาบน DHT11 |
ต่อกับขาบน Arduino |
VCC (หรือ +) |
5V |
GND (หรือ -) |
GND |
DATA (หรือ OUT) |
ขา Digital ใดก็ได้ (เช่น D2) |
หมายเหตุ: หากใช้เซนเซอร์ DHT11 แบบ 4 ขาที่ไม่มีแผงวงจร (โมดูล) อาจต้องต่อตัวต้านทาน Pull-up ขนาด 4.7KΩ - 10KΩ ระหว่างขา VCC และขา DATA ด้วย แต่ถ้าเป็นแบบโมดูล (3 ขา) ส่วนใหญ่จะมีตัวต้านทานนี้มาให้แล้ว
2. การติดตั้งไลบรารี
ก่อนเขียนโค้ด จำเป็นต้องติดตั้งไลบรารีสำหรับ DHT Sensor ก่อน:
- เปิดโปรแกรม Arduino IDE ไปที่เมนู Tools > Manage Libraries...
- ในช่องค้นหา พิมพ์ "DHT sensor library"
- มองหาไลบรารีจาก Adafruit และกดปุ่ม "Install" (โปรแกรมอาจถามให้ติดตั้งไลบรารีอื่นที่เกี่ยวข้องด้วย ให้กด Install all)
3. ตัวอย่างโค้ด Arduino
โค้ดนี้จะอ่านค่าอุณหภูมิและความชื้นจาก DHT11 ทุกๆ 2 วินาที แล้วแสดงผลทาง Serial Monitor
#include <DHT.h>
// กำหนดขาและประเภทของเซนเซอร์
#define DHTPIN 2 // ขา DATA ของ DHT11 ต่อกับขา D2 ของ Arduino
#define DHTTYPE DHT11 // กำหนดประเภทเซนเซอร์เป็น DHT11
// สร้าง object ของ DHT
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("DHT11 test!");
// เริ่มต้นการทำงานของเซนเซอร์
dht.begin();
}
void loop() {
// รอ 2 วินาทีก่อนที่จะอ่านค่าครั้งต่อไป
delay(2000);
// อ่านค่าความชื้น
float h = dht.readHumidity();
// อ่านค่าอุณหภูมิเป็นเซลเซียส
float t = dht.readTemperature();
// อ่านค่าอุณหภูมิเป็นฟาเรนไฮต์ (ถ้าต้องการ)
// float f = dht.readTemperature(true);
// ตรวจสอบว่าการอ่านค่าสำเร็จหรือไม่
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return; // ออกจาก loop แล้วเริ่มใหม่
}
// แสดงผลค่าที่อ่านได้
Serial.print("ความชื้น: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("อุณหภูมิ: ");
Serial.print(t);
Serial.println(" *C");
}