Bazı model uçaklar delta kanatlıdır. Bazıları da V tipi kuyruğa sahiptir. Delta kanatlı modellerde iki kanalın birlikte hem aileron hem de elevator olarak çalışması gerekir. V-Tail modeller de ise hem elevatör hem de rudder olarak çalışması gerekir. Bu alıcı gerekli olan miks özelliğine sahiptir.
Alıcı kodu, PDF ve Gerber dosyaları: https://drive.google.com/file/d/1BHzEPPrXesnFIR55zIHX7_UMv9p4uMUp/view?usp=sharing
Gerekli Malzemeler:
(Bu malzemeler ülkemizde farklı yerlerde makul fiyatlar ile satılmaktadır. İsimleri ile aratabilirsiniz. Yurtdışı linkleri malzemeyi görebilmeniz için referans amaçlıdır)
GT-24 NRF24L01+PA+SMD: https://s.click.aliexpress.com/e/_DekKUm9 Veya https://s.click.aliexpress.com/e/_oEjrKrK
Arduino Micro Pro: https://s.click.aliexpress.com/e/_oEww0wy
100uF (16V or 25V) electrolytic capacitors : https://s.click.aliexpress.com/e/_DBJpcn1
10uF electrolytic capacitors : https://s.click.aliexpress.com/e/_DDVm071
100nF (104) ceramic capacitor: https://s.click.aliexpress.com/e/_DmUGp7T
Female Header Pin (12 pins) 12P Female: https://s.click.aliexpress.com/e/_DDqmgbh
Copper Clad Board: https://s.click.aliexpress.com/e/_oDTDgMM
LM1117 3.3V Regulator IC: https://s.click.aliexpress.com/e/_oFQSuhw Veya https://s.click.aliexpress.com/e/_ooUqa3e
2×4 pin Header: https://s.click.aliexpress.com/e/_DdnClhn
Arduino Mikro Pro için Alıcı kodu:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
int ch_width_1 = 0;
int ch_width_2 = 0;
int ch_width_3 = 0;
int ch_width_4 = 0;
int ch_width_5 = 0;
int ch_width_6 = 0;
Servo ch1;
Servo ch2;
Servo ch3;
Servo ch4;
Servo ch5;
Servo ch6;
struct Signal {
byte throttle;
byte pitch;
byte roll;
byte yaw;
byte aux1;
byte aux2;
};
Signal data;
const uint64_t pipeIn = 0xABCDABCD71LL;
RF24 radio(8, 10);
void ResetData() {
data.throttle = 0;
data.roll = 127;
data.pitch = 127;
data.yaw = 127;
data.aux1 = 0;
data.aux2 = 0;
}
void setup() {
ch1.attach(2);
ch2.attach(3);
ch3.attach(4);
ch4.attach(5);
ch5.attach(6);
ch6.attach(7);
ResetData();
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();
}
int pitchValue = map(data.pitch, 0, 255, -150, 150);
int yawValue = map(data.yaw, 0, 255, -150, 150);
int ch2Value = pitchValue - yawValue;
int ch4Value = pitchValue + yawValue;
ch_width_2 = map(ch2Value, -300, 300, 1000, 2000);
ch_width_4 = map(ch4Value, -300, 300, 2000, 1000);
ch_width_1 = map(data.roll, 0, 255, 1000, 2000);
ch_width_3 = map(data.throttle, 0, 255, 1000, 2000);
ch_width_5 = map(data.aux1, 0, 1, 1000, 2000);
ch_width_6 = map(data.aux2, 0, 1, 1000, 2000);
ch1.writeMicroseconds(ch_width_1);
ch2.writeMicroseconds(ch_width_2);
ch3.writeMicroseconds(ch_width_3);
ch4.writeMicroseconds(ch_width_4);
ch5.writeMicroseconds(ch_width_5);
ch6.writeMicroseconds(ch_width_6);
}
Kanal 2 ve 4 mixli kanallardır. Bu kanallara bağlı servolar delta kanatlı model uçaklar için elevator ve aileron fonksiyonlarını gerçekleştirir. V-Tail model uçaklar için elevator ve rudder fonksiyonlarını gerçekleştirir.
Servolardan biri olması gerektiği yönde hareket etmiyorsa; örneğin elevator kolunu çektiğimizde her iki servo da yukarı yönde hareket etmelidir. Eğer biri zıt yönde hareket ediyorsa ilgili satırdaki 1000 ve 2000 değerlerinin yerini değiştirin.
Örnek:
ch_width_2 = map(ch2Value, -300, 300, 2000, 1000);
yerine
ch_width_2 = map(ch2Value, -300, 300, 1000, 2000);
Alıcı kod analizi: (Hangi kod satırı ne işe yarar?)
6 kanal Delta Miks & V-tail mix Alıcı (ARDUINO MICRO PRO İÇİN)
#include <SPI.h> // nRF24L01 modülü ile iletişim için SPI kütüphanesini ekle
#include <nRF24L01.h> // nRF24L01 modülü için kütüphaneyi ekle
#include <RF24.h> // Radyo iletişimi için RF24 kütüphanesini ekle
#include <Servo.h> // Servo motorları kontrol etmek için Servo kütüphanesini ekle
// Her kanal için darbe genişliğini saklayacak değişkenler
int ch_width_1 = 0;
int ch_width_2 = 0;
int ch_width_3 = 0;
int ch_width_4 = 0;
int ch_width_5 = 0;
int ch_width_6 = 0;
// Her kanal için Servo nesneleri
Servo ch1;
Servo ch2;
Servo ch3;
Servo ch4;
Servo ch5;
Servo ch6;
// Alınan sinyal verilerini saklamak için yapı
struct Signal {
byte throttle; // Throttle channel | Gaz kanalı
byte pitch; // Pitch channel | Pitch kanalı
byte roll; // Roll channel | Roll kanalı
byte yaw; // Yaw channel | Yaw kanalı
byte aux1; // Auxiliary channel 1 | Yardımcı kanal 1
byte aux2; // Auxiliary channel 2 | Yardımcı kanal 2
};
Signal data; // Signal yapısının bir örneğini oluştur
// Radyo iletişim boru adresini tanımla
const uint64_t pipeIn = 0xABCDABCD71LL;
// 8 (CE) ve 10 (CSN) pinleri ile bir RF24 radyo nesnesi oluştur
RF24 radio(8, 10);
// Sinyal verilerini varsayılan değerlere sıfırlayan fonksiyon
void ResetData() {
data.throttle = 0; // Set throttle to 0 | Gazı 0'a ayarla
data.roll = 127; // Set roll to neutral (127) | Roll'u nötr (127) yap
data.pitch = 127; // Set pitch to neutral (127) | Pitch'i nötr (127) yap
data.yaw = 127; // Set yaw to neutral (127) | Yaw'ı nötr (127) yap
data.aux1 = 0; // Set auxiliary channel 1 to 0 | Yardımcı kanal 1'i 0'a ayarla
data.aux2 = 0; // Set auxiliary channel 2 to 0 | Yardımcı kanal 2'yi 0'a ayarla
}
void setup() {
// Servo motorları ilgili pinlere bağla
ch1.attach(2);
ch2.attach(3);
ch3.attach(4);
ch4.attach(5);
ch5.attach(6);
ch6.attach(7);
ResetData(); // Sinyal verilerini varsayılana sıfırla
// Radyo modülünü başlat
radio.begin();
radio.openReadingPipe(1, pipeIn); // Okuma için Pipe aç
radio.setChannel(100); // Radyo kanalını 100'e ayarla
radio.setAutoAck(false); // Otomatik onaylamayı devre dışı bırak
radio.setDataRate(RF24_250KBPS); // Veri hızını 250 kbps'ye ayarla
radio.setPALevel(RF24_PA_MAX); // Güç amplifikatör seviyesini maksimuma ayarla
radio.startListening(); // Gelen verileri dinlemeye başla
}
unsigned long lastRecvTime = 0; // Son alınan veri zamanını saklayan değişken
// Radyo modülünden veri alan fonksiyon
void recvData() {
while (radio.available()) {
radio.read(&data, sizeof(Signal)); // Veriyi Signal yapısına oku
lastRecvTime = millis(); // Son alınan zamanı güncelle
}
}
void loop() {
recvData(); // Radyodan veri al
unsigned long now = millis(); // Şu anki zamanı al
if (now - lastRecvTime > 1000) {
ResetData(); // 1 saniye boyunca veri alınmazsa verileri sıfırla
}
// V-tail mixing process | V-tail miksleme işlemi
int pitchValue = map(data.pitch, 0, 255, -150, 150); // Pitch değerini -150 ile 150 arasına ölçekle
int yawValue = map(data.yaw, 0, 255, -150, 150); // Yaw değerini -150 ile 150 arasına ölçekle
// 2. ve 4. kanallar için mikslenmiş değerler
int ch2Value = pitchValue - yawValue; // 2. Kanal: Pitch - Yaw
int ch4Value = pitchValue + yawValue; // 4. Kanal: Pitch + Yaw
// Karıştırılmış değerleri servo darbe genişliğine (1000-2000 mikrosaniye) dönüştür
ch_width_2 = map(ch2Value, -300, 300, 1000, 2000); // ch2Value'yi darbe genişliğine dönüştür
ch_width_4 = map(ch4Value, -300, 300, 2000, 1000); // ch4Value'yi darbe genişliğine dönüştür (ters yön)
// Diğer kanalları servo darbe genişliğine dönüştür
ch_width_1 = map(data.roll, 0, 255, 1000, 2000); // Roll kanalı
ch_width_3 = map(data.throttle, 0, 255, 1000, 2000); // Gaz kanalı
ch_width_5 = map(data.aux1, 0, 1, 1000, 2000); // Yardımcı kanal 1
ch_width_6 = map(data.aux2, 0, 1, 1000, 2000); // Yardımcı kanal 2
// Servolara PWM sinyallerini gönder
ch1.writeMicroseconds(ch_width_1);
ch2.writeMicroseconds(ch_width_2);
ch3.writeMicroseconds(ch_width_3);
ch4.writeMicroseconds(ch_width_4);
ch5.writeMicroseconds(ch_width_5);
ch6.writeMicroseconds(ch_width_6);
}
Verici için daha önce yayınladığım versiyonu kullanabilirsiniz. Bu alıcı ile uyumludur.
6 Kanallı (Opsiyonel 8) Uzaktan Kumanda Nasıl Yapılır? 2000m+ Menzil
_____________________________________________________________________
GENEL BİLGİLER:
Eğer Arduino/libraries klasöründe aşağıdaki kütüphane dosyaları yer almıyorsa kodu Arduino’ya yüklemeden önce gerekli kütüphane dosyalarını bilgisayarınıza indirmeniz gerekmektedir. Kütüphane dosyası yoksa kurulum gerçekleşmeyecek ve hata oluşacaktır.
Gerekli kütüphane dosyası:
SPI.h
nRF24L01.h
RF24.h
Servo.h
İndirmek için linkler …..:
NRF24 Module library Files (Github page): https://github.com/nRF24/RF24
NRF24 Module library File (zip) : https://github.com/nRF24/RF24/archive/master.zip
Servo Library: https://www.arduinolibraries.info/libraries/servo
Arduino IDE nasıl kurulur? & Kütüphane dosyaları nasıl yüklenir? Eğitim Videosu:


