DHT11 ve DHT22 Sıcaklık-Nem Sensörü
DHT serisi sensörler, tek bir gövdede hem sıcaklık hem bağıl nem ölçen dijital sensörlerdir. Ucuzdur, kütüphanesi hazırdır ve tek bir veri kablosuyla çalışır — bu yüzden hava istasyonu, sera kontrolü ve akıllı ev projelerinin standart sensörüdür.
DHT11 ve DHT22 Karşılaştırması
İkisi de aynı şekilde bağlanır ve aynı kütüphaneyle kullanılır. Fark tamamen performanstadır.
| Özellik | DHT11 (mavi) | DHT22 / AM2302 (beyaz) |
|---|---|---|
| Sıcaklık aralığı | 0 – 50 °C | −40 – 80 °C |
| Sıcaklık doğruluğu | ±2 °C | ±0,5 °C |
| Nem aralığı | %20 – %80 | %0 – %100 |
| Nem doğruluğu | ±%5 | ±%2 |
| Çözünürlük | 1 (tam sayı) | 0,1 (ondalık) |
| Okuma sıklığı | 1 saniyede bir | 2 saniyede bir |
| Fiyat | Daha ucuz | Daha pahalı |
Hangisini seçmeli? Sadece “sıcak mı soğuk mu” bilgisi yeterliyse DHT11 iş görür. Gerçek bir ölçüm istiyorsanız, negatif sıcaklık ölçecekseniz veya nem yüzdesi önemliyse DHT22 alın — aradaki fiyat farkı küçük, kalite farkı büyüktür.
Nasıl Çalışır?
Sensörün içinde iki ayrı algılayıcı vardır:
- Nem: İki elektrot arasındaki nem tutucu bir alt tabaka. Ortamdaki nem değiştikçe bu tabakanın direnci (veya kapasitesi) değişir.
- Sıcaklık: Bir NTC termistör. Sıcaklık arttıkça direnci düşer.
Gövde içindeki küçük bir denetleyici bu iki analog değeri okur, sayısala çevirir ve tek tel üzerinden özel bir protokolle gönderir. Bu protokol standart değildir; bu yüzden kütüphane kullanmak zorunludur.
Bağlantı
DHT22’nin delikli yüzü size bakarken pinler soldan sağa:
| Pin | İsim | Bağlantı |
|---|---|---|
| 1 | VCC | Arduino 5V (veya 3,3V) |
| 2 | DATA | Arduino dijital pini (örn. D2) |
| 3 | NC | Boş bırakılır |
| 4 | GND | Arduino GND |
Ayrıca pin 1 ile pin 2 arasına 10 kΩ pull-up direnci bağlanır.
Modül tipinde (3 pinli, üzerinde küçük kart olan) DHT sensörlerde pull-up direnci kart üzerinde zaten bulunur; harici direnç eklemeniz gerekmez.
Pull-up direnci ne işe yarar?
DATA hattı hem sensör hem Arduino tarafından kullanılan iki yönlü bir hattır. Kimse konuşmadığı anlarda hat boşta kalır ve gürültü toplar. Pull-up direnci hattı boştayken HIGH seviyeye çeker; böylece protokolün “başlangıç” ve “bitiş” sinyalleri güvenilir şekilde algılanır.
Direnç olmadan sensör bazen çalışır, bazen NaN döndürür — bu belirsizlik en can sıkıcı arıza türüdür.
Kütüphane Kurulumu
Arduino IDE’de Araçlar → Kütüphaneleri Yönet yolunu izleyin ve şu ikisini yükleyin:
| Kütüphane | Görevi |
|---|---|
| DHT sensor library (Adafruit) | Sensörle haberleşmeyi sağlar |
| Adafruit Unified Sensor | DHT kütüphanesinin bağımlılığıdır |
İkinci kütüphaneyi yüklemeyi unutmak, derleme sırasında Adafruit_Sensor.h: No such file or directory hatası verir.
Temel Kod
#include <DHT.h>
#define DHT_PIN 2
#define DHT_TYPE DHT22 // DHT11 kullaniyorsaniz DHT11 yazin
DHT dht(DHT_PIN, DHT_TYPE);
void setup() {
Serial.begin(9600);
dht.begin();
Serial.println("DHT sensor basliyor...");
delay(2000);
}
void loop() {
float nem = dht.readHumidity();
float sicaklik = dht.readTemperature();
if (isnan(nem) || isnan(sicaklik)) {
Serial.println("Sensor okunamadi!");
delay(2000);
return;
}
Serial.print("Sicaklik: ");
Serial.print(sicaklik, 1);
Serial.print(" C Nem: %");
Serial.println(nem, 1);
delay(2000); // DHT22 icin en az 2 saniye
}Okuma Sıklığı Sınırı
Bu, en sık gözden kaçan kısıttır.
- DHT11 en fazla saniyede bir
- DHT22 en fazla 2 saniyede bir okunabilir
Daha sık okumaya çalışırsanız sensör yeni ölçüm yapmaz; kütüphane önbellekteki eski değeri döndürür veya NaN verir. Grafik çizen bir projede bu, veri sanki donmuş gibi görünmesine yol açar.
Ayrıca sensör içindeki termistör, gövdenin kendi ısınmasından etkilenir. Çok sık okumak sensörü ısıtır ve ölçümü gerçekte olduğundan yüksek gösterir.
Isı İndeksi (Hissedilen Sıcaklık)
Kütüphane, sıcaklık ve nemi birleştirip hissedilen sıcaklığı da hesaplayabilir.
float hi = dht.computeHeatIndex(sicaklik, nem, false);
// false = Celsius, true = Fahrenheit
Serial.print("Hissedilen: ");
Serial.print(hi, 1);
Serial.println(" C");Yüksek nemde ter buharlaşamadığı için ortam gerçek sıcaklıktan daha sıcak hissedilir. Isı indeksi bunu hesaba katar.
NaN Hatası ve Çözümü
Sensor okunamadi! mesajı alıyorsanız sırasıyla şunları kontrol edin:
- Pull-up direnci var mı? 4 pinli çıplak sensörde 10 kΩ zorunludur.
- Kod içindeki tip doğru mu? DHT11 takıp
DHT22yazmak (veya tersi) her zamanNaNverir. - Pin numarası doğru mu? Koddaki
DHT_PINile fiziksel bağlantı eşleşmeli. - Okuma çok mu sık?
delay(2000)koyun. - Kablo çok mu uzun? 20 cm’yi aşan kablolarda sinyal bozulur. Uzun mesafede pull-up direncini 4,7 kΩ’a düşürün ve blendajlı kablo kullanın.
- Sensör ters mi bağlı? VCC ve GND yer değiştirmişse sensör ısınır. Elinizle dokunup kontrol edin; sıcaksa hemen enerjiyi kesin, sensör muhtemelen yanmıştır.
- Besleme yeterli mi? USB üzerinden beslenen ve aynı anda motor süren bir devrede gerilim düşer. Sensör beslemesine 100 nF kondansatör ekleyin.
Birden Fazla DHT Kullanma
Her sensör kendi dijital pinine bağlanır ve ayrı bir nesne olarak tanımlanır. Aynı pini paylaşamazlar.
#include <DHT.h>
DHT dhtIc(2, DHT22);
DHT dhtDis(3, DHT22);
void setup() {
Serial.begin(9600);
dhtIc.begin();
dhtDis.begin();
}
void loop() {
float icSicaklik = dhtIc.readTemperature();
float disSicaklik = dhtDis.readTemperature();
Serial.print("Ic: ");
Serial.print(icSicaklik, 1);
Serial.print(" C Dis: ");
Serial.print(disSicaklik, 1);
Serial.println(" C");
delay(2500);
}Sensörü Doğru Konumlandırmak
Doğru sensör yanlış yere konursa yanlış ölçer.
- Doğrudan güneş ışığından uzak tutun; sensör gövdesi ısınır.
- Isı üreten bileşenlerden (regülatör, motor sürücü, ekran) uzağa yerleştirin. Kart üzerine yakın monte edilen bir DHT, ortamdan 2–3 °C yüksek okur.
- Hava akımı olan bir noktaya koyun; kapalı bir kutunun içi ortamı temsil etmez.
- Dış ortamda yağmurdan korunaklı ama havalandırmalı bir muhafaza kullanın (Stevenson tipi radyasyon kalkanı).
Alternatif Sensörler
| Sensör | Ölçtüğü | Protokol | Not |
|---|---|---|---|
| DS18B20 | Sıcaklık | 1-Wire | Su geçirmez versiyonu var, çok hassas |
| BME280 | Sıcaklık, nem, basınç | I2C | En kapsamlısı, yüksek doğruluk |
| BMP280 | Sıcaklık, basınç | I2C | Nem ölçmez, ucuz |
| SHT31 | Sıcaklık, nem | I2C | Endüstriyel doğruluk |
| LM35 / TMP36 | Sıcaklık | Analog | Kütüphanesiz, basit |
Nem ölçümü kritikse ve bütçeniz varsa BME280 veya SHT31, DHT22’den belirgin şekilde üstündür. Sadece sıcaklık ölçecekseniz DS18B20 daha hassas ve daha hızlıdır.
Özet
DHT11 ve DHT22, tek bir veri hattı üzerinden sıcaklık ve nem bilgisi gönderen dijital sensörlerdir. DHT22 daha geniş aralık, daha yüksek doğruluk ve ondalık çözünürlük sunar.
Bu derste şunları öğrendik:
- DHT11 ile DHT22 arasındaki farkları
- 10 kΩ pull-up direncinin neden gerektiğini
- Adafruit DHT ve Unified Sensor kütüphanelerini
- Okuma sıklığı sınırını (DHT22 için 2 saniye)
NaNhatasının yedi olası nedenini- Sensörü doğru konumlandırmayı
- BME280, SHT31 ve DS18B20 alternatiflerini