RFID-Based Smart Servo Lock System using Arduino UNO R4 Wi-Fi
Smart RFID Lock using Arduino UNO R4 -keyless, portable and automatic servo lock for any space. Secure simple and smart!
Components and supplies
1
Arduino® UNO R4 WiFi
1
Jumper Wires (Generic)
1
RFID-RC522 13.56Mhz
1
MG90S Micro-servo motor
Apps and platforms
1
Arduino IDE
Project description
Code
Arduino Code
c
1// RFID-triggered servo: initial 150deg -> on scan move to 0deg, hold 5s, return to 150deg 2// Requires MFRC522 (Miguel Balboa) and Servo libraries 3// Servo signal on pin D6. RC522 wiring per comments below. 4 5#include <SPI.h> 6#include <MFRC522.h> 7#include <Servo.h> 8 9#define RST_PIN 9 // RC522 RST 10#define SS_PIN 10 // RC522 SDA/SS 11#define SERVO_PIN 6 // servo signal pin 12 13// Authorized UID bytes (your card) 14const byte AUTH_UID[4] = { 0x2A, 0x7E, 0x17, 0xB1 }; 15 16MFRC522 mfrc522(SS_PIN, RST_PIN); 17Servo myServo; 18 19const int initialPos = 150; // starting position (deg) 20const int triggeredPos = 0; // position to move to when RFID read (deg) 21const unsigned long holdTimeMs = 5000UL; // hold time at triggeredPos (ms) 22const int stepDelay = 8; // ms delay between degree steps for smooth movement 23 24void setup() { 25 Serial.begin(115200); 26 while (!Serial) { } // wait for Serial on some boards (harmless on others) 27 28 SPI.begin(); 29 mfrc522.PCD_Init(); 30 31 myServo.attach(SERVO_PIN); 32 myServo.write(initialPos); // place servo at initial position 33 Serial.println(); 34 Serial.println("RFID -> Servo ready."); 35 Serial.print("Initial angle: "); 36 Serial.print(initialPos); 37 Serial.println(" deg"); 38 Serial.println("Scan authorized card to trigger movement."); 39} 40 41void loop() { 42 // look for a new card 43 if (!mfrc522.PICC_IsNewCardPresent()) { 44 return; 45 } 46 if (!mfrc522.PICC_ReadCardSerial()) { 47 return; 48 } 49 50 // Print scanned UID 51 Serial.print("Scanned UID: "); 52 for (byte i = 0; i < mfrc522.uid.size; i++) { 53 if (mfrc522.uid.uidByte[i] < 0x10) Serial.print("0"); 54 Serial.print(mfrc522.uid.uidByte[i], HEX); 55 if (i < mfrc522.uid.size - 1) Serial.print(":"); 56 } 57 Serial.println(); 58 59 // Only react if UID size is 4 and matches AUTH_UID 60 if (mfrc522.uid.size == 4) { 61 bool match = true; 62 for (byte i = 0; i < 4; i++) { 63 if (mfrc522.uid.uidByte[i] != AUTH_UID[i]) { 64 match = false; 65 break; 66 } 67 } 68 69 if (match) { 70 Serial.println("Authorized card detected. Moving servo 150 -> 0, hold 5s, return to 150."); 71 moveServoSmooth(initialPos, triggeredPos, stepDelay); 72 delay(holdTimeMs); 73 moveServoSmooth(triggeredPos, initialPos, stepDelay); 74 Serial.println("Movement complete. Waiting for card removal before next trigger."); 75 76 // Halt card & stop crypto 77 mfrc522.PICC_HaltA(); 78 mfrc522.PCD_StopCrypto1(); 79 80 // Wait until the card is removed to avoid immediate retrigger 81 while (mfrc522.PICC_IsNewCardPresent() || mfrc522.PICC_ReadCardSerial()) { 82 delay(100); 83 // clear any repeated read 84 if (mfrc522.PICC_IsNewCardPresent()) { 85 mfrc522.PICC_HaltA(); 86 mfrc522.PCD_StopCrypto1(); 87 } 88 } 89 Serial.println("Card removed. Ready."); 90 } else { 91 Serial.println("UID NOT authorized. Ignored."); 92 } 93 } else { 94 Serial.println("UID length not 4 bytes — ignored."); 95 } 96 97 // final cleanup and small debounce 98 mfrc522.PICC_HaltA(); 99 mfrc522.PCD_StopCrypto1(); 100 delay(150); 101} 102 103// Smooth servo movement helper: moves degree-by-degree and prints each angle to Serial 104void moveServoSmooth(int fromDeg, int toDeg, int stepDelayMs) { 105 if (fromDeg == toDeg) { 106 myServo.write(fromDeg); 107 Serial.print("Angle: "); 108 Serial.print(fromDeg); 109 Serial.println(" deg"); 110 return; 111 } 112 113 int step = (toDeg > fromDeg) ? 1 : -1; 114 for (int deg = fromDeg; deg != toDeg; deg += step) { 115 myServo.write(deg); 116 Serial.print("Angle: "); 117 Serial.print(deg); 118 Serial.println(" deg"); 119 delay(stepDelayMs); 120 } 121 // final position 122 myServo.write(toDeg); 123 Serial.print("Angle: "); 124 Serial.print(toDeg); 125 Serial.println(" deg"); 126}
Comments
Only logged in users can leave comments