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. 🙂

1 YORUM

CEVAP VER

Please enter your comment!
Please enter your name here