LoRa ile Uzaktan Kontaktör Start-Stop Devresi

LoRa ile Uzaktan Kontaktör Start-Stop Devresi

Bu yazımızda yüksek güçlü motor, dalgıç pompası ve projektör gibi güçlü cihazların LoRa ile Uzaktan Kontaktör Start-Stop Devresi nasıl yapılır öğreneceğiz.

Kontaktörler bütün panolarda bulunan ve güvenli bir şekilde devre elemanlarını açıp kapatma işine yarar. Bugün sizlerle beraber kontaktör, buton, interrrup ve LoRa modüllerinin birleşimi büyük bir proje yapacağız. Ticari olarak da satılabilir bir proje olacaktır bu yapacağımız proje.

Uygulama Videosu

1.1 Gerekli Malzemeler

2 Kontaktör-Röle Bağlantısı

Öncelikle kontraktörü neden ve nasıl kullanacağımız devre şeması üzerinden gösterelim.

Kontaktör Start-Stop Devresi

bağlantı şemasını internette burdan buldum https://silo.tips/download/kumanda-devreler-rnek-1-stop-ncelikli-start-stop-devresi-klasik-mhrleme-devresi

3 Pano Tarafı Kod Yapısı

Kontaktöre start stop verebileceğimiz kod yapısı şu şekildedir.

#include "LoRa_E22.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // Arduino RX <-- e32 TX, Arduino TX --> e32 RX
LoRa_E22 E22(&mySerial);

String sifre = "";
#define M0 7
#define M1 6
#define StartBtn 2
#define StopBtn 9


struct Signal {
  char type[15];
  bool role;
} data;

void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  pinMode(StartBtn, OUTPUT);
  pinMode(StopBtn, OUTPUT);

  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);
  digitalWrite(StartBtn, LOW);
  digitalWrite(StopBtn, LOW);

  Serial.begin(9600);
  E22.begin();
  delay(500);
}



void loop() {
  while (E22.available()  > 1) {

    // Gelen mesaj okunuyor
    ResponseStructContainer rsc = E22.receiveMessage(sizeof(Signal));
    struct Signal data = *(Signal*) rsc.data;
    Serial.print("Gelen Messaj: ");
    Serial.println(data.type);

    if (strcmp(data.type, "Fixaj.com") == 0) {
      Serial.println("şifre doğru");
      if (data.role) {
        Serial.println("role start");
        digitalWrite(StartBtn, HIGH);
        delay(1000);
        digitalWrite(StartBtn, LOW);
        delay(1000);
        
      } else {
        Serial.println("role stop");
        digitalWrite(StopBtn, HIGH);
        delay(1000);
        digitalWrite(StopBtn, LOW);
        delay(1000);

      }
    }

    rsc.close();
  }
}

4 Buton İnterrupt

Kumanda devresinden gelecek start stop sinyalini arduino NANO nun 2 nolu pinine bağladık. Çünkü interrupt ile düğmenin basılıp basılmadığını kontrol edeceğiz.

Arduino internal pullup button

internall pullup ile ilgili yazıyı buradan okuyabilirsinz https://www.arduino.cc/en/Tutorial/DigitalInputPullup

Çalışma mantığı ve debounce

ilgili yazıya şuradan ulaşabilirsiniz https://elextutorial.com/learn-arduino/arduino-button-switch-interface-pull-up-resistor/

5 Kumanda Kod Yapısı

Butondan okuma yapıp ona göre kontaktöre start – stop sinyali verdiğimiz kod yapısı şu şekilde.

#include "LoRa_E22.h"
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11);

/*
   Pinler     Arduino Nano    Lora E32 433T20d
                  11                3
                  10                4
*/

LoRa_E22 E22(&mySerial);

struct Signal {
  char type[15] = "Fixaj.com";
  bool role;
} data;

#define M0 7
#define M1 6
#define BTN 2

volatile bool roleDurumu = false;
volatile bool butonDurumu = false;


void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);

  pinMode(BTN, INPUT_PULLUP);

  Serial.begin(9600);
  E22.begin();
  delay(500);
  attachInterrupt(digitalPinToInterrupt(BTN), butonOku, FALLING);
}

void loop() {

  if (butonDurumu) {
    butonDurumu = false;
    if (roleDurumu) {
      data.role = 1;
      ResponseStatus rs = E22.sendFixedMessage(0, 44, 25, &data, sizeof(Signal));
      Serial.println(rs.getResponseDescription());
    } else {
      data.role = 0;
      ResponseStatus rs = E22.sendFixedMessage(0, 44, 25, &data, sizeof(Signal));
      Serial.println(rs.getResponseDescription());
    }

    Serial.print("data.role: ");
    Serial.println(data.role);
  }
  
}

void butonOku() {
  static unsigned long last_interrupt_time = 0;
  unsigned long interrupt_time = millis();
  if (interrupt_time - last_interrupt_time > 500)
  {
    roleDurumu = !roleDurumu;
    butonDurumu = true;
  }
  last_interrupt_time = interrupt_time;
}

6 LoRa Modüllerinin Parametre Ayarları

Lora Modüllerinie 3in1 PCB miz ile RF Setting programı ayarı verebilmemiz için öncelikle şu kodu arduinoya yüklüyoruz.

3in1 PCB
3in1 PCB
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

#define M0 7
#define M1 6

void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);

  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, HIGH);
}

void loop() {
  if (Serial.available()) {
    mySerial.write(Serial.read());
  }

  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
}

Sonrasında RF settin E22 programını açıp portları seçtikten sonra şu ayarları girip set ediyoruz. RF settin E22 programına indirme sayfamızdan ulaşabilirsiniz.

PANO TARAFI LoRa Ayarları

Kumanda Tarafı LoRa ayarları