back to top

Arduino ve DHT11 ile Sıcaklık Ölçümü ve NRF24L01 ile LCD Ekranda Kablosuz Görüntüleme

Arkadaşlar merhaba,

Daha önce NRF24L01, LM35 ve Arduino ile kablosuz sıcaklık uyarı sistemi yapmıştık. Bu yazıda DHT11 ile sıcaklık ve nem değerlerini ölçüp yine NRF24L01 modülüyle kablosuz olarak LCD ekranda görüntüleyerek basit bir kablosuz hava durumu istasyonu yapacağız.

Bu projeyi kendi evinizdeki veya arka bahçenizdeki hava koşullarını izlemek için kullanabilirsiniz. Daha sonra, bu hava durumu verilerini bahçelerinizin koşullarını izlemek için kullanabilirsiniz.  Ek sensörler kullanarak toprak nem durumu, yağış gibi değişkenleri izler ve daha sonra aldığınız verileri inşa edebileceğiniz bir sulama denetleyicisine geri gönderebilirsiniz. Bu şekilde sadece elektronikler ve  mikro denetleyiciler hakkında değil aynı zamanda hava parametreleri hakkında da bilgi sahibi olmuş olursunuz.

DHT11, Arduino ve LCD ile Kablosuz Hava Durumu Görüntüleme
NRF24L01 Alıcı Verici Modül

NRF24L01 Arduino ile iletişim kurmak için SPI kullandığından, Arduino pinleri 13, 12 ve 11’i (SCK, MISO ve MOSI) kullanmaları gerekir. CSN ve CE pinlerinin Arduino I/O pinlerinden herhangi birine bağlanması gereklidir. Ancak demo amaçlı olarak yapılan projelerde en kolayı 10 ve 9 nolu pinleri kullanmak olacaktır. Eğer CSN ve CE için 10 ve 9’dan başka pinler kullanıyorsanız, Uno’nun SPI master olarak hareket ettiğinden emin olmak için pin 10’u output olarak ayarlamanız gerekir.

NRF24L01 Modülü

Sağda NRF24L01 modülünün pinlerini görüyorsunuz. Bu pin çıkışları; 1-GND, 2-VCC, 3-CE, 4-CSN, 5-SCK, 6-MOSI, 7-MISO, 8-IRQ olarak adlandırılıyor.

NRF24 modülleri 3,3v güç kaynağı gerektirir, 5V’a toleransı da vardır. Fakat Uno’daki 3.3v pinine bağlandığında tatmin edici şekilde çalıştıklarını gözlemledim.

Mümkün olduğunca modülün VCC ve GND pinleri arasına 10µF kondansatör yerleştirilmesi önerilir. Ben özellikle Atmega328 ile çalışırken bunun gerekli olduğunu gördüm. Kondansatör, modülün güç kaynağını dengeler. Her durumda gerekli olmayabilir ancak, tüm diğer talimatları doğru bir şekilde uyguladığınızı düşünüyorsanız ve yine de projenizde sorun yaşıyorsanız kondansatör eklemek kesinlikle iyi bir fikir olacaktır.

DHT11 Sıcaklık ve Nem Sensörü

Kullandığımız sensör; sıcaklığı ve nemi ölçen DHT11. DHT11 sadece 0-50°C aralığındaki sıcaklığı ±2°C hassasiyetle ölçebiliyor, bu nedenle bu sıcaklığın altında ölçüm yapmanız gerekiyorsa DHT22 gibi başka bir modül kullanmanız gerekecektir. DHT22 modülünü buradan temin edebilirsiniz.

DHT11 hassas bir sıcaklık sensörüdür, Arduino’nun dijital IO pinine bağlı kalibre edilmiş sıcaklık ve nem bilgisi sağlar. Sıcaklığı Celcius formatında sağlar.

DHT11 Sensörü Pinler

DHT (sıcaklık ve nem) sensörleri bazı temel veri kayıtlarını yapmak isteyen hobiciler için mükemmeldir. İki parçadan; kapasitif nem sensörü ve termistörden yapılmıştır.

DHT11, Arduino’ya veri iletmek için sadece bir sinyal kablosu kullanır. Güç 5V ve ground kablolarından gelir. Sinyal seviyesinin varsayılan olarak yüksek kalmasını sağlamak için sinyal hattı ile 5V hattı arasında 10K Ohm çekme direnci gereklidir.

DHT11’in karşılaşabileceğiniz iki farklı sürümü vardır. Bir tipin dört pini vardır ve diğer tipte üç pin bulunur ve küçük bir PCB’ye monte edilir. PCB’ye takılan versiyon güzel çünkü sinyal hattı için yüzeye monte edilmiş 10K Ohm direncini içerir. Projemizde kullanacağımız versiyonun pin çıkışlarını yukardaki görselde görebilirsiniz.

NOT: Projede kullandığımız 16×2 LCD ekranın Arduino ile kullanımını ve çeşitli programlama yöntemlerini merak ediyorsanız 16×2 LCD Ekran Kurulum ve Programlama Rehberi yazımıza bakabilirsiniz.

Kütüphaneler

Projede 3 adet kütüphane kullanacağız. Bunlardan birincisi NRF24L01 modülü için kullanacağımız RF24 kütüphanesi. Bu projeyi yaparken bir önceki NRF24L01 projesinde de belirttiğim gibi RF24 kütüphanesinin klasik eski Maniacbug versiyonundaki bazı sorunları çözen bir kütüphane olan TMRh20 versiyonunu kullandım.

Bunun için Useful References başlığı altında Download’a tıklamanız yeterli olacaktır. Bu yazıyı okumadan önce RF24 kütüphanesini indirip yüklediyseniz kütüphaneyi silip TMRh20 versiyonunu indirmeniz gerekiyor. Demo programların çoğu çalıştırılırken ManiacBug versiyonunda sorunlar çıkmaktadır.

Yükleyeceğimiz ikinci kütüphane olan DHT kütüphanesini buradan indirebilirsiniz. Son olarak LCD ekranda tanımlanmış karakterleri kullanabilmeniz için Liquid Crystal kütüphanesini indirmeniz gerekiyor. Kütüphaneyi indirmek için Arduino uygulamasını açıp Tools>Manage Libraries adımlarını izleyin. Arama kısmına LiquidCrystal yazıp Install’a basarak indirebilirsiniz.

Kütüphaneleri indirdikten sonra winrar dosyaları içindeki her şeyi C:\Program Files\Arduino\Libraries dosyası içerisine atıyoruz. Kütüphaneleri ekledikten sonra devreyi kurup, arduinolara kod yükleyebiliriz.

NOT: Genelin aksine LCD devresinde potansiyometre kullanmadım, kodda kontrastı 75’e ayarladım.

Gerekli Malzemeler:

DEVRE ŞEMALARI

Transmitter (Verici) Devresi

Transmitter (Verici) Devre Bağlantıları

Receiver (Alıcı) Devresi

Receiver (Alıcı) Devre Bağlantıları

KAYNAK KODLAR VE AÇIKLAMALARI

Transmitter (Verici) Kodları

#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>
#include <DHT.h>
#define DHTPIN 5 // pin 0 ve pin 1'e baglamayiniz
#define DHTTYPE DHT11 // DHT11 modulunu tanimliyoruz
DHT dht(DHTPIN, DHTTYPE);
RF24 transmit(2, 3); // transmit isimli RF24 nesnesini tanimliyoruz
byte address[5] = "00001"; // adresi 00001 olarak ayarliyoruz
struct package {
  float temperature = 0;
  float humidity = 0;
  float rainfall = 0;
};
typedef struct package Package;
Package data;
void setup() {
  dht.begin();
  transmit.begin();
  transmit.openWritingPipe(address); //open writing pipe to address 00001
  transmit.setPALevel(RF24_PA_MAX); //RF guc outputunu maksimuma ayarliyoruz
  transmit.setDataRate(RF24_250KBPS); //datarate'i 250kbps'e ayarliyoruz
  transmit.setChannel(100); //frekansi 100'e ayarliyoruz
  transmit.stopListening();
}
void loop() {
  data.temperature = dht.readTemperature();
  data.humidity = dht.readHumidity();
  transmit.write( & data, sizeof(data));
  delay(1000);
}

Receiver (Alıcı) Kodları

#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>
#include <LiquidCrystal.h>
RF24 receive(2, 3);
byte address[5] = "00001";
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int output_pin10 = 10;
int contrast = 75;
struct package {
  float temperature = 0;
  float humidity = 0;
};
typedef struct package Package;
Package data;
void setup() {
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Data Aliniyor");
  pinMode(output_pin10, OUTPUT);
  analogWrite(output_pin10, contrast);
  receive.begin();
  receive.openReadingPipe(0, address);
  receive.setPALevel(RF24_PA_MIN);
  receive.setDataRate(RF24_250KBPS);
  receive.setChannel(100);
  receive.startListening();
}
void loop() {
  if (receive.available()) // alinan data kullanima elverisli mi
  {
    receive.read( & data, sizeof(data));
    lcd.setCursor(0, 1);
    lcd.print(data.temperature);
    lcd.print("C ");
    lcd.print(data.humidity);
    lcd.print("% ");
  }
}

Her şeyin sorunsuz çalıştığından emin olduktan sonra sensörler ekleyerek bu projeyi daha büyük bir projeye dönüştürebilirsiniz. Bu yazıda kodları mümkün olduğunca basit ve anlaşılır tutmaya çalıştım fakat NRF24L01 modülüyle çalışmaya yeni başlıyorsanız bu modülle yapılmış ve daha basit olan geçmiş projelerimize bakmanızı öneririm. Projelere aşağıdan ulaşabilirsiniz:

Lütfen sorularınızı sormaktan ve fikirlerinizi paylaşmaktan çekinmeyin. Umarım bu proje faydalı olmuştur. Görüşmek üzere. 🙂

Son Çıkan Yazılar

31 YORUMLAR

  1. merhabalar
    verici ve alıcı devrede ( #include ) diye bir kütüphane kullanmışsınız ama bu kütüphanenin indirme linki yok ve internette epey araştırdım bulamadım. bu kütüphanenin download linkini paylabilirmisinz. Devreyi kurdum kaç kere kontrol ettim. (printf kütüphanesini sildikten sonra) bir kere tek oda verici devreyi resetleyince ısı nem bilgisini gönderiyor sonrasında duruyor süreklilik yok. kondansatör denedim ekledim iki nrf24 modülede değişen bişey yok. ayrıca nrf24 modülleri potasiyometre led yakma dveresinde test ettim çalışıyor. sorun nedendir?

  2. Printf.h kütüphanesi hocam onu aradım bi türlü bulamadım. Ben farklı kodlarlada çalıştırdım bu devreyi bir kere veri alıyo sonra duruyor artık. Bir kaç defa dht11 sensörün bağlandığı aurduinoyu yeniden başlatıyorum anca öyle gelio ama süreklilik yok. Sizden ricam printf kürüphanesinin indirme linkini ve kısa bir cümleyle neden eklediğimizi söyleyebilrmsnz.

    • Selamlar. Bahsettiğiniz standart printf fonksiyonu, C programcıları tarafından en çok çağırılan standart fonksiyonlardan birisidir aslında. Yaptığı iş parametre olarak belirttiğimiz bir takım ifadeleri, bizim belirttiğimiz biçimde (formatta) ekrana yazdırmaktır. Bu tarz kütüphaneler hazır olan fonksiyonları kullanmamıza yarar. Bahsettiğimiz kütüphaneyi indirmenize gerek yok zaten IDE’nizde mevcut. Sorunun buradan kaynaklandığını sanmıyorum.

      Bu projede kullandığımız DHT kütüphanesi Adafruit’un oluşturduğu bir kütüphane. Bazen kullanımlarında sorun çıkabiliyor. Bunun içinse Arduino kütüphaneler dosyanıza lütfen linkteki kütüphaneyi indirin. Koda dahil etmemiz gerekmiyor, sadece kütüphaneyi indireceksiniz. https://github.com/adafruit/Adafruit_Sensor

      Bunun dışında LCD ekranınızı ayrıca Arduino’ya bağlayıp LiquidCrystal kütüphanesindeki basit kodlarla test edin ve bağlantılarınızı tekrar kontrol edin lütfen. Verici devresinde 10K Ohm direnci bağladığınızdan emin olun.

  3. Printf.h kütüphanesi bulunamadı diye hata veriyor onu silip deniyorm artık öylr olurmu ? Birde hocam siz bu devreyi yaptınızmı çalıştımı sürekli ? Bu arada diğer parçalarıda lcd ekranıda test ettim bi problem yok zaten bi kere veri alıyor artık duruyor. Tekrardan veri alması için aurudunioalrı yeniden başlatmam gerekiyor sorun bu. Kondansatörde ekledim fayda etmedi

    • https://maker.robotistan.com/nrf24l01-ve-lm35-ile-kablosuz-sicaklik-uyari-sistemi/ Bu linke tıklayın lütfen. Yazının sonunda ”Devreyi çalıştırmakta zorluk çekenler için” başlığının altında ”test için alıcı ve verici kodları”nın olduğu bir bölüm var. NRF24’leri Arduino’lara bağlayıp o kodları çalıştırın. NRF24’leriniz yazının sonunda bahsedildiği şekilde düzgün çalışıyorsa kütüphanelerde karışıklık yapmış olabileceğinizi varsayarak Arduino IDE’yi bilgisayarınızdan silip gerekli kütüphaneleri tek tek sıfırdan indirdikten sonra kodları ve devreyi çalıştırmayı tekrar denemenizi öneririm.
      Evet ben bu projeyi yaptım tabiki. Bu yazının en başındaki fotoğraftaki gibi görünüyor çalışırken ve sürekli alınan datalar ekranda değişiyor. Daha önce dediğim gibi fiziksel problemler de olabiliyor. Kütüphane veya kodla ilgili de. Tek tek kontrol etmek lazım.

  4. Hocam ben lcd devreye I2C modülü ekleyerek az kabloyla kullanmak istiyorum. Ben uğraştım beceremedim. Consrat ayarları falan. Sizden ricam I2c modülü kullanarak yapılan devrede alıcı kodları düzenleyip paylaşabilirmisnz

    • Merhaba. I2C ekran kullanırken 4.7K direnç kullanmayı unutmayın. Bu durumda eklenecek kütüphanelerde de değişiklik olacak. Alıcı devre kodunuza Wire ve LiquidCrystal_I2C kütüphanelerinizi de eklemeyi unutmayın.
      I2C ekranla bu projeyi gerçekleştirmediğim için size şuan bir kod yazıp vermem anlamsız olur. Dilerseniz internette araştırma yaparak benzer projeler bulmayı deneyin veya kendi kodunuzu yazmaya başlayın. Daha sonra devrenizi ve yazdığınız kodu benimle paylaşırsanız yardımcı olmaya çalışırım. İyi çalışmalar. 🙂

  5. Arkadaslar ben nrf24l01 ile sıcaklık nem verisini lcd ye yazdırma devresini yaptım ama devreyi bir türlü haberlestiremedim bunun nedir acaba yardımcı olursanız çok sevinirim.

    • Merhaba. Öncelikle bütün modüllerin teker teker doğru çalışıp çalışmadıklarını test etmenizi öneririm. NRF24’leri test etmek için bu yazıya gidin, test için gerekli adımları “Devreyi çalıştırmakta zorluk çekenler için” başlığının altında göreceksiniz.

    • hocam kondansatör tak nrf24lere öyle dene yada bu nrf24lerin taşıyıcı kartları var onları al bi öyle dene. bu modülde voltaj uyumsuzluğu çok oluyor. verici devrenin olduğu aurduinoya usb kablosuyla güç ver alıcı devreye 9v pille bir öyle dene, ya da tam tersini yap 5vluk adaptörler dene tutturana kadar. Biraz şeytan işi anlayacağın bu 🙂 “B. Tuğçe Küçüködük” kardeşimizede teşekkürlerimi sunuyorum bu arada güzel bir devre hazırlamış ve çalışıyor.

  6. Merhabalar, bağlantılarımı ve kodları tek tek kontrol ettim. Her şey burada yazılan ve gösterilen şekilde. Sadece printf.h kütüphanesini çıkarttım. Normalde buton ile led yakma konusunda sorunsuz haberleşme yaptırabildim. Ancak bu devrede LCD Ekranda hiçbir şey göremiyorum yardımcı olur musunuz lütfen.

    • Merhaba. NRF24’leri sorunsuz haberleştirdiyseniz LCD ekranı tek başına basit bir kodla test etmenizi öneririm. Örneğin; ekrana hello world yazdırın. Bunun dışında DHT11 sensörünün veriyi doğru okuduğundan emin olmak için seri ekranı kontrol edin.
      Kütüphanelerinizi doğru yüklediğinizden emin olun. Örneğin; ben projeyi yaparken NRF24’ler için eski ManiacBug versiyonunu değil TMRh20 versiyonunu kullandım.
      Bu projede kullandığımız DHT kütüphanesi Adafruit’un oluşturduğu bir kütüphane. Bazen kullanımlarında sorun çıkabiliyor. Bunun içinse Arduino kütüphaneler dosyanıza lütfen linkteki kütüphaneyi indirin. Koda dahil etmemiz gerekmiyor, sadece kütüphaneyi indireceksiniz. https://github.com/adafruit/Adafruit_Sensor

  7. Github’tan kütüphaneyi indirdim fakat yine hata alıyorum.Acaba kütüphaneyi eklerken mi yanlışlık yapıyorum.Nasıl ekleyeceğim konusunda yardımcı olur musunuz? Teşekkürler.

  8. selam ben bu kodları yazarken sıkıntı oluyor
    böyle bir dizin yok diyor bu konuda yardımcı olurmusunuz
    #include
    #include
    #include
    #include
    #include
    bu kodlarda böyle bir dizin yok diyor
    hem alıcıda hemde verici kodların da

  9. Hocam iyi günler. Aynı projeyi verileri lvd ekrana yazdırmadan sadece seri port ekranında görmem gerekiyor. Bitirme projesinin bi kısmı bu. Günlerdir uğraşıyorum ancak yapamıyorum. Yardımcı olabilir misiniz?

  10. Merhaba projeyi gerçekledim data alabiliyorum fakat belli bir süre sonra çok farklı karakterleri yazmaya başlıyo ekran bunu nasıl düzeltebilirim.Teşekkürler.

  11. Merhaba,

    #include hatası verdi ardunıo sildim kutuphane dahil tekrar yükledim. Ayrıca nrf kutuphanesını linktekini ındırdım sorun çözüldü. Bunun dışında ekstra birşey yapmadım. bilginize

  12. Hocam Verici devresi gtayet doğru çalışıyor. Data gönderildi ve 0-9 arası saydığını test kodlarını çalıştırarak gördüm. Ancak Alıcı devresi bir türlü tam ve doğru çalıştıramadım. Devreye kondansatör ekledim, Yedek aldığım diğer bir nrf bağladım, tüm bağlantılarımı kontrol ettim ama maalesef başarılı olamadım. Çok hızlı bir şekilde veri alındı bilgisini görüyorum.

  13. İyi günler kolay gelsin.Ben proteus ile bu devreyi çalıştırmak istiyorum ama NRF24L01 adlı malzemenin kütüphanesini hiç bir yerde bulamadım yardımcı olursanız sevinirim.Şimdiden teşekkürler.

    • Selamlar,

      Tabii, olabilir ama kodlarda değişiklik yapmanız gerekebilir. Bağlantıları ve kodları uyuşturduktan sonra çalışacaktır.

      İyi çalışmalar dileriz 🙂

  14. Şemada direnç olmamasına rağmen yukarıda direnç olacak diye belirtmişsiniz. madem olacak ona göre tam anlatın. bu hatanız yüzünden lcd ekrana yazı yazdıramıyorum. Dirençsiz lcd ekrana nasıl yazı yazdırabilirim?

  15. alıcı verici devreleri test yapıldı sorun yok. Normal yazılım yukledım “data alınıyor” yazısı var ancak dereceler 0 derece nem değeri de 0 görünüyor sürekli

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz