Arduino ile NRF24L01 Modüllerinin Kullanımı ve Örnek Alıcı Verici Devresi Yapımı

 Merhabalar,

Bu çalışmada sizler için NRF24L01 kablosuz iletişim modüllerinin arduino ile nasıl kullanıldığını, düzgün çalışmasını sağlamak için dikkat edilmesi gereken noktaları ve bu ürün ailesindeki diğer bazı ürünleri açıklamaya çalıştım ve örnek bir alıcı verici devresi uygulaması yaptım.

Genel olarak bu modüllerin çalıştırılması konusunda internette gördüğüm kadarı ile sorun yaşayan çok sayıda kullanıcı var ve sorunsuz bir şekilde bu modülleri sizlerin de kullanabilmesi için yeterli sayıda Türkçe içerik mevcut olmadığını farkettim. Bu amaçla oluşturduğum içerik sayesinde daha gelişmiş projeleri sizler de yapabilirsiniz. Umarım içeriği beğenmişsinizdir. Eğer beğendiyseniz lütfen youtube videomdaki Beğen ikonuna tıklamayı ve beni desteklemek için kanalıma abone olmayı unutmayın :) Varsa yorum, soru ve eleştirilerinizi yorumlar kısmına yazabilirsiniz. Teşekkürler...



Gerekli Ekipman
Alıcı Devresi İçin:

Verici Devresi İçin:
  • 1 adet arduino Uno veya Nano
  • 1 adet NRF24L01 modül
  • 1 adet nRF24L01+ Adaptör veya 1 adet 16v 10-100uf kondansatör
  • 1 adet Joystick Buton
Devre Şeması ve Bağlantılar
Arduino Kartlar için Bağlantılar

CE ve CSN pinleri arduinonun herhangi 2 pinine bağlanabilir. Uygulamada 9 ve 8'i kullandık.
MOSI, MISO ve SCK ise standarttır.

MOSI

MISO

SCK

Arduino Uno

11

12

13

Arduino Nano

11

12

13

Arduino Mega

51

50

52





Bu kartlardaki en büyük sorun voltaj beslemesi esnasında devredeki parazitler ve voltajdaki ufak dalgalanmalardır. Kart bu gibi durumlara hassas olduğu için VCC ve GND uçlarına 16v 10uf veya 100uf bir kondansatörü + ucu VCC'ye, - ucu ise GND'ye gelecek şekilde bağlarsak basit bir filtre devresi yapmış oluruz.

Bu kartları ara adaptör yoksa kesinlikle 5v ile beslemeyin. Mutlaka 3.3v ile besleyin!!!!!!!!




Arduino Kodu
Verici Kodu:

//NRF Verici Kodu
//Mucit Pilot 
//mucitpilot.blogspot.com
//Ağustos 2020 
/*
nRF24L01 Modül Bağlantıları:
   1 - GND
   2 - VCC 3.3V !!! 5V DEĞİL !!!
   3 - CE Arduino pin 9
   4 - CSN Arduino pin 8
   5 - SCK Arduino pin 13
   6 - MOSI Arduino pin 11
   7 - MISO Arduino pin 12
   8 - Kullanmıyoruz
   -
   Analog Joystick veya 10K pot:
   GND --Arduino GND
   VCC -- Arduino +5V
   X Pot -- Arduino A0
   Y Pot -- Arduino A1

 */
/*-----( Gerekli Kütüphaneleri Yüklüyoruz )-----*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
/*-----( Değişkenlerimizi tanımlıyoruz )-----*/
#define CE_PIN   9
#define CSN_PIN 8
#define YEKSEN A1
#define XEKSEN A0

// NOT: Sondaki "LL" "LongLong" tipi demek
const uint64_t pipe = 0xE8E8F0F0E1LL; // yayın adresi diyebiliriz iki tarafta da aynı olmalı ki haberleşebilsinler (transmit pipe deniyor)
 
 
/*-----( RF24 kütüphanesi ile radio adında bir haberleşme nesnesi yaratıyoruz )-----*/
RF24 radio(CE_PIN, CSN_PIN); // radio yaratıldı
/*-----( Girdileri tutacağımız diziyi tanımlayalım )-----*/
int verilerim[2]; // 
 
void setup()   /****** SETUP: 1 defa çalışır ******/
{
  Serial.begin(57600); 
  radio.begin(); //iletişimi başlattık
  //kumandadaki pinleri tanımlıyoruz
  pinMode(YEKSEN, INPUT);
  pinMode(XEKSEN, INPUT);

  radio.openWritingPipe(pipe); //adrese bağlanıyoruz
}//--(setup kısmı bitimi )---
 
 
void loop()   /****** LOOP: sürekli çalışıyor ******/
{

  verilerim[0]=analogRead(A0); //kumandadan verileri okuyup dizimize yazdırıyoruz
  verilerim[1]=analogRead(A1);

  radio.write( verilerim, sizeof(verilerim) ); //verileri gönderilmek üzere çıkışa yazdırıyoruz
 
}// loop sonu
 
//
//BİTTİ

Arduino Kodu
Alıcı Kodu:

//NRF24L01 alıcı kodu
//Mucit Pilot
//Ağustos 2020
//mucitpilot.blogspot.com

/*
nRF24L01 Modül Bağlantıları:
   1 - GND
   2 - VCC 3.3V !!! 5V DEĞİL !!!
   3 - CE Arduino pin 9
   4 - CSN Arduino pin 8
   5 - SCK Arduino pin 13
   6 - MOSI Arduino pin 11
   7 - MISO Arduino pin 12
   8 - Kullanmıyoruz
   -
   Analog Joystick veya 10K pot:
   GND --Arduino GND
   VCC -- Arduino +5V
   X Pot -- Arduino A0
   Y Pot -- Arduino A1

 */

#define KEY1 0 //diziden gelecek değişkenler için tanımladık (bu örnekte 2 veri alacağız)
#define KEY2 0


/*-----( kütüphaneleri yükleyelim )-----*/ 
#include <Servo.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

//RF modülün pinleri
#define CE_PIN   9
#define CSN_PIN 8
 

const uint64_t pipe = 0xE8E8F0F0E1LL; // adres
 
 
/*-----( radio nesnesi yaratılıyor)-----*/
RF24 radio(CE_PIN, CSN_PIN); // 
/*-----( değişkenler tanımlanıyor )-----*/
 
// radiodan gelen 5 adet veriyi almak için bir dizi oluşturuyoruz
int verilerim[] = {KEY1, KEY2}; // keylerimiz
int servodegeri, leddegeri; 
Servo servoNesnesi;//servomuz için bir nesne tanımladık.

int led=2;  //ledi Arduino'nun 2.pinine
//Bu ledi kumanda ile iletişim kurma başarılı ise yakıp kumandayı görmüyorsa söndürüyoruz

void setup()   
{
  Serial.begin(57600);
  delay(1000);

  pinMode(led, OUTPUT);
  servoNesnesi.attach(10);//servomuzun sinyal kablosu 10. pwm kanala bağlı
  //////////////////////////////////////////////////////////
  
 //radio ile iletişim kuruyoruz
  Serial.println("Nrf24L01 Alıcı Başlatılıyor");
  radio.begin();
  radio.openReadingPipe(1, pipe);
  radio.startListening();
  ///////////////////////////////
}//--(setup bitti )---
 
 
void loop()   /****** LOOP: sürekli çalışır ******/
{
 
  if ( radio.available() ) //eğer radyo ile temas kurabilmişse
  {
    // done değişkeni false yapıyoruz ve while içinde sonsuz döngü oluşturarak verileri toplayacağız
    bool done = false;
    while (!done) 
    {
      // veriyi alıyoruz.
      done = radio.read( verilerim, sizeof(verilerim) ); //ne kadar veri varsa al demek
      digitalWrite(led, LOW); //ledi söndürdük
      servodegeri=map(verilerim[0],0,1023,0,179);//stickten gelen bilgiyi servo için 0-179 aralığına uyarladık
      leddegeri=map(verilerim[1],0,1023,0,255);//stickten gelen bilgiyi 0-255 aralığına uyarladık
      //serial monitörden verileri görmek için;
      Serial.print("KEY1 = ");
      Serial.print(servodegeri);
      Serial.print("   KEY2 = "); 
      Serial.print(leddegeri);
      Serial.println();

    // kumandadan gelen değerlere göre hareketlere karar veriyoruz (burada her joystick için yaklaşık orta noktaya göre +-10 birim nötr alan bırakmak gerek
    //ki parazitten değişince istemsiz hareket etmesin

            servoNesnesi.write(servodegeri);
             
             if ((leddegeri > 130) || (leddegeri < 120)) // sadece ileri komutu veriliyor ileri gidecek
             {
                 digitalWrite(led, HIGH); 
              }
             else 
            {
              digitalWrite(led, LOW); 
             }
             

       
    }//while
  }//ilk if  
 
  //eğer radyo bulunamazsa
  else
  {
    Serial.println("Verici Bulunamadı");
    verilerim[0] = 0;
    verilerim[1] = 0;

   servoNesnesi.write(90);//servoyu ortalıyoruz
   digitalWrite(led, LOW); //ledimizi de söndürüyoruz
 
  }
 
}//--(main loop sonu )---
 






Yorumlar

Yorum Gönder

Bu blogdaki popüler yayınlar

QTR-8A Kızılötesi Çizgi Sensörü Kullanımı ve Basit PID Çizgi İzleyen Robot Yapımı

A4988 Step Motor Sürücü Kartı ile NEMA Step Motor Kullanımı

Arduino ile ESP8266 Kullanımı ve İnternet Erişimi Serisi -1 (İnternet Üzerinden Veri Çekme)