Kablosuz ve Adresli Yangın Alarm Sistemi
Merhaba, bugün sizlerle beraber endüstriyel çözümlerde LoRa modülünün nasıl kullanılacağını Kablosuz ve Adresli Yangın Alarm Sistemi sizlere anlatmaya çalışacağım. Özellikle bütün fabrikalarda olan ve kablolu olarak döşemesi tam bir baş belası olan yangın ikaz butonlarını nasıl kablosuz ve adresli hale getirebileceğimizi sizlere anlatmaya çalışacağım. Umarım faydalı bir yazı olur.
Piayasada eğer biraz araştırırsanız Yangın ikaz alarm sistemleri çok pahalı olduğunu göreceksiniz. 100 bin liranın üstü fiyatları görebilirsiniz. Ayrıca bu sistemler sadece adresli olanı yani kablosuz da değil. Bunun tabi ki sebebi 100% ithal olması ve yazılımın tamamen dışardan alınmasından kaynaklanmaktadır.
1 Gerekli Malzemeler
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 GitESP32 30-Pin ESP-WROOM-32 WiFi Bluetooth
Çift çekirdekli işlemciye sahip, WiFi ve Bluetooth özellikleri barındıran bu ESP32 modülü, çok çeşitli IoT projelerinde kullanılabilir.
Ürün Sayfasına GitESP32 30-Pin ESP-WROOM-32 WiFi Bluetooth
Çift çekirdekli işlemciye sahip, WiFi ve Bluetooth özellikleri barındıran bu ESP32 modülü, çok çeşitli IoT projelerinde kullanılabilir.
Ürün Sayfasına Git50dB 868-900 MHz 4G LTE Anten
Bu anten, geniş bant aralığında (698-960MHz ve 1710-2700MHz) veri iletimi sağlar ve 4G LTE, LoRa ve diğer iletişim protokolleri için uygundur.
Ürün Sayfasına GitE22-900T22D 7km Menzilli 900MHz LoRa Modülü
SX1262 çipli, 900 MHz bandında çalışan ve 7km’ye kadar menzil 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 Git2 Projenin Çalışma Mantığı
Kablosuz ve Adresli Yangın Alarm Sistemi projemizde Arduino nun interrupt komutunu kullanacağız. İnterrupt size şöyle somutlaştırayım. Normal bir şekilde evde oturup televizyon izliyorsunuz, yaptığınız iş normal rutini sırasında giderken arka odadan bebeğinizin ağladığını duyuyorsunuz. Bu durumda “interrupt” devre giriyor ve TV izleme zevkiniz o anda duraklatılıyor ve bebekle ilgilenmek zorunda kalıyorsunuz. Bebeğin isteklerini yerine getirip susturduktan sonra geri gelip TV izlemeye devam ediyorsunuz.
Aynı yukarıda anlattığım şekil arduino loop() döngüsü içinde dönün dururken biz 2 numaralı pine bir buton takacağız ve butona her hangi bir anda basıldığında merkeze mesaj gönderteceğiz. Olay bu kadar basit. Donma kilitlenme sorunları hiç yaşamayacağız. Merkez noktada bekleme durumunda iken gelen bir mesaj olduğunda hemen mesajı çözümleyip kimden geldiğini bildirecek sonrada bunu bir I2C ekrana yazdıracağız.
3 İnterrupt Bağlantısı
Yukarıda ki görsel her ne kadar UNO için olsada bende NANO da 2 numaralı pine butonu bağladım bağlantı şekli aynı. Hatta şöyle ledli bir buton internnetten buldum onu kullandım. LED bağlantılarını 220R dirençle 9 numaralı pine bağladım.
4 Kodlar
Yangın İkaz butonunun olduğu taraf kısmının kodları
#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] = "Urfa63";
byte role;
} data;
#define M0 7
#define M1 6
#define BTN 2
#define LED 9
bool ledAcKapa = false;
volatile bool ledDurum = false;
volatile bool butonDurumu = false;
//akıllı bekleme
unsigned long kanalBekleme_sure = 0;
int kanalBekleme_bekleme = 1000;
void setup() {
pinMode(M0, OUTPUT);
pinMode(M1, OUTPUT);
digitalWrite(M0, LOW);
digitalWrite(M1, LOW);
pinMode(BTN, INPUT_PULLUP);
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
Serial.begin(9600);
E22.begin();
//delay(500);
attachInterrupt(digitalPinToInterrupt(BTN), butonOku, FALLING);
//delay(500);
}
void loop() {
if (butonDurumu) {
butonDurumu = false;
data.role = 1;
ResponseStatus rs = E22.sendFixedMessage(0, 1, 25, &data, sizeof(Signal));
Serial.println(rs.getResponseDescription());
Serial.print("Yangın ikaz butona basıldı: ");
Serial.println("2-Mutfak");
}
if (ledDurum) {
if (millis() > kanalBekleme_sure + kanalBekleme_bekleme) {
kanalBekleme_sure = millis();
ledAcKapa = !ledAcKapa;
digitalWrite(LED, ledAcKapa);
}
}else{
digitalWrite(LED, LOW);
}
}
void butonOku() {
static unsigned long last_interrupt_time = 0;
unsigned long interrupt_time = millis();
if (interrupt_time - last_interrupt_time > 500)
{
ledDurum = !ledDurum;
butonDurumu = true;
}
last_interrupt_time = interrupt_time;
}
Merkez noktasının olduğu tarafın kodları I2C 4 satırlık ekran için kullandığım kütüphaneyi şuradan indirebilirsiniz.
#include "LoRa_E22.h"
#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 4);
SoftwareSerial mySerial(10, 11);
/*
Pinler Arduino Nano Lora E32 433T20d
11 3
10 4
*/
LoRa_E22 E22(&mySerial);
struct Signal {
char type[15];
byte role;
} data;
#define M0 7
#define M1 6
void setup() {
pinMode(M0, OUTPUT);
pinMode(M1, OUTPUT);
digitalWrite(M0, LOW);
digitalWrite(M1, LOW);
Serial.begin(9600);
E22.begin();
lcd.begin();
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("<<Fixaj.com>>");
}
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.role);
if (strcmp(data.type, "Urfa63") == 0) {
Serial.println("şifre doğru");
if (data.role == 1) {
Serial.println("DİKKAT!!! Mutfak'da Yangın başladı");
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("<<Fixaj.com>>");
lcd.setCursor(0, 2);
lcd.print("DiKKAT!!! YANGIN");
lcd.setCursor(0, 3);
lcd.print("Konum: 02 - MUTFAK");
} else if (data.role == 2) {
Serial.println("DİKKAT!!! Depo'da Yangın Başladı");
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("<<Fixaj.com>>");
lcd.setCursor(0, 2);
lcd.print("DiKKAT!!! YANGIN");
lcd.setCursor(0, 3);
lcd.print("Konum: 03 - DEPO");
}
}
rsc.close();
}
}
5 Lora Parametre Ayarları
Her zamanki gibi lora modüllerine parametre ayarlarını verebilmek için 3in1 PCB mizi kullanıyorum.
PCB ye takılı olan arduino nun içine şu kodu yükleyip E22 RF setting programını açıp dilediğiniz adreslemeyi yapabilirsiniz.
#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());
}
}
Ben bu projede merkezin adresini 1, butonlarıda sırayla 2 ve 3 yaptım. bütün kanaları da25 yaptım. Burada Tran mode DİKKAT fixed hepsinde.