Arduino İle Sıcaklık Ölçer(DHT11+LCD)

Bu yazımızda DHT11 ve LCD kullanarak Arduino İle Sıcaklık Ölçer projesi için program kodlayıp devre kurulumunu yapacağız. 

    *Gerekli Malzemelerden Başlayalım.

Breadboard, arduino, LCD, DHT11 konularında yeterince bilgi sahibi değilseniz, öncelikle o konularla ilgili yazılarımızı okumanızı tavsiye ederim.

Arduino İle Sıcaklık Ölçer Devresi ve Programı

Şimdi öncelikle devremizi kuralım.

Breadboard üzerindeki (+) kısma Arduino’nun 5V ucunu, (-) kısma ise GND ucunu jumper kablo ile bağlıyoruz. Böylece devrede kullanılacak tüm 5V ve GND uçları direkt olarak breadboard’un bu kısmından alacağız, Arduino’ya fazladan kablo götürmeyeceğiz.

Bu devrede modüle entegre edilmiş DHT11 kullanıyorum. Bu DHT11 sıcaklık nem sensörü, 3 bacaklıdır. Delikli kısmı karşınıza aldığınızda soldaki bacak Veri ucu, ortadaki 5v(Vcc), sağdaki ise GND ucudur.

DHT11’in veri ucunu Arduino’da 2 nolu pine bağladım. İsterseniz diğer dijital pinleri de kullanabilirsiniz. Programda kullandığınız pin numarasını DHT11 dht11(2); kodun bu kısmına yazmanız gerekli.

Devrede kullandığımız LCD, 16×2 yani 2 satır 16 karakter gösterebilen bir model.

Ayrıca bu LCD’ye I2C modülü entegre edilmiştir. Bu modülle LCD kullanmak çok daha kolay oluyor. Kullanmanızı öneririm.

I2C (Inter-Integrated Circuit), Arduino ile sensörler, ekranlar ve diğer entegreler arasında haberleşme için kullanılan iki bacaklı seri bir iletişim protokolüdür.

I2C modülü sayesinde LCD’de sadece 4 bacaklı hale geliyor.

  • SCL (Serial Clock Line) : Saat Sinyali
  • SDA(Serial Data Line ) : Veri Sinyali
  • VCC(Voltage Common Collector) : Güç beslemesi yani 5V
  • GND(Ground) : Toprak hattı


#include <LiquidCrystal_I2C.h>
#include <DHT11.h>

LiquidCrystal_I2C lcd(0x27,16,2);

DHT11 dht11(2);

void setup()
{
  lcd.init();
  lcd.backlight();
}


void loop()
{
   int sicaklik = 0;
   int nem = 0;
   int sensoruOku = dht11.readTemperatureHumidity(sicaklik, nem);
    if (sensoruOku == 0) {
        lcd.setCursor(0,0);
        lcd.print("Sicaklik: ");
        lcd.print(sicaklik);
        lcd.print(" C");
        lcd.setCursor(0,1);
        lcd.print("Nem: ");
        lcd.setCursor(10,1);
        lcd.print(nem);
        lcd.print(" %");
    } 
}

PROGRAM ADIMLARI

ADIM 1:

Bu örnekte Arduino’nun 2. dijital pinini DHT11’den veri okumak için seçtim. (İsterseniz 2,3,4,5,6,7,8,9,10,11,12,13 nolu pinlerden herhangi birisini kullanabilirsiniz).

Arduino Uno üzerinde SDA ve SCL isimli pinler bulunur. LCD için bu pinleri kullanacağız. İsterseniz SDA için A4 ve SCL için A5 pinini kullanabilirsiniz.

#include <LiquidCrystal_I2C.h>
#include <DHT11.h>

#include komutu ile Arduino’ya ilgili kütüphane yüklenir. Yukarıdaki kodlarda LiquidCrystal_I2C.h ve DHT11.h kütüphaneleri yüklenmiştir.

Kütüphane, programlama yaparken sık kullanılan hazır kodların bir araya getirilmiş hâlidir. Amaç, aynı işlemleri her seferinde sıfırdan yazmak yerine hazır ve test edilmiş fonksiyonları kullanarak işi hızlandırmaktır. Yani programımıza bir kütüphane eklediğimizde, o kütüphanede bulunan tüm fonksiyonları(hazır komutları) kullanabiliriz.

ADIM 2:

LiquidCrystal_I2C lcd(0x27,16,2);

DHT11 dht11(2);

LiquidCrystal_I2C lcd(0x27,16,2); komutu LCD’yi kontrol eden bir lcd adında nesne oluşturulur. Bu nesne aşağıdaki özelliklere sahip olarak tanımlanmıştır.

  • 0x27 – I2C haberleşme adresi
  • 16 – LCD’mizin karakter sayısı
  • 2 – LCD’mizin satır sayısı

DHT11 dht11(2); komutu dht11 adında bir nesne oluşturur. Bu nesne 2 nolu pini kullanacak şekilde tanımlanmıştır.

ADIM 3:

void setup()
{
  lcd.init();
  lcd.backlight();
}

void setup() Arduino çalışmaya başladığında ilk olarak bu fonksiyonunu okur ve ön ayarları yapar.

lcd.init(); komutu LCD’yi çalıştırır, LCD Arduino haberleşmesini başlatır.

lcd.backlight(); komutu LCD’nin led ışığını yani arka aydınlatmasını açar.

ADIM 4:

   int sicaklik;
   int nem;
   int sensoruOku = dht11.readTemperatureHumidity(sicaklik, nem);

sicaklik ve nem değerlerini hafızada tutacak tam sayı türünde 2 adet değişken tanımladım.

int sensoruOku = dht11.readTemperatureHumidity(sicaklik, nem);

dht11.h kütüphanesinden gelen readTemperatureHumidity() fonksiyonu DHT11 sensöründen sıcaklık ve nem değerlerini okur. Eğer okuma başarılı olursa sensoruOku değişkenine 0, başarılı olmazsa 1 değeri atanır.

ADIM 5:

if (sensoruOku == 0) {
        lcd.setCursor(0,0);
        lcd.print("Sicaklik: ");
        lcd.print(sicaklik);
        lcd.print(" C");
        lcd.setCursor(0,1);
        lcd.print("Nem: ");
        lcd.setCursor(10,1);
        lcd.print(nem);
        lcd.print(" %");
    } 

if (sensoruOku == 0) komutu ile “Eğer sensorOku değişkeni 0 ise yani sıcaklık, nem okuma işlemi başarılı ise aşağıdaki komutları çalıştır” anlamına gelir.

lcd.setCursor(0,0); komutu imlecin konumunu ayarlar. Kullandığımız LCD’de 16 karakter ve 2 satır vardı. Yazmak istediğimiz metin, hangi satırda, hangi sıradaki karakterden başlayacak onu belirliyoruz. lcd.setCursor(karakter, satır) şeklinde kullanılır. 0 hem karakter için hem de satır için birinci anlamına gelir.

lcd.print(“Sicaklik: “); komutu imlecin belirlendiği yerden itibaren LCD’ye “Sicaklik:” yazısını yazar.

lcd.print(sicaklik); komutu ise sicaklik değişkenindeki(DHT11’den ölçülen) değeri LCD’ye yazar.

lcd.print(” C”); komutu ile derece anlamına gelen C karakteri yazdırdık.

lcd.setCursor(0,1); komutu ile imleci 2.satırın(1) ilk karakterine(0) getirdik.

lcd.print(“Nem: “); komutu imlecin belirlendiği yerden itibaren LCD’ye “Nem:” yazısını yazar.

lcd.setCursor(10,1); komutu imleci 2.satırın(1) 11. karakterine(10) getirdik. (Karakter ve satır numaraları 0’dan başladığı için 10 yazınca 11. karakter)

lcd.print(nem); komutu ise nem değişkenindeki(DHT11’den ölçülen) değeri LCD’ye yazar.

lcd.print(” %”); komutu ile yüzde anlamına gelen % karakteri yazdırdık.

Reply