Kablosuz ve Adresli Yangın Alarm Sistemi

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.

Photo by Nothing Ahead from Pexels

1 Gerekli Malzemeler

2 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.

3in1 PCB
3in1 PCB

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.

Sonuç