چرا ریموت کنترل LoRa DIY؟
ریموت کنترلهای RC معمولی (۲.۴GHz) برد ۵۰۰m دارند. LoRa با همان اندازه ماژول ۲–۵km برد میدهد. ضمناً میتوانی LCD اضافه کنی که RSSI، ولتاژ باتری UGV، موقعیت GPS و هر دادهای که بخواهی را نشان دهد — یک GCS دستی واقعی.
🛠️ کارت پروژه
| BOM | Arduino Nano + Ra-02 + ۲× Joystick + LCD 16×2 I2C + باتری 18650 |
| قیمت | ~۳۵۰K تومان |
ساختار بسته داده LoRa
// فرمت بسته: [Header 0xAA][Throttle int8][Steering int8][Buttons byte][Checksum]
struct CtrlPacket {
uint8_t header = 0xAA;
int8_t throttle; // -100 تا +100
int8_t steering; // -100 تا +100
uint8_t buttons; // bitmask: bit0=Horn, bit1=Lights
uint8_t checksum;
};
void sendPacket(int thr, int str, byte btns){
CtrlPacket pkt;
pkt.throttle = constrain(thr,-100,100);
pkt.steering = constrain(str,-100,100);
pkt.buttons = btns;
pkt.checksum = pkt.throttle ^ pkt.steering ^ pkt.buttons;
LoRa.beginPacket();
LoRa.write((uint8_t*)&pkt, sizeof(pkt));
LoRa.endPacket();
}
کد کامل فرستنده
#include <SPI.h>, <LoRa.h>, <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#define JOY_THR A0
#define JOY_STR A1
#define BTN_A 7
void setup(){
lcd.begin(); lcd.backlight();
LoRa.begin(433E6);
LoRa.setSpreadingFactor(7);
}
void loop(){
int thr = map(analogRead(JOY_THR),0,1023,-100,100);
int str = map(analogRead(JOY_STR),0,1023,-100,100);
byte btns = digitalRead(BTN_A)==LOW ? 0x01 : 0x00;
sendPacket(thr, str, btns);
// نمایش روی LCD
lcd.setCursor(0,0); lcd.print("T:"); lcd.print(thr);
lcd.print(" S:"); lcd.print(str); lcd.print(" ");
lcd.setCursor(0,1); lcd.print("RSSI:");
lcd.print(LoRa.packetRssi()); lcd.print("dBm ");
delay(50);
}