Arduino Projeleri
#24Gelişmiş

RFID Kartlı Erişim Sistemi

~1,5 saatSPI haberleşme kavramı

Proje Amacı

RC522 RFID okuyucu ile yetkili kartları tanıyıp servo motorla kilidi açar, yetkisiz kartlarda buzzer ile uyarır — RC522'nin 3.3V-only oluşu bu projedeki en sık yapılan bağlantı hatasının kaynağıdır (bkz. Çalışma Açıklaması).

Gerekli Malzemeler

  • Arduino Uno
  • RC522 RFID Okuyucu Modülü
  • RFID Kart/Anahtarlık
  • SG90 Servo
  • Pasif Buzzer
  • Breadboard

Gerekli Kütüphaneler

MFRC522 (GithubCommunity / miguelbalboa sürümü) — Kütüphane Yöneticisi'nden kurulmalı. SPI.h ve Servo yerleşiktir.

Pin Bağlantıları

Bileşen PiniBağlantı
RC522 SDA
D10
RC522 SCK
D13
RC522 MOSI
D11
RC522 MISO
D12
RC522 RST
D9
RC522 GND
GND
RC522 3.3V
3.3V
Servo Sinyal
D6
Buzzer +
D5

Devre Şeması

Arduino Kodu

arduino-24-rfid-kartli-erisim-sistemi.ino
1#include <SPI.h>
2#include <MFRC522.h>
3#include <Servo.h>
4#define SS_PIN 10
5#define RST_PIN 9
6MFRC522 rfid(SS_PIN, RST_PIN);
7Servo kilit;
8const int buzzer=5;
9String yetkiliKart = "A1B2C3D4";
10
11void setup(){
12 Serial.begin(9600);
13 SPI.begin();
14 rfid.PCD_Init();
15 kilit.attach(6);
16 pinMode(buzzer, OUTPUT);
17 kilit.write(0);
18}
19
20void loop(){
21 if(!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;
22
23 String kartUID = "";
24 for(byte i=0;i<rfid.uid.size;i++) kartUID += String(rfid.uid.uidByte[i], HEX);
25
26 if(kartUID == yetkiliKart){
27 Serial.println("Erişim onaylandı");
28 kilit.write(90);
29 delay(3000);
30 kilit.write(0);
31 } else {
32 Serial.println("Erişim reddedildi");
33 tone(buzzer, 1000, 500);
34 }
35 rfid.PICC_HaltA();
36}

Çalışma Açıklaması

RC522 3.3V ile çalışır, 5V bağlanırsa modül zarar görebilir; sadece VCC pinini 3.3V'a bağlayın. UID formatı kütüphaneye göre değişebilir, ilk testte Seri Monitör çıktısını mutlaka kontrol edin.

Test Bilgisi

MFRC522 kütüphanesini kurun. Devreyi kurun, kodu yükleyin, Seri Monitör'ü açın. Bilinmeyen bir kart okutup gerçek UID'sini Seri Monitör'den öğrenin, kodda 'yetkiliKart' değişkenini bu UID ile güncelleyin, tekrar test edin.

Olası Sorunlar ve Çözümleri

Kart okunmuyorsa: RC522'nin 3.3V ile beslendiğinden (5V DEĞİL) emin olun, bu en sık yapılan hatadır. Aynı kart bazen tanınıp bazen 'yetkisiz' çıkıyorsa (kod çalışıyor gibi göründüğü halde): String(byte, HEX) dönüşümü 0x0F gibi tek haneli değerleri baştaki sıfırı ATARAK yazdırır ('0F' değil 'F') — kartın gerçek UID'sinde böyle bir bayt varsa kartUID değişkeni beklediğinizden bir karakter kısa çıkar ve karşılaştırma sessizce başarısız olur; sabit karşılaştırma yerine byte dizisini doğrudan karşılaştırmak bu sınıf hatayı tamamen ortadan kaldırır. SPI hattı çakışması yaşıyorsanız: aynı anda başka bir SPI cihazı (SD kart gibi) kullanmadığınızdan emin olun, CS pinleri farklı olmalı.

Alternatif Çözümler

Tek yetkili kart yerine bir dizi/liste ile birden fazla yetkili kart tanımlanabilir. Erişim logları (kim, ne zaman) SD karta kaydedilerek bir giriş-çıkış takip sistemi kurulabilir. RFID yerine parmak izi (proje #19) veya PIN kodlu tuş takımı ile çoklu doğrulama (2FA benzeri) sistemi kurulabilir.

Bu projenin kodunu AI ile özelleştir

Farklı pin, ek özellik ya da başka bir sensör mü istiyorsun?