Si4432 و FHSS چیست؟ (مبتدی)
چیپ Si4432 یک ترانسیور Sub-GHz با قیمت زیر ۵ دلار است که از تکنولوژی FHSS (Frequency Hopping Spread Spectrum — پخش طیف با پرش فرکانسی) پشتیبانی میکند. FHSS به این معناست که رادیو هر چند میلیثانیه به فرکانس جدیدی میپرد — این باعث میشود اگر یک فرکانس تداخل داشت، اتصال قطع نشود.
این روش در RC حرفهای (مثل Spektrum DSM2) و سیستمهای نظامی استفاده میشود. با Si4432 میتوانید یک سیستم کنترل رله (روشن/خاموش از راه دور) با قابلیت Acknowledge (تأیید دریافت) بسازید — اگر رلهای پیام را دریافت نکرد، TX دوباره ارسال میکند.
محصولی که میسازید
سیستم کنترل ۸ رله از راه دور با Si4432 و FHSS — مقاوم در برابر تداخل.
- هزینه رادیو: ۲ × ۵ دلار = ۱۰ دلار
- برد: ۵۰۰-۱۰۰۰ متر
- قابلیت Acknowledge: اطمینان از دریافت
کد TX — FHSS با RadioHead
#include <RH_RF22.h>
#include <RHReliableDatagram.h>
#include <SPI.h>
RH_RF22 driver; // CS=10, INT=2
RHReliableDatagram manager(driver, 1); // آدرس TX = 1
uint8_t relayState = 0x00; // بیتماپ ۸ رله
void setup() {
Serial.begin(9600);
manager.init();
driver.setFrequency(434.0);
driver.setModemConfig(RH_RF22::GFSK_Rb2Fd5);
manager.setRetries(3);
manager.setTimeout(200);
}
void sendRelayCmd() {
uint8_t buf[2] = {0xCC, relayState}; // هدر + وضعیت
if(manager.sendtoWait(buf, 2, 2)) { // ارسال به RX=2
Serial.println("ACK دریافت شد");
} else { Serial.println("ACK نیامد — تلاش مجدد..."); }
}
void loop() {
for(int i=0;i<8;i++) {
if(!digitalRead(i+2)) { // دکمههای D2-D9
bitToggle(relayState, i);
sendRelayCmd();
delay(300); // debounce
}
}
}
کد RX — کنترل ۸ رله
#include <RH_RF22.h>
#include <RHReliableDatagram.h>
#include <SPI.h>
RH_RF22 driver;
RHReliableDatagram manager(driver, 2); // آدرس RX = 2
uint8_t buf[8]; uint8_t len=sizeof(buf), from;
const int RELAY_PINS[] = {3,4,5,6,7,8,9,A0};
void setup() {
manager.init();
driver.setFrequency(434.0);
driver.setModemConfig(RH_RF22::GFSK_Rb2Fd5);
for(int p: RELAY_PINS) { pinMode(p, OUTPUT); digitalWrite(p, LOW); }
}
void loop() {
if(manager.recvfromAckTimeout(buf, &len, 500, &from)) {
if(buf[0] == 0xCC) {
uint8_t state = buf[1];
for(int i=0;i<8;i++)
digitalWrite(RELAY_PINS[i], bitRead(state, i) ? HIGH : LOW);
}
}
}
چکلیست تست
| تست | نتیجه |
|---|---|
| ACK در ۲۰۰ms دریافت میشود؟ | بله — در فاصله ۱۰متر |
| با یک منبع نویز (مایکروویو!) ACK قطع میشود؟ | بله — FHSS کمک میکند |
| رله در فاصله ۵۰۰متر کار میکند؟ | بله با آنتن مناسب |
| Failsafe (قطع اتصال → همه رلهها خاموش)؟ | تایمر watchdog در RX |