Neden Kendi Kumandanızı Yapmalısınız?
Merhaba arkadaşlar!  Drone’lardan robot arabalara, ev otomasyon sistemlerinden hobi projelerine kadar birçok alanda uzaktan kontrol sistemlerine ihtiyaç duyarız. Peki, neden hazır bir kumanda almak yerine kendi kumandamızı yapmayalım? Bu yazıda, Arduino Nano ve NRF24L01 kablosuz iletişim modülü kullanarak uygun maliyetli, özelleştirilebilir bir uzaktan kumanda (verici) ve alıcı sistemi nasıl tasarlayacağınızı adım adım anlatacağım. Hem eğlenceli hem de öğretici bir proje sizi bekliyor!

NRF24L01 Nedir ve Neden Harika?
NRF24L01, 2.4 GHz frekans bandında çalışan, düşük güç tüketimli bir RF (radyo frekansı) alıcı-verici modülüdür. Fiyatı uygun bağlantısı kolay ve Arduino ile uyumludur. 250 kbps ile 2 Mbps arasında veri aktarımı yapabilir ve açık alanda 100-1000 metre mesafeye ulaşabilir (antenli modellerle). Üstelik, aynı anda birden fazla cihazla iletişim kurabilen “Multiceiver” özelliği ile projelerinize esneklik katar.

Bağlantı Şeması ve Kodlar
1. Gerekli Malzemeler
  • 2 adet Arduino Nano
  • 2 adet NRF24L01 modülü
  • 1 adet joystick (verici için, örneğin 2 eksenli)
  • 1 adet LED veya servo motor (alıcı için test amaçlı)
  • 10 µF kapasitör (NRF24L01 modülleri için güç dalgalanmalarını önlemek amacıyla)
  • Jumper kablolar
  • Breadboard veya prototip kartı
  • 3.3V güç kaynağı (opsiyonel, Arduino’nun 3.3V pini genellikle yeterlidir)
2. Bağlantı Şeması
Verici (Transmitter) Bağlantıları: NRF24L01 modülü, SPI protokolü üzerinden Arduino ile iletişim kurar. Arduino Nano’nun SPI pinleri ve diğer bağlantılar aşağıdaki gibidir:

NRF24L01 Pini
Arduino Nano Pini
Açıklama
VCC
3.3V
NRF24L01 1.9-3.6V ile çalışır, 5V bağlamayın!
GND
GND
Toprak bağlantısı
CE
D9
Chip Enable (modülü aktif eder)
CSN
D10
Chip Select Not (SPI komutları için)
SCK
D13
SPI Clock
MOSI
D11
Master Out Slave In
MISO
D12
Master In Slave Out
IRQ
Bağlanmayacak
Kesme pini, bu projede kullanılmıyor


Not: NRF24L01 modülleri 3.3V ile çalışır, 5V bağlarsanız modül zarar görebilir! Ayrıca, Arduino’nun 3.3V pini sınırlı akım sağlar. Eğer iletişimde sorun yaşarsanız, harici bir 3.3V regülatör (örneğin AMS1117) kullanabilirsiniz.

Joystick Bağlantıları (Verici):
  • X-ekseni: A0 (analog pin)
  • Y-ekseni: A1 (analog pin)
  • VCC: 5V
  • GND: GND
Alıcı (Receiver) Bağlantıları: Alıcı tarafında da NRF24L01 modülünün bağlantıları verici ile tamamen aynıdır. Ek olarak, test için bir LED veya servo motor bağlanabilir:

NRF24L01 Pini
Arduino Nano Pini
Açıklama
VCC
3.3V
Aynı verici gibi
GND
GND
Toprak bağlantısı
CE
D9
Chip Enable
CSN
D10
Chip Select Not
SCK
D13
SPI Clock
MOSI
D11
Master Out Slave In
MISO
D12
Master In Slave Out




LED Bağlantısı (Alıcı):
  • LED pozitif bacak: D3 (220 ohm direnç ile)
  • LED negatif bacak: GND
Not: NRF24L01 modülünün VCC ve GND pinleri arasına 10 µF’lik bir kapasitör bağlayın. Bu, güç dalgalanmalarını önleyerek iletişim stabilitesini artırır.
3. Kodlar
Aşağıda, joystick ile kontrol edilen bir verici ve bu verileri alarak bir LED’i kontrol eden bir alıcı için gerekli Arduino kodları verilmiştir. Kodlar, TMRh20 tarafından geliştirilen RF24 kütüphanesini kullanır. Önce kütüphaneyi Arduino IDE’ye yükleyin: RF24 Kütüphanesi.
Verici Kodu (Transmitter):

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(9, 10); // CE, CSN pinleri
const byte address[6] = "00001"; // Verici ve alıcı için aynı adres

struct DataPack {
  int xAxis;
  int yAxis;
};
DataPack data;

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openWritingPipe(address); // Verici adresi
  radio.setPALevel(RF24_PA_MIN); // Güç seviyesi (MIN, LOW, HIGH, MAX)
  radio.stopListening(); // Verici modu
}

void loop() {
  data.xAxis = analogRead(A0); // Joystick X ekseni
  data.yAxis = analogRead(A1); // Joystick Y ekseni

  radio.write(&data, sizeof(data)); // Veriyi gönder
  Serial.print("X: "); Serial.print(data.xAxis);
  Serial.print(" Y: "); Serial.println(data.yAxis);
  delay(100);
}


Alıcı Kodu (Receiver):


#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(9, 10); // CE, CSN pinleri
const byte address[6] = "00001"; // Verici ile aynı adres

struct DataPack {
  int xAxis;
  int yAxis;
};
DataPack data;

void setup() {
  Serial.begin(9600);
  pinMode(3, OUTPUT); // LED pini
  radio.begin();
  radio.openReadingPipe(0, address); // Alıcı adresi
  radio.setPALevel(RF24_PA_MIN); // Güç seviyesi
  radio.startListening(); // Alıcı modu
}

void loop() {
  if (radio.available()) {
    radio.read(&data, sizeof(data)); // Veriyi oku
    Serial.print("X: "); Serial.print(data.xAxis);
    Serial.print(" Y: "); Serial.println(data.yAxis);

    // Joystick X ekseni 700’den büyükse LED’i yak
    if (data.xAxis > 700) {
      digitalWrite(3, HIGH);
    } else {
      digitalWrite(3, LOW);
    }
  }
}


Kodların Açıklaması
  • Verici: Joystick’in X ve Y eksenlerinden analog verileri (0-1023 arası) okur ve bu verileri bir struct yapısı ile NRF24L01 modülü üzerinden alıcıya gönderir.
  • Alıcı: Gelen verileri okur ve X ekseninin değeri 700’den büyükse bir LED’i yakar. Bu, basit bir kontrol örneğidir; servo motor veya başka bir cihaz kontrolü için kodu özelleştirebilirsiniz.
  • Adres: 00001 adresi, verici ve alıcı arasında eşleşmeyi sağlar. Farklı cihazlar için farklı adresler kullanılabilir.
  • Güç Seviyesi: RF24_PA_MIN, kısa mesafeli testler için uygundur. Daha uzun mesafeler için RF24_PA_MAX kullanılabilir, ancak bu daha fazla güç tüketir.


Sorun Giderme İpuçları
  • Veri iletimi olmuyor mu? Bağlantıları kontrol edin, aynı adresi (00001) kullanıp kullanmadığınıza bakın.
  • Kararsız iletişim Ascı çalışıyor mu? NRF24L01’in VCC ve GND arasına 10 µF kapasitör ekleyin. Harici 3.3V regülatör deneyin.
  • Garbage değerler mi alıyorsunuz? Baud hızını kontrol edin (serial monitör ve kod aynı olmalı).
  • Mesafe kısa mı? RF24_PA_MAX güç seviyesini deneyin veya antenli NRF24L01 modeli kullanın.

Bu temel sistemi özelleştirerek daha havalı projeler yapabilirsiniz:
  • Drone Kontrolü: Joystick verilerini servo motorlara veya ESC’lere (elektronik hız kontrolcü) bağlayarak drone uçurun.
  • Robot Araba: Alıcıya motor sürücüleri (örneğin L298N) ekleyerek uzaktan kontrollü bir araba yapın.
  • Çok Kanallı Kumanda: Daha fazla joystick veya düğme ekleyerek 6-14 kanallı bir kumanda tasarlayın.



Kendi Kumandanız Hazır!
Tebrikler, artık kendi uzaktan kumanda sisteminizi yaptınız! Bu proje, hem Arduino programlamayı hem de kablosuz iletişim teknolojilerini öğrenmek için harika bir başlangıç. NRF24L01 modülünün düşük maliyeti ve esnekliği, onu her maker’ın araç kutusunda bir zorunluluk haline getiriyor. Sorularınız varsa veya projenizi paylaşmak isterseniz, yorumlarda buluşalım!