nRF24L01 ve Arduino ile Butona Basıldığında Led Yakma (nRF24L01 Modülüne Giriş #2)
Bu uygulamada 2 adet nRF24L01 haberleşme modülü, 2 adet Arduino Nano ve USB kablo, 2 adet nRF-Nano Geliştirme Kiti, 1 adet led, 1 adet push buton, 1 adet 10 kiloohm direnç, 3 adet jumper ve bir adet mini breadboard kullanılmıştır. Verici taraftaki butona basıldığında alıcı tarafındaki ledin yanması istenmiştir. nRF24L01’lerin Arduino Nano ile bağlantısı için “ nRF – Nano Geliştirme Kiti ” kullanılmıştır.
nRF – Nano Geliştirme Kiti ile Devre Bağlantısını Oluşturma
Alıcı
Alıcı tarafı oluştururken ledin bağlantısını yapmak için geliştirme kitinin üzerinde bulunan soketlerden yardım alıyoruz. Bu uygulama kısa süreli olduğundan dolayı ledin önüne herhangi bir direnç eklemiyoruz. Dilerseniz sizler, kendi projelerinizde direnç kullanabilirsiniz. Ledimizi Nanoya bağlamak için + bacağını D2 hattına, – bacağını ise GND hattına takıyoruz.
Verici
Verici tarafı oluştururken bir adet bread boardan yardım alıyoruz. Push butonu boarda takıyoruz. Ardından butonun bir ucunu jumperla, kitimizin 5V hattına, diğer ucunu başka bir jumperla GND hattına bağlıyoruz. Butonumuz etraftan yayılan istenmeyen sinyallerden etkilenip düzgün çalışmayabilir. Üzerine basılmadığı zamanlarda bile bu sinyallerden dolayı basılmış gibi davranabilir. Bunun önüne geçmek için 1 adet 10 kiloohm direnci, bir ucu GND bir ucu D2 hattına gelecek şekilde puldown olarak bağlıyoruz. Böylece butonumuzun düzgün bir şekilde çalışmasını sağlamış olduk.
nRF – Nano Geliştirme Kiti Kullanmadan Devre Bağlantısı
Alıcı taraf için uygulanması gereken bağlantı işlemleri aşağıda ki görselde gösterilmiştir.
Verici taraf için uygulanması gereken bağlantı işlemleri aşağıda ki görselde gösterilmiştir.
Alıcı ve Verici Kodları
Verici
Öncelikle #include komutu ile SPI, nRF24L01 ve RF24 kütüphanelerimizi yüklüyoruz. RF24 için kablosuz() adında bir nesne tanımlıyoruz ve parantez içine nRF24L01’in bağlı olduğu CE ve CSN pinlerinin değerlerini (D9 ve D10 için 9 ve 10) yazıyoruz. Ardından Adres adında bir byte dizisi oluşturup tırnak içerisinde belirtilen adresin alıcı ve verici için aynı olmasına dikkat ediyoruz. Buraya kadar olan kodlar ve işlevleri alıcı ve verici için aynıdır.
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 kablosuz(9, 10);
const byte adres[] = "arkis";
int buton = 2;
int led_yak[1];
int led_sondur[1];
void setup()
{
kablosuz.begin();
kablosuz.openWritingPipe(adres);
led_yak[0] = 100;
led_sondur[0] = 0;
}
void loop()
{
if (digitalRead(buton) == HIGH)
{
kablosuz.write(led_yak, 1);
}
else{
kablosuz.write(led_sondur, 1);
}
}
Buton adında bir değişken tanımlayıp butonun bağlı olduğu dijital pini yazıyoruz. Ledyak adında bir dizi tanımlıyoruz ve bir elemanlı olduğunu belirtiyoruz. Ledsondur adında bir dizi tanımlıyoruz ve bir elemanlı olduğunu belirtiyoruz. begin() komutu ile nrf modülümüzü başlatıyoruz, openWritingPipe() ile bir hat oluşturuyoruz. led_yak isimli dizimizin 0.değerini 100 olarak tanımlıyoruz. led_sondur isimli dizimizin 0. değerini 0 olarak giriyoruz. Bu değerler gelişigüzel sayılar olabilir. Loop döngüsünün içine girip if() döngümüzü başlatıyoruz. digitalRead() ile butonun durumunu okuyoruz, ve gerekli şartın HIGH olmasını yani butona basılması koşulunu tanımlıyoruz. write() fonksiyonu ile led_yak dizisinin ilk elemanını yani 100 değerini gönderiyoruz. Butona basılmadığında ise led_sondur dizisinin ilk elemanını yani 0 değerini gönderiyoruz.
Alıcı
Alıcı kısımda const byte adres satırına kadar olan kodlar ve işlevleri , verici kısmındaki yerle aynı olduğundan tekrardan açıklama yapmıyorum. led adında bir değişken tanımlayıp butonun bağlı olduğu dijital pini (D2’ye bağlı olduğu için 2) yazıyoruz.
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 kablosuz(9, 10);
const byte adres[] = "arkis";
int led = 2;
int led_yak[1];
void setup() {
kablosuz.begin();
kablosuz.openReadingPipe(1, adres);
kablosuz.startListening();
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop() {
if (kablosuz.available())
{
kablosuz.read(led_yak, 1);
if (led_yak[0] == 100)
{
digitalWrite(led, HIGH);
}
else {
digitalWrite(led, LOW);
}
}
}
led_yak adında bir dizi tanımlıyoruz ve bir elemanlı olduğunu belirtiyoruz. begin komutu ile nRF24L01 modülümüzü başlatıyoruz. openReadingPipe() ile bir okuma hattı oluşturuyoruz. startListening() ile dinlemeyi başlatıyoruz. Seri monitörü açmak için baud rate hızımızı yazıyoruz. Ledimizin bağlı olduğu pini çıkış olarak tanımlıyoruz. available() komutu verinin alıcıya ulaşıp ulaşmadığını kontrol ediyor. Veri geldiyse kablosuz read ile veriyi okuyoruz ve if döngüsü ile gelen mesajın değeri 100 ise ledi yakmasını değilse ledi söndürmesini istiyoruz.