เปรียบเทียบเซ็นเซอร์ DHT11, DHT22 และ DS18B20: เลือกตัวไหนดีสำหรับโปรเจกต์ของคุณ?

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

📅 8 มีนาคม 2026⏱️ 10 นาที🎯 ระดับเริ่มต้น🏷️ Comparison
DHT11 DHT22 (AM2302) DS18B20 Temperature Sensor Humidity Sensor

🔍 ภาพรวม

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

  • DHT11: เซ็นเซอร์ราคาประหยัด เหมาะสำหรับมือใหม่
  • DHT22 (AM2302): เซ็นเซอร์คุณภาพสูง แม่นยำกว่า DHT11
  • DS18B20: เซ็นเซอร์วัดอุณหภูมิเท่านั้น แม่นยำสูงและทนทาน

💡 สรุปเลย: DHT11 = ถูก + ง่าย | DHT22 = แม่นยำ + วัดความชื้นดี | DS18B20 = ทนทาน + แม่นยำสูง + วัดอุณหภูมิเท่านั้น

📊 ตารางเปรียบเทียบ

คุณสมบัติ DHT11 DHT22 (AM2302) DS18B20
ชนิดเซ็นเซอร์ อุณหภูมิ + ความชื้น อุณหภูมิ + ความชื้น อุณหภูมิเท่านั้น
ช่วงวัดอุณหภูมิ 0°C to 50°C -40°C to 80°C -55°C to 125°C
ความแม่นยำอุณหภูมิ ±2°C ±0.5°C ±0.5°C
ช่วงวัดความชื้น 20% to 80% 0% to 100% -
ความแม่นยำความชื้น ±5% ±2-5% -
ความละเอียด 1°C, 1% 0.1°C, 0.1% 0.0625°C
แรงดันไฟ 3.3V - 5V 3.3V - 5V 3.0V - 5V
กระแสไฟ 0.5-2.5mA 1-1.5mA <1mA
Sampling period 1 เฮิรตซ์ (1 วินาที) 0.5 เฮิรตซ์ (2 วินาที) ถี่สูง (สูงสุด ~10 เฮิรตซ์)
ราคาโดยประมาณ ฿20-40 ฿60-100 ฿40-80
ความทนทาน ปานกลาง ปานกลาง สูง (Waterproof)

🌡️ DHT11 Temperature & Humidity Sensor

ข้อดี

  • ราคาถูกมาก (฿20-40)
  • ใช้งานง่าย เหมาะสำหรับมือใหม่
  • รองรับทั้ง 3.3V และ 5V
  • มี library พร้อมใช้งาน
  • ขนาดเล็ก ต่อใช้งานง่าย

ข้อเสีย

  • ความแม่นยำต่ำ (±2°C, ±5%)
  • ช่วงวัดแคบ (0-50°C)
  • อ่านค่าได้ช้า (1 ครั้ง/วินาที)
  • ความละเอียดต่ำ (1°C)
  • ไม่ทนทานต่อความชื้นสูง

เหมาะสำหรับ

  • โปรเจกต์เรียนรู้ / การศึกษา
  • โปรเจกต์งบประมาณต่ำ
  • การทดสอบและพัฒนา prototype
  • การตรวจสอบอุณหภูมิห้องทั่วไป

✅ เลือก DHT11 เมื่อ: ต้องการเซ็นเซอร์ถูกๆ สำหรับเรียนรู้ หรือโปรเจกต์ที่ไม่ต้องการความแม่นยำสูง

🌡️ DHT22 (AM2302) Temperature & Humidity Sensor

ข้อดี

  • แม่นยำกว่า DHT11 (±0.5°C, ±2-5%)
  • ช่วงวัดกว้าง (-40 to 80°C)
  • ความละเอียดสูง (0.1°C)
  • วัดความชื้นได้ 0-100%
  • ใช้ library เดียวกับ DHT11

ข้อเสีย

  • ราคาแพงกว่า DHT11
  • อ่านค่าได้ช้ากว่า (2 วินาที)
  • ยังคงมีความเสี่ยงเรื่องความชื้น
  • ไม่สามารถวัดอุณหภูมิต่ำกว่า 0°C ได้แม่นยำ

เหมาะสำหรับ

  • โปรเจกต์ Smart Home ทั่วไป
  • การตรวจสอบสภาพแวดล้อม
  • ระบบควบคุมความชื้น
  • โปรเจกต์ที่ต้องการความแม่นยำปานกลาง

✅ เลือก DHT22 เมื่อ: ต้องการความแม่นยำกว่า DHT11 แต่ยังต้องการวัดความชื้นด้วย

🌡️ DS18B20 Digital Temperature Sensor

ข้อดี

  • แม่นยำสูงมาก (±0.5°C)
  • ช่วงวัดกว้าง (-55 to 125°C)
  • ความละเอียดสูง (0.0625°C)
  • ใช้ OneWire protocol (เชื่อมต่อหลายตัวบน 1 ขา)
  • มีรุ่น Waterproof ทนทานต่อน้ำ
  • อ่านค่าได้เร็ว (สูงสุด ~10 Hz)
  • ประหยัดพลังงาน

ข้อเสีย

  • วัดอุณหภูมิได้เท่านั้น (ไม่มีความชื้น)
  • ใช้ library เฉพาะ (OneWire)
  • การเชื่อมต่อซับซ้อนกว่า DHT
  • ต้องใช้ pull-up resistor (4.7kΩ)

เหมาะสำหรับ

  • การวัดอุณหภูมิของเหลว
  • โปรเจกต์ outdoor / outdoor sensor
  • การวัดอุณหภูมิแม่นยำสูง
  • ระบบที่ต้องการเซ็นเซอร์หลายตัวบน bus เดียว

✅ เลือก DS18B20 เมื่อ: ต้องการความแม่นยำสูง วัดอุณหภูมิของเหลว หรือใช้งาน outdoor

🎯 คำแนะนำการเลือกใช้

🏠 สำหรับ Smart Home ในบ้าน

แนะนำ:DHT22

เหมาะสำหรับการตรวจสอบอุณหภูมิและความชื้นในห้อง มีความแม่นยำพอสมควรและราคาไม่แพง

🌊 สำหรับ Outdoor / วัดอุณหภูมิน้ำ

แนะนำ:DS18B20 (Waterproof)

ทนทานต่อสภาพอากาศ วัดอุณหภูมิของเหลวได้ แม่นยำสูงและเชื่อถือได้

🎓 สำหรับเรียนรู้ / Testing

แนะนำ:DHT11

ราคาถูก ใช้งานง่าย เหมาะสำหรับการเรียนรู้และทดสอบโปรเจกต์

🏭 สำหรับ Industrial / High Accuracy

แนะนำ:DS18B20หรือPT100 / Thermocouple

ต้องการความแม่นยำสูงและความเสถียร DS18B20 หรือเซ็นเซอร์ระดับ industrial

💻 ตัวอย่างโค้ด

DHT11 / DHT22 Code (Arduino)

dht_sensor.ino
/*
 * ตัวอย่างการใช้งาน DHT11/DHT22 กับ Arduino/ESP32
 * 
 * ฟังก์ชันนี้ใช้ได้ทั้ง DHT11 และ DHT22
 * เพียงแค่เปลี่ยน DHTTYPE ให้ตรงกับรุ่นที่ใช้
 */

#include "DHT.h"

// ==================== Configuration ====================
// DHT Sensor pin (เชื่อมต่อกับขาใดก็ได้)
#define DHTPIN 4     // Digital pin connected to the DHT sensor

// กำหนดประเภทเซ็นเซอร์ (เลือกตามรุ่นที่ใช้)
// #define DHTTYPE DHT11     // DHT 11
#define DHTTYPE DHT22     // DHT 22  (AM2302), AM2321
// #define DHTTYPE DHT21   // DHT 21 (AM2301)

// สร้าง object สำหรับ DHT sensor
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  
  // เริ่มต้น DHT sensor
  dht.begin();
  
  Serial.println("DHTxx Sensor Test");
  Serial.println("================");
}

void loop() {
  // รอ 2 วินาทีระหว่างการวัด (DHT sensor ช้า)
  delay(2000);

  // อ่านค่าความชื้น (เปอร์เซ็นต์)
  float humidity = dht.readHumidity();
  
  // อ่านค่าอุณหภูมิ (เซลเซียส)
  float temperature = dht.readTemperature();

  // ตรวจสอบว่าการอ่านค่าสำเร็จหรือไม่
  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  // แสดงผลใน Serial Monitor
  Serial.print("💧 Humidity: ");
  Serial.print(humidity);
  Serial.println(" %");
  
  Serial.print("🌡️ Temperature: ");
  Serial.print(temperature);
  Serial.println(" °C");
  
  // คำนวณ Heat Index (อุณหภูมิที่รู้สึกจริง)
  float heatIndexC = dht.computeHeatIndex(temperature, humidity, false);
  Serial.print("🔥 Heat Index: ");
  Serial.print(heatIndexC);
  Serial.println(" °C");
  
  Serial.println("----------------------------");
}

DS18B20 Code (Arduino)

ds18b20_sensor.ino
/*
 * ตัวอย่างการใช้งาน DS18B20 กับ Arduino/ESP32
 * 
 * ใช้ OneWire protocol สำหรับการเชื่อมต่อ
 * สามารถเชื่อมต่อเซ็นเซอร์หลายตัวบน 1 bus ได้
 */

#include <OneWire.h>
#include <DallasTemperature.h>

// ==================== Configuration ====================
// Data wire เชื่อมต่อกับขา GPIO 4 บน ESP32 (หรือขาใดก็ได้)
#define ONE_WIRE_BUS 4

// สร้าง OneWire object
OneWire oneWire(ONE_WIRE_BUS);

// สร้าง DallasTemperature object และส่ง OneWire object ไป
DallasTemperature sensors(&oneWire);

void setup() {
  Serial.begin(9600);
  
  // เริ่มต้น DS18B20 library
  sensors.begin();
  
  Serial.println("DS18B20 Temperature Sensor");
  Serial.println("===========================");
  
  // ตรวจสอบว่าพบเซ็นเซอร์กี่ตัว
  Serial.print("Found ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" sensors.");
  
  // ตั้งค่าความละเอียดเป็น 10 bits (ค่า 9-12 bits)
  sensors.setResolution(10);
}

void loop() {
  Serial.println("\nRequesting temperatures...");
  
  // สั่งให้เซ็นเซอร์วัดอุณหภูมิ
  sensors.requestTemperatures(); 
  
  // อ่านค่าอุณหภูมิจากเซ็นเซอร์ตัวแรก (index 0)
  float tempC = sensors.getTempCByIndex(0);
  
  // ตรวจสอบว่าการอ่านค่าสำเร็จหรือไม่
  if (tempC != DEVICE_DISCONNECTED_C) {
    Serial.print("🌡️ Temperature for Device 1: ");
    Serial.print(tempC);
    Serial.println(" °C");
    
    // แปลงเป็นฟาเรนไฮต์
    float tempF = DallasTemperature::toFahrenheit(tempC);
    Serial.print("   (");
    Serial.print(tempF);
    Serial.println(" °F)");
  } else {
    Serial.println("Error: Could not read temperature data!");
  }
  
  // ถ้ามีเซ็นเซอร์หลายตัว สามารถอ่านได้โดยใช้ index:
  // float tempC2 = sensors.getTempCByIndex(1);
  // float tempC3 = sensors.getTempCByIndex(2);
  
  // รอ 5 วินาทีก่อนวัดใหม่
  delay(5000);
}