Arkadaşlar merhaba,
Arduino ile ilgilenmeye başlayan neredeyse herkes, bir döneminde uzaktan kontrollü araba,bot veya quadrocopter yapmak istemiştir. Bu yazımızda Remote Control(RC) araç yapmak isteyen arkadaşlar için basit uzaktan kontrol devre ve kodunu anlatacağım. Bu yazıda iki Arduino’yu NRF24L01 modülü ile haberleştireceğiz ve ilk Arduino’dan butona basıldığında, diğer Arduino’daki ledin yanmasını sağlayacağız. Tabiki led yakmak işin basit kısmı fakat RC Car yaparsanız yine aynı mantıkta kalacaksınız ve butonlar joystick, ledler ise motor olacak. Biz burda sadece bir Arduino’dan diğerine veri yollamayı anlatacağız. Veriyi aldıktan sonra işlemek size kalmış.
İki Arduino’yu kablosuz haberleştirmenin bir çok yolu var. Bunlar, çok uzak mesafede haberleşebilen fakat fiyatı biraz tuzlu olan X-Beemodülleri, fiyatları daha da pahalı olan GPS veya GSM modülleri olabilir. Fakat ben bu projede fiyat/performans olarak son zamanlarda çıkmış en iyi ürün olan Nordic Semiconductor firmasının ürettiği ve internet ortamında yazılı olarak bir çok kaynağı bulunan NRF24L01 isimli kablosuz modülü kullanacağım.
Modül 2.4GHz frekansında kablosuz haberleşme yapmanıza imkan sağlayan düşük güç tüketimine sahip modüldür. Modül SPI arabirimini desteklemekte olup, 1 modül 126 taneye kadar modüle bağlanabilmektedir. Yani bir ev otomasyonu gerçekleştirdiğinizi düşünürsek, evimizdeki 126 tane nesneyi 1 tane NRF bağlı Arduino ile kontrol edebiliriz.
Uygulamada kullanılacak malzemeler ve araçlar şunlardır:
- 2 Arduino UNO
- 2 NRF24L01 Wireless Modül
- 2 Breadboard
- 1 LED
- 1 330 ohm direnç
- 1 10k ohm direnç
- 1 buton
- Dişi Erkek ve Erkek Erkek Jumper Kablo
Projemizde SPI arabirimi ve modülümüz için 2 tane kütüphane kullanıyoruz. SPI kütüphanesi Arduino IDE’sini yüklediğimizde geliyor fakat modülümüz için kullanacağımız RF24-Master kütüphanesini bizim eklememiz gerekiyor. İlgili kütüphaneyi buradan indirebilirsiniz.
Kütüphaneyi indirdikten sonra winrar dosyası içindeki her şeyi C:\Program Files\Arduino\Library dosyası içerisine atıyoruz.
Kütüphaneleri ekledikten sonra devremizi kurup, arduinolarımıza kod yükleyebiliriz.
Fakat devreyi kurup kodları atmadan önce yapacağımız örneğin mantığını birazcık anlatmak istiyorum.
Verici kısmında, ilk önce verileri yollayacağımız bir kanal tanımlıyoruz, bu kanal üzerinden iletişim kuracağız. Yani bu kanal bir nevi bizim karşı tarafı parolamız. Karşı taraf bu parolayı görünce verilere alacak ve böylece iletişim tamamlanacak. Kanal tanımlandıktan sonra, NRF modülümüzü gönderim yapacak şekilde ayarlıyoruz(bu ayarlamalardan kod kısmında daha detaylı bahsedilecektir.). Ayarlamaları yaptıktan sonra, butona basıldığında NRF modülü ile karşı tarafa bir karakter yolluyoruz.
Alıcı kısmında ise, verileri alacağımız kanalı tanımlıyoruz. Bu kanal alıcı kısmındaki ile aynı olmalı çünkü parolamız demiştik ve parola iki tarafta da aynı olmalı. Kanalı tanımladıktan sonra bu sefer NRF modülümüzü okuma yapacak şekilde ayarlıyoruz. Bu sefer ise modülümüz sürekli olarak bir veri gelip gelmediğini kontrol ediyor. Bir veri geldiğinde, gelen verinin daha önce tanımladığımız olup olmadığını kontrol ediyoruz. Eğer doğru veri ise ledi yakıyoruz.
DEVRE ŞEMALARI
Alıcı Devresi

Alıcı devresinde 1 adet Arduino, 1 adet NRF24L01 ile 1 adet led devresi bulunmaktadır.
Verici Devresi

Verici devresinde ise 1 adet Arduino, 1 adet NRF24L01 ile 1 adet buton devresi bulunmaktadır.
Devreleri bu şekilde bağladıktan sonra geriye sadece Arduino’lara kod atmak kalıyor.
ARDUINO KODLARI
Verici Kodları
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" //Modül ile ilgili kütüphaneleri ekliyoruz int mesaj[1]; //mesaj isminde bir dizi tanımlıyoruz RF24 verici(9,10); //kütüphane tarafından kullanılacak pinleri tanımlıyoruz const uint64_t kanal = 0xE8E8F0F0E1LL; //kanalı tanımlıyoruz int buton = 7; //butonun bağlı olduğu dijital pin void setup(void) { verici.begin(); //nrf yi başlatıyoruz verici.openWritingPipe(kanal); //kanal id sı tanımlanıyor } void loop(void) { if (digitalRead(buton) == HIGH) { mesaj[0] = 123; verici.write(mesaj, 1); //mesaj değişkeni yollanıyor } }
Alıcı Kodları
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" //Modül ile ilgili kütüphaneleri ekliyoruz int mesaj[1]; RF24 alici(9,10); const uint64_t kanal = 0xE8E8F0F0E1LL; int led = 2; void setup(void){ Serial.begin(9600); alici.begin(); alici.openReadingPipe(1,kanal); alici.startListening(); pinMode(led, OUTPUT); } void loop(void){ if (alici.available()) { bool done = false; while (!done) { done = alici.read(mesaj, 1); if (mesaj[0] == 123) { delay(10); digitalWrite(led, HIGH); } else { digitalWrite(led, LOW); } delay(10); } } }
Kodlarımızı bu şekilde yazıp, Arduino’larımıza yükledikten sonra ilk Arduino’dan butona bastığımızda ikinci Arduino’da ledin yandığını göreceğiz. Bu projeyi daha da geliştirip kendi RC arabanızı yapabilirsiniz.
Kaynak: https://maker.robotistan.com/nrf24l01-ile-uzaktan-kontrol/