RFID Kartlı Erişim Sistemi
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 Pini | Bağ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
| 1 | #include <SPI.h> |
| 2 | #include <MFRC522.h> |
| 3 | #include <Servo.h> |
| 4 | #define SS_PIN 10 |
| 5 | #define RST_PIN 9 |
| 6 | MFRC522 rfid(SS_PIN, RST_PIN); |
| 7 | Servo kilit; |
| 8 | const int buzzer=5; |
| 9 | String yetkiliKart = "A1B2C3D4"; |
| 10 | |
| 11 | void 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 | |
| 20 | void 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.
Benzer Projeler
Parmak İzi ile Kapı Kilidi
R307 parmak izi sensörüyle önceden kaydedilmiş bir parmak izini tanıyıp doğrulandığında servo ile kilidi açar; tanıma işlemi sensörün kendi üzerinde yapılır, Arduino sadece sonucu okuyup kilide iletir.
Engelden Kaçan Robot
Önündeki engelleri ultrasonik sensörle algılayıp geri çekilip yön değiştiren bir robot yapar — kod bilinçli olarak basit tutuldu, servo ile taramalı algılama bir sonraki geliştirme adımı olarak notlarda bırakıldı.
GPS Konum Takip Cihazı
NEO-6M GPS modülünden enlem/boylam okuyup Seri Monitör'de gösterir; modül NMEA formatında ham metin cümleleri gönderir, TinyGPS++ kütüphanesi bu cümleleri ayrıştırıp kullanılabilir sayılara çevirir.