Arduino Dersleri | Arduino IDE Kurulumu | Arduino Programlama Dersleri
Bu yazımızda sizlere Arduino ile DHT11 sıcaklık ve nem sensörünün nasıl kullanıldığını göstereceğiz. Özellikle ev ve okul projelerinde oldukça sık kullanılan bu sensörün Arduino ile kullanımı oldukça basit. Tek data hattı üzerinden haberleşebildiğimiz bu sensör ile ortamdaki sıcaklık ve nem değerlerini ölçmek oldukça basit. Sensörün Arduino ile nasıl kullanıldığını öğrenmeden önce sensörün incelemesini yapalım.
MALZEME LİSTESİ
1 x DHT11 Sıcaklık ve Nem Sensörü
1 x Arduino UNO
DHT11 sıcaklık ve nem sensörü küçük projelerde karşımıza oldukça sık çıkan bir sensördür. Ölçüm sonuçlarının doğruluğu çok yüksek olmasa da kolay kullanılabilirliği ve uygun fiyatı onu bir çok ev ve okul projesi için ideal yapmaktadır. Sensör bir modül üzerinde satılabildiği gibi ayrı da satılabilmektedir. İki model arasındaki fark aşağıda verildiği gibidir.
Fotoğrafta da görüldüğü gibi aslında iki model arasında çok fark yoktur. Sadece modül halinde kullanılmayan pin kaldırılmıştır. Ayrıca haberleşme için gerekli olan pull-up direnci eklenmiştir. Burada modülün kullanılmaması durumunda sizin pull-up direncini eklemeniz gerekmektedir. Yapacak olduğumuz uygulamada modül kullanılmıştır.Pinlerin açıklamaları şu şekildedir.
VCC => Besleme bacağıdır. 3.5-5V arasında besleme kullanılmalıdır.
GND=> Sensörün toprağıdır. Sistem toprağı ile ortaklanmalıdır.
Signal => Veri aktarımının gerçekleştiği data bacağıdır. Pull-up direnç kullanılmalıdır.
Sensör tek data hattı üzerinden haberleşmektedir. Bu data hattını MCU ile ortak olarak kullanır. MCU sensörü tetikledikten sonra sensör sıcaklık ve nem bilgisini aynı data hattından gönderir. Öncelikle haberleşmede kullanılan protokolü inceleyelim. Devamında data paketinin içeriğine göz atalım.
Protokol
Protokolü datasheet’inde verilen aşağıdaki diagramdan daha net anlayabiliriz:
Yukarıda da görüldüğü gibi önce MCU data hattını 0’a ve 1’e çekiyor. Devamında aynı işlemi sensör yapıyor ve datanın gelmesi bekleniyor. Sensör sırasıyla 1 ve 0 göndermeye devam ediyor fakat burada gelen datanın “0” mı “1” mi olduğunu gönderilen “1” durumunun uzunluğundan anlıyoruz. Daha ayrıntılı olarak datasheet’inden bakabilirsiniz.
Data Paketi
DHT11 sıcaklık ve nem bilgisini 40 bitlik bir data paketinin içerisinde göndermektedir. Bu paketin yapısı şu şekildedir:
Burada HIGH olarak belirtilenler tam kısım, LOW olarak belirtilenler ise ondalık kısımdır. Enson gönderilen 8 bitlik data ise önceki 32 bitin toplamıdır. Gönderilen datanın doğruluğunun kontrolü için kullanılır. Nem ve sıcaklık için 16 bitlik paketler kullanılmıştır.
DHT11 VCC -> Arduino Board 5V
DHT11 GND -> Arduino GND
DHT11 Data -> Arduino Dijital Pin 2
Sensörü Arduino ile kullanırken anlatmış olduğumuz protokolü bir kütüphane ile gerçekleyeceğiz. Kütüphaneye >>BURADAN<< ulaşabilirsiniz. Ayrıca bu kütüphaneyi kullanabilmek için >>BURADAKİ<< kütüphaneyi de indirmeniz gerekmektedir.
#include <Adafruit_Sensor.h>
#include "DHT.h" //DHT11 Kütüphanesi
#define DHTPIN 2 //DHT11 data pini
DHT dht(DHTPIN, DHT11);
void setup() {
Serial.begin(9600); //Seri haberleşme başlatılır
dht.begin(); //dht başlatılır
}
void loop() {
delay(2000); //Her okuma arasında 2sn beklenir
float nem = dht.readHumidity(); //Nem bilgisi alınır
float sicaklik = dht.readTemperature(); //Sıcaklık bilgisi alınır
//Okunan değerler seri porttan gönderilir
Serial.print("Nem ");
Serial.print(nem );
Serial.print(" %\t");
Serial.print("Sıcaklık: ");
Serial.print(sicaklik);
Serial.println(" *C ");
}