رله هوشمند LoRa یعنی چه؟ (برای مبتدی)
یک رله یک کلید الکترومغناطیسی است که میتواند مدار برق AC یا DC را باز و بسته کند — مثل کلید برق، اما با سیگنال کنترلی کوچک (۳.۳-۵V). با استفاده از LoRa برای ارسال فرمان، میتوان یک دستگاه برقی را از فاصله ۵ کیلومتر و بدون اینترنت روشن یا خاموش کرد.
سیستم از دو Node تشکیل میشود: Node TX (دستگاه فرماندهنده با دکمه فیزیکی یا از طریق Serial) و Node RX (دستگاه رله که فرمان را دریافت و اجرا میکند و تأیید میفرستد). پروتکل ساده فرمان-پاسخ (ACK) تضمین میکند که فرمان واقعاً رسیده است.
محصولی که میسازید
یک سیستم کنترل رله دو-Node با LoRa که فرمان و تأیید را با تأخیر کمتر از ۵۰۰ms رد و بدل میکند.
- زمان ساخت: ۳ تا ۴ ساعت
- هزینه: ۶۰۰ تا ۱ میلیون تومان
- برد: تا ۵ کیلومتر در فضای باز
قطعات لازم (BOM)
| قطعه | تعداد |
|---|---|
| TTGO LoRa32 یا Heltec WiFi LoRa 32 | × ۲ |
| ماژول رله ۵V تککانال | × ۱ |
| دکمه فشاری | × ۱ |
| LCD 16×2 I2C (اختیاری) | × ۱ |
کد Node TX (فرستنده فرمان)
#include <LoRa.h>
#define SCK 5; #define MISO 19; #define MOSI 27; #define SS 18; #define RST 14; #define DIO0 26
const int BTN = 0;
bool relayState = false;
void setup() {
Serial.begin(115200);
SPI.begin(SCK,MISO,MOSI,SS);
LoRa.begin(433E6);
LoRa.setSpreadingFactor(10);
pinMode(BTN, INPUT_PULLUP);
}
void loop() {
if(digitalRead(BTN) == LOW) {
delay(50); // debounce
if(digitalRead(BTN) == LOW) {
relayState = !relayState;
LoRa.beginPacket();
LoRa.print(relayState ? "ON" : "OFF");
LoRa.endPacket();
Serial.println("Sent: " + String(relayState ? "ON" : "OFF"));
// منتظر ACK
unsigned long t = millis();
while(millis()-t < 2000) {
int sz = LoRa.parsePacket();
if(sz > 0) { String r=""; while(LoRa.available()) r+=char(LoRa.read()); Serial.println("ACK: "+r); break; }
}
while(digitalRead(BTN)==LOW) delay(10);
}
}
}
کد Node RX (رله گیرنده)
#include <LoRa.h>
const int RELAY_PIN = 12;
const int LED_PIN = 25;
void setup() {
SPI.begin(SCK,MISO,MOSI,SS);
LoRa.begin(433E6);
LoRa.setSpreadingFactor(10);
pinMode(RELAY_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
int sz = LoRa.parsePacket();
if(sz > 0) {
String cmd = "";
while(LoRa.available()) cmd += char(LoRa.read());
if(cmd == "ON") { digitalWrite(RELAY_PIN, HIGH); digitalWrite(LED_PIN, HIGH); }
if(cmd == "OFF") { digitalWrite(RELAY_PIN, LOW); digitalWrite(LED_PIN, LOW); }
delay(10);
LoRa.beginPacket(); LoRa.print("ACK:" + cmd); LoRa.endPacket();
}
}
چکلیست تست
| تست | نتیجه |
|---|---|
| دکمه در TX → رله در RX وصل میشود؟ | بله |
| ACK در Serial Monitor TX دیده میشود؟ | بله |
| در فاصله ۱۰۰ متر کار میکند؟ | بله |
| برق AC از طریق رله کنترل میشود؟ | با احتیاط — ایزولاسیون برق AC |