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: