ExpressLRS چیست و چرا از Futaba یا FrSky بهتر است؟
ExpressLRS (ELRS) یک سیستم کنترل RC متنباز است که روی ماژولهای SX1276/SX1280 اجرا میشود. با تأخیر کمتر از ۱۰ms و برد بالای ۱۰–۳۰km در برخی حالتها، از اکثر سیستمهای تجاری پیشی میگیرد. کاملاً رایگان و متنباز است — فریمور را میتوانی خودت compile کنی.
برای UGV، گیرنده ELRS یک پروتکل سریال (CRSF یا SBUS) به آردوینو میدهد که کانالهای فرمان را میخوانی. هیچ نیازی به آردوینو جداگانه برای فرستنده نیست — رادیو دستی RadioMaster TX16S یا Happymodel ELRS فرستنده شما است.
🛠️ کارت پروژه
| فرستنده | RadioMaster TX12/TX16S با ماژول ELRS (~۳M) یا Happymodel ES24TX (~۵۰۰K) |
| گیرنده | Happymodel EP1 Nano 2.4GHz (~۱۵۰K) |
| تأخیر | ~۱۰ms @ 500Hz packet rate |
خواندن کانالهای CRSF با آردوینو
// کتابخانه: CrsfSerial (GitHub: CapnBry)
#include "CrsfSerial.h"
// CRSF از گیرنده ELRS روی Serial1 (Arduino Mega/Due)
CrsfSerial crsf(Serial1, 420000); // بودریت CRSF = 420000
void packetChannels(){
// کانالها ۱۷۲ (min) تا ۱۸۱۱ (max)، وسط = ۹۹۲
int ch1 = crsf.getChannel(1); // Throttle
int ch2 = crsf.getChannel(2); // Yaw/Steering
int ch3 = crsf.getChannel(3); // Pitch (اضافی)
int ch5 = crsf.getChannel(5); // Arm switch
// تبدیل به مقادیر UGV
int throttle = map(ch1, 172, 1811, -255, 255);
int steering = map(ch2, 172, 1811, -100, 100);
bool armed = (ch5 > 992);
if(armed){
applyDrive(throttle, steering);
} else {
stopMotors();
}
}
void setup(){
Serial1.begin(420000);
crsf.onPacketChannels = &packetChannels;
}
void loop(){
crsf.loop();
}
خواندن SBUS (جایگزین CRSF)
// کتابخانه: SBUS (GitHub: bolderflight)
#include "sbus.h"
bfs::SbusRx sbus(&Serial2);
bfs::SbusData data;
void setup(){
Serial2.begin(100000, SERIAL_8E2); // SBUS: 100K baud, Even parity, 2 stop bits
}
void loop(){
if(sbus.Read()){
data = sbus.data();
if(!data.failsafe && !data.lost_frame){
int thr = map(data.ch[0], 172,1811,-255,255);
int str = map(data.ch[1], 172,1811,-100,100);
applyDrive(thr, str);
} else {
stopMotors(); // Failsafe
}
}
}