Arduino nano ve deneyap kart ile uzaktan kumanda?

ysf1413

Yeni Üye
Katılım
14 Mart 2026
Mesajlar
1
C++:
// 6 Channel Transmitter | 6 Kanal Verici
// 3 Joystick Version | 3 Joystick Versiyonu

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

const uint64_t pipeOut = 0xABCDABCD71LL;
RF24 radio(9, 10);                               // select CE,CSN pin | CE ve CSN pinlerin seçimi

struct Signal {
  byte throttle;
  byte pitch;
  byte roll;
  byte yaw;
  byte aux1;
  byte aux2;
};

Signal data;

void ResetData()
{
  data.throttle = 0;                 
  data.pitch = 127;
  data.roll = 127;
  data.yaw = 127;
  data.aux1 = 127;  // 3. joystick merkez
  data.aux2 = 127;  // 3. joystick merkez
}

void setup()
{
  radio.begin();
  radio.openWritingPipe(pipeOut);
  radio.setChannel(100);
  radio.setAutoAck(false);
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_MAX);
  radio.stopListening();
  ResetData();
}

int Border_Map(int val, int lower, int middle, int upper, bool reverse)
{
  val = constrain(val, lower, upper);
  if ( val < middle )
    val = map(val, lower, middle, 0, 128);
  else
    val = map(val, middle, upper, 128, 255);
  return ( reverse ? 255 - val : val );
}

void loop()
{                                 
  data.roll     = Border_Map( analogRead(A3), 0, 512, 1023, true  );  // CH1 - Joystick 1 X
  data.pitch    = Border_Map( analogRead(A0), 0, 512, 1023, true  );  // CH2 - Joystick 1 Y
  data.throttle = Border_Map( analogRead(A2), 0, 340, 570,  true  );  // CH3 - Joystick 2 Y (tek yönlü ESC)
  data.yaw      = Border_Map( analogRead(A1), 0, 512, 1023, false );  // CH4 - Joystick 2 X
  data.aux1     = Border_Map( analogRead(A4), 0, 512, 1023, true  );  // CH5 - Joystick 3 X
  data.aux2     = Border_Map( analogRead(A5), 0, 512, 1023, true  );  // CH6 - Joystick 3 Y

  radio.write(&data, sizeof(Signal)); 
}
C++:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <ESP32Servo.h> // ESP32 Servo kütüphanesi şart

Servo ch1, ch2, ch3, ch4, ch5, ch6;

struct Signal {
  byte throttle, pitch, roll, yaw, aux1, aux2;
};
Signal data;

const uint64_t pipeIn = 0xABCDABCD71LL;

// NRF24 için senin belirlediğin pinler
#define SCK_PIN  D5
#define MISO_PIN D6
#define MOSI_PIN D7
#define CE_PIN   D9
#define CSN_PIN  D10

RF24 radio(CE_PIN, CSN_PIN);

void ResetData() {
  data.throttle = 0;
  data.roll = 127;
  data.pitch = 127;
  data.yaw = 127;
  data.aux1 = 127;
  data.aux2 = 127;
}

void setup() {
  // DİKKAT: Rakamların başına 'D' harfi koyduk! Bu sayede çökme olmayacak.
  ch1.attach(D12);
  ch2.attach(D13);
  ch3.attach(D14);
  ch4.attach(D15);
  ch5.attach(D11);
  ch6.attach(D8);
                                                            
  ResetData();

  // İşlemciye NRF24 SPI pinlerinin yerini öğretiyoruz
  SPI.begin(SCK_PIN, MISO_PIN, MOSI_PIN);

  radio.begin();
  radio.openReadingPipe(1, pipeIn);
  radio.setChannel(100);
  radio.setAutoAck(false);
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_MAX);
  radio.startListening();
}

unsigned long lastRecvTime = 0;

void recvData() {
  while (radio.available()) {
    radio.read(&data, sizeof(Signal));
    lastRecvTime = millis();
  }
}

void loop() {
  recvData();
  unsigned long now = millis();
 
  if (now - lastRecvTime > 1000) {
    ResetData();
  }

  ch1.writeMicroseconds(map(data.roll, 0, 255, 1000, 2000));
  ch2.writeMicroseconds(map(data.pitch, 0, 255, 1000, 2000));
  ch3.writeMicroseconds(map(data.throttle, 0, 255, 1000, 2000));
  ch4.writeMicroseconds(map(data.yaw, 0, 255, 1000, 2000));
  ch5.writeMicroseconds(map(data.aux1, 0, 255, 1000, 2000));
  ch6.writeMicroseconds(map(data.aux2, 0, 255, 1000, 2000));

  delay(10); // Sistem kararlılığı için
}
Merhabalar öğrenciyim ve orta düzeyde bu işlere hakimim bu tarzda bir rf projesini ilk defa yapmayı deniyorum bayaa bir araştırma yaptım ancak burada takıldım.Elimde multimetre var teknofest projesi için uzaktan kumanda yapıyorum.
Ekran görüntüsü 2026-03-14 231018.png
Ekran görüntüsü 2026-03-14 231047.png
Ekran görüntüsü 2026-03-14 231119.png
20260314_231433.jpg
20260314_231452.jpg
20260314_231521.jpg
20260314_231534.jpg
20260314_231543.jpg
Verici tarafında arduino nano ,alıcı tarafında deneyap kart 1a ve haberleşme için 2adet nrf24lo1+pa modülü ve 3v3 regülatör modülü kullanmaktayım.Devre ve yazılım olarak rcpano.net adlı siteden yararlandım kodları ve şemayı claude ve gemini ile optimize ettim.Ancak vericide kullandığım 3 joystickim ve mosı mıso sck ce ve csn pinlerim doğru olmasına rağmen alıcı kısmında sinyal alamadım ve servoları joystick ile hareket ettiremedim.
Sadece olumlu olarak alıcıda her seferinde alıcıyı çalıştırdığımda servolar hareket ediyor ve galiba orta noktaya geliyor devamında servoları hareket ettirmeye çalıştığımda ise servolar hareket etmiyor sımsıkı duruyorlar.
Güç besleme kısmında vericide 7.4 v li-po pil arduino nanonun vın ve nrf24lo1+pa 3v3 regülatör modülünün + pinine gücü vermekteyim.
Alıcıda ise gücü 12.4 v lipo pil kullanıyorum xl4005 ile 5v seviyesini düşürüp deneyap kartın vbat pinine ordan vericide olduğu gibi nrf24 regülatör modülünün + sına veriyorum.
Güç besleme hattında sorunum olduğunu düşünüyorum ama yaptığım araştırmalar ile doğruluğundan emin olamadım
Bilgili arkadaşlar yazarlarsa çok memnun olurum :)
 
Son düzenleme:
Öncelikle devre şemasını, devrenin resimlerini ve program kodunu burada paylaş. Editörde bulunan "kod" butonunu kullan, dil olarak da C++ seç. Ayrıca elinde hangi test ve ölçüm cihazları var, bilgi seviyen nedir, öğrenci misin, hobici misin onu da belirt. Böylece zaten bildiğin şeyleri sana tekrar anlatarak vakit kaybetmeyelim.
 
Bu sorunda, "istatistik olarak gidip, olası problemlerin ne olduğunu değerlendirip, bu problemleri düzeltmeye teşebbüs edip sonra da çalışıyor mu diye bakayım" diye düşünürsen, bu doğru bir yaklaşım olmaz. Sen öğrencisin, projeyi öğrenmek için yapıyorsun. Bunu ne yapıp edip, bir şekilde çalıştırıp bir daha da devreye dokunmayacak birisi değilsin. O yüzden probleme analitik yaklaşman lazım ve aşama aşama ölçüm ve inceleme yaparak sorunu çözmen lazım.

Eğer evde proje üzerinde çalışıyorsan, en kısa zamanda bir osiloskop edin. Buna imkanın yoksa, okul laboratuvarında osiloskop vardır. Aşama aşama sinyal takibi yap.

* Joystick'leri hareket ettirince Nano'dan doğru çıkışı alabiliyor musun? Osiloskop ile kontrol et.
* Deneyap kartındaki programa bir ilave yap, sanki alıcıdan geliyormuş gibi suni veriler ekle ve program ana döngüde bu verileri alsın. Alıcıyı hiç ellemesin. Bu suni verilerle alıcı doğru tepkiyi veriyor mu? Servolar doğru hareketleri yapıyor mu?
* Hem Nano ile RF radyo SPI ile mi haberleşiyor, Deneyap ile RF radyo da SPI ile haberleşiyorsa, o zaman RF radyoları aradan çıkar, Nano SPI pinlerini deneyap SPI pinlerine bağla. Sistem doğru çalışıyor mu?

Bu şekilde ilerlediğin zaman, problem alanlarını daraltmış oluyorsun. Mesela son aşamaya kadar geldin, herşey çalışıyor, ama RF radyolar devrede iken çalışmıyorsa, sorunun RF radyo modülleri ile ilgili olduğunu söyleyip, problemi daraltmış oluyorsun.
 
Kolay gelsin.
Nrf modülleri ile çalışıp sıkıntı yaşamayan görmedim diyebilirim. Ben olsam bir Deneyap kart daha edinir ve iki Deneyap kart arasında espNow ile iletişim kurardım. Sebebi hem üçüncü bir donanım ihtiyacım kalmaz hem kütüphane hem de kod tarafında yükten kurtulurdum.
Nrf modülleri güzel olsa da piyasada sahtesi çok fazla. Uart üzerinden çalışsa bir şekilde debug imkanı olur ama SPI üzerinden debug lojik analizör olmadan zor. Bu da yazılımla uğraşmak yerine donanım sıkıntıları ile boğuşmana sebep olur.
İki tarafta nrf kartların orjinal olduğu ve stabil çalıştığı kesin olmadan bence çözüm bulman zor. Bu yüzden öncelikle garanti çözüme odaklan derim.
İllaki nrf kartı kullanıcam dersen 8 Kanal lojik analizör edin ve nrf kartın mosi miso pinlerini dinle. Eğer veri doğru şekilde nrf karta gidiyorsa o zaman nrf kartın parametrelerine bak. Ama ben olsam nrf yerine espNow, olmadı rfm yada hoperf/dorji ürünlere bakarım. Enazından onların nrf kadar sahtesi yaygın değil. Diğer taraftan RF modül uart üzerinden haberleşirse USB uart çevirici ile debug etmen kolay olur.
Kolay gelsin.
 

Forum istatistikleri

Konular
8,995
Mesajlar
145,792
Üyeler
3,630
Son üye
ysf1413

Son kaynaklar

Back
Top