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
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 Git10km 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 GitLoRa 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 GitLoRa 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 Git2 Kontaktör-Röle Bağlantısı
Öncelikle kontraktörü neden ve nasıl kullanacağımız devre şeması üzerinden gösterelim.
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.
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.
#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ı