ماژول OOK 433MHz ارزان — واقعاً کار میکند؟ (مبتدی)
ماژولهای FS1000A (فرستنده) و XY-MK-5V (گیرنده) ارزانترین ماژولهای RF موجود در بازار هستند — قیمت ۲ تا ۵ هزار تومان! این ماژولها از مدولاسیون OOK (On-Off Keying) یا همان ASK استفاده میکنند — سادهترین روش RF که صفر با خاموش شدن حامل و یک با روشن شدن آن نمایش داده میشود.
محدودیت واقعی: بدون تأیید دریافت، بدون آدرسدهی، حساس به نویز. اما با کدینگ Manchester (که کتابخانه VirtualWire/RadioHead آن را مدیریت میکند) میتوان قابلیت اطمینان را به اندازه کافی برای کنترل UGV در فاصله ۵۰-۱۵۰ متر رساند. برای یادگیری RF و پروژههای اولیه عالی است.
محصولی که میسازید
کنترلر ۴ دکمه برای UGV با ارزانترین ماژول RF موجود — کمتر از ۱۰ هزار تومان رادیو.
- هزینه رادیو: زیر ۵ هزار تومان!
- برد: ۵۰-۱۵۰ متر در فضای باز
- سرعت: ۲kbps VirtualWire
سیمبندی
// TX (FS1000A فرستنده):
// VCC → 5V (هرچه بیشتر بهتر: 9-12V = برد بیشتر)
// GND → GND
// DATA → Arduino D12
// آنتن: سیم 17.3cm مستقیم روی پین ANT
// RX (XY-MK-5V گیرنده):
// VCC → 5V
// GND → GND
// DATA → Arduino D11 (هر دو DATA پین)
// آنتن: سیم 17.3cm حلقه یا مستقیم
// نکته مهم: آنتن روی گیرنده خیلی مهم است!
// بدون آنتن = فقط ۵-۱۰ متر
// با آنتن σ/4 = ۵۰-۱۵۰ متر
کد TX — دکمههای جهت
#include <RH_ASK.h>
#include <SPI.h>
RH_ASK driver(2000, 11, 12, 0); // speed, RX, TX, PTT
const int BTN_F=2, BTN_B=3, BTN_L=4, BTN_R=5;
void setup() {
driver.init();
pinMode(BTN_F,INPUT_PULLUP); pinMode(BTN_B,INPUT_PULLUP);
pinMode(BTN_L,INPUT_PULLUP); pinMode(BTN_R,INPUT_PULLUP);
}
void loop() {
char cmd = 'S'; // Stop
if(!digitalRead(BTN_F)) cmd = 'F';
else if(!digitalRead(BTN_B)) cmd = 'B';
else if(!digitalRead(BTN_L)) cmd = 'L';
else if(!digitalRead(BTN_R)) cmd = 'R';
driver.send((uint8_t*)&cmd, 1);
driver.waitPacketSent();
delay(100);
}
کد RX — کنترل L298N
#include <RH_ASK.h>
#include <SPI.h>
RH_ASK driver(2000, 11, 12, 0);
const int L_F=6,L_B=7,R_F=8,R_B=9;
unsigned long lastCmd = 0;
void setDir(int lf, int lb, int rf, int rb) {
digitalWrite(L_F,lf); digitalWrite(L_B,lb);
digitalWrite(R_F,rf); digitalWrite(R_B,rb);
}
void setup() {
driver.init();
int pins[]={L_F,L_B,R_F,R_B};
for(int p:pins) pinMode(p,OUTPUT);
}
void loop() {
uint8_t buf[2]; uint8_t buflen=1;
if(driver.recv(buf, &buflen)) {
lastCmd = millis();
char cmd = (char)buf[0];
if(cmd=='F') setDir(1,0,1,0);
else if(cmd=='B') setDir(0,1,0,1);
else if(cmd=='L') setDir(0,1,1,0);
else if(cmd=='R') setDir(1,0,0,1);
else setDir(0,0,0,0);
}
// Failsafe: توقف اگر ۵۰۰ms پیامی نرسید
if(millis()-lastCmd > 500) setDir(0,0,0,0);
}
مقایسه ماژولهای RF ارزان برای UGV
| ماژول | قیمت | برد | مناسب برای |
|---|---|---|---|
| FS1000A+XY-MK-5V | .5 | ۵۰-۱۵۰m | پروژه اول |
| CC1101 | ۵۰۰-۱۰۰۰m | UGV پیشرفته | |
| SX1278 LoRa | ۲-۵km | UGV/UAV | |
| E32-433T30D | ۵-۱۰km | UAV دوربرد |