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.
 

Forum istatistikleri

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

Son kaynaklar

Back
Top