본문 바로가기

아두이노우노 R4

Lora 모듈: 15km 거리에서 릴레이 켜기

반응형

 

Lora 모듈: 15km 거리에서 릴레이 켜기

 

Akhil Satheesh2025년 1월 27일 전자 프로젝트

 

이 이미지는 LoRa 기술을 사용하여 장거리에서 릴레이를 활성화하는 무선 통신 시스템을 보여줍니다. 왼쪽에는 Arduino Nano 마이크로컨트롤러, LoRa 통신 모듈, 버튼으로 구성된 'LoRa 버튼'이라는 모듈이 있습니다.

 

버튼을 누르면 LoRa를 통해 신호가 전송됩니다. 오른쪽은 'LoRa 릴레이'로, Arduino 마이크로컨트롤러(아마도 Arduino Uno일 것입니다), 신호를 수신하는 LoRa 모듈, 신호 상태가 변경되면 활성화되는 릴레이가 포함되어 있습니다.

 

이미지는 최대 15km 거리까지 통신이 가능하다는 것을 나타냅니다. 릴레이 상태는 송신기에서 수신한 신호에 따라 0에서 1까지 변경됩니다. 요약하면, 이 시스템은 LoRa 통신을 사용하여 릴레이를 원격으로 활성화할 수 있으므로 자동화, 농업 또는 넓은 지역의 원격 제어 시스템에서 유용하게 사용할 수 있습니다. 

 

 

 

 

안녕하세요, 여러분. 오늘은 최대 15km 범위의 Lora 모듈을 사용하여 릴레이를 제어하는 ​​방법을 보여드리겠습니다. 여기서는 LoRa 모듈에 연결된 송신기와 수신기 장치를 사용하고 있습니다.

 

내용

 

송신기에 버튼을 연결했습니다. 송신기를 눌러 릴레이를 제어할 수 있습니다. 같은 버튼을 사용하여 수신기 장치의 릴레이를 켜거나 끕니다. 두 장치 간의 원활한 통신을 보장하기 위해 LED 상태가 송신기에 연결됩니다.

 

수신기는 3초의 정기적인 간격으로 릴레이 상태를 송신기로 지속적으로 다시 보냅니다.

 

송신기 측에 연결된 LED가 수신기 장치에서 릴레이 상태를 수신하고 있음을 지속적으로 나타내는 것을 알 수 있습니다. 이 동기화 프로세스를 통해 두 장치가 동시에 동일한 릴레이 상태를 갖습니다.

 

이 프로세스는 데이터 전송 중에 발생할 수 있는 모든 데이터 손실을 처리하는 데 필요합니다.

 

구성 요소 필요

  • 릴레이 모듈
  • Arduino nano
  • Arduino Uno
  • RYLR406 LoRa 모듈
  • 푸시 버튼
  • LED
  • 1K 및 2K 저항

 

LoRa 모듈 송신기 회로 및 연결

 

LoRa 버튼 구성 요소

 

 

LoRa 모듈은 3.3V 장치이므로 Arduino의 3.3V 핀을 사용하여 전원을 공급하고 Lora 모듈의 RX 핀에 전압 분배기를 연결하여 5V 신호를 Lora 모듈과 호환되는 3.3V로 변환했습니다.

 

RYLR406 기반 LoRa 모듈 송신기 회로도

 

LoRa 모듈 송신기 회로

 

LoRa 릴레이 회로(수신기) 및 연결

 

여기에 제공된 수신기 장치의 다이어그램의 배선을 살펴보겠습니다. 하드웨어가 손상되지 않도록 모든 연결을 다시 확인하십시오. Arduino Uno PIN 3에서 LoRa 모듈의 Rx 핀에 연결하고 TX 핀에서 Arduino의 PIN 2로 연결합니다. 릴레이 제어 신호는 Arduino PIN 6에서 가져옵니다.

 

LoRa 모듈 수신기 회로

 

LoRa Remote 및 Reciever용 프로그래밍 파일 다운로드

 

LoRa Remote Arduino nano 프로그래밍 코드

 

/*************************************************************************************************
 *  Created By: Tauseef Ahmad
 *  Created On: 20 July, 2023
 *  
 *  YouTube Video: https://youtu.be/390JbyaBIjg
 *  My Channel: https://www.youtube.com/@AhmadLogs
 ***********************************************************************************************/

#include <SoftwareSerial.h>
SoftwareSerial lora_serial(2, 3); // RX, TX

String FREQUENCY_BAND = "433000000";
String NETWORK_ID = "7";
String THIS_DEVICE = "1";
String OTHER_DEVICE = "2";

const int buttonPin = 6;
const int ledPin = 12;

bool relayState = false;

void setup() {
  Serial.begin(115200); 
  delay(1000);
  lora_serial.begin(115200); 
  delay(1000);

  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);

  lora_serial.println("AT+BAND="+ FREQUENCY_BAND);
  delay(1000);
  lora_serial.println("AT+NETWORKID="+ NETWORK_ID); 
  delay(1000);
  lora_serial.println("AT+ADDRESS="+ THIS_DEVICE); 
  delay(1000); 
}

void loop() {
  if (digitalRead(buttonPin) == LOW){ 
    relayState = !relayState;
    String command = (relayState == true) ? "a1" : "a0";
    lora_serial.println(
      "AT+SEND="+ OTHER_DEVICE+",2,"+ command);
    Serial.println(command);
    delay(500); //debounce handling
  }

  while (lora_serial.available()) { 
    String data = lora_serial.readString();
    Serial.println(data);
    if(data.indexOf("a1") > 0) { 
      digitalWrite(ledPin, HIGH);
      relayState = 1;
    } else if(data.indexOf("a0") > 0) { 
      digitalWrite(ledPin, HIGH);
      relayState = 0;
    }
  }

  delay(50);
  digitalWrite(ledPin, LOW);
}

 

LoRa Realay 또는 Reciever 프로그래밍 Arduino Uno 코드 

 

/*************************************************************************************************
 *  Created By: Tauseef Ahmad
 *  Created On: 20 July, 2023
 *  
 *  YouTube Video: https://youtu.be/390JbyaBIjg
 *  My Channel: https://www.youtube.com/@AhmadLogs
 ***********************************************************************************************/

#include <SoftwareSerial.h>
SoftwareSerial lora_serial(2, 3); // RX, TX

String FREQUENCY_BAND = "433000000";
String NETWORK_ID = "7";
String THIS_DEVICE = "2";
String OTHER_DEVICE = "1";

const int relayPin = 6;

bool relayState = false;

void setup() {
  Serial.begin(115200); 
  delay(1000);
  lora_serial.begin(115200); 
  delay(1000);

  pinMode(relayPin, OUTPUT);

  lora_serial.println("AT+BAND="+ FREQUENCY_BAND);
  delay(1000);
  lora_serial.println("AT+NETWORKID="+ NETWORK_ID); 
  delay(1000);
  lora_serial.println("AT+ADDRESS="+ THIS_DEVICE); 
  delay(1000); 
}

void loop() {
  while (lora_serial.available()) { 
    String data = lora_serial.readString();
    Serial.println(data);
    if(data.indexOf("a1") > 0) { 
      digitalWrite(relayPin, HIGH);
      relayState = 1;
    } else if(data.indexOf("a0") > 0) { 
      digitalWrite(relayPin, LOW);
      relayState = 0;
    }
  }

  static unsigned long previousTime = 0;
  if (millis() - previousTime >= 5000) { 
    previousTime = millis();

    String command = (relayState == true) ? "a1" : "a0";
    lora_serial.println(
      "AT+SEND="+ OTHER_DEVICE+",2,"+ command);
  }
}

 

언제나 늘 그렇듯이 위 튜토리얼의 참고 문서로 가려면 이 링크를 따라가세요.

 

반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^