Ana sayfa | Hakkımda | İletişim | Sosyal platform
YAZILARIM
DHT22(AM2302) kullanımı

DHT22 duyarlılığı yüksek bir sıcaklık ve nem sensörüdür. Tek hat üzerinden verileri host cihaza aktarır. Bu yazımda DHT22 sensörünün datasheet'i üzerinden deneyimim ile de desteklediğim bilgiler aktarmaya çalışacağım.

 



 


 

Kısaca teknik özellikleri:

  • 3.3-6V DC çalışma gerilimi
  • Veri çıkışı tek hat ve dijital
  • %0-%100 arası nem bilgisi
  • -40°C-80°C  arası sıcaklık bilgisi
  • +-%2  nem toleransı(Maksimum +-%5)
  • +-0.5°C sıcaklık toleransı
  • %0.1 nem duyarlılığı
  • 0.1°C sıcaklık duyarlılığı
  • Ölçüm periyodu ortalama 2 saniye

Resimde görüldüğü gibi tutulduğunda bacak numarası soldan sağa 1-2-3-4 şeklindedir.

  • 1-VDD
  • 2-Data
  • 3-Null(Boş)
  • 4-GND

  • Besleme hakkında datasheet önerisi olarak VDD ve GND arasında 100nF kondansatör eklenmesi tavsiye edilmiş. Ek olarak sensör ilk enerjilendiğinde hemen okuma yapılmaması ve sensörün ilk enerjilendikten sonra stabil hale gelmesi için en az 1 saniye gerektiği söylenmiş.

    Şimdi veri yapısına gelelim.

    Sensör kendi ram belleğinde host cihaz için 40 bit nem ve sıcaklık bilgisi tutar.

    >İlk 16 bit nem verisi

    >İkinci 16 bit sıcaklık verisi

    >Son 8 bit hata kontrol verisi

    Hata kontrol işlemi

    Eğer aldığınız verilerin doğruluğunu kontrol etmek istiyorsanız yapmanız gereken şu;

       Nem verisinin yüksek değerlikli 8 biti 

       Nem verisinin düşük değerlikli 8 biti

       Sıcaklık verisinin yüksek değerlikli 8 biti

       Sıcaklık verisinin düşük değerlikli 8 biti

    +___________________________________

    Son alınan 8 bitlik hata kontrol verisine eşit ise veri aktarımı sorunsuz gerçekleşmiş demektir.

    Verilerin gerçek değerlere dönüştürülmesi

    Sensör tasarımcısı bu dönüşüm için tasarımcılara kolaylık sağlamış.

    Örneğin nem verisi için elimizde 478 işaretsiz tam sayısı olsun. Bu 478 nem verisini aslında şunu ifade ediyor; Nem: %47.8

    Veya sıcaklık verisi için; 272(0b0000000100010000) işaretli tam sayısı aslında +27.2 °C 'yi ifade ediyor.

    *: Pozitif tam sayı

    Bunun için yapmanız gereken işlem:

    Nem için;

    Tam kısım = 478*0.1;

    Ondalık kısım = 478%10; /*Mod alma işlemi*/ şeklinde iki ayrı tam sayı tipine dönüştüre bilirsiniz.

    Ya da float değişken türü tanımlayıp direkt olarak 16 bitlik işaretli/işaretsiz veriyi 10 sayısına bölüp tanımladığınız float değişkene aktarabilirsiniz. Bu veriyi kullanım ve görüntüleme biçiminize göre değişebilir. Tercih sizin. 

    Sensörden veriyi nasıl okurum?

    Öncelikle data hattı herhangi bir okuma yapılmayacağı zaman ya da hat boşta olduğunda lojik-1 seviyesinde olacaktır.

    Veri iletişimini başlatması için sensöre uyarı niyetinde bu hattı lojik-0'a çekerek bilgi göndermiş olacağız ve sonraki işlemler için sensörün hattaki seviyesini kontrol edeceğiz.

    Başlayalım:

    1. Host cihaz tarafından data hattı lojik-0 'a çekilecektir.
    2. En az 1ms beklenecek.
    3. Host cihaz data hattını lojik-1 seviyesine çekecek.
    4. 20-40us beklenecek.
    5. Sensör, hattı 80us lojik-0'a çekecek.
    6. Sensör, hattı 80us lojik-1'e çekecek.
    7. Veri iletiminin başlatmak için sensör hattı 50us lojik-0'da tutacak.
    8. Sensör hattı lojik-1 seviyesine çekecek.
    9. Eğer lojik-1 seviyesi 26us-28us arasında ise bilgimiz 0.
    10. Eğer lojik-1 seviyesi 70us ise yani 40us'den büyük ise bilgimiz 1 demektir.
    11. Her lojik-1 seviyesindeki bilgi iletiminden sonra hat sensör tarafından 50us lojik-0'a çekilecektir.
    12. Host cihaz tarafından 40bit bilgi okunduktan sonra hat lojik-1 seviyesine çekilecektir.
    13. Bir sonraki okuma işlemi için en az 2 saniye beklemelisiniz.

    Yukarıdaki işlemleri while döngüsünü kullanarak yapabilirsiniz. Fakat okuma işlemi zamana bağlı olarak yapıldığı için mikro denetleyiciniz meşgul olacaktır. Eğer bu süre sizin için ya da uygulamanız için önemsiz ise while döngüsü ile okuma yapabilirsiniz.

    Eğer mikro denetleyicinizin yapması gereken önemli işler var ise ve bu okuma süresi önemli olan işlemleri engelliyorsa diğer bir seçenek olarak timer kesmesini önerebilirim.

    While döngüsü ve for döngüsünden yararlanarak oluşturduğum ve denemesini yaptığım örnek koda buraya tıklayarak ulaşabilirsiniz.

    Ürün datasheet'i için; https://cdn-shop.adafruit.com/datasheets/Digital+humidity+and+temperature+sensor+AM2302.pdf

    ELEKTRO ÇAVUŞ
    Ana sayfa | Hakkımda | İletişim | Sosyal platform | Android market | Tişört market
    ELEKTRO ÇAVUŞ2012 | elektrocavus.com