#20 Confirming Door

Güvenlik sistemlerinin kapsamına bina ve oda girişlerinde yetkileri kontrol edebilen  teknolojiler de girmektedir. Hastanelerin ameliyathanelerine sadece görevli personellerin girebildiği kartlı giriş sistemleri ilk akla gelen örneklerden biridir. Ayrıca askeri güvenlik merkezlerinde her düzeyden kişi veya personelin girmemesi gereken alanların giriş kapıları kartlı ve şifreli giriş teknolojileriyle donatılmaktadır. Bina ve oda girişlerinde kullanılan bu elektronik sistemler yetkisiz kişilerin girişini engellediği gibi giriş çıkış bilgilerinin kayıt altında tutulmasını da sağlamaktadır. Şifreli giriş, kartlı giriş, parmak izi tarama, yüz tarama, retina taraması ve ses tanıma teknolojileri elektronik giriş sistemlerinde kullanılan doğrulama yöntemleridir.

RFID ve NFC gibi sistemler bugün temassız ödeme teknolojilerinin temel halleridir. Kredi kartlarındaki temassız ödeme teknolojisi teknik olarak farklı olsa da çalışma mantığı aynıdır. Okuyucu ve kart arasında yer alacak maksimum mesafe, kullanılan teknolojileri birbirinden ayıran özelliklerin başında gelir. Alışveriş mağazalarından çıkarken özellikle giyim mağazalarında ürünlerin üzerindeki NFC etiketler girişteki okuyuculara takılırsa öterler. O sistemlerde de bir tür RFID teknolojisi kullanılmaktadır.

Bu projede maket ev üzerinde kartlı giriş sistemi hazırlayacağız. Kullanacağımız elektronik bileşenler MFRC522 RFID okuyucu ve 13.56 Mhz’lik kartlardır.

Proje Detayları ve Algoritma

Maket’in kapısının yanına MFRC522 okuyucu dışarıdan görünecek şekilde yerleştir. RGB LED ve buzzer da dışarıdan görünecek şekilde kapının bulunduğu duvarı üzerine yerleştir. Picoboard maket içinde kalabilir. Maketin giriş kapısı servonun başlığına bağlı olmalı servo da 0 dereceye ayarlı iken kapının kapalı olması sağlanmalıdır. Kapıyı açacak RFID /NFC etiketinin seri nosunu tespit edip homeowner değişkeni oluşturup seri noyu bu değişkene atamalısın.

Picobricks başladığında kapıyı kapalı konuma getir. RFID okuyucuya bir kart gösterildiğinde buzzerdan bip sesi çıkmasını sağla. Okutulan kartın seri numarası  homeowner değişkenindeki seri no ile eşleşiyorsa RGB LED i yeşil renkte yak. Ardından kapının açılmasını sağla. Kapı açıldıktan 3 saniye sonra kapının kapanmasını sağla. Okutulan kartın seri numarası homeowner değişkeni ile eşleşmiyorsa RGB LED i kırmızı renkte yak. Buzzerdan farklı tonda bir ses çıkar.

Bağlantı Şeması

RC522 RFID Reader ModulePicoBricks
VCC3.3V
RSTGP20 ***
GNDGND
IRQNot Connected
MISOGP16
MOSIGP19
SCKGP18
SDAGP17

*** Microblocks kullanılırken bağlanmaz.

Projenin MicroBlocks ile Kodlanması

Önce geçerli kullanıcının kart bilgisini okumalıyız. Ardından projenin kodlarını hazırlayacağız. homeowner adında bir değişken oluştur. RC522 ve Servo kütüphanelerini ekle. 

Picobricks başladığında “RC522_initialize” bloğu ile SDA pinini belirtip modülü tanımla. Forever döngüsünün içine if else yapısını yerleştir. Kart okunduğunda kart seri no’sunu ekrana yazdıracağız. “RC522 card UID” bloğu 4 elemanlı bir listedir. Bu değeri göstermek veya karşılaştırmak için “Data” kategorisindeki “join items of list” bloğunu kullanmalısın.

Kart Seri No’sunun okumak için gerekli MicroBlocks kodları için tıkla.

Kodu çalıştırdığınızda RC522’ye kartınızı gösterin. Kod bloklarının üstünde çıkan kart seri numarasını homeowner değişkenine Data kategorisindeki “list” bloğu ile atayın. Senin kartının seri numarası burada yazandan farklıdır.

Artık projenin algoritmasının kodlarını yazabiliriz. Picbricks başladığında  RC522’yi tanımla , homeowner değişkenini tanımla ve servo açısını ayarla.

Kart gösterildiğinde buzzer’dan bip sesi çıkarılacaktır. Kart gösterilmediği durumlarda “No Card detected” ifadesi yazdırılacaktır. Forever döngüsünün içinde if else yapısı yerleştirerek gerekli kodları aşağıdaki gibi hazırla.

Bip sesi çıktıktan hemen sonra homeowner değişkeni ile okunan kart’ın seri numarasını karşılaştıracak “if else” yapısını hazırla. Eğer Seri numaraları eşleşiyorsa “Login Confirmed” ifadesini yazdır. Seri numaralar eşleşmiyorsa “ invalid user” ifadesini yazdır. Kodların aşağıdaki gibi olmalı.

Doğru kart gösterildiğinde Servonun hareket etmeli ve RGB LED yeşil renkte yanmalı. 3 saniye beklenmeli ve servo eski açısına geri dönmeli. Yanlış kart gösterildiğinde RGB LED kırmızı renkte yanmalı. 3 saniye beklenmeli. Kart okutulmadığı durumlarda ise RGB LED söndürülmelidir. Projenin bitmiş kodları aşağıdaki gibi olmalıdır.

Projenin MicroBlocks kodlarına erişmek için tıkla.

Projenin Yapım Aşamaları

18 numaralı Akıllı Ev projesinde kullandığın ev maketi üzerinde projeyi yapacağız. Ev maketinin üzerinde RGB LED, Buzzer ve RC522 RFID okuyucu için delikler aç.



RGB Led ve Buzzer’ın arkasına çift taraflı köpük bant yapıştırıp kutunun üzerine yapıştır. RC522 yi maketin içinden görseldeki gibi yerleştir.

Servo motoru, maketin içine kapının sol üst köşesinde menteşe olarak duracak şekilde çift taraflı bant ile yapıştır. Servo başlığını kapıya sıcak silikon ya da sıvı yapıştırıcı ile yapıştır.

Son olarak Pico board’ı ve 2’li anahtarlı pil kutusunu maket evin içine yerleştirin ve kablo bağlantılarını tamamlayın. Projenizin son kontrollerini yaptıktan sonra çalışmaya hazırdır.

Proje Önerisi

Otomatik kapı projesinde RFID kartlara kişi isimleri verebilir, projeye OLED ekran ekleyerek kart okutulduğunda kartı okutan kişinin adını OLED ekrana yazdırabilirsin. 

Projenin MicroPython Kodları

Kart ID’yi öğrenmek için çalıştırılacak kod:
from machine import Pin, SPI
from mfrc522 import MFRC522

sck = Pin(18, Pin.OUT)
mosi = Pin(19, Pin.OUT)
miso = Pin(16, Pin.OUT)
sda = Pin(17, Pin.OUT)
rst = Pin(20, Pin.OUT)
spi = SPI(0, baudrate=100000, polarity=0, phase=0, sck=sck, mosi=mosi, miso=miso)
rdr = MFRC522(spi, sda, rst)

while True:
    (stat, tag_type) = rdr.request(rdr.REQIDL)
    if stat == rdr.OK:
        (stat, raw_uid) = rdr.anticoll()
        if stat == rdr.OK:
            uid = ("0x%02x%02x%02x%02x" % (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3]))
            print(uid)
            utime.sleep(1)

Projenin kodları:
from machine import I2C, Pin, SPI, PWM
from mfrc522 import MFRC522
from ws2812 import NeoPixel
from utime import sleep 

servo = PWM(Pin(21))
servo.freq(50)
servo.duty_u16(1350) #servo set 0 angle 8200 for 180.

buzzer = PWM(Pin(20, Pin.OUT))
buzzer.freq(440)

neo = NeoPixel(6, n=1, brightness=0.3, autowrite=False)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLACK = (0, 0, 0)

sck = Pin(18, Pin.OUT)
mosi = Pin(19, Pin.OUT)
miso = Pin(16, Pin.OUT)
sda = Pin(17, Pin.OUT)
rst = Pin(20, Pin.OUT)
spi = SPI(0, baudrate=100000, polarity=0, phase=0, sck=sck, mosi=mosi, miso=miso)
homeowner = "0x734762a3"
rdr = MFRC522(spi, sda, rst)

while True:
    
    (stat, tag_type) = rdr.request(rdr.REQIDL)
    if stat == rdr.OK:
        (stat, raw_uid) = rdr.anticoll()
        if stat == rdr.OK:
            buzzer.duty_u16(3000)
            sleep(0.05)
            buzzer.duty_u16(0)
            uid = ("0x%02x%02x%02x%02x" % (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3]))
            print(uid)
            sleep(1)
            if (uid==homeowner):
                neo.fill(GREEN)
                neo.show()
                servo.duty_u16(6000)
                sleep(3)
                servo.duty_u16(1350)
                neo.fill(BLACK)
                neo.show()
               
            else:
                neo.fill(RED)
                neo.show()
                sleep(3)
                neo.fill(BLACK)
                neo.show()
                servo.duty_u16(1350)

Yorum bırakın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Scroll to Top