چرا LoRa بهتر از بلوتوث یا WiFi است؟
LoRa (Long Range) یک مدولاسیون رادیویی است که در باند Sub-GHz (۴۳۳MHz یا ۹۱۵MHz) کار میکند و برد ۲–۱۰ کیلومتر دارد — با توان فرستنده فقط ۱۰۰mW! این در مقابل بلوتوث (۱۰m) و WiFi (۵۰m) تفاوت عظیمی است. برای کنترل UGV در فضای باز LoRa ایدهآل است. ماژول SX1278 (معمولاً با برچسب Ra-02) یکی از ارزانترین (~۱۵۰K تومان) و محبوبترین ماژولهای LoRa برای آردوینو است.
نکته: LoRa برای دادههای کوچک (چند بایت) و تأخیر ~۵۰–۲۰۰ms مناسب است. برای FPV ویدئو استفاده نمیشود — فقط برای دستور کنترل و تلهمتری.
🛠️ کارت پروژه
| سیستم | ۲ ماژول Ra-02 + آردوینو فرستنده + اسکوتر گیرنده |
| برد | ~۲km در فضای باز با آنتن ۱/۴λ |
| تأخیر | ~۱۰۰ms (SF=7, BW=125kHz) |
BOM
| قطعه | تعداد | قیمت |
|---|---|---|
| ماژول LoRa Ra-02 (SX1278) 433MHz | 2 | ~۳۰۰K |
| Arduino Nano (فرستنده) | 1 | ~۱۰۰K |
| جویاستیک دو محوره + دکمه | 1 | ~۴۰K |
| LCD 16×2 + I2C | 1 | ~۸۰K |
| Arduino Nano (گیرنده روی اسکوتر) | 1 | ~۱۰۰K |
اتصال Ra-02 به Arduino (SPI)
| Ra-02 | Arduino Nano/Uno |
|---|---|
| VCC | 3.3V (مستقیم — نه 5V!) |
| GND | GND |
| SCK | D13 |
| MOSI | D11 |
| MISO | D12 |
| NSS/CS | D10 |
| DIO0 | D2 (interrupt) |
| RST | D9 |
کد فرستنده (دسته کنترل)
#include <SPI.h>
#include <LoRa.h>
#define JOY_X A0 // گاز / ترمز
#define JOY_Y A1 // فرمان
void setup(){
LoRa.begin(433E6);
LoRa.setSpreadingFactor(7);
LoRa.setSignalBandwidth(125E3);
}
void loop(){
int throttle = map(analogRead(JOY_X), 0,1023, -100,100);
int steering = map(analogRead(JOY_Y), 0,1023, -45,45);
LoRa.beginPacket();
LoRa.print(throttle); LoRa.print(','); LoRa.print(steering);
LoRa.endPacket();
delay(50); // ۲۰Hz
}
کد گیرنده (روی اسکوتر)
#include <SPI.h>
#include <LoRa.h>
int rcThrottle=0, rcSteering=0;
void setup(){
LoRa.begin(433E6);
LoRa.setSpreadingFactor(7);
LoRa.setSignalBandwidth(125E3);
}
void loop(){
int pktSize = LoRa.parsePacket();
if(pktSize){
String data = "";
while(LoRa.available()) data += (char)LoRa.read();
int comma = data.indexOf(',');
rcThrottle = data.substring(0,comma).toInt();
rcSteering = data.substring(comma+1).toInt();
}
// rcThrottle → به setpoint PID اضافه کن
// rcSteering → به سرو فرمان
}