This post is also available in: English (İngilizce)
- DHT11 NEM ve SICAKLIK sensörü
- DHT11 Çalışma Protokolleri
- DHT11 Pin İşlevleri
- DHT11 Nem ve Sıcaklık Sensörü Devresi
- DHT11 Nem ve Sıcaklık Sensörü MikroC Kütüphanesi
- Çalışma Videosu
- Sonuç
- Kütüphane Dosyaları
- Yararlanılan Kaynaklar
DHT11 NEM ve SICAKLIK Sensörü
- DHT11 kullanılarak hava nemi ve sıcaklığı ölçülebilir.
- Bitki yetiştirme ortamlarında kullanılabilir
- Çok hassas olmayan tüm hava nemi ve sıcaklığı ölçümlerine uygundur.
DHT11 NEM ve SICAKLIK Sensörü Özellikleri
- DHT11 in olumlu ve olumsuz yanlarını aşağıda görebilirsiniz.
- Projenizi göz önüne alıp aşağıdaki özelliklere göre değerlendirme yapabilirsiniz.
DHT11 Nem ve Sıcaklık Sensörü Özellikleri | |
Olumlu Özellikler | Olumsuz Özellikler |
|
|
- Aşağıdaki tabloda DHT11 in detaylı çalışma özellikleri görülebilir
Nem Ölçüm Değerleri | ||||||||||||||||
Parametreler | Koşullar | En Az | Ortalama | En Fazla | ||||||||||||
Çözünürlük | 1%RH | 1%RH(8 bit) | 1%RH | |||||||||||||
Tekrarlanabilirlik | ±1%RH | |||||||||||||||
Doğruluk |
|
|
|
|
||||||||||||
Ölçüm Aralığı |
|
|
|
|
||||||||||||
Tepki Süresi (sn) | 1/e(63%)25 °C, 1m/s Hava |
6 sn | 10 sn | 15 sn | ||||||||||||
Histeresiz | ±1%RH | |||||||||||||||
Uzun Vadeli Doğruluk | Genel | Yılda ±1%RH | ||||||||||||||
Sıcaklık Ölçüm Değerleri | ||||||||||||||||
Parametreler | Koşullar | En Az | Ortalama | En Fazla | ||||||||||||
Çözünürlük | 1 °C ( 8 bit) | 1 °C(8bit) | 1 °C(8bit) | |||||||||||||
Tekrarlanabilirlik | ±1 °C | |||||||||||||||
Doğruluk | ±1 °C | ±2 °C | ||||||||||||||
Ölçüm Aralığı | 0 °C | 50 °C | ||||||||||||||
Tepki Süresi (sn) | 1/e(63%) | 6 sn | 30 sn |
- Sensörün arka bölümünde de sahip olduğu özelliklerin bir kısmı görülebilir.
DHT11 Çalışma Protokolleri
- DHT11 den veri almak için gerekli olan adımları göreceğiz
- Bu kısımda sırası ile ;
- Genel Çalışma Sistemi
- İletişim Kurma Sistemi
- Veri Okuma Sistemi
- Bütün İletişim Sistemi ve Veri Kontrol göreceğiz.
DHT11 Genel Çalışma Sistemi
- İleride göreceğiniz gibi DHT11 devresinde data pini pull-up yapılır bu sebeple data ucu her zaman 1 konumunda bulunur
- DHT11 ile iletişim kurmak için data pini önce 0 yapılır ve sonra 1 yapılarak cevap gelmesi beklenir
- Ardından gelen 40 bit veri nem ve ısı değerlerini içerir.
DHT11 İletişim Kurma Sistemi
- Daha önce 1 tel protokolü ( 1 wire protocol) kullanıldığını söylemiştim
- Bu protokolde zamanlamalar önemlidir.
- Buna göre DHT11 ile iletişim kurmak için
- İlk olarak data pini 0 konumuna getirilerek 18ms beklenir
- Sonra data pini 1 konumuna getirilere 40us beklenir
- Ardından data pininden okuma yapılır
- DHT11 data pinini 50us boyunca sıfıra çeker
- Sonrasında 80us boyunca 1 konumunda tutar
- Tüm yukarıda ki adımlar gerçekleştiğinde DHT11 nem ve sıcaklık verilerini göndermeye hazırdır.
DHT11 Veri Okuma Sistemi”
- 1 tel protokolünde gelen verinin 0 yada 1 olmasına lojik durumuna göre değil süreye göre karar veriyoruz. Buna göre ;
- DHT11 den gelen 40 bit nem ve ısı verisini analiz ederken lojik 1 durumunda en fazla 28us kalmış ve sonra lojik 0 (sıfır) olmuş ise o veriyi 0(sıfır) olarak kabul ediyor
- Aynı şekilde lojik 1 durumunda 70us kalmış ise o veriyi ancak o zaman 1(bir) olarak kabul ediyoruz.
- Ayrıca yine yukarıda görüleceği üzere DHT11 veri göndermeden mutlaka data pinini 50 us kadar lojik 0 konumunda tutmaktadır.
- İletişim kısmında sonraki tüm 40 bitlik veri bu şekilde değerlendirilmelidir.
DHT11 Bütün İletişim Sistemi ve Veri Kontrol
- DHT11 ile gerçekleştirilecek tüm işlemler yukarıda görülmektedir.
- iletişim kurma işleminden sonra gelen 40 bit aşağıdaki gibi gruplandırılabilir
- ilk 8 bit nem değerinin tam sayı kısmını verir %RH olarak
- ikinci 8 bit nem değerinin ondalık sayı kısmını verir
- Üçüncü 8 bit sıcaklık değerinin tam sayı kısmını verir °C olarak
- Dördüncü 8 bit sıcaklık değerinin ondalık sayı kısmını verir
- Beşinci ve son 8 bit veri kontrol için check-sum verir.
- Yukarıdaki tabloları incelediyseniz DHT11 in nem ve ısı çözünürlüğü 1 dir bu sebeple yukarıda ondalıklı olarak belirtilen kısımlardan herhangi bir veri gelmez. Dolayısı ile 2.ve 4. bölümler dikkate alınmaz.
DHT11 den Gelen Verilerin Doğruluğunun Kontrol Edilmesi – Check Sum
- Check-sum son gelen 8 bitlik veridir.
- Bunu kontrol etmek için check-sum hariç 4 adet 8 bitlik veriler toplanır
- Eğer sonuç son 8 bitlik pakete ( yani check sum) eşit ise veriler doğru gelmiştir değilse veri aktarımında hata vardır.
- 1.(8 bit veri)+2.(8 bit veri)+3.(8 bit veri)+4.(8 bit veri)=5.(8 bit veri) yani check sum
- ÖNEMLi: DHT11 ile ilgili bazı kaynaklarda ondalıklı verilere denk gelen kısımların direkt olarak 0(sıfır) sayılması gerektiği yazılmaktadır. Ancak yukarıdaki osiloskop görüntüsünde de görüldüğü gibi bazen bu sıfır olması gereken yerlerde veriler oluşabiliyor elbette bunlar ölçüme kesinlikle dahil edilmemeli ancak check sum hesabı yapılırken dahil edilmeli çünkü eğer bu rastgele veriler check-sum hesaplamasına dahil edilmezse veri aktarımı hatalı olarak gözükecektir.
- Yukarıdaki osiloskop görüntüsünde ki verilerden yola çıkarsak
- Nem verisi 1 = 00100111 = 39 % RH
- Nem verisi 2 = 00000000 = 0
- Sıcaklık verisi 1 = 00011000 = 24 °C
- Sıcaklık verisi 2 = 00000011 = 3 ( bu veri sıcaklık değeri hesaplanırken dikkate alınmaz.)
- Check-sum = 01000010 = 66 ( 39+24+3 =66)
- Sonuç olarak görüldüğü gibi check-sum işlemi yaparken, ondalıklı kısımlar, nem ve sıcaklık değerleri için dikkate alınmazken verilerin doğruluğu denetlenirken gelen tüm veri dikkate alınmalıdır .
DHT11 Pin İşlevleri
Pin Adı | İşlevi |
VDD | +5v besleme |
DATA | Veri alışverişi yapılır |
x | Pin3 Kullanılmaz |
GND | Topraklama |
- DHT11 de tek kablodan iletişim sağlandığı için sadece 1 adet data pini bulunur herhangi bir clock yada benzeri pin bulunmaz.
DHT11 Nem ve Sıcaklık Sensörü Devresi
- Bu bölümde DHT11 nem ve sıcaklık sensörü için gerekli devreyi göreceğiz.
- DHT11 nem ve sıcaklık sensörünün 20m uzunluğundaki kablodan veri gönderebileceği ancak 20m nin üzerine çıkılırsa pull-up direncinin değiştirilmesi gerektiği yazmaktadır ancak hiçbir kaynakta yeni direncin nasıl ve neye göre hesaplandığını bulamadım. Bu sebeple bu konuda bir açıklama yapamıyorum.
- 20m den iletişim içinde +5V besleme gerekmektedir.
Devre Şeması
- Data pini mutlaka 5k ile pull-up yapılmalıdır.
- Parazitleri engellemek için +5v ile GND arasında 100nf kondansatör konulması önerilir.
- Dijital çıkış verdiği için PIC in herhangi bir giriş/çıkış pinine bağlanabilir
Gerekli Malzemeler
- DHT11 nem ve sıcaklık sensörü – 1 adet
- 5k direnç – 1 adet
- 100 mf polyester kondansatör – 1 adet
Devrenin Yapılışı
- Devreyi board üzerine kurdum.
- Sonuçları izlemek için 240×128 GLCD kullandım
- Sinyalleri görebilmek için 20 Mhz PC Osiloskop kullandım
- Sonuçları karşılaştırmak için basit bir nem ve ısı ölçer aldım.
- DHT11 nem ve sıcaklık sensörünün yakında görünümü
- Kendinden mavi muhafazası bulunmaktadır.
- Proje hazırlama sırasında elimde 5k olmadığından yakın değerde bir direnç kullandım
- 100 nf kondansatör sensörün arkasında kaldığından gözükmemektedir.
DHT11 Nem ve Sıcaklık Sensörü MikroC Kütüphanesi
- DHT11 için MikroC de kütüphane yazdım ancak kütüphane temeli alınarak istenilen ortama uyarlanabilir ayrıca “1-wire protocol” içinde örnek olarak kullanılabilir.
Kütüphane GPL lisansı ile açık kaynak olarak yayınlanmıştır.- Sensörün tek amacı olduğundan bu amaca yönelik olarak kütüphane yazılmıştır.
Fonksiyonlar
- Sadece 1 adet fonksiyon bulunduğundan bir gruplandırma yapmadım
– DHT11_ISI_NEM_VERI_OKUMA Fonksiyonu
Fonksiyon : unsigned char DHT11_ISI_NEM_VERI_OKUMA(unsigned char *veri)
Amacı : Sensörden gelen nem ve sıcaklık verisi almak.
Parametreler :
- *veri : Verilerin dışarıdan okunmasını sağlar . Ana programda 5 elemanlı bir char dizisine bağlanması gerekir
Kullanım Şekli :
DHT11_ISI_NEM_VERI_OKUMA(data);//Alınan veriler "data" adındaki diziye aktarılır.
Geri Bildirim :
- 1 gelirse veri aktarımı başarılı olmuştur
- 0 gelirse veri aktarımı başarısız olmuştur.
Fonksiyonların Uygulanması
- Nem ve ısının nasıl okunacağını ve veri güvenliğinin nasıl denetlenmesi gerektiğini göreceğiz.
- Ben verileri görmek adına kendi GLCD kütüphanemi kullandım
İsterseniz benim GLCD kütüphanemi buradan indirebilirsiniz.
DHT11 Nem ve Isı Değerlerini Okumak
- Verileri okuyarak , veri kontrolü yapıp GLCD üzerinde yazdıralım.
//GLCD Pin tanımalamarı char SAPTRIS at trisd;//data portları char SAPDATA_giris at portd; char SAPDATA_cikis at latd; sbit SAP1024_RD at RC1_bit ; //GLCD RD UCU BAĞLANTI PİNİ sbit SAP1024_CE at rc2_bit ; //GLCD CE UCU BAĞLANTI PİNİ sbit SAP1024_CD at Rc3_bit ; //GLCD C/D UCU BAĞLANTI PİNİ sbit SAP1024_RST at Rc4_bit ; //GLCD RST UCU BAĞLANTI PİNİ sbit SAP1024_FS at Rc5_bit ; //GLCD FS UCU BAĞLANTI PİNİ sbit SAP1024_WR at RC0_bit ; //GLCD wr UCU BAĞLANTI PİNİ sbit SAP1024_RD_Direction at TRISC1_bit; //GLCD RD UCU BAĞLANTI PİNİ sbit SAP1024_CE_Direction at TRISC2_bit; //GLCD CE UCU BAĞLANTI PİNİ sbit SAP1024_CD_Direction at TRISC3_bit; //GLCD C/D UCU BAĞLANTI PİNİ sbit SAP1024_RST_Direction at TRISC4_bit; //GLCD RST UCU BAĞLANTI PİNİ sbit SAP1024_FS_Direction at TRISC5_bit; //GLCD FS UCU BAĞLANTI PİNİ sbit SAP1024_WR_Direction at TRISC0_bit; //GLCD FS UCU BAĞLANTI PİNİ //DHT11 Pin Tanımlamaları sbit DHT11_DATA at RC7_bit; sbit DHT11_DATA_Direction at TRISC7_bit; void main() { unsigned char veri[5];//verinin atanacağı dizi unsigned char deger; char txt[15]; ADCON1=0b00000001; CMCON=7; SAP1024_INIT(240,128,6); //veriler ekranda daha anlamlı gözükebilmesi için başlıklar oluşturulur SAP1024_YAZI_YAZMA(32-9,10,"NEM DEGERI:%"); SAP1024_YAZI_YAZMA(36,12,"'C"); SAP1024_YAZI_YAZMA(32-9,12,"ISI DEGERI:"); while(1) { do{ deger= DHT11_ISI_NEM_VERI_OKUMA(veri); delay_ms(6500);}// DHT11 tepki süresi 6-10 saniye arası oldugundan 6,5 saniyede 1 kez veri alınır. while(deger!=1);//veri doğruluğu kontrol edilir veriler doğru gelmediği müddetçe döngüde kalır WordToStr(veri[0],txt);//nem verisi stringe çevirilir SAP1024_YAZI_YAZMA(32,10,txt); SAP1024_YAZI_YAZMA(32-9,10,"NEM DEGERI:%"); WordToStr(veri[2],txt);//sıcaklık verisi stringe çevirilir SAP1024_YAZI_YAZMA(31,12,txt); SAP1024_YAZI_YAZMA(36,12,"'C"); SAP1024_YAZI_YAZMA(32-9,12,"ISI DEGERI:"); } }
- Yukarıda sürekli okuma yapmak için sonsuz while döngüsü oluşturuldu
- While içerisinde do-while oluşturuldu ve 6,5 saniye gecikme eklendi.
- DHT11 6-10 saniye arasında cevap verme özelliğine sahip dolayısı ile 6,5 saniye de bir veri alınması amaçlandı
- Diğer kısımlar verilerin stringe dönüştürülmesi ve ekranda verilerin daha anlamlı gözükmesini sağlamak amacı ile yazıldı.
- DHT11 den gelen veriyi veri[5] dizisine atatdık. Buna göre
- veri[0]=nem verisini
- veri[2]=sıcaklık verisini
- veri[4]=check-sum verisini taşımaktadır.
Çalışma Videosu
Sonuç
- DHT11 nem ve sıcaklık sensörünün çalışma koşullarını , devre şemasını ve kütüphanesini inceledik
- Bitki yetiştirme kültürleri başta olmak üzere hava nem ve sıcaklık ölçümlerinde kullanılabilir
- Sensör kutulanacağı zaman delikli kısmın dışarıda kalması gerektiğini unutmayın
- Nem ve sıcaklık ölçümünde sensörün konumu da oldukça etkilidir. Yüksek merkezi noktalar daha doğru sonuç verecektir.
- Nem ve sıcaklık ölçümünün ayrılmaz bütün olduğunu unutmayın. Bir ortamdaki nem ölçümü aynı zamanda ısı ölçümü ile anlamlı hale gelmektedir.
- Aklınıza takılan noktaları “Soru-Cevap” Forumuna sorabilirsiniz.
Kütüphane Dosyaları
- DHT11 Nem ve Sıcaklık Sensörü MikroC Kütüphanesi – AÇIK KAYNAK KOD – ( ÜCRETLİ)
- DHT11 Nem ve Sıcaklık Sensörü MikroC Kütüphanesi – .mcl – (ÜCRETSİZ)
Bağlantıyı Görmek İçin Giriş Yapın ya da Ücretsiz Üye Olun
Yararlanılan Kaynaklar
This post is also available in: English (İngilizce)