Anasayfa İş Kendin Yap #2 – Güvenlik Sistemi

Kendin Yap #2 – Güvenlik Sistemi

En düşük maliyetle kendi güvenlik sisteminizi yapabilirsiniz. Arduino kullanarak hareket ve ses algılayarak size uyarı gönderen bir alarm, güvenlik sisteminin nasıl yapılıp geliştirileceğini bu rehberimizde görebilirsiniz…

Akıllı ev güvenlik sistemleri gittikçe büyüyen bir sektör. Piyasada ihtiyacınızı karşılayacak ölçekte ve özelliklerde pek çok ürün mevcut ve yapmak istediğiniz şeye bağlı olarak oldukça yüksek maliyetli olabiliyorlar. Dahası kullanmaya devam etmek için her ay abonelik ücreti ödemeniz gerekiyor.

Peki kendimiz minimum maliyetle böyle bir sistem yapmaya kalksak nasıl sonuç alırız? Bu sorunun cevabına bu videoda birlikte bakacağız.

Arduino’dan faydalanarak harekete, sese ve kapıların açılmasına duyarlı bir güvenlik sistemi yapacağız. Sistem olası bir tehdit algıladığında bize cep telefonumuzdan bildirim gönderecek.

Açık Kaynak

Şemalar, devre bağlantıları ve kodları tamamen açık kaynaklı olarak sizlere sunuyoruz, bunları takip ederek siz de hiç vakit kaybetmeden kendi güvenlik sisteminizi yapabilirsiniz.

Peki neden sıfırdan yapıyoruz? Piyasadaki güvenlik sistemlerine tüketici veya kullanıcı olarak biz müdahale edemiyoruz, çünkü bu sistemlerin işleyiş biçimleri şirketin tescilli bilgisi.

Ancak kendi yapacağımız sistemleri keyfimize göre, istediğimiz zaman özgürce genişletebilir, özelliklerini artırabilir ve azaltabiliriz. Örneğin devreye dahil edebileceğimiz sensör sayısını artırarak, riskleri minimuma indirebilir ve korumak istediğimiz oda sayısını artırabiliriz.

En başından söyleyelim, bu tarz bir projede doğabilecek zararlardan ya da uygulanmasından tamamen kendiniz sorumlusunuz.Kodlar ve her türlü bilgi sadece konsepti kanıtlamak ve geliştirici olmak isteyenlere, öğrenmek isteyenlere yarar sağlamak için, hiç bir garanti ve vaat olmadan ücretsiz sunulmuştur. Bu şartlar bütün rehberlerimiz için geçerlidir.

Malzeme Listesi

1. Arduino Uno modeli (30TL)
2. Arduino Protoshield (20TL)
3. 1 adet Manyetik Alan Sensörü (9TL)
4. 1 adet HC-SR501 kızılötesi sensörü (11TL)
5. 1 adet ses algılayıcı sensör (9TL)
6. 1 adet ENC28J60 Ethernet LAN Modülü (30TL)
7. Erkek-dişi, dişi-dişi, erkek-erkek uçlu jumper kablolar (-)
8. Kablo uzatma için birkaç metre bakır tel. (-)
9. Notify My Android Uygulaması Pro versiyonu (11TL)
10. 1 adet küçük Neodimyum Mıknatıs (5TL)

Android uygulamasının Pro versiyonuyla birlikte yaklaşık 120 TL’ye ulaşan malzeme listemiz kurumsal güvenlik çözümleri düşünüldüğünde büyük bir avantaja sahip olyuor, özellikle de uzun vadeli düşündüğünüzde. Bu parçaları yurtiçi, yurtdışı nereden isterseniz alabilirsiniz.

Peki sistemimizin yetenekleri neler olacak?

Öncelikle güvenlik sistemimizin hareketi algılamasını istiyoruz. Bunun için PIR da denilen kızılötesi sensörler kullanacağız. Sıcakkanlı biyolojik organizmaların vücudu ısı yayar ve bu yayılımı kızılötesi ışık formunda yapar. Dolayısıyla insan vücudunu algılamanın en kolay yollarından birisi de kızılötesi algılayıcı sensörler kullanmaktır. HC-SR501 kızılötesi hareket sensörü bu iş için biçilmiş kaftandır. Bu sensörü ayrıntılı olarak Meraklı Maymun kanalımdaki bir videoda inceledim. Ayrıntılı bilgi için yukardaki karta tıklayabilirsiniz. Sensör hareket algıladığı anda logic 1 çıkış verip bunu Arduino’ya bildirir. Ancak bu sensör ev hayvanları tarafından da tetiklenebileceği için evde hayvan besleyenler yanlış alarmlarla karşılaşabilir. O sebeple birden çok sensörle sistemimizi desteklememiz gerekir.

Hareket algılamanın yanı sıra kırılma, düşme gibi güvenlik açısından önemli sayılabilecek yüksek seviyeli sesleri de algılayabilen bir ses sensörü güvenlik sistemimiz için faydalı olacaktır. Burada açıklamakta fayda var bu sensör sesleri kaydetmiyor, sadece seslerle tetiklenip Arduino’ya logic 1 sinyal gönderiyor. Hassasiyeti ise üzerindeki potansiyometre ile ayarlayıp düşük seviyeli seslerle tetiklenip yanlış alarm vermesinin önüne geçebiliyoruz.

Bir başka faydalı sensör de kapılarda veya pencerelerde uygulayabileceğimiz manyetik alan sensörü ya da ingilizce adıyla “hall effect sensor”. Bu sensör manyetik alan yaratan mıknatıs gibi objelere yaklaştırıldığında lojik durumu değişir. Kapı veya pencere kasasına bir mıknatıs sabitleyip, sensörü de kapı veya pencereye tutturursanız, kapı açıldığında mıknatıs ve sensör birbirinden uzaklaşacağı için sensör lojik 0 çıkış vermeye başlayacaktır ve bu sayede kapı veya pencerenin açıldığını anlayabiliriz.

Tabiki bunlara ek olarak başka sensörlerle güvenlik sisteminizi aldatılamaz hale getirebilirsiniz. Mesela ışık sensörü kullanarak odadaki lambanın açılıp açılmadığı anlamak bunlardan birisi.

Tüm bunları yapabilmek için Arduino’yu internete bağlamak ve cep telefonumuzla haberleşmesini sağlamamız gerekir. Bunun için ENC28J60 Ethernet LAN Modülü’nü kullanıyoruz. Bu modülle kullandığımız ethercard adında çok kullanışlı bir Arduino kütüphanesi mevcut. Bu kütüphane Arduino’nun ethernet modülüyle iletişim kurmasını sağlamak için gerekli. Ethercard içinde NotifyMyAndroid isimli bir örnek bulunuyor. Projemizde kullandığımız Arduino kodunun içeriği büyük oranda bu örneğe dayanıyor diyebiliriz. Bizim yaptığımız eklentiler sensörlerden elde ettiğimiz geri bildirimlere dayanarak Android telefona gönderilmek üzere servera iletilen mesajları özelleştirmek oldu.

Notify My Android ücretli ve ücretsiz versiyonları bulunan bir uygulama. Google Play Store’da ücretli versiyonunu 11TL’ye satın alabiliyorsunuz. Ücretli versiyonunu kullanmanızı öneriyoruz çünkü ücretsiz versiyonun günde 5 bildirim kısıtlaması bulunuyor.

Prototipleme Aşaması

Protoshield’ı Arduino Uno’ya takın ve sensörleri Arduino’ya yukarıda gördüğünüz şekilde bağlayın. HC-501 kızılötesi hareket sensörü ve ses sensörü üzerindeki potansiyometre ve jumper’ı kullanım şeklinize göre ayarlamayı unutmayın. Bu konuda detaylı bilgi için tıklayın. Ethernet Modülünü de yukarda gördüğünüz şekilde Arduino’ya bağlayabilirsiniz. Konumlandırmanıza bağlı olarak bazı sensörlerin daha uzun kablolara ihtiyacı olabilir. Malzeme listemizde yer alan birkaç metrelik bakır teli bunun için kullanabilirsiniz.

Not: Yukardaki devre resmini çizmek için kullandığımız Fritzing programında manyetik sensör (hall effect) örneği bulunmadığı için yazı ile temsil ettik.

Yazılım

Yazılım tarafına baktığımızda Ethercard kütüphanesini yüklememiz gerekiyor.

İndirdikten sonra .zip dosyasının adını “ethercard” olarak değiştirin ve Arduino IDE yazılımını çalıştırın. Taslak menüsünden Library Ekle’ye, oradan da .zip kitaplığı ekle’ye tıklayın. Çıkan dosya seçme penceresinde “ethercard.zip” doyasını seçin. Kütüphane yüklenecektir.

Ardından aşağıdaki Arduino taslak kodunu Arduino IDE programına yapıştırın ama henüz yüklemeyin.

#include <EtherCard.h>

boolean kapidurumu=0;
boolean sonkapidurumu=0;
boolean hareketdurumu=0;
boolean sonhareketdurumu=0;
boolean sesdurumu=0;
boolean sonsesdurumu=0;

const char apihost[] PROGMEM = “www.notifymyandroid.com”;

static byte mymac[] = { 0x74, 0x69, 0x69, 0x2D, 0x30, 0x31 };

byte Ethernet::buffer[900];
Stash stash;
static byte session;

void setup () {

pinMode(6,INPUT); // HAREKET
pinMode(7,INPUT); // MIKNATIS
pinMode(9,INPUT); // SES

Serial.begin(57600);
Serial.println(“\nStarting Notify My Android Example”);

if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
Serial.println(F(“Failed to access Ethernet controller”));
if (!ether.dhcpSetup())
Serial.println(F(“DHCP failed”));

ether.printIp(“IP: “, ether.myip);
ether.printIp(“GW: “, ether.gwip);
ether.printIp(“DNS: “, ether.dnsip);

if (!ether.dnsLookup(apihost))
Serial.println(F(“DNS lookup failed for the apihost”));
ether.printIp(“SRV: “, ether.hisip);

}

void loop () {
////////DURUM DEĞİŞİMİ ALGILAMA
//SENSÖRLERDEN SÜREKLİ GERİ BİLDİRİM ALINCA
///KODU ARKA ARKAYA ÇALIŞTIRMAK YERİNE
//SADECE LOJİK DURUMU DEĞİŞİNCE KODU ÇALIŞTIRMAK İSTİYORUZ…
//

kapidurumu = digitalRead(7); // O SEBEPLE ÖNCE SOLDAKİ DEĞİŞKENLERE
sesdurumu = digitalRead(9); // SENSÖRDEN GELEN GÜNCEL GERİBİLDİRİM
hareketdurumu = digitalRead(6);// DEĞERLERİ YAZDIRILIYOR…

if (hareketdurumu != sonhareketdurumu) { // DAHA SONRA GÜNCEL SENSÖR GERİBİLDİRİMİ SON KAYDEDİLEN
//SENSÖR GERİBİLDİRİMİ İLE KARŞILAŞTIRILIYOR. EĞER İKİSİ ARASINDA BİR DEĞİŞİKLİK ALGILANIRSA TELEFONA
//MESAJ GÖNDERME KISMINA GELİNİYOR.
if (hareketdurumu == HIGH) { //
Serial.println(“HAREKET”);
byte sd = stash.create();
stash.print(“apikey=”);
stash.print(“fee432b1eee0fb0c5afeb16207b1487be88b09e44eacefde”);

stash.print(“&application=”);
stash.print(“arduino”);

stash.print(“&event=”);
stash.print(“Arduino Guvenlik Sistemi”);

stash.print(“&description=”);
stash.print(“Hareket sensoru bir hareket algiladi!”);

stash.print(“&priority=”);
stash.print(“0”);
stash.save();
int stash_size = stash.size();
Stash::prepare(PSTR(“POST /publicapi/notify HTTP/1.1” “\r\n”
“Host: $F” “\r\n”
“Content-Length: $D” “\r\n”
“Content-Type: application/x-www-form-urlencoded” “\r\n”
“\r\n”
“$H”),
apihost, stash_size, sd);
session = ether.tcpSend();
}
}

if (kapidurumu != sonkapidurumu) {
if (kapidurumu== HIGH) {
Serial.println(“Kapı açık”);
byte sd = stash.create();
stash.print(“apikey=”);
stash.print(“fee432b1eee0fb0c5afeb16207b1487be88b09e44eacefde”);

stash.print(“&application=”);
stash.print(“arduino”);

stash.print(“&event=”);
stash.print(“Arduino Guvenlik Sistemi”);

stash.print(“&description=”);
stash.print(“Kapi veya Pencere Acildi!”);

stash.print(“&priority=”);
stash.print(“0”);
stash.save();
int stash_size = stash.size();
Stash::prepare(PSTR(“POST /publicapi/notify HTTP/1.1” “\r\n”
“Host: $F” “\r\n”
“Content-Length: $D” “\r\n”
“Content-Type: application/x-www-form-urlencoded” “\r\n”
“\r\n”
“$H”),
apihost, stash_size, sd);
session = ether.tcpSend();
}
}

if (sesdurumu != sonsesdurumu) {
if (sesdurumu ==HIGH) {
Serial.println(“SES”);
byte sd = stash.create();
stash.print(“apikey=”);
stash.print(“fee432b1eee0fb0c5afeb16207b1487be88b09e44eacefde”);

stash.print(“&application=”);
stash.print(“arduino”);

stash.print(“&event=”);
stash.print(“Arduino Guvenlik Sistemi”);

stash.print(“&description=”);
stash.print(“Ses sensoru ses algiladi!”);

stash.print(“&priority=”);
stash.print(“0”);
stash.save();
int stash_size = stash.size();
Stash::prepare(PSTR(“POST /publicapi/notify HTTP/1.1” “\r\n”
“Host: $F” “\r\n”
“Content-Length: $D” “\r\n”
“Content-Type: application/x-www-form-urlencoded” “\r\n”
“\r\n”
“$H”),
apihost, stash_size, sd);
session = ether.tcpSend();
}
}

ether.packetLoop(ether.packetReceive());

const char* reply = ether.tcpReply(session);
if (reply != 0) {
Serial.println(“Got a response!”);
Serial.println(reply);
}

sonhareketdurumu = hareketdurumu;
sonsesdurumu = sesdurumu;
sonkapidurumu = kapidurumu;
}

Kod İnceleme

Arduino’ya yüklemeniz gereken taslak koduna bakalım. Bu kodun ethercard kütüphanesiyle gelen bir şablon olduğundan bahsetmiştik. Bizim yaptığımız değişiklik mesajın telefona gönderilmesini sensörlerden gelen geribildirimlere göre koşula bağlamak oldu.

Ayrıca koda eklediğimiz bir algoritma da durum değişimi algılaması (state change). Kod geçmiş sensör durumu ile güncel sensör durumunu karşılaştırıyor, eğer ikisi arasında bir değişiklik var ise cep telefonumuza bildirim gönderme kısmını devreye geçiriyor, yoksa bir şey yapmadan devam ediyor.

Bunu yapmamızın ardındaki sebep kullandığımız sensörlerden bazıları tetiklendikten sonra 2-3 saniye boyunca lojik 1 çıkış veriyorlar. Bu sensörleri dinleyen kodlarımız void loop fonksiyonunda olduğu için Arduino saniyede onlarca kez bu kodu loop edip çalıştırmış oluyor. Böyle olunca sensör bir hareket algılandığında dahi telefonumuza onlarca mesaj gönderilebiliyor. Bunun önüne geçmek için durum değişimi algılamayı kullanıyoruz. Yani sadece sensör geri bildirimi 1’den 0’a ya da 0’dan 1’e değiştiğinde telefonunuza mesaj gönderiliyor.

Android Uygulaması

Kodu inceledikten sonra sırada Android uygulamasını yükleme ve kayıt olma var. Google Play Store’dan NotifyMyAndroid’i bulup indiriyoruz. Ardından Notify My Android’in web sayfasına girip Register butonuna tıklayıp siteye üye oluyoruz. Siteye üye olduktan sonra bize bir API anahtarı verilecek:

Bu anahtarı Arduino taslak kodumuzun ilgili yerlerine kopyalayıp yapıştırıyoruz:

Android Uygulamasına kullanıcı adımız ve şifremizle giriş yapıyoruz. Biz uygulamanın pro versiyonunu satın almanızı öneririz çünkü ücretsiz versiyonu günde maksimum 5 adet bildirim kısıtlamasına sahip. Pro versiyonun ücreti 11TL.

Son olarak taslak kodunu Arduino’ya yüklüyoruz, internete bağlı routerımızdan gelen bir LAN kablosunu ethernet modülüne takıyoruz. Bu andan itibaren sensörlerden alınan geri bildirimler cep telefonunuza bildirim olarak gelmeye başlayacaktır.

Arduino’ya güç vermek için 9V ya da 12v’luk bir adaptör ya da USB kablosu kullanabilirsiniz.

Unutmayın, bu sistem tamamen değiştirilip, geliştirilebilir, ihtiyaçlarınıza ve keyfinize göre farklılaştırılabilir. Arduino’nun özgür ve açık kaynaklı dünyasına hoşgeldiniz, hayallerinizi gerçekleştirmek için kimseye herhangi bir meblağ ödemek zorunda değilsiniz.