IOT - Kapı Güvenlik Sensörü - Arda Morkoç

IOT - Kapı Güvenlik Sensörü

 

Kapı Güvenlik Sensörü

 

Projenin Amacı:

Kapı güvenlik sensörü projesi, kapının açık veya kapalı durumunu tespit edip bu durumu Telegram üzerinden kullanıcıya bildiren bir sistemdir. Bu sayede kapının güvenli bir şekilde izlenmesi sağlanır.

 

Kullanılan Malzemeler:

NodeMCU LoLin ESP8266 Geliştirme Kartı: Projenin ana kontrol birimi.

Reed Röle Modülü: Kapının açık veya kapalı olduğunu algılayan manyetik sensör.

10x10mm Neodyum Güçlü Mıknatıs: Reed röle modülü ile birlikte kullanılır. Kapı kapalıyken röle modülüne temas eder.

3.7V Lipo Batarya 1100mAh 25C: Sisteme güç sağlar.

 

Projenin İşleyişi:

    Bağlantılar ve Ayarlamalar:

Ø NodeMCU kartı Wi-Fi ağına bağlanır.

Ø Reed röle modülü, kapının durumunu algılamak için kullanılır.

Ø Neodyum mıknatıs kapıya yerleştirilir ve kapı kapalıyken röle modülü ile temas eder.

 

    Kapı Durumunun Algılanması:

Ø Kapı kapalıyken reed röle modülü ve mıknatıs temas halindedir.

Ø Kapı açıldığında bu temas kesilir ve röle modülü durumu algılar.

   

Durum Değişikliği ve Mesaj Gönderme:

Ø Kapı durumu değiştiğinde (açık veya kapalı), NodeMCU kartı bu değişikliği algılar.

Ø Debounce tekniği kullanılarak yanlış sinyal dalgalanmaları (gürültü) filtrelenir.

Ø Durum değişikliği algılandığında, NodeMCU kartı üzerinden Telegram botu kullanılarak kullanıcının belirlediği chat ID'sine kapının durumu hakkında mesaj gönderilir.

 

    Wi-Fi Bağlantısı ve Güvenlik:

Ø Proje, Wi-Fi bağlantısının sürekli olarak aktif olmasını ve herhangi bir kesinti durumunda yeniden bağlanmasını sağlar.

Ø Bağlantı güvenliği için SSL sertifikası kullanılır.

 

Devre Cihazının Fotoğrafları:


Bu görselde cihaz neodyum mıknatısla temas etmemektedir. Bu yüzden kapı durumu açıktır. Bu pozisyonda telegramdan kapı durumunun açık olduğuna dair mesaj gönderir.




Bu görselde cihaz neodyum mıknatısla temas halindedir. Buradan kapının kapalı olduğunu anlar ve telegramdan kapının durumunun kapalı olduğuna dair mesaj gönderir.

 

Devre Şeması:

Bu devre, ESP8266 WiFi modülüne bağlı bir reed röle ve bir LiPo pil ile çalışacak şekilde tasarlanmış. İşte her bir bağlantının amacı ve çalışma prensibi hakkında bilgi:

Devre Şeması Görüntüleri:

 



 

ESP8266’nın Reed Röle ile Bağıntıları:

1.    3V3 (3.3V) Bağlantısı:

Ø Sarı Kablo: Reed rölenin en sağdaki ucu (genellikle VCC veya pozitif güç girişi olarak adlandırılır) sarı kablo ile ESP8266'nın 3V3 (3.3V) pinine bağlanmış.

Ø Açıklama: Bu bağlantı, reed röleye çalışması için gerekli olan 3.3V'luk gücü sağlar. ESP8266, 3.3V ile çalışan bir mikrodenetleyici olduğu için röleye doğrudan bu voltajı verebiliriz.

2.    GND (Toprak) Bağlantısı:

Ø Mavi Kablo: Reed rölenin ortadaki ucu (genellikle GND veya toprak bağlantısı olarak adlandırılır) mavi kablo ile ESP8266'nın GND (toprak) pinine bağlanmış.

Ø Açıklama: GND bağlantısı, devrenin ortak referans noktasıdır. ESP8266 ve reed röle aynı referans noktasını kullanarak sağlıklı bir şekilde çalışabilir.

3.    D2 Bağlantısı:

Ø Kırmızı Kablo: Reed rölenin en solundaki ucu (genellikle sinyal çıkışı veya dijital çıkış olarak adlandırılır) kırmızı kablo ile ESP8266'nın D2 pinine bağlanmış.

Ø Açıklama: Bu bağlantı, reed rölenin anahtarlama durumunu (açık veya kapalı) ESP8266'ya bildirir. D2 pini bir dijital giriş olarak kullanılarak rölenin durumunu okuyabiliriz.

 

Lipo Pil Bağıntıları:

1.    VIN Bağlantısı:

Ø Kırmızı Kablo: LiPo pilin kırmızı kablosu (pozitif güç çıkışı) ESP8266'nın VIN pinine bağlanmış.

Ø Açıklama: VIN pini, ESP8266'ya 5V güç sağlamak için kullanılır. LiPo pil genellikle 3.7V-4.2V arasında bir voltaj sağlar ve bu, ESP8266'nın voltaj regülatörü tarafından 3.3V'a düşürülür.

2.    GND Bağlantısı:

Ø Siyah Kablo: LiPo pilin siyah kablosu (negatif güç çıkışı) ESP8266'nın GND pinine bağlanmış.

Ø Açıklama: Bu bağlantı, pilin negatif terminalini ESP8266'ya bağlar ve devrenin tamamlanmasını sağlar. Bu, tüm bileşenlerin ortak bir toprak referansı paylaşmasına olanak tanır.

 

Çalışma Prensibi:

  • Reed Röle:

Ø Reed röle, manyetik alanla tetiklenen bir anahtardır. Bir mıknatıs yaklaştığında veya uzaklaştığında kontakları açılır veya kapanır.

Ø Bu değişim, rölenin sinyal çıkışında (D2 pinine bağlı olan uç) bir sinyal değişikliği oluşturur.

  • ESP8266:

Ø ESP8266, D2 pinine bağlı olan reed rölenin durumunu sürekli olarak izler. Bir değişiklik tespit ettiğinde (örneğin, mıknatıs yaklaştığında veya uzaklaştığında), bu durumu işleyebilir ve buna göre bir işlem yapabilir (örneğin, bir WiFi sinyali gönderme, veri kaydetme vb.).

  • Güç Kaynağı:
    • LiPo pil, ESP8266'ya ve reed röleye gerekli gücü sağlar. VIN pinine bağlanarak, pilin voltajı ESP8266 tarafından kabul edilebilir bir seviyeye düşürülür ve devrenin kararlı bir şekilde çalışması sağlanır.

 

 

 

 

Ardunio IDE Kodları:

    
/*
  * Arda Anıl Morkoç
  * Kapı Güvenlik Sensörü
*/

#include 
#include 
#include 
#include 

const int role_pin = 4;  // Role pinini tanımlıyoruz (kapı sensörü pini)
const int led = 2;       // LED pinini tanımlıyoruz (durum göstergesi için)

bool changeState = false;  // Kapı durumu değiştiğinde true olur

bool state ;  // Kapının şu anki durumunu tutar (açık/kapalı)
String kapi_durum;  // Kapının durumu hakkında mesajı tutar

unsigned long previousMillis = 0;  // Zamanlayıcı için önceki zamanı tutar
const long interval = 1500;  // 1.5 saniyelik bir aralık tanımlar
const unsigned long debounceDelay = 50; // 50 ms debounce süresi
unsigned long lastDebounceTime = 0; // Son debounce zamanını tutar

// Burada internete bağlantı sağlamak için bilgileri giriyoruz.
const char* ssid = "WiFiAdi";  // Wi-Fi ağ adı
const char* password = "wifisifre";  // Wi-Fi şifresi

// Burada Telegram botuyla iletişim için gerekli bilgileri giriyoruz.
#define BOTtoken "TOKEN"  // Telegram bot token'ı
#define CHAT_ID "CHATID"  // Telegram chat ID'si

// Bunlar kütüphanelerle ilgili
X509List cert(TELEGRAM_CERTIFICATE_ROOT);  // Telegram için SSL sertifikası
WiFiClientSecure client;  // Güvenli Wi-Fi istemcisi
UniversalTelegramBot bot(BOTtoken, client);  // Telegram bot istemcisi

// Role her değiştiğinde çağrılan fonksiyonumuz
ICACHE_RAM_ATTR void changeDoorStatus() {
  unsigned long currentTime = millis();  // Şu anki zamanı alır
  if ((currentTime - lastDebounceTime) > debounceDelay) {  // Debounce süresi kontrolü
    Serial.println("Kapı durumu değişti");  // Kapı durumu değiştiğinde seri monitöre yazdırır
    changeState = true;  // Kapı durumu değiştiğinde true yapar
    lastDebounceTime = currentTime;  // Son debounce zamanını günceller
  }
}

void setup() {
  Serial.begin(9600);  // Seri haberleşmeyi başlatır
  configTime(0, 0, "pool.ntp.org");  // Zaman sunucusuna bağlanır
  client.setTrustAnchors(&cert);  // SSL sertifikasını ayarlar
  
  pinMode(role_pin, INPUT_PULLUP);  // Role pinini giriş olarak ayarlar
  state = digitalRead(role_pin);  // Kapının başlangıç durumunu okur

  pinMode(led, OUTPUT);  // LED pinini çıkış olarak ayarlar
  digitalWrite(led, state);  // LED'in durumunu kapının durumuna göre ayarlar
  
  // Reedswitch pinini kesme olarak ayarlıyoruz
  attachInterrupt(digitalPinToInterrupt(role_pin), changeDoorStatus, CHANGE);  // Kapı durumunda değişiklik olduğunda kesme yapar

  WiFi.mode(WIFI_STA);  // Wi-Fi'ı istemci moduna alır
  WiFi.begin(ssid, password);  // Wi-Fi bağlantısını başlatır
  while (WiFi.status() != WL_CONNECTED) {  // Wi-Fi bağlantısı kurulana kadar bekler
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("İnternet bağlantısı kuruldu!");  // Wi-Fi bağlantısı kurulduğunda seri monitöre yazar

  bot.sendMessage(CHAT_ID, "Sistem aktif, kapı durumu kontrol edilmeye başlandı.");  // Telegram'a sistemin aktif olduğunu bildirir
}

// Wi-Fi bağlantısını kontrol eder ve gerekirse yeniden bağlanır
void checkWiFi() {
  if (WiFi.status() != WL_CONNECTED) {
    Serial.println("WiFi bağlantısı kaybedildi, tekrar bağlanıyor...");
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
    }
    Serial.println("");
    Serial.println("WiFi bağlantısı tekrar kuruldu!");
  }
}

void loop() {
  checkWiFi(); // Wi-Fi bağlantısını kontrol et ve gerekirse yeniden bağlan
  if (changeState) {  // Eğer kapı durumu değişmişse
    unsigned long currentMillis = millis();  // Şu anki zamanı alır
    if (currentMillis - previousMillis >= interval) {  // Belirlenen zaman aralığı geçmişse
      previousMillis = currentMillis;  // Önceki zamanı şu anki zaman yapar
      // Eğer bir durum meydana geldiyse, mevcut kapı durumunu tersine çevirir   
      state = !state;
      if (state) {
        kapi_durum = "Kapı Durumu => AÇIK";  // Kapı açık olduğunda mesajı ayarlar
      } else {
        kapi_durum = "Kapı Durumu => KAPALI";  // Kapı kapalı olduğunda mesajı ayarlar
      }
      digitalWrite(led, state);  // LED'in durumunu kapı durumuna göre ayarlar
      changeState = false;  // Değişiklik işaretini sıfırlar
      
      // Telegram'a mesaj gönderiliyor
      bot.sendMessage(CHAT_ID, kapi_durum, "");  // Kapı durumunu Telegram'a gönderir
    }  
  }
}

    

 

 

 

Kodun Temel Mantığı:

Ø Kapı durumu değişikliği algılandığında `changeDoorStatus()` fonksiyonu çalışır.

Ø Debounce süresi ile geçerli sinyal değişiklikleri kontrol edilir.

Ø Kapının durumu (açık/kapalı) ve bu durumun LED ile görselleştirilmesi sağlanır.

Ø Telegram botu kullanılarak kullanıcıya kapının durumu bildirilir.

 

Özet:

Bu proje, basit ve etkili bir kapı güvenlik sensörü sunar. Kullanıcının kapının durumunu anında bilmesini sağlar ve bu sayede güvenlik seviyesini artırır. Kolayca kurulabilir ve günlük hayatın bir parçası olarak kullanılabilir.

Yorum Gönder

0 Yorumlar