Parçalar · 4 dk okuma

DHT11 Sıcaklık ve Nem Sensörü: Arduino, ESP32 ve Pico ile Kullanımı

DHT11 sıcaklık ve nem sensörü nedir, nasıl çalışır? Arduino bağlantısı, DHT kütüphanesi, örnek kod, DHT11 ile DHT22 farkı, ESP32 ve Pico kullanımı ve sık yapılan hatalar.

DHT11, tek bir veri kablosundan hem sıcaklığı hem de bağıl nemi okuyabildiğin, mavi plastik gövdeli ucuz bir dijital sensördür. Arduino ile yapılan hava istasyonlarının, sera ve saksı takip sistemlerinin, bebek odası termometrelerinin ve nem yükselince fanı çalıştıran akıllı ev projelerinin neredeyse hepsinde karşına çıkar. Analog bir sensör gibi gerilim ölçüp formülle uğraşmazsın; sensör ölçtüğü değeri hazır sayı olarak gönderir.

DHT11 sıcaklık ve nem sensörü
DHT11: ızgaralı mavi gövdenin içinde nem ölçen bir eleman ve küçük bir termistör bulunur.

DHT11 nedir, nerelerde kullanılır?

Sensörün ölçtüğü nem bağıl nemdir: havanın o sıcaklıkta taşıyabileceği en fazla su buharının yüzde kaçını taşıdığını gösterir. %40–60 arası insan için rahat kabul edilir; %70'in üstü küf ve rutubet, %30'un altı ise kuru hava demektir. DHT11 bu değeri ve ortam sıcaklığını yaklaşık saniyede bir ölçer.

  • Ev hava istasyonu: Sıcaklık ve nemi bir LCD ya da OLED ekranda gösterme.
  • Sera ve bitki takibi: Nem düşünce uyarı verme, toprak nem sensörüyle birlikte sulama.
  • Rutubet ve küf uyarısı: Banyo, bodrum ya da dolapta nem %70'i geçince sesli uyarı.
  • Otomatik fan ya da nem alma cihazı: Nem eşiği aşınca bir röle ile cihazı çalıştırma.
  • Veri kaydedici: Ölçümleri SD karta yazıp günlük grafik çıkarma.
  • İnternetten izleme: ESP32 ile değerleri telefondan görülebilen bir web sayfasına taşıma.

DHT11 nasıl çalışır?

Gövdenin içinde iki ölçüm elemanı vardır. Nem elemanı, iki elektrot arasında nemi emen bir malzemeden oluşur; havadaki nem arttıkça malzemenin direnci azalır. Sıcaklık için ise bir NTC termistör kullanılır: sıcaklık arttıkça direnci düşen küçük bir direnç. Sensörün içindeki minik mikrodenetleyici bu iki direnci ölçer, fabrikada kaydedilmiş kalibrasyon değerleriyle düzeltir ve sonucu dijital olarak gönderir.

Haberleşme tek kablo üzerinden olur. Arduino veri hattını en az 18 milisaniye LOW tutarak sensörü uyandırır; sensör de 40 bitlik bir paketle cevap verir: 16 bit nem, 16 bit sıcaklık ve hatalı okumayı yakalamak için 8 bitlik bir kontrol toplamı. Bu zamanlamayı kendin yazman gerekmez; aşağıda kuracağımız kütüphane hepsini yapar.

Teknik özellikler: DHT11 ve DHT22 farkı

ÖzellikDHT11DHT22 (AM2302)
Besleme gerilimi3–5,5 V3,3–6 V
Ölçüm sırasında akım0,5–2,5 mA1–1,5 mA
Sıcaklık aralığı0–50 °C−40–80 °C
Sıcaklık doğruluğu±2 °C±0,5 °C
Nem aralığı%20–90%0–100
Nem doğruluğu±%5±%2 (en fazla ±%5)
Çözünürlük1 °C / %10,1 °C / %0,1
Okuma sıklığıSaniyede 12 saniyede 1
Gövde rengiMaviBeyaz
DHT22 AM2302 sıcaklık ve nem sensörü
DHT22 (AM2302): beyaz gövdeli, eksi dereceleri de ölçebilen ve daha hassas olan kardeşi.

Kısacası: oda içinde sıcaklık ve nemi kabaca izlemek istiyorsan DHT11 yeterli ve daha ucuzdur. Dış ortamda, sıfırın altındaki sıcaklıklarda ya da yarım derecelik farkın önemli olduğu işlerde DHT22 seçmelisin. İkisinin bağlantısı ve kodu aynıdır; kodda yalnızca sensör tipini değiştirirsin.

DHT11 pin bağlantısı

DHT11 iki şekilde satılır: üzerinde direnç ve LED bulunan 3 pinli modül ya da 4 bacaklı çıplak sensör. Çıplak sensörde bacakları, ızgaralı yüz sana bakarken soldan sağa sayarsın.

Sinyal3 pinli modül4 bacaklı sensörNereye bağlanır?
BeslemeVCC (+)1. bacak5V (ESP32 ve Pico'da 3V3)
VeriDATA / OUT / S2. bacakDijital pin (Uno'da D2)
Boş—3. bacakBağlanmaz
ToprakGND (−)4. bacakGND
Çıplak sensör kullanıyorsan veri bacağı ile VCC arasına mutlaka 10 kΩ pull-up direnç bağla; kablo birkaç metreyi geçiyorsa 4,7 kΩ kullan. Modül kartlarında bu direnç hazır olduğu için ek bir şey gerekmez. Direncin değerini renklerinden okumak için Direnç Renk Kodu aracını kullanabilirsin.

DHT kütüphanesini kurmak

  1. Arduino IDE'de Kütüphane Yöneticisi'ni aç (Arduino IDE 2'de sol menüdeki kitap simgesi).
  2. Arama kutusuna DHT sensor library yaz ve Adafruit'in kütüphanesini kur.
  3. Bağımlılıkları sorduğunda Install all seçeneğiyle Adafruit Unified Sensor kütüphanesini de kur.
  4. İstersen Dosya > Örnekler > DHT sensor library > DHTtester ile hazır örneği de deneyebilirsin.

Arduino örnek kodu: sıcaklık, nem ve hissedilen sıcaklık

Aşağıdaki kod iki saniyede bir ölçüm alır, okuma başarısızsa bunu bildirir ve sıcaklıkla nemi birleştirerek hissedilen sıcaklığı (heat index) hesaplar. Sonuçları görmek için Seri Monitör'ü 9600 baud hızında aç.

Arduino (C++)
1#include <DHT.h>
2
3#define DHT_PIN 2          // veri pini / data pin
4#define DHT_TYPE DHT11     // DHT22 kullanıyorsan DHT22 yaz / write DHT22 for a DHT22
5
6DHT dht(DHT_PIN, DHT_TYPE);
7
8void setup() {
9  Serial.begin(9600);
10  dht.begin();
11}
12
13void loop() {
14  delay(2000);                                // ölçümler arası bekleme / wait between readings
15
16  float humidity = dht.readHumidity();        // % bağıl nem / % relative humidity
17  float temperature = dht.readTemperature();  // °C
18
19  if (isnan(humidity) || isnan(temperature)) {
20    Serial.println("Okuma hatası / read error");
21    return;
22  }
23
24  // hissedilen sıcaklık / heat index (°C)
25  float heatIndex = dht.computeHeatIndex(temperature, humidity, false);
26
27  Serial.print("Sicaklik / Temp: ");
28  Serial.print(temperature);
29  Serial.print(" C  Nem / Humidity: %");
30  Serial.print(humidity);
31  Serial.print("  Hissedilen / Feels like: ");
32  Serial.print(heatIndex);
33  Serial.println(" C");
34}
DHT11 saniyede en fazla bir, DHT22 ise iki saniyede bir ölçüm yapar. Okumalar arasında 2 saniye beklemek ikisinde de güvenlidir. Daha sık okumak yeni bir değer getirmez; kütüphane son ölçümü tekrar verir ya da hata döner.

ESP32 ile DHT11 kullanımı

ESP32'de yukarıdaki kodun aynısı çalışır; yalnızca DHT_PIN değerini örneğin 4 yap. Sensörü ESP32'nin 3V3 pininden besle ki veri hattı da 3,3 V'ta kalsın; DHT11 bu gerilimde rahatça çalışır. GPIO 34–39 yalnızca giriş olduğu için DHT'ye uygun değildir, çünkü veri hattı iki yönlüdür. Pin seçerken Pinout aracından ESP32'nin hangi pinlerinin güvenli olduğuna bakabilirsin. Ölçtüğün değerleri Wi-Fi üzerinden bir web sayfasında göstererek telefondan izleyebilirsin.

Raspberry Pi Pico ile DHT11 (MicroPython)

MicroPython'da DHT sensörleri için hazır bir dht modülü vardır; ayrıca kütüphane kurman gerekmez. Sensörü Pico'nun 3V3 pinine, GND'ye ve GP15 pinine bağla:

MicroPython
1import dht
2from machine import Pin
3import time
4
5sensor = dht.DHT11(Pin(15))   # GP15 veri pini / data pin (DHT22 için dht.DHT22)
6
7while True:
8    try:
9        sensor.measure()
10        t = sensor.temperature()   # °C
11        h = sensor.humidity()      # %
12        print("Sicaklik:", t, "C  Nem: %", h)
13    except OSError:
14        print("Okuma hatası / read error")
15    time.sleep(2)

DHT11 ile proje fikirleri

  • LCD'li dijital termometre: Değerleri 16x2 ekrana yaz; nasıl yapılacağı I2C LCD Ekran Kullanımı yazısında.
  • Nem kontrollü fan: Nem %65'i geçince bir röleyle fanı çalıştır; bağlantı için Röle Modülü Nedir? yazısına bak.
  • Rutubet alarmı: Eşik aşılınca bir buzzer öttür; sesli uyarı için Buzzer Nedir? yazısı işine yarar.
  • Sıcaklık kaydedici: Saat modülü ve SD kartla her 10 dakikada bir ölçümü kaydet.
  • Wi-Fi hava istasyonu: ESP32 ile ölçümleri ev ağındaki her cihazdan görülebilen bir sayfada yayınla.

Sık yapılan hatalar ve çözümleri

  • Sürekli NaN ya da "Failed to read": Veri kablosu koddaki pinden farklı bir pine takılmış, pull-up direnç eksik ya da kodda sensör tipi yanlış (DHT11 yerine DHT22) olabilir.
  • Çok sık okumak: 2 saniyeden kısa aralıkla okunan sensör eski değeri verir ya da hata döndürür.
  • Olması gerekenden yüksek sıcaklık: Sensör Arduino'nun voltaj regülatörüne ya da güneşe çok yakın olabilir; kartın birkaç santimetre uzağına yerleştir.
  • Uzun kabloda kopuk okumalar: Birkaç metreden sonra sinyal zayıflar; pull-up direnci 4,7 kΩ'a düşür, sensörü 5 V ile besle ve kaliteli kablo kullan.
  • ESP32'de kararsız çalışma: Sensör 5 V ile besleniyorsa veri hattı 5 V'a çekilir; 3V3 ile besle ve hem giriş hem çıkış olabilen bir GPIO (örneğin 4) kullan.
  • Anlık tepki beklemek: Nem değişimini algılamak birkaç saniye sürer; DHT11 hızlı ölçüm için değil, ortam takibi için tasarlanmıştır.

Başka hangi sensörleri kullanabileceğini merak ediyorsan Arduino Sensörleri Rehberi'ne, mesafe ölçmek için HC-SR04 Mesafe Sensörü yazısına göz at. BlueGrays uygulamasında DHT11 ve DHT22 ile yapılmış adım adım projeleri devre şemaları ve kodlarıyla bulabilirsin.

Sıkça sorulan sorular

DHT11 mi DHT22 mi almalıyım?

Oda içinde sıcaklık ve nemi kabaca izlemek için DHT11 yeterli ve daha ucuzdur. Dış ortam, sıfırın altındaki sıcaklıklar ya da ±0,5 °C hassasiyet gerekiyorsa DHT22 al. Kodda tek fark sensör tipini DHT22 yapmaktır.

DHT11 neden NaN ya da "Failed to read from DHT sensor" hatası veriyor?

En sık sebepler yanlış veri pini, eksik pull-up direnç, koddaki yanlış sensör tipi ve çok sık okumadır. Kabloları kontrol et, çıplak sensörde 10 kΩ direnç ekle ve okumalar arasında 2 saniye bekle.

DHT11 yanlış sıcaklık gösteriyor, nasıl kalibre ederim?

±2 °C sapma DHT11 için normaldir. Sensörü güvendiğin bir termometrenin yanına koyup aradaki farkı not al ve kodda okunan değere bu sabit farkı ekle ya da çıkar. Sensörün ısınan parçalardan uzakta olduğundan emin ol.

DHT11 3,3 V ile çalışır mı?

Evet, DHT11 3–5,5 V arasında çalışır. ESP32 ve Raspberry Pi Pico gibi 3,3 V kartlarda sensörü 3V3 pininden beslemek en doğrusudur; böylece veri hattına 5 V gelmez.

DHT11 dış ortamda ya da suya karşı kullanılabilir mi?

DHT11 su geçirmez değildir; yağmur, yoğuşma ve doğrudan güneş sensörü bozar ya da yanlış ölçtürür. Dış ortamda havalandırmalı, gölgede duran bir kutu içinde kullan; su içindeki sıcaklık için su geçirmez DS18B20 daha uygundur.

Bir Arduino'ya birden fazla DHT11 bağlanabilir mi?

Evet, ama her sensör ayrı bir veri pinine bağlanmalıdır; aynı veri hattını paylaşamazlar. Kodda her biri için ayrı bir DHT nesnesi tanımlarsın, örneğin DHT dht1(2, DHT11) ve DHT dht2(3, DHT11).

Tüm projeleri gör
DHT11 İle Sıcaklık Ve Nem
#55Orta

DHT11 İle Sıcaklık Ve Nem

DHT11 sensörü ile ortam sıcaklığı ve nem değerini ölçerek I2C LCD ekranda gösteren proje. Dijital sıcaklık/nem sensörü kullanımını öğretir.

4.7(47)
60
ESP32 DHT22 Sıcaklık ve Nem (LCD Ekranlı)
#117Orta
Premium

ESP32 DHT22 Sıcaklık ve Nem (LCD Ekranlı)

DHT22 sensörü ile ortam sıcaklığını ve nem oranını ölçüp 16x2 I2C LCD ekranda gerçek zamanlı olarak gösteren bir projedir. Adafruit DHT kütüphanesi kullanılarak tek kablo (one-wire) protokolü ile sensörden veri okunur. Bu proje, IoT hava istasyonu, akıllı ev otomasyonu veya seralarda ortam takip sistemlerinin temelini oluşturur. ESP32'nin GPIO 4 pini üzerinden DHT22 ile haberleşme sağlanır.

4.8(37)
53
ESP32 Sıcaklık Loglayıcı (DHT22 + DS1307 RTC + microSD + OLED)
#144İleri
Premium

ESP32 Sıcaklık Loglayıcı (DHT22 + DS1307 RTC + microSD + OLED)

ESP32 ile zamanlı sıcaklık ve nem kayıt sistemi kur! Bu projede DHT22 sensörü ile her 10 saniyede sıcaklık/nem okuyup DS1307 RTC modülünden aldığın gerçek zaman etiketiyle microSD karta CSV formatında kaydediyoruz. OLED ekranda büyük font ile son sıcaklık değeri, nem yüzdesi, timestamp ve toplam kayıt sayısı canlı gösterilir. SD kart üzerindeki `/temp_log.csv` dosyası Excel/Google Sheets/Python pandas ile açılıp analiz edilebilir — sera monitörü, ev/oda sıcaklık takibi, laboratuvar veri toplama,

4.7(7)
12
Dot Matrix Saat, Takvim ve Hava İstasyonu (MAX7219, DS1307)
#85Orta
Premium

Dot Matrix Saat, Takvim ve Hava İstasyonu (MAX7219, DS1307)

DS1307 RTC modülü ve DHT22 sıcaklık-nem sensörü ile gerçek zamanlı verileri MAX7219 8x32 dot matrix LED ekranda gösteren bir projedir. Ekranda sıcaklık Celsius ve Fahrenheit olarak, nem oranı, saat, g

5.0(50)
66
NTC ve 2x16 Lcd Ekran İle Sıcaklık Ölçümü
#44Başlangıç
Premium

NTC ve 2x16 Lcd Ekran İle Sıcaklık Ölçümü

NTC termistör ile ortam sıcaklığını ölçüp I2C LCD ekranda Celsius cinsinden gösteren proje. Steinhart-Hart denklemi ile analog değerden sıcaklık hesaplamayı öğretir.

4.5(33)
44
ESP32 HTTPClient + Hava Durumu API (LCD Ekranlı)
#133İleri
Premium

ESP32 HTTPClient + Hava Durumu API (LCD Ekranlı)

Bu projede ESP32 ile internet üzerinden hava durumu API'sine (wttr.in) `HTTPClient.h` kullanarak REST API çağrısı yapıyoruz. ArduinoJson v7 ile dönen JSON cevabını parse edip şehir, sıcaklık, nem, hava durumu ve rüzgar bilgilerini I2C LCD ekranda hem Türkçe hem İngilizce gösteriyoruz. wttr.in ücretsizdir, API key gerektirmez — herhangi bir şehir ismini yazarak o şehrin anlık hava durumunu çekebilirsiniz. 30 dakikada bir otomatik güncelleme, LED ile her ekran için farklı görsel feedback ve eksiks

4.7(13)
20
Akıllı Sulama İstasyonu
#83İleri
Premium

Akıllı Sulama İstasyonu

İki adet 18650 pil ve LM2596 regülatör ile Arduino'yu yormadan 7/24 çalışan otonom bitki sulama sistemi. Toprak nemini sürekli ölçerek su motorunu otomatik yönetir ve sistemin anlık durumunu üzerindek

5.0(42)
57
ESP 32 Akıllı Bitki Sulama Sistemi
#139İleri
Premium

ESP 32 Akıllı Bitki Sulama Sistemi

Bu projede ESP32 ve toprak nem sensörü kullanılarak otomatik bitki sulama sistemi geliştirilmiştir. Sensör toprağın nem seviyesini sürekli ölçer. Nem belirlenen seviyenin altına düştüğünde ESP32 röleyi aktif ederek su pompasını çalıştırır ve bitkiyi sular. Toprak yeterince nemli olduğunda pompa otomatik olarak durur. Bu proje sayesinde bitkiler düzenli olarak sulanabilir ve su tasarrufu sağlanabilir. _______________________________ Bağlantılar Nem Sensörü Sensör ESP32 VCC 3.3V GND GND AO GPIO34

4.7(10)
14

DHT11'i Arduino'ya bağlamayı, DHT kütüphanesiyle sıcaklık, nem ve hissedilen sıcaklığı okumayı, ESP32 ve Pico'da kullanmayı ve DHT22'nin ne zaman daha iyi olduğunu öğren.

DHT11 Sıcaklık ve Nem Sensörü: Arduino, ESP32 ve Pico ile Kullanımı | BlueGrays