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
Project 1: Smart Door Lock
Goal: Unlock door with authorized RFID card
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);
}
}
}
Project 2: Library Book Scanner
Goal: Scan books and check them in/out
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);
}
}
Project 3: Pet Feeder Access
Goal: Only dispense food for pet with authorized chip
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!");
}
}
}
Project 4: Class Attendance Logger
Goal: Log student attendance with timestamp
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!");
}
}
Project 5: Gym Locker Lock
Goal: Open locker with membership card
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);
}
}
}
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();
}
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)