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.








0 Yorumlar