DEV Community

張旭豐
張旭豐

Posted on

5 RFID RC522 Projects That Add Contactless Access Control

5 RFID RC522 Projects That Add Contactless Access Control

Build secure entry systems: smart door lock, library scanner, pet feeder, attendance logger, and gym locker

Hero

Project 1: Smart Door Lock

Goal: Unlock door with authorized RFID card

Smart Door Lock

Hardware

RC522, Arduino Nano, SG90 servo, Red/Green LEDs

Code

void loop() {
  if (rfid.PICC_ReadCardSerial()) {
    String uid = getUID();
    if (isAuthorized(uid)) {
      servo.write(UNLOCK_ANGLE);
      digitalWrite(GREEN, HIGH);
      delay(5000);
      servo.write(LOCK_ANGLE);
      digitalWrite(GREEN, LOW);
    } else {
      digitalWrite(RED, HIGH);
      delay(1000);
      digitalWrite(RED, LOW);
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Project 2: Library Book Scanner

Goal: Scan books and check them in/out

Library Book Scanner

Hardware

RC522, Arduino Mega, 16×2 LCD, Computer via USB

Code

void loop() {
  if (rfid.PICC_ReadCardSerial()) {
    String bookID = getUID();
    lcd.clear();
    lcd.print("Scanning...");
    Serial.println("BOOK:" + bookID);
    delay(1000);
  }
}
Enter fullscreen mode Exit fullscreen mode

Project 3: Pet Feeder Access

Goal: Only dispense food for pet with authorized chip

Pet Feeder Access

Hardware

RC522, Arduino Nano, SG90 servo, LCD

Code

void loop() {
  if (detectTag()) {
    if (isCat(tag)) {
      dispenseFood();
      lcd.print("Enjoy meal!");
    } else {
      lcd.print("Not for you!");
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Project 4: Class Attendance Logger

Goal: Log student attendance with timestamp

Class Attendance Logger

Hardware

RC522, Arduino Mega, SD card module, RTC

Code

void loop() {
  if (rfid.PICC_ReadCardSerial()) {
    String id = getUID();
    DateTime now = rtc.now();
    logAttendance(id, now);
    lcd.print("Logged!");
  }
}
Enter fullscreen mode Exit fullscreen mode

Project 5: Gym Locker Lock

Goal: Open locker with membership card

Gym Locker Lock

Hardware

RC522, Arduino Nano, Servo, Red/Green LEDs

Code

void loop() {
  if (detectCard()) {
    if (isMember(getUID())) {
      digitalWrite(GREEN, HIGH);
      servo.write(UNLOCK);
      delay(3000);
      servo.write(LOCK);
      digitalWrite(GREEN, LOW);
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

How It Works

// WF1 Run #047 - Basic RFID Read
#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN  10
#define RST_PIN  9

MFRC522 rfid(SS_PIN, RST_PIN);

void setup() {
  Serial.begin(115200);
  SPI.begin();
  rfid.PCD_Init();
}

void loop() {
  if (!rfid.PICC_IsNewCardPresent()) return;
  if (!rfid.PICC_ReadCardSerial()) return;
  Serial.print("UID:");
  for (byte i = 0; i < rfid.uid.size; i++) {
    Serial.print(rfid.uid.uidByte[i], HEX);
  }
  rfid.PICC_HaltA();
}
Enter fullscreen mode Exit fullscreen mode

Troubleshooting

Problem Cause Fix
RFID reads intermittently Antenna interference Keep RC522 away from metal surfaces and other inductive loads
UID changes each read PICC not properly halted Always call rfid.PICC_HaltA() after reading
Authorization check fails UID string comparison error Normalize UID to uppercase without colons

Start Here

Affiliate disclosure: As an Amazon Associate, I earn from qualifying purchases.

RC522 RFID Module
RFID Cards 13.56MHz
Arduino Nano
SG90 Servo Motor

Next Step: From Scene to Sensor, Without Writing Code

I offer a personalized interactive device design guide at Fiverr:

👉 https://www.fiverr.com/phd_hfchang/generate-an-arduino-interactive-prototypef

Tags: Arduino RFID RC522 Access Control Security

Top comments (0)