Project Hub
RFID Door Lock
🔐

RFID Door Lock

Unlock a servo lock with an RFID card.

advanced90 min

Components Needed

Arduino UNO
RC522 RFID module
RFID card/tag
SG90 servo
Green & Red LEDs

Circuit Diagram & Wiring

Add your circuit diagram image here.

  1. RC522 SDA→10, SCK→13, MOSI→11, MISO→12, RST→9, 3.3V & GND.
  2. Servo → pin 6.
  3. LEDs → pins 4 (green) & 5 (red).

Arduino Sketch (.ino)

rfid-lock.ino
<span style="color:#f97583">#includespan> &lt;SPI.h&gt;
<span style="color:#f97583">#includespan> &lt;MFRC522.h&gt;
<span style="color:#f97583">#includespan> &lt;Servo.h&gt;

MFRC522 rfid(<span style="color:#79b8ff">10span>, <span style="color:#79b8ff">9span>);
Servo lock;
String allowed = <span style="color:<span style="color:#f97583">#9ecbffspan>">&quot;A1B2C3D4&quot;span>; <span style="color:<span style="color:#f97583">#6a737dspan>;font-style:italic">// your card UID in hexspan>

void setup() {
  Serial.begin(<span style="color:#79b8ff">9600span>);
  SPI.begin();
  rfid.PCD_Init();
  lock.attach(<span style="color:#79b8ff">6span>); lock.write(<span style="color:#79b8ff">0span>);
  pinMode(<span style="color:#79b8ff">4span>, OUTPUT); pinMode(<span style="color:#79b8ff">5span>, OUTPUT);
}

void loop() {
  if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;
  String uid = <span style="color:<span style="color:#f97583">#9ecbffspan>">&quot;&quot;span>;
  for (byte i = <span style="color:#79b8ff">0span>; i &lt; rfid.uid.size; i++) {
    if (rfid.uid.uidByte[i] &lt; 0x10) uid += <span style="color:<span style="color:#f97583">#9ecbffspan>">&quot;<span style="color:#79b8ff">0span>&quot;span>;
    uid += String(rfid.uid.uidByte[i], HEX);
  }
  uid.toUpperCase();
  Serial.println(uid);
  if (uid == allowed) {
    digitalWrite(<span style="color:#79b8ff">4span>, HIGH);
    lock.write(<span style="color:#79b8ff">90span>); delay(<span style="color:#79b8ff">3000span>); lock.write(<span style="color:#79b8ff">0span>);
    digitalWrite(<span style="color:#79b8ff">4span>, LOW);
  } else {
    digitalWrite(<span style="color:#79b8ff">5span>, HIGH); delay(<span style="color:#79b8ff">1000span>); digitalWrite(<span style="color:#79b8ff">5span>, LOW);
  }
  rfid.PICC_HaltA();
}