Webotricks
Published

DIY RFID Door Lock | Arduino Nano, Relay, and Solenoid Lock

In this project, we will learn how to make a simple door lock system using RFID technology.

BeginnerProtip2 hours999
DIY RFID Door Lock | Arduino Nano, Relay, and Solenoid Lock

Things used in this project

Hardware components

Arduino Nano board
×1
16 X 2 LCD display
×1
I2C module
×1
5V Passive Buzzer
×1
5mm LED
×1
Breadboard
×1
Jumper Wires
×1
Relay module
×1

Story

Read more

Code

Code

C/C++
/*Door lock system with Arduino Nano
   Home Page
*/
 
#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal_I2C.h>
 
#define SS_PIN 10
#define RST_PIN 9
#define Buzzer 2
#define LED 3
#define Relay 4
 
String UID1 = "****************";//Enter your card ID
String UID2 = "****************";//Enter your card ID
 
byte lock = 0;
 
MFRC522 rfid(SS_PIN, RST_PIN);
LiquidCrystal_I2C lcd(0x27, 16, 2);
 
 
void setup() {
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
  lcd.init();
  lcd.backlight();
  pinMode(Buzzer, OUTPUT);
  pinMode(LED, OUTPUT);
  pinMode(Relay, OUTPUT);
  digitalWrite(Relay, HIGH);
}
 
void loop() {
  lcd.setCursor(4, 0);
  lcd.print("Welcome!");
  lcd.setCursor(1, 1);
  lcd.print("Put your card");
  
  if ( ! rfid.PICC_IsNewCardPresent())
    return;
  if ( ! rfid.PICC_ReadCardSerial())
    return;
 
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Scanning");
 
  //Serial.print("NUID tag is :");
  String ID = "";
  for (byte i = 0; i < rfid.uid.size; i++) {
    lcd.print(".");
    ID.concat(String(rfid.uid.uidByte[i] < 0x10 ? " 0" : " "));
    ID.concat(String(rfid.uid.uidByte[i], HEX));
    delay(300);
  }
  ID.toUpperCase();
 
  if (ID.substring(1) == UID1 || ID.substring(1) == UID2 && lock == 0 ) {
    digitalWrite(Relay, HIGH);
    digitalWrite(Buzzer, HIGH);
    digitalWrite(LED, HIGH);
    delay(300);
    digitalWrite(Buzzer, LOW);
    digitalWrite(LED, LOW);
    //delay(100);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Locked");
    delay(1500);
    lcd.clear();
    lock = 1;
  } else if (ID.substring(1) == UID1 || ID.substring(1) == UID2 && lock == 1 ) {
    digitalWrite(Buzzer, HIGH);
    digitalWrite(LED, HIGH);
    delay(300);
    digitalWrite(Buzzer, LOW);
    digitalWrite(LED, LOW);
    digitalWrite(Relay, LOW);
    //delay(100);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Unlocked");
    delay(1500);
    lcd.clear();
    lock = 0;
  } else {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Wrong card!");
    digitalWrite(Buzzer, HIGH);
    digitalWrite(LED, HIGH);
    delay(200);
    digitalWrite(Buzzer, LOW);
    digitalWrite(LED, LOW);
    delay(200);
    digitalWrite(Buzzer, HIGH);
    digitalWrite(LED, HIGH);
    delay(200);
    digitalWrite(Buzzer, LOW);
    digitalWrite(LED, LOW);
    delay(200);
    digitalWrite(Buzzer, HIGH);
    digitalWrite(LED, HIGH);
    delay(200);
    digitalWrite(Buzzer, LOW);
    digitalWrite(LED, LOW);
    delay(200);
    delay(1500);
    lcd.clear();
  }
}

Code

C/C++
/*RFID tag scan code
 * https://srituhobby.com
 */
 
#include <SPI.h>
#include <MFRC522.h>
 
#define RST_PIN 9
#define SS_PIN  10
 
MFRC522 mfrc522(SS_PIN, RST_PIN);
 
void setup() {
  Serial.begin(9600);
  while (!Serial);
  SPI.begin();
  mfrc522.PCD_Init();
  delay(4);
  mfrc522.PCD_DumpVersionToSerial();
  Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks..."));
}
 
void loop() {
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }
 
  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return;
  }
  mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}

Credits

Webotricks
28 projects • 9 followers
Contact

Comments

Please log in or sign up to comment.