nRF24L01 و RC Controller چیست؟ (مبتدی)
ماژول nRF24L01+ یک ترانسیور ۲.۴GHz با قیمت زیر ۳ دلار است. این چیپ از Nordic Semiconductor از SPI استفاده میکند و میتواند در ۱۲۵ کانال مختلف بین ۲.۴ تا ۲.۵GHz کار کند — این به معنای مقاومت خوب در برابر تداخل WiFi است.
یک RC Controller (کنترلر رادیویی) معمولی مثل FlySky FS-i6 حدود ۱۵۰-۳۰۰ هزار تومان قیمت دارد. با آردوینو + nRF24L01 میتوان یک کنترلر ۸ کانال با CPPM (Combined PPM) ساخت که مستقیماً به FC وصل میشود — با قیمت زیر ۵۰ هزار تومان!
محصولی که میسازید
یک کنترلر RC ۸ کانال با ۲ جویاستیک و چند سوئیچ، خروجی CPPM برای اتصال به FC.
- هزینه کل: ۲۰-۴۰ هزار تومان
- برد: ۱۰۰-۵۰۰ متر (با آنتن ۱۷mm)
- کانالها: تا ۸ کانال روی یک سیگنال CPPM
کد TX — ارسال ۸ کانال
#include <RF24.h>
#include <SPI.h>
RF24 radio(9, 10); // CE, CSN
const byte addr[] = "RC001";
uint16_t ch[8]; // ۸ کانال، هر کدام 1000-2000μs
void setup() {
radio.begin();
radio.setChannel(108); // دور از WiFi
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_MAX);
radio.openWritingPipe(addr);
radio.stopListening();
}
void loop() {
ch[0] = map(analogRead(A0),0,1023,1000,2000); // Roll
ch[1] = map(analogRead(A1),0,1023,1000,2000); // Pitch
ch[2] = map(analogRead(A2),0,1023,1000,2000); // Throttle
ch[3] = map(analogRead(A3),0,1023,1000,2000); // Yaw
ch[4] = digitalRead(4) ? 2000 : 1000; // Mode SW
ch[5] = digitalRead(5) ? 2000 : 1000; // Arm SW
ch[6] = 1500; ch[7] = 1500; // اختیاری
radio.write(ch, sizeof(ch));
delay(20); // 50Hz rate
}
کد RX — خروجی CPPM
#include <RF24.h>
RF24 radio(9, 10);
const byte addr[] = "RC001";
uint16_t ch[8];
unsigned long lastRx;
// CPPM روی D3 (Timer2 PWM)
// PPM Frame: پالس sync 300μs + ۸ کانال
#define PPM_PIN 3
void generatePPM() {
// پیادهسازی PPM با Timer2 ISR
// یا استفاده از کتابخانه PPMEncoder
}
void setup() {
radio.begin(); radio.setChannel(108);
radio.setDataRate(RF24_250KBPS);
radio.openReadingPipe(0, addr);
radio.startListening();
pinMode(PPM_PIN, OUTPUT);
for(int i=0;i<8;i++) ch[i]=1500;
}
void loop() {
if(radio.available()) {
radio.read(ch, sizeof(ch));
lastRx = millis();
}
// Failsafe: اگر ۵۰۰ms پیام نرسید
if(millis()-lastRx > 500) {
ch[2] = 1000; // Throttle صفر
ch[5] = 1000; // Disarm
}
generatePPM();
}
چکلیست تست
| تست | نتیجه |
|---|---|
| nRF24 پاسخ میدهد؟ | radio.begin() = true |
| ۸ کانال در Betaflight/iNAV دیده میشود؟ | Receiver Tab بار میشود |
| Failsafe در ۵۰۰ms Throttle صفر میکند؟ | TX را خاموش کنید |
| در ۵۰ متر بدون dropout؟ | ☐ |