Güvenlik Sistemleri, bazı bina ve odalara girişlerde erişimi kontrol eden teknolojileri içerir. Örneğin ameliyathanelere ve bazı devlet kurumlarına sadece yetkili personellerin girebildiği kartlı geçiş sistemleri gibi. Bu tür elektronik sistemler istenmeyen kişilerin girişin engellediği gibi yapılan giriş ve çıkışların kayıt altına alınmasını da sağlar. Şifre, kart, yüz tanıma veya parmak izi tanıma gibi bazı metotlar ile bu tür sistemler kullanılabilir.
RFID ve NFC gibi teknolojiler günümüzde temassız ödeme teknolojilerinin temelini oluştururlar. Kredi kartlarıyla yapılan temassız ödemeler teknik olarak farklılıklar içerse de çalışma mantığı tamamen aynıdır. Başta giyim mağazaları olmak üzere mağazaların kapısından çıkarken ürünlerin üzerinde yer alan NFC etiketleri, kapılardaki okuyucular tarafından tespit edilir ve alarm sesi çalar. Bu sistemler bir çeşit RFID teknolojisi kullanırlar.
Bu projemizde model bir ev üzerine kartlı giriş sistemi entegre edeceğiz. Projemizi hazırlarken MFRC522 RFID okuyucu ve 13.56 Mhz kart kullanacağız.
Detaylar ve Algoritma
MFRC522 okuyucuyu kapının hemen dışına yerleştirin. Aynı şekilde RGB LED ve buzzer’ı da dışarıdan görebileceğiniz şekilde kapının etrafına yerleştirin. Picoboard evin içerisinde yer alabilir. Giriş kapısı mutlaka bir servo motor ile bağlantılı olmalıdır. Servo motor 0 derece açısındayken kapı kapalı konumdadır. Kapıyı açacak olan kart seri numarasını belirleyin ve ev sahibi değişkeninin içerisine bu seri numarasını atayın.
Program başlatıldığında kapı kapalı durumda olmalıdır. Kart, okuyucua gösterildiğinde buzzer’ın ses çıkarmasını sağlayın. Eğer kartın seri numarası okuyucu ile eşleşirse RGB LED yeşile döner ve kapı açılır. Eşleşmez ise RGB LED kırmıza döner ve buzzer farklı tonda bir ses çıkarır.
Bileşenler
1x PicoBricks
1x Servo Motor
1x rc522-RFID Kart
Jumper Kablolar
Kolay Bağlantı Kabloları
Devre Şeması
Projenin Yapım Aşamaları
Karton ev üzerinde RGB LED, buzzer ve RC522 RFID okuyucu için yeterli delikler açın.
RGB LED ve buzzer’ın arkasına çift taraflı bant yapıştırarak kartona yapıştırın. RC522’yi evin içerisine şekildeki gibi yerleştirin.
Servo motoru kapıyı açıp kapatacak şekilde resimdeki gibi yerleştirin. Silikon kullanarak servo ile kapıyı sabitleyebilirsiniz.
son olarak Picoboard’u ve pil kutusunu evin içerisine yerleştirin ve kablo bağlantılarını tamamlayın.
MicroBlocks Kodları
MicroPython Kodları
Kart ID’sini öğrenmek için çalıştırılacak kod:
makine ithalatından Pin, SPI
mfrc522'den MFRC522'yi içe aktarın
kullanım süresini içe aktar
#kütüphaneleri tanımla
sck = Pin(18, Pin.OUT)
mosi = Pin(19, Pin.OUT)
miso = Pin(16, Pin.OUT)
sda = Pin(17, Pin.OUT)
rst = Pin(15, Pin.OUT)
spi = SPI(0, baud hızı=100000, polarite=0, faz=0, sck=sck, mosi=mosi, miso=miso)
rdr = MFRC522(spi, sda, ilk)
# MFRC522 pinlerini tanımlayın
Doğruyken:
(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]))
yazdır(uid)
utime.sleep(1)
# kartı okuyun ve kartın seri numarasını verin
Proje Kodu:
makine içe aktarımından I2C, Pin, SPI, PWM
mfrc522'den MFRC522'yi içe aktarın
ws2812'den NeoPixel'i içe aktarın
utime içe aktarma uykusundan
servo = PWM(Pin(21))
servo.freq(50)
servo.duty_u16(1350) # servo 180 için 0 açısını 8200 olarak ayarlayın.
buzzer = PWM(Pin(20, Pin.OUT))
buzzer.freq(440)
neo = NeoPixel(6, n=1, parlaklık=0,3, otomatik yazma=Yanlış)
KIRMIZI = (255, 0, 0)
YEŞİL = (0, 255, 0)
SİYAH = (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(15, Pin.OUT)
spi = SPI(0, baud hızı=100000, polarite=0, faz=0, sck=sck, mosi=mosi, miso=miso)
ev sahibi = "0x734762a3"
rdr = MFRC522(spi, sda, ilk)
Doğruyken:
(stat, tag_type) = rdr.request(rdr.REQIDL)
if stat == rdr.OK:
(stat, raw_uid) = rdr.anticoll()
if stat == rdr.OK:
buzzer.duty_u16(3000)
uyku(0,05)
buzzer.duty_u16(0)
uid = ("0x%02x%02x%02x%02x" % (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3]))
yazdır(uid)
uyku(1)
uid == ev sahibi ise:
neo.fill(YEŞİL)
neo.show()
servo.duty_u16(6000)
uyku(3)
servo.duty_u16(1350)
neo.fill(SİYAH)
neo.show()
başka:
neo.doldur (KIRMIZI)
neo.show()
uyku(3)
neo.fill(SİYAH)
neo.show()
servo.duty_u16(1350)
Arduino C Kodları
Kart ID’sini öğrenmek için çalıştırılacak kod:
#include
#include
// kütüphaneleri tanımla
int RST_PIN = 26;
int SS_PIN = 17;
// pinleri tanımla
MFRC522 rfid(SS_PIN, RST_PIN);
geçersiz kurulum() {
Seri.begin(9600);
SPI.begin();
rfid.PCD_Init();
}
geçersiz döngü () {
if (!rfid.PICC_IsNewCardPresent())
geri dönmek;
if (!rfid.PICC_ReadCardSerial())
geri dönmek;
rfid.uid.uidByte[0];
rfid.uid.uidByte[1];
rfid.uid.uidByte[2];
rfid.uid.uidByte[3];
printid();
rfid.PICC_HaltA();
// Kimliğiniz okunuyor.
}
geçersiz baskı kimliği () {
Serial.print("Kimliğiniz: ");
for (int x = 0; x < 4; x++) {
Seri.print(rfid.uid.uidByte[x], HEX);
Seri.print(" ");
}
Seri.println("");
}
Proje Kodu:
#include
#include
#include
#include
//Kütüphaneleri tanımlıyoruz.
#define RST_PIN 26
#define SS_PIN 17
#define servoPin 22
#PIN 6'yı tanımla
#NUMPIXELS 1'i tanımla
#zil sesini tanımla 20
//servo, buzzer, neopixel ve rfid pinlerini tanımlıyoruz.
Adafruit_NeoPixel pikselleri(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
Servo motor;
MFRC522 rfid(SS_PIN, RST_PIN);
byte ID[4] = {"Kendi kimliğinizi yazın."}; // Gerçek kimliğinizle değiştirin
geçersiz kurulum() {
piksel.begin();
motor.attach(servoPin);
Seri.begin(9600);
SPI.begin();
rfid.PCD_Init();
pinMode(sesli uyarı, ÇIKIŞ);
}
geçersiz döngü () {
piksel.clear();
if ( !rfid.PICC_IsNewCardPresent())
geri dönmek;
if ( !rfid.PICC_ReadCardSerial())
geri dönmek;
if (rfid.uid.uidByte[0] == ID[0] &&
rfid.uid.uidByte[1] == Kimlik[1] &&
rfid.uid.uidByte[2] == Kimlik[2] &&
rfid.uid.uidByte[3] == Kimlik[3]) {
Serial.println("Kapı Açıldı.");
printid();
ton(zil,523);
gecikme(200);
noTone(zil);
gecikme(100);
ton(zil,523);
gecikme(200);
noTone(zil);
piksel.setPixelColor(0, piksel.Color(0, 250, 0));
gecikme(200);
piksel.show();
piksel.setPixelColor(0, piksel.Color(0, 0, 0));
gecikme(200);
piksel.show();
motor.write(180);
gecikme(2000);
motor.write(0);
gecikme(1000);
//Sensöre doğru kart okunduğunda RGB LED yeşile döner ve servo motor sayesinde kapı açılır.
} başka {
Serial.println("Bilinmeyen Kart.");
printid();
ton(zil sesi,494);
gecikme(200);
noTone(zil);
gecikme(100);
ton(zil sesi,494);
gecikme(200);
noTone(zil);
piksel.setPixelColor(0, piksel.Color(250, 0, 0));
gecikme(100);
piksel.show();
piksel.setPixelColor(0, piksel.Color(0, 0, 0));
gecikme(100);
piksel.show();
//Sensöre yanlış kart okunduğunda RGB LED kırmızıya döner ve kapı açılmaz.
}
rfid.PICC_HaltA();
}
geçersiz baskı kimliği () {
Seri.print("Kimlik Numarası: ");
for (int x = 0; x < 4; x++) {
Seri.print(rfid.uid.uidByte[x], HEX);
Seri.print(" ");
}
Seri.println("");
}