Arduino RFID RC522 ile servo motor kontrol projesi, RFID kartları veya etiketleri kullanarak servo motoru otomatik olarak hareket ettiren akıllı güvenlik sistemidir. Bu proje ile kartlı kapı kilidi, otomatik geçiş sistemi veya güvenlik kontrol mekanizması yapabilirsiniz. Yetkili kart algılandığında servo motor harekete geçer ve LED’ler durumu görsel olarak bildirir.
RFID RC522, 13.56MHz frekansında çalışan temassız kart okuyucu modülüdür. NFC (Near Field Communication) teknolojisini kullanarak RFID kartlarını 0-3cm mesafeden okuyabilir. Mifare Classic, Mifare Ultralight ve NTAG serisli kartlarla uyumludur.
👉 Arduino RFID RC522 Servo Motor Kontrol Projesi – Video Rehber
Video içeriği: RC522 SPI bağlantıları, RFID kart programlama, servo motor kalibrasyonu, güvenlik algoritması geliştirme ve pratik kapı kilidi uygulaması
RC522 modülü mutlaka 3.3V ile beslenmelidir. 5V bağlantı modülü kalıcı olarak bozabilir!
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
[Üye Girişi Yaparak Tüm Kodlara Erişin]
Premium paket: Çoklu kart yönetimi, master kart sistemi, erişim zamanı kontrolü, log kayıtları, LCD arayüzü, WiFi uzaktan yönetim
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
// RFID RC522 pin tanımlamaları
#define RST_PIN 9
#define SS_PIN 10
// LED pin tanımlamaları
#define GREEN_LED 7
#define RED_LED 8
// Servo motor pin
#define SERVO_PIN 6
// RFID ve Servo nesneleri
MFRC522 rfid(SS_PIN, RST_PIN);
Servo doorServo;
// Yetkili kartların UID'leri (örnek değerler)
byte authorizedCards[][4] = {
{0xDE, 0xAD, 0xBE, 0xEF}, // Kart 1
{0xCA, 0xFE, 0xBA, 0xBE}, // Kart 2
{0x12, 0x34, 0x56, 0x78}, // Kart 3
{0xAA, 0xBB, 0xCC, 0xDD} // Kart 4
};
const int authorizedCardCount = 4;
// Sistem durumu değişkenleri
bool doorOpen = false;
unsigned long lastCardTime = 0;
unsigned long doorTimeout = 5000; // 5 saniye açık kalma süresi
int attemptCount = 0;
unsigned long blockTime = 0;
const int maxAttempts = 3;
const unsigned long blockDuration = 10000; // 10 saniye blok süresi
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
// Servo motor başlatma
doorServo.attach(SERVO_PIN);
doorServo.write(0); // Kapalı pozisyon
// LED pinleri
pinMode(GREEN_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
// Başlangıç LED testi
ledTest();
Serial.println("RFID Kapı Kontrol Sistemi Başlatıldı");
Serial.println("Yetkili kart sayısı: " + String(authorizedCardCount));
Serial.println("Kartınızı okutun...");
// Başlangıç durumu
setAccessDenied();
}
void loop() {
// Sistem bloklu mu kontrol et
if (isSystemBlocked()) {
if (millis() - blockTime > blockDuration) {
attemptCount = 0;
Serial.println("Sistem bloku kaldırıldı");
} else {
blinkRedLED();
delay(500);
return;
}
}
// Kapı otomatik kapanma kontrolü
if (doorOpen && millis() - lastCardTime > doorTimeout) {
closeDoor();
}
// RFID kart algılama
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
processRFIDCard();
}
delay(100);
}
void processRFIDCard() {
// Okunan kartın UID'sini al
byte cardUID[4];
for (int i = 0; i < 4; i++) {
cardUID[i] = rfid.uid.uidByte[i];
}
// UID'yi seri porta yazdır
Serial.print("Okunan kart UID: ");
printUID(cardUID);
// Yetki kontrolü
if (isAuthorizedCard(cardUID)) {
accessGranted();
attemptCount = 0; // Başarılı girişte sayacı sıfırla
} else {
accessDenied();
attemptCount++;
if (attemptCount >= maxAttempts) {
blockSystem();
}
}
// Kartı durdur
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
bool isAuthorizedCard(byte* cardUID) {
for (int i = 0; i < authorizedCardCount; i++) {
bool match = true;
for (int j = 0; j < 4; j++) {
if (cardUID[j] != authorizedCards[i][j]) {
match = false;
break;
}
}
if (match) {
Serial.println("Yetkili kart! (Kart " + String(i + 1) + ")");
return true;
}
}
Serial.println("Yetkisiz kart!");
return false;
}
void accessGranted() {
Serial.println("ERİŞİM İZİN VERİLDİ");
// Yeşil LED yak
setAccessGranted();
// Kapıyı aç
openDoor();
// Başarı sesi (opsiyonel buzzer için)
// successBeep();
lastCardTime = millis();
}
void accessDenied() {
Serial.println("ERİŞİM REDDEDİLDİ");
// Kırmızı LED animasyonu
for (int i = 0; i < 3; i++) {
digitalWrite(RED_LED, HIGH);
delay(200);
digitalWrite(RED_LED, LOW);
delay(200);
}
setAccessDenied();
// Hata sesi (opsiyonel buzzer için)
// errorBeep();
Serial.println("Kalan deneme hakkı: " + String(maxAttempts - attemptCount));
}
void openDoor() {
if (!doorOpen) {
Serial.println("Kapı açılıyor...");
doorServo.write(90); // 90 derece açık pozisyon
doorOpen = true;
// Açılma animasyonu
for (int i = 0; i < 5; i++) {
digitalWrite(GREEN_LED, HIGH);
delay(100);
digitalWrite(GREEN_LED, LOW);
delay(100);
}
digitalWrite(GREEN_LED, HIGH);
}
}
void closeDoor() {
if (doorOpen) {
Serial.println("Kapı kapanıyor...");
doorServo.write(0); // 0 derece kapalı pozisyon
doorOpen = false;
setAccessDenied();
}
}
void setAccessGranted() {
digitalWrite(GREEN_LED, HIGH);
digitalWrite(RED_LED, LOW);
}
void setAccessDenied() {
digitalWrite(GREEN_LED, LOW);
digitalWrite(RED_LED, HIGH);
}
void blockSystem() {
blockTime = millis();
Serial.println("SİSTEM BLOKE EDİLDİ - " + String(blockDuration/1000) + " saniye");
// Alarm animasyonu
for (int i = 0; i < 10; i++) {
digitalWrite(RED_LED, HIGH);
digitalWrite(GREEN_LED, HIGH);
delay(100);
digitalWrite(RED_LED, LOW);
digitalWrite(GREEN_LED, LOW);
delay(100);
}
}
bool isSystemBlocked() {
return (attemptCount >= maxAttempts && millis() - blockTime < blockDuration);
}
void blinkRedLED() {
static bool ledState = false;
ledState = !ledState;
digitalWrite(RED_LED, ledState);
digitalWrite(GREEN_LED, LOW);
}
void ledTest() {
Serial.println("LED test başlatılıyor...");
// Kırmızı LED test
digitalWrite(RED_LED, HIGH);
delay(500);
digitalWrite(RED_LED, LOW);
// Yeşil LED test
digitalWrite(GREEN_LED, HIGH);
delay(500);
digitalWrite(GREEN_LED, LOW);
// Her ikisi birden
digitalWrite(RED_LED, HIGH);
digitalWrite(GREEN_LED, HIGH);
delay(500);
digitalWrite(RED_LED, LOW);
digitalWrite(GREEN_LED, LOW);
Serial.println("LED test tamamlandı");
}
void printUID(byte* uid) {
for (int i = 0; i < 4; i++) {
if (uid[i] < 0x10) Serial.print("0");
Serial.print(uid[i], HEX);
if (i < 3) Serial.print(":");
}
Serial.println();
}
// Opsiyonel: Yeni kart ekleme fonksiyonu
void addNewCard() {
Serial.println("Yeni kart ekleme modu aktif");
Serial.println("Master kartı okutun...");
// Master kart kontrolü ve yeni kart ekleme
// Bu fonksiyon gelişmiş uygulamalar için
}
// Opsiyonel: Kart silme fonksiyonu
void removeCard() {
Serial.println("Kart silme modu aktif");
// Kart silme algoritması
}
// Opsiyonel: Erişim log kayıtları
void logAccess(byte* uid, bool granted) {
// SD kart veya EEPROM'a log kaydetme
Serial.print("LOG: ");
printUID(uid);
Serial.println(granted ? " - GRANTED" : " - DENIED");
}
void readCardUID() {
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
Serial.print("Kart UID: ");
for (int i = 0; i < rfid.uid.size; i++) {
if (rfid.uid.uidByte[i] < 0x10) Serial.print("0");
Serial.print(rfid.uid.uidByte[i], HEX);
if (i < rfid.uid.size - 1) Serial.print(":");
}
Serial.println();
}
}
void writeToCard() {
byte dataBlock[] = {0x01, 0x02, 0x03, 0x04};
byte blockAddr = 4;
MFRC522::StatusCode status = rfid.MIFARE_Write(blockAddr, dataBlock, 16);
if (status == MFRC522::STATUS_OK) {
Serial.println("Veri yazıldı");
} else {
Serial.println("Yazma hatası");
}
}
void calibrateServo() {
Serial.println("Servo kalibrasyon başlatılıyor...");
// Minimum pozisyon (0°)
doorServo.write(0);
delay(1000);
Serial.println("0° pozisyon - Kapı kapalı");
// Maksimum pozisyon (90°)
doorServo.write(90);
delay(1000);
Serial.println("90° pozisyon - Kapı açık");
// Başlangıç pozisyonu
doorServo.write(0);
delay(500);
Serial.println("Kalibrasyon tamamlandı");
}
bool validateCard(byte* uid) {
// Challenge-response authentication
byte challenge[16] = {0x01, 0x02, 0x03, /*...*/};
byte response[16];
// Karttan response al
if (authenticateCard(challenge, response)) {
return verifyResponse(challenge, response);
}
return false;
}
| Özellik | RFID | Şifreli Tuş | Biyometrik | Mobil App |
|---|---|---|---|---|
| Hız | Çok Hızlı | Yavaş | Orta | Hızlı |
| Güvenlik | Yüksek | Orta | Çok Yüksek | Yüksek |
| Maliyet | Düşük | Çok Düşük | Yüksek | Orta |
| Kullanım | Çok Kolay | Kolay | Orta | Kolay |
| Bakım | Az | Az | Fazla | Orta |
| Kopya Risk | Düşük | Yüksek | Çok Düşük | Düşük |
| Malzeme | Ortalama Fiyat (TL) |
|---|---|
| Arduino Uno R3 | 45-60 |
| RFID RC522 Modülü | 15-25 |
| RFID Kartları (5 adet) | 10-15 |
| SG90 Servo Motor | 12-20 |
| LED’ler ve Dirençler | 3-5 |
| Breadboard ve Kablolar | 10-15 |
| Plastik Kutu | 8-15 |
| Güç Kaynağı | 15-25 |
| Montaj Malzemeleri | 10-20 |
| Toplam | 128-200 TL |
Arduino RFID RC522 ile servo motor kontrol projesi, modern erişim kontrolü ve güvenlik sistemlerinin temellerini öğrenmek için mükemmel bir başlangıç projesidir. Bu proje ile RFID teknolojisi, servo motor kontrolü ve güvenlik algoritmaları konularında praktik deneyim kazanabilirsiniz. Ev güvenliğinden endüstriyel uygulamalara kadar geniş kullanım alanına sahiptir.
Anahtar Kelimeler: RFID servo motor kontrol, RC522 kart okuyucu, Arduino kapı kilidi, RFID güvenlik sistemi, servo motor RFID projesi, Arduino erişim kontrolü, RFID kart programlama, RC522 SPI bağlantısı, otomatik kapı sistemi, Arduino güvenlik projesi
Devre Şeması
Çalışma Videosu
NOT : Değiştirmeniz gereken yerleri video da bahsettik. Yapamazsanız lütfen videoyu izlemeyi unutmayınız.