Selam millet! Bugün size, hani böyle projelerinizde ‘Acaba hava kaç derece?’ ya da ‘Nem oranı nasıl?’ diye merak ettiğinizde hemen imdadınıza yetişen o meşhur sensörlerden bahsedeceğim: DHT11 ve DHT22. Bu küçük ama marifetli aletler, benim gibi elektronik meraklılarının vazgeçilmezi haline geldi diyebilirim. Aslında ilk zamanlar biraz çekindim bu sensörlerden, sanki karmaşık bir şeyler gerektirir gibiydi ama deneyince ne kadar kolay olduğunu anladım, bana göre tabii.
Şimdi diyeceksiniz ki ‘Ya bu DHT11 ve DHT22 ne işe yarıyor tam olarak?’ Çok basit aslında. Biri sıcaklığı ölçüyor, diğeri de hem sıcaklığı hem de havanın nemini. Hani bazen evdeki nem çok yükselince bunalırız ya, ya da kışın kaloriferler evi kurutunca hassaslaşırız, işte bu sensörler tam da bu durumlarda bize bilgi veriyor. Mesela bir akıllı ev sistemi yapıyorsunuz, ısıtma veya soğutma sistemini otomatik kontrol etmek istiyorsunuz; işte tam burada bu sensörler devreye giriyor. Gerçi benim ilk denemelerim biraz daha basit projeler içindi, mesela bir bitki sulama otomasyonu falan gibi. Ne güzel değil mi?
Peki hangisini seçeceğiz? DHT11 mi, DHT22 mi? Açıkçası bu biraz da sizin ihtiyacınıza ve bütçenize bağlı. DHT11 daha yaygın ve daha ucuz. Ama eğer daha hassas ölçümler istiyorsanız, yani sıcaklıkta ±2°C ve nemde ±5% gibi bir hassasiyet yeterli gelmiyorsa, o zaman DHT22 daha iyi bir seçenek olacaktır. DHT22, sıcaklıkta ±0.5°C ve nemde ±2-5% gibi daha yüksek bir hassasiyet sunuyor. Bu arada, DHT22’nin ölçüm aralığı da daha geniş sanırım. Tabii fiyatı da ona göre biraz daha yüksek oluyor. Ben ilk başladığımda DHT11 ile yetinmiştim ama sonra projelerim büyüdükçe DHT22’nin farkını hissettim açıkçası.
Bunları kullanmak için ne lazım peki? Genelde Arduino gibi mikrodenetleyicilerle birlikte kullanılıyorlar. Hatta bu sensörler için hazır kütüphaneler de var, bu da işimizi bayağı kolaylaştırıyor. Yani öyle derinlemesine bir elektronik bilgisi gerektirmiyor aslında. Arduino’nun IDE’sini kurup, sensörü doğru pinlere bağlayıp, kütüphaneyi de ekledikten sonra gerisi çorap söküğü gibi geliyor diyebilirim. Ne güzel değil mi?
Şimdi gelelim işin en can alıcı kısmına, yani kod örneğine. Size burada basit bir Arduino kodu vereceğim. Bu kod, hem DHT11 hem de DHT22 ile çalışabilecek şekilde ayarlanmış. Sadece hangi sensörü kullandığınıza göre birkaç küçük değişiklik yapmanız yeterli olacak. Bu kod, sensörden okuduğu sıcaklık ve nem değerlerini seri monitöre yazdırıyor. Yani bilgisayarınızdaki Arduino IDE’nin Seri Monitör kısmından bu değerleri anlık olarak görebiliyorsunuz. Kendi programım sınıfta kaldı :)) demeden önce, bu basit örneği bir deneyin derim.
Şimdi kod kısmına geçmeden önce, size bu sensörlerin bağlantı şemasını da kısaca anlatayım. Genelde bu sensörlerin 3 veya 4 tane bacağı olur. Bir tanesi VCC (güç), bir tanesi GND (toprak) ve diğerleri de veri çıkışı için kullanılır. Bazı modellerde ek bir bacak daha olabiliyor ama çoğu zaman işimiz 3 bacakla halloluyor. Bağlantıyı yaparken sensörün datasheet’ine bakmak en doğrusu tabii. Ama genel olarak VCC’yi 5V’a, GND’yi toprağa ve DATA pinini de Arduino’nun dijital pinlerinden birine bağlıyorsunuz. Hani bazen yanlış bağlama ihtimali oluyor ya, işte o yüzden datasheet kontrolü önemli.
İşte size örnek kod. Bunu kopyalayıp Arduino IDE’nize yapıştırabilirsiniz. Sadece satır 7’deki `DHTTYPE` kısmını kendi sensörünüze göre ayarlamayı unutmayın. Eğer DHT11 kullanıyorsanız `DHT11` yazın, DHT22 kullanıyorsanız `DHT22` yazın. Bu kadar basit.
#include <DHT.h> // DHT sensör kütüphanesini dahil ediyoruz.#define DHTPIN 2 // Sensörün bağlı olduğu dijital pin numarası. Bu pin numarasını kendi bağlantınıza göre ayarlayın. #define DHTTYPE DHT11 // Kullandığınız sensör tipini belirtin (DHT11 veya DHT22). Ben şimdilik DHT11 ile deniyorum ama siz DHT22 de yapabilirsiniz.
DHT dht(DHTPIN, DHTTYPE); // DHT nesnesini oluşturuyoruz.
void setup() { Serial.begin(9600); // Seri iletişimi başlatıyoruz, haberleşme hızı 9600 baud. Serial.println(F("DHT sensör test!")); // Seri monitöre ilk mesajımızı yazdırıyoruz.
dht.begin(); // DHT sensörünü başlatıyoruz. }
void loop() { // Sensörden okuma yapmadan önce biraz beklemek iyi olabilir, çünkü çok hızlı okuma yaparsak hatalı sonuç alabiliriz. delay(2000); // 2 saniye bekliyoruz.
// Nem değerini oku. float h = dht.readHumidity(); // Sıcaklık değerini santigrat derece cinsinden oku. float t = dht.readTemperature();
// Okumalarda bir hata olup olmadığını kontrol et. if (isnan(h) || isnan(t)) { Serial.println(F("DHT sensöründen veri okunamadı!")); // Hata mesajını yazdırıyoruz. return; // Hata varsa döngünün başına dön. }
// Sıcaklığı Fahrenheit'e çevir (isteğe bağlı). float f = dht.computeHeatIndex(t, h, false); // Son parametre 'true' olursa Fahrenheit hesaplar.
// Okunan değerleri seri monitöre yazdır. Serial.print(F("Nem: ")); Serial.print(h); Serial.print(F("%\t")); // Yüzde işareti ve tab ile ayırıyoruz. Serial.print(F("Sıcaklık: ")); Serial.print(t); Serial.print(F("°C ")); // Derece işareti koyuyoruz. Serial.print(F("Isı İndeksi: ")); Serial.print(f); Serial.println(F("°C")); // Son olarak ısı indeksini yazdırıp yeni satıra geçiyoruz. }
Bu kod gayet güzel çalışıyor ama bazen hatalı okumalar olabiliyor. Hani dedim ya, sensörler bazen nazlı olabiliyor. Mesela sensörün bağlantı kabloları gevşekse veya ortamda çok fazla elektriksel gürültü varsa, bu tür problemler yaşanabiliyor. İşte o zaman `isnan(h) || isnan(t)` kontrolü devreye giriyor ve hata mesajını bize gösteriyor. Bu arada, bazı eski Arduino kartlarında veya uyumsuz kütüphanelerde de sıkıntılar yaşanabiliyor. Ben ilk denediğimde böyle bir sorunla karşılaşmıştım sanırım, birkaç farklı kütüphane denemek zorunda kalmıştım. Neyse efendim, sonuç olarak bu kodla sıcaklık ve nem değerlerini rahatlıkla okuyabiliyoruz.
Şimdi gelelim bu sensörlerin kullanım alanlarına. Dedim ya, akıllı ev sistemleri başta geliyor. Nem kontrolüyle rutubet sorununu önleyebilir, sıcaklık kontrolüyle enerji tasarrufu sağlayabilirsiniz. Bunun dışında, sera otomasyonlarında, hava kalitesi izleme sistemlerinde, hatta belki de bir evcil hayvanınızın yaşam alanındaki koşulları optimize etmek için bile kullanabilirsiniz. Hani benim gibi bahçeyle uğraşıyorsanız, bitkilerinizin ne zaman sulanması gerektiğini veya ne kadar ışık aldığını takip etmek için de harika bir araç olabilir. Sanırım bu sensörlerin hayal gücümüzle sınırı var.
Bu arada, bu sensörlerin bir de daha gelişmiş modelleri var ama başlangıç için DHT11 ve DHT22 gerçekten çok yeterli. İnternette bu sensörlerle yapılmış yüzlerce proje bulabilirsiniz. Mesela, Google’da “DHT11 DHT22 Arduino project” diye aratırsanız, karşınıza çıkan sonuçlar sizi şaşırtacaktır. Hani bazen ‘Ben bunu nasıl düşünemedim?’ dersiniz ya, işte öyle. YouTube’da da bolca video var, izleyerek de fikir edinebilirsiniz. Buradan da detaylı anlatımlara ulaşabilirsiniz.
Neticede, DHT11 ve DHT22, hem başlangıç seviyesindeki hobi projeleri hem de daha karmaşık otomasyon sistemleri için harika birer sensör. Kurulumları ve kullanımları oldukça kolay, maliyetleri de uygun. Eğer siz de projelerinize biraz ‘akıllılık’ katmak istiyorsanız, bu sensörlere bir şans vermenizi tavsiye ederim. İnanın ki, küçük bir adım gibi görünebilir ama sonuçları sizi şaşırtacaktır. Ne güzel değil mi? Sadece doğru pinlere bağlayıp, doğru kütüphaneyi kullanmayı unutmayın yeter.
Son olarak, bu sensörlerin doğruluğu konusunda bazen şüpheler olabiliyor. Hani böyle çok hassas laboratuvar ortamları için yeterli olmayabilir ama genel kullanım için gayet iyiler. Eğer çok daha yüksek hassasiyet gerekiyorsa, BME280 gibi farklı sensörlere bakmak gerekebilir. Ama genel amaçlı projeler için DHT serisi yeterli olacaktır bence. Bu arada, Bursa gibi nemli şehirlerde bu sensörlerin daha da işe yaradığını düşünüyorum. 🙂 Neyse, şimdilik bu kadar. Başka bir yazıda görüşmek üzere, hoşça kalın!