Arduino ile DHT11 Sıcaklık ve Nem Sensörü Kullanımı
Arduino ile DHT11 kullanımı bir çok projede kullanışlı olabilir. Bu projelere örnek olarak, akıllı ev sistemleri, bitki sulama sistemleri gibi örneklendirebiliriz.
Okurlarımızın, bildirimine dayanarak DHT11 sensörü kullanımında birden fazla alternatif kütüphane olması sebebiyle, doğru çalışan hatta tam anlamıyla çalışan bir kütüphane olmadığını belirttiler. Bu yüzden dht11.h ve DHT.h olmak üzere iki farklı kütüphane için program kodlarını ve devre şemasını paylaşacağız.
Not: Aynı anda birden fazla aynı amaçlı kütüphane kullanımı sebebi ile kartınıza kodu yüklerken sorunla karşılaşabilirsiniz, bu yüzden bu kütüphanelerden yalnızca birini kullanın. Ayrıca daha farklı Arduino Hataları ile karşılaşıyorsanız bu yazımıza göz atabilirsiniz.
DHT11 Sensörü Nedir?
DHT11, düşük maliyetli bir dijital sıcaklık ve nem sensörüdür. Çevreleyen havayı ölçmek için kapasitif bir nem sensörü ve bir termistör kullanır ve veri pinine dijital bir sinyal gönderir (analog giriş pinlerine gerek yoktur). Kullanımı oldukça basittir, ancak verileri almak için dikkatli bir zamanlama gerektirir. Bu sensörün tek dezavantajı, yalnızca 2 saniyede bir yeni veri alabilmenizdir, sensör okumaları 2 saniyeye kadar geç(eski) olabilir. DHT11 veri sayfasına(datasheet) buradan bakabilirsiniz.
DHT22 ile karşılaştırıldığında, bu sensör daha az hassastır, ve daha küçük bir sıcaklık/nem aralığında çalışır, ancak daha küçüktür ve daha ucuzdur.
DHT11 Sensörü Teknik Detayları
- Düşük maliyetli
- 3 ila 5V ve I/O kullanımı
- Dönüşüm sırasında 2.5mA maksimum akım kullanımı (veri istenirken)
- %5 doğrulukla %20-80 nem okumaları
- 0-50°C sıcaklık okumaları için iyi ±2°C doğruluk
- 1 Hz’den fazla olmayan örnekleme hızı (saniyede bir)
- Gövde boyutu 15,5 mm x 12 mm x 5,5 mm
- 0.1″ aralıklı 4 pin
Bağıl Nem Nedir?
DHT11 bağıl nemi ölçer. Bağıl nem, havadaki su buharı miktarına karşı havadaki su buharının doyma noktasıdır. Doyma noktasında su buharı yoğunlaşmaya ve çiy oluşturan yüzeylerde birikmeye başlar.
Doyma noktası hava sıcaklığı ile değişir. Soğuk hava doymadan önce daha az su buharı tutabilir ve sıcak hava doymadan önce daha fazla su buharı tutabilir.
Bağıl nemi hesaplamak için formül:

Bağıl nem yüzde olarak ifade edilir. %100 BN’de yoğuşma meydana gelir ve %0 BN’de hava tamamen kurudur.
DHT11 Sensörü Nem ve Sıcaklığı Nasıl Ölçer?
DHT11, iki elektrot arasındaki elektrik direncini ölçerek su buharını tespit eder. Nem algılama bileşeni, yüzeye uygulanan elektrotlarla nem tutan bir alt tabakadır. Su buharı substrat tarafından emildiğinde, elektrotlar arasındaki iletkenliği artıran substrat tarafından iyonlar salınır. İki elektrot arasındaki direnç değişimi bağıl nem ile orantılıdır. Daha yüksek bağıl nem elektrotlar arasındaki direnci azaltırken, daha düşük bağıl nem elektrotlar arasındaki direnci artırır.
DHT11, yerleşik bir yüzeye monte NTC sıcaklık sensörü (termistör) ile sıcaklığı ölçer. Termistörlerin nasıl çalıştığı ve Arduino’da nasıl kullanılacağı hakkında daha fazla bilgi edinmek bu yazılarımıza göz atın:
Plastik muhafaza çıkarıldığında, alt tabakaya uygulanan elektrotları görebilirsiniz:

Sensörün arkasına monte edilen bir entegre, direnç ölçümünü bağıl neme dönüştürür. Ayrıca kalibrasyon katsayılarını saklar ve DHT11 ile Arduino arasındaki veri sinyali iletimini kontrol eder:

DHT11, Arduino’ya veri iletmek için sadece bir sinyal kablosu kullanır. Güç, ayrı 5V ve topraklama kablolarından gelir. Sinyal seviyesinin varsayılan olarak yüksek kalmasını sağlamak için sinyal hattı ile 5V hattı arasında 10K Ohm’luk bir çekme(pull-up) direnci gereklidir.
Karşılaşabileceğiniz DHT11’in iki farklı versiyonu var. Bir türün dört pini vardır ve diğer türün üç pini vardır ve küçük bir PCB’ye monte edilmiştir. PCB’ye monte versiyon daha kullanışlıdır çünkü sinyal hattı için yüzeye monte 10K Ohm çekme direnci içerir.

Kullanım aşamasında iki farklı kütüphane ile örnek gösteriminde bulunacağız, bu kütüphanelerden birini tercih edip kullanabilirsiniz.
DHT.h Kütüphanesi ile Kullanım
DHT11’i Arduino’ya bağlamak kolaydır, ancak sahip olduğunuz karta göre bağlantılar farklı olabilir.
Devre Şeması
Burada, 10kΩ bir direnç kullanmanız gerekmektedir. 4 pinli, PCB’ye monte edilmemiş modül için bağlantılar:

Pin 3’ü görmezden gelin, kullanılmaz. Veri hattında orta kuvvette bir yukarı çekme görevi görmesi için VCC ile veri pimi arasına 10 K ohm’luk bir direnç yerleştirmeniz gerekmektedir.
Devre Şeması
3 pinli, PCB’ye monte edilmiş modül için bağlantılar:

VCC – 3,3 – 5V güce bağlayın. Bazen 3.3V güç yeterli olmaz, bu durumda 5V gücü deneyin.
Program Kodu
Şu anda Arduino IDE yazılımını çalıştırmış olmalısınız. Ardından, Arduino Kütüphane Yöneticisi aracılığıyla yapılabilecek DHT Sensör kütüphanesini kurmak gerekiyor:
Taslak → library ekle → Kitaplıkları Yönet…
Arama alanına “dht” yazın ve “Adafruit’ten DHT sensör kitaplığı” listesine bakın. “Yükle” düğmesini veya önceki bir sürümden “Güncelle”yi tıklayın.
ÖNEMLİ: DHT kütüphanesinin 1.3.0 versiyonundan itibaren, Arduino Kütüphane Yöneticisinde de bulunan Adafruit_Sensor kütüphanesini de kurmanız gerekecektir.

Şimdi Örnekler→DHT→DHTtester örneğini yükleyin ya da aşağıda ki kodu kullanın.
#include "DHT.h" #define DHTPIN 2 // veri okuma pini #define DHTTYPE DHT11 // DHT 11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); Serial.println(F("DHT11 Testi!")); dht.begin(); } void loop() { delay(2000); float h = dht.readHumidity(); float t = dht.readTemperature(); float f = dht.readTemperature(true); if (isnan(h) || isnan(t) || isnan(f)) { Serial.println(F("DHT'den veri okunamadi!")); return; } float hif = dht.computeHeatIndex(f, h); float hic = dht.computeHeatIndex(t, h, false); Serial.print(F(" Nem: ")); Serial.print(h); Serial.print(F("% Sıcaklık: ")); Serial.print(t); Serial.print(F("C ")); Serial.print(f); Serial.print(F("F Isı Indeksi: ")); Serial.print(hic); Serial.print(F("C ")); Serial.print(hif); Serial.println(F("F")); }
dht11.h Kütüphanesi ile Kullanım
Program Kodu
#include <dht11.h> #define DHT11PIN 4 dht11 DHT11; void setup() { Serial.begin(9600); } void loop() { Serial.println(); int okuma = DHT11.read(DHT11PIN); Serial.print("Nem (%): "); Serial.println((float)DHT11.humidity, 2); Serial.print("Sicaklik (C): "); Serial.println((float)DHT11.temperature, 2); delay(2000); }
Devre Şeması
Burada, 10kΩ bir direnç kullanmanız gerekmektedir. 4 pinli, PCB’ye monte edilmemiş modül için bağlantılar:

Pin 3’ü görmezden gelin, kullanılmaz. Veri hattında orta kuvvette bir yukarı çekme görevi görmesi için VCC ile veri pimi arasına 10 K ohm’luk bir direnç yerleştirmeniz gerekmektedir.
Devre Şeması
3 pinli, PCB’ye monte edilmiş modül için bağlantılar:

VCC – 3,3 – 5V güce bağlayın. Bazen 3.3V güç yeterli olmaz, bu durumda 5V gücü deneyin.
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.