Kablosuz haberleşmede sıkça kullanılan modüllerden NRF24L01 Rf modül kullanımı hakkında bahsedeceğim.Bu modülün kullanımı kolay ve menzili
gayet iyi olduğundan projelerinizde rahatlıkla kullanabilirsiniz.Ayrıca fiyatı da uygundur.Düşük güç tüketimi ve 2.4GHz frekans da çalışması bize avantaj sağlamaktadır.
nrf24L01.jpg2-4G-NRF24L01-antenli-e1443177055216.jpg
- NRF24L01 2.4GHz Transceiver Modül
- Modülün pcb ve harici antenli modeli mevcuttur.Pcb modellerde menzil 250 m iken harici antenli modelinde menzil 1000 m’ye kadar çıkabiliyor.
- Modülü projenize göre çift yönlü haberleşme yaptırmak için hem alıcı hem verici olarak kullanabilirsiniz.
- Modülün Pin Bağlantıları:
nRF24L01.png
Modül SPI protokolünü kullanarak haberleşmektedir.Bundan dolayı pin bağlantılarını arduino modelinin SPI pinlerine bakarak yapmalısınız.
Örnek olarak arduino uno ile pin bağlantılarını gösterelim.
nRF24L01 | Arduino Uno |
VCC | 3.3 V |
GND | GND |
CS | 7 |
CE | 8 |
MOSI | 11 |
MISO | 12 |
SCK | 13 |
Örnek Kod:
Verici kodu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include <SPI.h> #include <nRF24L01p.h> nRF24L01p verici(7,8);//CSN,CE void setup(){ delay(150); Serial.begin(115200); SPI.begin(); SPI.setBitOrder(MSBFIRST); verici.channel(90); verici.TXaddress("kontrol"); verici.init(); } String message; void loop(){ if(Serial.available()>0){ char character=Serial.read(); if(character=='\n'){ verici.txPL(message); verici.send(SLOW); message=""; }else{ message+=character; } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include <SPI.h> #include <nRF24L01p.h> nRF24L01p alici(7,8);//CSN,CE void setup(){ delay(150); Serial.begin(115200); SPI.begin(); SPI.setBitOrder(MSBFIRST); alici.channel(90); alici.RXaddress("kontrol"); alici.init(); } String message; void loop(){ if(alici.available()){ alici.read(); alici.rxPL(message); Serial.println(message); message=""; } } |
- Modülün nRF24L01p.h adında kütüphanesini buradan indirelim. >>nRF24L01p
- Yazılımda öncelikle CE ve CSN pinlerini tanımlamamız gerekiyor.
- nRF24L01p alici(7,8); >> Burdaki komutla 7.pin CSN, 8.pin CE pini olarak tanımlanmış.Bu fonksiyonda alıcı modül adına “alici” ismini verdik.
- nRF24L01p verici(7,8); >> Burdaki komutla 7.pin CSN, 8.pin CE pini olarak tanımlanmış.Bu fonksiyonda verici modül adına “verici” ismini verdik.
- SPI protokolü ile haberleştiği için SPI kütüphanesi eklenip SPI.begin(); fonksiyonu setup’ın içine yazılarak haberleşme başlatılır.
- alici.channel(90);>> Alıcı modülde setup’ın içinde tanımlanarak haberleşme kanal değerini 90 yaptık.Bu değer iki modülde de aynı değer olmalıdır.0 ile 125 arası değer yazılabilir.
- verici.channel(90);>> Verici modülde setup’ın içinde tanımlanarak haberleşme kanal değerini 90 yaptık.Bu değer iki modülde de aynı değer olmalıdır.0 ile 125 arası değer yazılabilir.
- alici.RXaddress(“kontrol”); >> Bu fonksiyon ile modülü alıcı olarak ayarladık ve adres ismine de “kontrol” adını verdik.
- verici.TXaddress(“kontrol”);>>Bu fonksiyon ile de modülü verici olarak ayarladık ve adres ismine de “kontrol” adını verdik.
- İki modülün de adres ismi ve haberleşme kanal değeri aynı olmalıdır.
Önemli Not:Modüller arası haberleşme sağlanamıyorsa her iki modülün de vcc ve gnd pinleri arasına 3.3 uF ile 10 uF arası değerde kondansatör yerleştirerek tekrar deneyiniz.
Örnek Uygulama:
Potansiyometre ile Kablosuz Servo Motor Kontolü
pot-rf-servo.png
RF24 Kütüphanesini buradan indirelim.
Şekildeki alıcı ve verici devrelere bakarak gerekli bağlantıları yapabilirsiniz.
Yazılım kısmında bir modülü alıcı diğer modülü de verici olarak tanımlayarak kablosuz olarak veri transferini gerçekleştireceğiz.
Verici Yazılımı:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <SPI.h> #include "RF24.h" int msg[1]; //SCK -> 13//MISO -> 12//MOSI -> 11//CSN -> 7//CE -> 8 RF24 radio(8,7); const uint64_t pipe = 0xE8E8F0F0E1LL; int potpin = 0; int val; void setup(void){ radio.begin(); radio.openWritingPipe(pipe); } void loop(void){ val = analogRead(potpin); val = map(val, 0, 1023, 0, 179); msg[0] = val; radio.write(msg, 1); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <Servo.h> #include <SPI.h> #include "RF24.h" Servo myservo; //SCK -> 13//MISO -> 12//MOSI -> 11//CSN -> 7//CE -> 8 RF24 radio(8,7); const uint64_t pipe = 0xE8E8F0F0E1LL; int msg[1]; void setup() { myservo.attach(9); radio.begin(); radio.openReadingPipe(1,pipe); radio.startListening(); } void loop() { if (radio.available()){ bool done = false; while (!done){ done = radio.read(msg, 1); myservo.write (msg[0]); } } } |