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

40dBi SMA 433 MHz Anten

40dBi SMA 433 MHz Anten

Bu anten, 433 MHz frekansında yüksek kazançlı bir veri iletimi sağlar ve LoRa cihazlar için idealdir.

Ürün Sayfasına Git
10km Menzilli 433 MHz LoRa Modülü

10km Menzilli 433 MHz LoRa Modülü

SX1278 çipli, 1W çıkış gücüne sahip ve 10km menzilli veri iletişimi sunan bir LoRa modülüdür.

Ürün Sayfasına Git
LoRa Uzman Seti

LoRa Uzman Seti (E22-900T22D)

Kablosuz şifreli veri iletimi ve güvenli iletişim için tasarlanmış bu set, 900 MHz frekansında çalışır ve LoRa uygulamalarında güvenli veri iletimi sağlar.

Ürün Sayfasına Git
LoRa Başlangıç Seti

LoRa Başlangıç Seti (SX1278 E32-433T20D)

LoRa teknolojisi ile tanışmak isteyenler için 433 MHz bandında çalışan, SX1278 çipli modül ve anten içeren bir başlangıç setidir.

Ürün Sayfasına Git

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ı