back to top

Arduino, PIR Sensör ve RC522 RFID Modülü ile Güvenlik Sistemi

Herkese merhabalar, bu yazımızda Arduino, PIR sensör ve RC522 RFID Modülü kullanarak kendi kapı alarmımızı yapacağız. Yaptığımız alarm, bir butona basarak aktifleştirilebilecek ve aktifken hareket algıladığında belirli bir süre boyunca kart okutulmasını bekleyecek. Doğru kartın okutulmaması durumunda ise buzzer ötmeye başlayacak. Proje için gerekli malzemelerin listesi şu şekilde:

Bu yazımızda kullanacağamız sensör ve modüller hakkında detaylı yazılar blogumuzda mevcut. Eğer bu modüller ve sensörler hakkında yeterli bilgi sahibi değilseniz bu yazıları inceleyerek kullanacağımız malzemeleri daha yakında tanımanız yararınıza olacaktır. RC522 RFID Modülü, PIR Sensörü ve Buton Kullanımı ile ilgili yazılarımıza bu linklerden ulaşabilirsiniz.

Devre Kurulumu

Projede kullanacağımız malzemeleri nasıl birbirine bağlayacağımızı görmek için aşağıdaki devre şemasını inceleyebilir ve siz de devrenizi kurabilirsiniz.

Devre Şeması

Çalışma Mantığı ve Kodlama

Devreyi kurduğumuza göre sıra kodu yazmaya geldi. Ancak kodlamaya geçmeden önce, kodun akışını daha rahat anlayabilmeniz adına projemizin işleyişinin üzerinden geçmek istiyorum.

  1. Başlangıçta alarm pasif halde olur.
  2. Kullanıcı alarmı aktifleştirmek için butona basar.
  3. Kullanıcının uzaklaşması için 10 saniye beklenir ve ardından alarm aktif hale gelir.
  4. Alarm aktifken sensör tarafından hareket algılandığında kullanıcının doğru kartı okutması için 10 saniye beklenir.
  5. Bu süre içerisinde doğru kart okutulursa alarm pasif hale geçer, aksi halde buzzer ötmeye başlar.

Alarmın işleyişi bu şekilde. 10 saniye olarak belirtmiş olduğum süreleri kodda gerekli düzenlemeyi yaparak istediğiniz gibi değiştirebileceğiniz unutmayın😉

Projenin çalışması için gereken kod aşağıda. Kodun nasıl çalıştığını anlamak için satırların yanlarında yazan açıklamaları incelemeyi ihmal etmeyin. Kodda kullandığımız MFRC522 kütüphanesini buradan indirebilir, Arduino programında Taslak > library ekle > .ZIP kitaplığı ekle seçeneklerini takip ederek kurabilirsiniz.

Önemli Not: Projenizin düzgün çalışması için koddaki byte ID değişkenini kendi yetkilendirmek istediğiniz kartın ID’si ile değiştirmeniz gerekmektedir. Elinizdeki kartların ID’sini öğrenmek için buradan indirebileceğiniz kodu Arduino’ya yükleyebilirsiniz. Okuyucuya kartı yaklaştırdığınızda ID’sı Seri Port ekranında yazacaktır.

#include <SPI.h> //SPI kütüphanesini ekliyoruz.

#include <MFRC522.h> //RFID modülünü kullanmak için gerekli kütüphaneyi ekliyoruz.


int RST_PIN = 9; //RC522 modülü reset pinini tanımlıyoruz.
int SS_PIN = 10; //RC522 modülü chip select pinini tanımlıyoruz.
bool hareket = false; //hareket adlı bir değişken oluşturup değerini false olarak ayarlıyoruz.
bool aktif = false; //aktif adlı bir değişken oluşturup değerini false olarak ayarlıyoruz.
float bekleme1 = 10; //1. bekleme süresini belirlediğimiz bekleme1 değişkenini oluşturup değerini 10 olarak ayarlıyoruz.
int bekleme2 = 10; //2. bekleme süresini belirlediğimiz bekleme2 değişkenini oluşturup değerini 10 olarak ayarlıyoruz.
float sayac = bekleme2; //sayac değişkenini oluşturup değerini bekleme2'nin değerine eşitliyoruz.

MFRC522 rfid(SS_PIN, RST_PIN); //RC522 modülü ayarlarını yapıyoruz.
byte ID[4] = {
  80,
  175,
  255,
  211
}; //Yetkili kart ID'sini tanımlıyoruz.

void setup() {

  Serial.begin(9600); //Seri haberleşmeyi başlatıyoruz.
  SPI.begin(); //SPI iletişimini başlatıyoruz.
  rfid.PCD_Init(); //RC522 modülünü başlatıyoruz.
  pinMode(8, INPUT); //PIR hareket sensörünü bağlamış olduğumuz 8 numaralı pini giriş pini olarak ayarlıyoruz.
  pinMode(7, OUTPUT); //Buzzerı bağlamış olduğumuz 7 numaralı pini çıkış pini olarak ayarlıyoruz.
  pinMode(6, INPUT); //Butonu bağlamış olduğumuz 6 numaralı pini giriş pini olarak ayarlıyoruz.
}

void loop() {
  if (digitalRead(6) == HIGH) { //Butona basıldığında
    digitalWrite(7, HIGH);
    delay(100);
    digitalWrite(7, LOW); //Buzzerı 100 ms liyeniğine öttürüyoruz.
    delay(bekleme1 * 1000); //Alarmı aktifleştirmeden önce bekleme1 süresince bekliyoruz.
    aktif = true; // Alarmı aktifleştiriyoruz.
  }
  if (digitalRead(8) == HIGH && aktif == true) { //Hareket algılanırsa ve alarm aktifse
    digitalWrite(7, HIGH);
    delay(100);
    digitalWrite(7, LOW); //Buzzerı 100 ms liyeniğine öttürüyoruz.
    hareket = true; //hareket değişkenini True olarak değiştiriyoruz.
    while (hareket) { //hareket değişkeni True olduğu sürece
      if (sayac <= 0) {
        digitalWrite(7, HIGH); //Süre biterse buzzerın ötmeisni sağlıyoruz.
      } else { //Süre bitmediyse
        delay(100); // 0.1 saniye bekliyoruz. 
        sayac -= 0.1; //sayacı 0.1 azaltıyoruz.
      }
      Serial.println(sayac);
      if (rfid.PICC_IsNewCardPresent()) { //Okuyucuya bir kart yaklaştrılmışsa

        if (rfid.PICC_ReadCardSerial()) { //Kartın ID'si okunuyorsa

          if (rfid.uid.uidByte[0] == ID[0] &&
            rfid.uid.uidByte[1] == ID[1] &&
            rfid.uid.uidByte[2] == ID[2] &&
            rfid.uid.uidByte[3] == ID[3]) { //Kartın ID'sini yetkili ID ile karşılaştırıyoruz.
            hareket = false;
            aktif = false;
            digitalWrite(7, HIGH);
            delay(100);
            digitalWrite(7, LOW); //hareket ve aktif değişkenlerini false olarak ayarlıyoruz ve buzzerı 100 ms liyeniğine çalıştırıyoruz.

          }
        }
      }
      rfid.PICC_HaltA(); //Aynı kartın tekrar tekrar okunmasını engellemek için bu komutu yazıyoruz.
    }
    digitalWrite(7, LOW); //hareket ve aktif değişkeni artık True olmayınca buzzerı kapatıyoruz.
    sayac = bekleme2; //sayacı tekrardan baştaki süreye getiriyoruz.
  }
}

Kodu Arduino’ya yükleyerek projeyi tamalayabilirsiniz. Pek çok önemli komponenti birlikte kullanarak oluşturmuş olduğumuz bu projeyi yaparak hem eğlenmiş hem de yeni şeyler öğrenmiş olduğunuzu umut ediyorum. Ayrıca proje geliştirilmeye oldukça açık. Örneğin bir ekran ekleyerek alarmın durumunu ve kalan süreyi yazdırabilir veya ledler ekleyerek görsel bir uyarı sunmasını da sağlayabilirsiniz. Bu süreçteki tüm soru ve görüşlerinizi aşağıdaki Yorumlar kısmında belirtmeyi unutmayın. Daha sonraki yazılarda görüşmek üzere, hoşçakalın 🙂

Son Çıkan Yazılar

14 YORUMLAR

  1. Benim sorum farklı olacak ya ben şimdi rfid kullandım önceki projenize göre şu kapı kilidi yapma servoyu kaldırdım kızılötesi kumanda ekledim rfid kartı okuyunca su olacak kızılötesi okuyunca bu olacak diyorum fakat loop kısmında ayrilmiyo ikisi birini tek başına kullanınca oluyor ikisi olmuyo nasıl düzeltebilirim onu

  2. merhaba,
    ben multiread olarak mfrc522 kullanıyorum. 5 adet. her biri akrı bir yeri temsil ediyor. reader olarak atadığım çalışıyor ancak yapmak istediğim reader 2 olduğunda benim 2. kapı açıldı gibi bir mesaj almam lazım. Aynı karta göre mesajı nasıl tanımlarım.basit ama yapamadım gitti

  3. ben bu kodu çalıştırmak istedim ama kodda hareket sensörü ile aktifleşeceği kısıma geçmiyor direk geri sayıma başlıyor yardımcı olabilecek var mı

  4. Malzemeler listesinde buzzer yok
    Lütfen yazın
    Ben ilk defa proje yapacağım için size güvendim orda yazanları aldım şimdi tekrar buzzer alabilmek için kargo fiyatı ödemem gerekiyor

  5. karttımın ID sini ekrana cıkartamadım bi turlu dediginiz linki indirdim fakat yul,kleyemıyorum surekli hata veriyor lutfen yardımcı olursanız sevinirim

  6. Hareket sensörüm belirli bir süre sonra kafasına göre hareket algılıyor. Elimle hareket edince tepki göstermiyor ancak birden algılıyor ve sistem çalışıyor nedeni ne olabilir ?

  7. arkadaşlar herşeyi halletiğinizde sensör hareket olmasada devreye girebilir ve direk hareket algılanmış gibi 10 den geri sayarak alarm öter bunu yazılımla ilgili hiçbir sıkıntısı yoktur 2 gündür bunu düzeltmek için yazılımı yeniden yazdım değişiklik yaptım etkisi olmadı hareket olmasada sensörün hareket algılamasının sebebi yazılımdan tamamen alakasız sensörün üstündeki hassasiyetden dolayı…. sensörün üüstünde iki tane küçük sarı ayar potu var onları kısarak sorunu çözeceksiniz yaklaşık 2 günüm buna gitti….

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz