رله و کنترل راهدور با LoRa یعنی چه؟ (برای مبتدی)
رله (Relay) یک کلید الکترومغناطیسی است که با یک سیگنال ۵V میتواند مدارهای ۲۲۰V برق شهری یا موتورهای ۱۲V قوی را قطع و وصل کند. ماژول رله ۴ کانال یکی از پرکاربردترین قطعات در پروژههای IoT است.
ترکیب رله با LoRa یک سیستم کنترل راهدور قدرتمند میسازد که بدون اینترنت، SIM، یا WiFi کار میکند. میتوانید از خارج از خانه، زمین کشاورزی، یا محوطه کارخانه دستگاهها را کنترل کنید — تا ۵ کیلومتر. کاربردها: روشن/خاموش کردن پمپ آب کشاورزی، کنترل دروازه الکتریکی، روشن کردن چراغ انبار، یا Arm/Disarm سیستم ضدسرقت UGV.
محصولی که میسازید
یک سوئیچ هوشمند ۴ کانال که از ۵ کیلومتر با دستگاه فرستنده دستی کنترل میشود.
- زمان ساخت: ۲ تا ۳ ساعت
- هزینه: ۷۰۰ هزار تا ۱ میلیون تومان
- برد: ۱-۵ کیلومتر
⚠ اتصال رله به برق ۲۲۰V نیاز به دانش الکترونیک ایمنی دارد. اگر مطمئن نیستید فقط از بارهای ۱۲V DC استفاده کنید.
قطعات لازم (BOM)
| قطعه | تعداد | نقش |
|---|---|---|
| TTGO LoRa32 V2.1 | ۲ عدد | فرستنده + گیرنده |
| ماژول رله ۴ کانال ۵V | ۱ عدد | سوئیچ خروجی |
| دکمه تاکتیکال ۱۲mm × ۴ | ۴ عدد | ورودی فرستنده |
| نمایشگر OLED 0.96″ | ۱ عدد (اختیاری) | وضعیت رلهها |
کد فرستنده
#include <SPI.h>
#include <LoRa.h>
const int BTNS[] = {2, 4, 5, 13}; // دکمههای ۴گانه
bool relayState[4] = {false, false, false, false};
void setup() {
for (int b : BTNS) { pinMode(b, INPUT_PULLUP); }
LoRa.begin(433E6);
LoRa.setSpreadingFactor(9);
}
void loop() {
for (int i = 0; i < 4; i++) {
if (digitalRead(BTNS[i]) == LOW) {
delay(50); // debounce
if (digitalRead(BTNS[i]) == LOW) {
relayState[i] = !relayState[i]; // toggle
String msg = "R" + String(i) + ":" + (relayState[i] ? "1" : "0");
LoRa.beginPacket();
LoRa.print(msg);
LoRa.endPacket();
while(digitalRead(BTNS[i]) == LOW); // منتظر رها شدن
}
}
}
}
کد گیرنده
#include <SPI.h>
#include <LoRa.h>
const int RELAY_PINS[] = {14, 15, 16, 17}; // پینهای رله (Active LOW)
void setup() {
for (int p : RELAY_PINS) { pinMode(p, OUTPUT); digitalWrite(p, HIGH); }
LoRa.begin(433E6);
LoRa.setSpreadingFactor(9);
Serial.begin(115200);
}
void loop() {
int pktSize = LoRa.parsePacket();
if (pktSize) {
String cmd = "";
while (LoRa.available()) cmd += (char)LoRa.read();
// فرمت: "R0:1" یا "R2:0"
if (cmd.startsWith("R") && cmd.length() >= 4) {
int idx = cmd.charAt(1) - '0';
bool state = cmd.charAt(3) == '1';
if (idx >= 0 && idx < 4) {
digitalWrite(RELAY_PINS[idx], state ? LOW : HIGH); // Active LOW
Serial.println("Relay " + String(idx) + " = " + (state ? "ON" : "OFF"));
}
}
}
}
چکلیست تست
| تست | نتیجه |
|---|---|
| دکمه ۱ رله ۱ را toggle میکند؟ | بله — صدای کلیک رله |
| Serial Monitor وضعیت درست نشان میدهد؟ | بله |
| در ۲۰۰ متر دستور کار میکند؟ | بله |
| وضعیت رله بعد از قطع برق حفظ میشود؟ | EEPROM اضافه کنید |