BAĞLAN

Arduino İle NRF24L01 Rf Modül Kullanımı

  • Görüntülenme 15393
  • PAYLAŞ
    • 151
    •  
    • 32
    •  
    • 2
    •  
    •  
    •  
    •  
    •  
      185
      Paylaşım

    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 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ı:

    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

    Kablosuz haberleşme yaparken modüllerden birini alıcı diğerini ise verici olarak ayarlamamız gerekiyor.İstenirse projenin durumuna göre bir modül hem alıcı hem de verici olarak da kullanılabilmektedir.Modülün alıcı veya verici durumunda olması kablo bağlantılarını değiştirmez.Bu bağlantılar tüm durumlar için aynıdır.

    Örnek Kod:

    Verici kodu:

    #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;
     }
     }
    }

     

    Alıcı Kodu:

    #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="";
     }
    }

    Fonksiyonların Açıklamaları:

    • 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ü

    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ı:

    #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);
    }
    

    Alıcı Yazılımı:

    #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]);
     
     }
     }
     }

    PAYLAŞ
    • 151
    •  
    • 32
    •  
    • 2
    •  
    •  
    •  
    •  
    •  
      185
      Paylaşım
    Sezgin GÜL

    Sezgin GÜL

    Makine Mühendisi, Girişimci, Maker

    Kimler Neler Demiş?

    114 Yorum - "Arduino İle NRF24L01 Rf Modül Kullanımı"

    avatar
    Sıralama:   En Yeniler | Eskiler | Beğenilenler
    halil
    Ziyaretçi

    merhaba bu projeyi yapmaya çalışıyorum ama alıcı kodunda done hataveriyor sebebini söylermisiniz ?

    s_safak
    Ziyaretçi

    Sorunu cozebildiniz mi bilemiyorum ama Setup altinda Serial.begin(9600); ekleyip done = satirinin ustune Serial.println(done); yazarak basit bir debug yapabilirsiniz. Cunku yukarida done bool olarak tanimlanmis. fakat anladigim kadari ile (kodu kullanmadigim icin bilemiyorum) radio.read(msg, 1) olarak farkli birsey set ediyor olabilir. Bu sekilde daha kolay cozum bulabilirsiniz.

    Rıdvan Sevil
    Ziyaretçi

    Merhaba; bu yöntem ile arduino mega üzerinden matlab&simulink ‘e sensör üzerinden sinyal gönderebilir miyim?

    Teşekkürler.

    s_safak
    Ziyaretçi

    simulink serial uzerinden yada baska bir uygulama uzerinden veri alabiliyor ise mumkun.
    Bu sistem ile PC ye bagli serial porta gonderdiginiz verileri herhangi bir programlama dili ile okuyup simulink e anlayacagi mesajlari gonderebilirsiniz.

    Rıdvan Sevil
    Ziyaretçi

    Merhaba; bu sistemle arduino mega üzerinden matlab&simulink ‘e veri aktarabilir miyim?

    Teşekkürler.

    mert çelebi
    Ziyaretçi

    merhaba sezgin buna benzer bir proje üzerine çalışıyorum yapmak istediğim butona basıldığında servo 90 derece dönsün tekrar basıldığında 0 dereceye geri gelsin bir iki deneme yaptım fakat sonuç alamadım baştaki kalıp haberleşme programına nasıl bi eklenti yapmalıyım yardım edersen sevinirim.

    s_safak
    Ziyaretçi

    verici tarafinda butona basiminizda sizin anlayacaginiz bir mesaj olusturabilirsiniz (RF_motor_turn) gibi. bu mesaji aliciya gonderip hangi yontem akliniza yatar ise o yontem ile gelen mesaji karsilastirip motora donme adimi islemini yaptirabilirsiniz. Servolarda kullanilan libraryler onemli. Kiminde basit komutlar ile donme saglarken en son detayli calisma yaptigim bir library de 0.1 tam tur 0.01 yarim tur 0.001 ceyrek tur mesajlari idi. Bunada dikkat etmeniz gerek.

    aytug
    Ziyaretçi

    Merhaba benim sorunum şu alıcı verisi olarak çalıştırıyorum sıkıntı yok fakat ben bir cihazı hem alıcı hem verici yapmak istiyorum. Yardımlarınızı bekliyorum.

    .
    Ziyaretçi

    pa antenli ile sıradan nrf arasında hiçbir kullanım farkı var mı?
    ben sorunsuz bir sekilde antensizi kullanıyorum ama antenli aynı devrede calısmıyor

    Hamza sinal
    Ziyaretçi

    Kardeşlerim agabi lerim bir ricada buluncam, bir pir hareket sensör ile iki adet nrf24lo1 arasında led di nasıl çalıştıra biliris kodu nasıl yaza biliris bilen varmı ( sinallanis@hotmail.com )

    Ömer Bozdemir
    Ziyaretçi

    Merhaba nrf24rl01 adaptörü olmadan kullanabilir miyiz nrf2rl01 i teşekkürler acil lütfen!

    Oguzhan
    Ziyaretçi

    Ben 2 servo ve
    1 motor kullanmak istiyorum
    Ne yapmaliyim

    ayhan öztürk
    Ziyaretçi

    hocam çok teşekkür ederim uzun zamandan beri uğraşıyordum bir türlü eşleşme sağlayamıyordum…sonunda önceki kütüphaneleri sildim verdiğin linkten indirdim. sadece her iki nrf24 ün vcc ile GND arası 47 uf lik kondansatör bağladım. kondansatör bağlı olmayınca çalışmıyor..HARCADIĞIN EMEK İÇİN TEŞEKKÜRLER…

    Sencer
    Ziyaretçi

    Her yerde farklı değerlerde kondansatör söyleniyor, 2.2, 3.3, 10, 20, 100 uf lik kondansatörler bağladım, hiç biriyle çalıştıramadım. İki adet arduino var biri orjinal diğeri çin malı. Her ikisinde de çalışmıyor. Başka hiç bir işle uğraşamaz oldum şunu çalıştırana kadar.

    mete
    Ziyaretçi

    bende faklı uno lar vardı çalışmadı , her ikisini aynı yapınca çalıştı

    wpDiscuz

    Yeni Projeler More

    • 16 Şubat 2017
      1 hafta ÖNCE 2 Yorum

      Öğrenme Fonksiyonuna Sahip Hareket Kopyalayan Robot Kol Yapımı

      Bu projede öğrenme yoluyla hareket kopyalayan robot kol yapımından bahsedeceğim. Endüstride kullanılan robot kollar, her zaman aynı hareketleri yapmaya odaklıdır. Örneğin ürün bandından bir nesneyi alıp başka bir banda aktarımını yapan robot kollar sürekli aynı hareketi yapmaktadır. Bu hareketler önceden öğretilerek robot kola aktarılır. Burada da aynı mantıkla robot ...

    • 11 Şubat 2017
      2 hafta ÖNCE 10 Yorum

      Arduino İle Labirent Çözen Robot Yapımı

      Kendi robotunu yap projelerimizin bu bölümünde arduino ile labirent çözen robot yapacağız. Labirent çözen robot özellikle robot yarışmalarında yer almaktadır. Bir labirentin çözüm yolunu bulmak aslında tek bir etkene bağlıdır. Bu etken sağ veya sol taraftaki herhangi bir duvarı takip ettirmektir. Bu etkenden yola çıkarak robot sol veya sağ ...

    • 07 Şubat 2017
      3 hafta ÖNCE Yorum Yok

      Arduino ile MLX90614 Kızılötesi Sıcaklık Sensörü Kullanımı

      Cisme temas etmeden, cismin sıcaklığını ölçen MLX90614 kızılötesi sıcaklık sensöründen bahsedeceğim. Dahili bir 17-bit ADC ve güçlü bir DSP, MLX90614'ün ölçümlerinde yüksek doğruluk ve çözünürlük verir. Vücut sıcaklığı ölçmek için uygundur. Ayrıca hareket algılamada da kullanabilirsiniz. MLX90614 Özellikler: Ortam sıcaklığı ölçme aralığı -40 ile + 125 ° C Nesne ...

    • 05 Şubat 2017
      3 hafta ÖNCE Yorum Yok

      Arduino ile Yazıyı Sese Dönüştüren Emic 2 Modülü Kullanımı

      Robotunuzu konuşturmak ve neler olup bittiğini söyletmek ister misiniz ? Emic 2 yazıyı sese çeviren modülle kolaylıkla projeleriniz konuşabilir. Emic-2, Parallax tarafından, ses sentezini tamamen zahmetsiz kılmak için Grand Idea Studio ile birlikte tasarlanmıştır.

    • 31 Ocak 2017
      4 hafta ÖNCE 7 Yorum

      Arduino ile DHT22 Sıcaklık Nem Sensörü Kullanımı

      DHT sensörleri, kapasitif nem sensörü ve bir termistör olmak üzere iki parçadan oluşur. DHT11 ve DHT22 olan iki DHT modelini ele alalım. Görünüm ve pin yapısı olarak benzer görünmelerine rağmen farklı ölçüm hassasiyetlerine sahiptirler. Aşağıda iki modelin karşılaştırmasına bakalım.

    Bizi Takip Et

    Son Yorumlar

    Sezgin GÜL
    Sezgin GÜL 2017-02-25 23:01:46
    merhaba batuhan, hatanın sebebi AFMotor.h kütüphanesini yüklemediğinden kaynaklanmış. Kütüphaneyi buradan indirebilirsin http://www.robimek.com/wp-content/uploads/AFMOTOR-master.rar
    batuhan 2017-02-25 21:52:21
    sezgin bey öncelikle çok teşekkür ediyorum proje için ; Arduino ya kodu derlediğimde şöyle bir sorun ile karşılaşıyorum Arduino:1.8.1 (Windows.....
    Emin ERKMEN 2017-02-25 19:55:34
    Bu robotun üstüne ekleme yapabilir misiniz? 1 hafta içinde? Bu bizim için çok önemli.
    Sezgin GÜL
    Sezgin GÜL 2017-02-25 19:48:46
    Çizgili olan labirenti çözen robotlarda o özellik mevcut. İlerleyen günlerde o tarz proje paylaşacağım.
    Emin ERKMEN 2017-02-25 19:34:28
    Peki bu robot. En kısa yolu nasıl bulabilir. İkinci kez aynı labirentten geçtiği zaman en kısa yoldan gitmesi için ne.....
    Sezgin GÜL
    Sezgin GÜL 2017-02-25 18:10:10
    Kodlarda sorun yok videodaki robotta kullanılan kodlardır. Motor yönlerini doğru taktınız mı. Yön komutlarında doğru yönde dönüyorlar mı bunları da.....
    Emin ERKMEN 2017-02-25 18:03:27
    kodlarda sıkıntı yok yani?
    Sezgin GÜL
    Sezgin GÜL 2017-02-25 17:17:46
    Bağlantılarınız doğru ve sensörlerin konumları uygun ise enerji yetersizliğinden kaynaklanabilir