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. İlgili kütüphaneyi buradan indirebilirsiniz. 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. 🙂

13 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?

    • Merhaba. Hangi kütüphaneden bahsettiğinizi anlayamadım. Aşağıdaki kütüphanelerden hangisinin indirme linkini soruyorsunuz?
      nRF24L01.h
      printf.h
      RF24.h
      RF24_config.h
      DHT.h
      LiquidCrystal.h

  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.

CEVAP VER

Please enter your comment!
Please enter your name here