Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

Arduino-Controlled RFID Solenoid Door Lock with Indicator LEDs and Buzzer

View and Edit Project In Cirkit DesignerImage of Arduino-Controlled RFID Solenoid Door Lock with Indicator LEDs and Buzzer

Circuit Documentation

Summary

This circuit is designed to control access using an RFID system that activates a 12V solenoid lock. The system uses an Arduino UNO as the central microcontroller to read RFID tags through an RFID-RC522 module. Depending on the tag's authorization, the system will either activate the solenoid lock (granting access) or deny access with visual and auditory indicators. The visual indicators are a green LED (access granted) and a red LED (access denied), while the auditory indicator is a piezo buzzer.

Component List

Wiring Details

RFID-RC522

Piezo Buzzer

LED: Two Pin (red)

LED: Two Pin (green)

5V Relay

12V Solenoid Lock

Battery 12V

Documented Code

//Viral Science www.youtube.com/c/viralscience
//RFID Solenoid Lock

#include <SPI.h>
#include <MFRC522.h>
 
#define SS_PIN 10
#define RST_PIN 9
#define LED_G 5 //define green LED pin
#define LED_R 4 //define red LED
#define RELAY 3 //relay pin
#define BUZZER 2 //buzzer pin
#define ACCESS_DELAY 2000
#define DENIED_DELAY 1000
MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.
 
void setup() 
{
  Serial.begin(9600);   // Initiate a serial communication
  SPI.begin();          // Initiate  SPI bus
  mfrc522.PCD_Init();   // Initiate MFRC522
  pinMode(LED_G, OUTPUT);
  pinMode(LED_R, OUTPUT);
  pinMode(RELAY, OUTPUT);
  pinMode(BUZZER, OUTPUT);
  noTone(BUZZER);
  digitalWrite(RELAY, LOW);
  Serial.println("Put your card to the reader...");
  Serial.println();

}
void loop() 
{
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return;
  }
  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  //Show UID on serial monitor
  Serial.print("UID tag :");
  String content= "";
  byte letter;
  for (byte i = 0; i < mfrc522.uid.size; i++) 
  {
     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte[i], HEX);
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  Serial.println();
  Serial.print("Message : ");
  content.toUpperCase();
  if (content.substring(1) == "83 23 38 BB") //change here the UID of the card/cards that you want to give access
  {
    Serial.println("Authorized access");
    Serial.println();
    delay(500);
    digitalWrite(RELAY, HIGH);
    digitalWrite(LED_G, HIGH);
    delay(ACCESS_DELAY);
    digitalWrite(RELAY, LOW);
    digitalWrite(LED_G, LOW);
  }
 
 else   {
    Serial.println(" Access denied");
    digitalWrite(LED_R, HIGH);
    tone(BUZZER, 300);
    delay(DENIED_DELAY);
    digitalWrite(LED_R, LOW);
    noTone(BUZZER);
  }
}

This code is designed for an Arduino UNO and includes the necessary libraries and definitions for interfacing with the RFID-RC522 module and controlling the LEDs, buzzer, and relay. The setup() function initializes the serial communication, SPI bus, and sets the pin modes. The loop() function continuously checks for new RFID cards and compares their UID to a predefined authorized UID. If the UID matches, it grants access by activating the relay and green LED. If the UID does not match, it denies access and activates the red LED and buzzer.