This Arduino based project focuses on creating a door security system using RFID RC522. Firstly, we will interface RC522 RFID module with Arduino and then use it to design a door security system.
A door Security System is used to stop unauthorized people to get access to a room or a building. Such system is very useful if you have important data, information, and research stored in a computer or in a bundle of files. This system is very useful in the Military, Research Centers, Banks, Server rooms, Jails, Government offices, and Nuclear Plants. It prevents large destruction and loss.
RFID Door Security System OverviewWe will require the following components for this project.
Required Components:
In this RFID door security system, Arduino Uno is used as the brain of our circuit.
You can view the operations constituting the system in the block diagram below:
Connection Diagram of RFID Door Security SystemThis section will explain the connections of the various components specified above with Arduino Uno to form the door security system.
Let us discuss them one by one.
Arduino with RC522RC522 is a Multi-communication RFID Module for Arduino and Microcontrollers. The RC522 is known as MFRC-522 due to its NFX semiconductor microcontroller. The module allows the developers to interface it with any other SPI, I2C, and UART based microcontrollers. It comes with an RFID card tag and key fob consisting of 1KB of memory.
RFID RC522 Reader ModuleThe RC522 module works on 13.56 MHz frequency and it can act as a reader and write for UID/RFID cards. The RFID cards communicate with the module at a short distance with radio frequency due to the mutual induction technique. In most of the security and commercial products, the module is effective because the errors and issues with RFID Tags are detectable by it.
In this module, there are only two kinds of pins. So, the first one is power and the second one is the communication pins. Therefore, the device may have its microcontroller chip on itself but it only makes it to works as an RFID. The onboard microcontroller won’t make the module a stand-alone device.
RC522 PinoutAll the pins of MFRC/RC522 RFID card Reader are:
RC522 RFID Reader Module PinoutThe table below shows the eight pins found on the RC522 RFID module. You can also view their descriptions.
Pin Description VCC The power pins are VCC. In some versions of RC522, this pin is denoted by 3V3 on the module instead of VCC. RST This is the reset pin for the module. Therefore, it resets the device in case of an error when a device isn’t giving any response. GND Ground helps to make the common ground with every external device, e.g. power Supply or microcontroller. IRQ The device can go into sleep mode to save power. So, the IRQ helps to wake it. MISO This pin connects with the microcontroller for SPI communication. However, it transfers the data from module to the microcontroller.For more information follow the link below:
The table below shows the connections between the devices that we will use in our project.
Connections of RC522 Module with Arduino RC522 RFID Reader Module Arduino VCC 3.3V RST Pin 9 GND GND IRQ Not connected MISO Pin 12 MOSI Pin 11 SCK Pin 13 SDA Pin 10 Arduino with 16×2 LCDWe will use a 16×2 LCD in our project to display different messages. To connect a 16×2 LCD with Arduino we will require an additional 10k potentiometer as well.
We have a dedicated tutorial regarding interfacing 16×2 LCD display with Arduino with some example sketches. Have a look at it before proceeding further for a better understanding of the LCD.
Recommended Reading: 16×2 LCD Interfacing with Arduino – Explained with Example Codes
There are two types of pins on the whole 16×2 LCD module. Some pins are used to send to 16×2 LCD and some are command pins. In other words, every pin has a role in controlling a single pixel on the display.16 x 2 LCD has sixteen columns and two rows. That means, it can display sixteen characters per row and it has two such rows.
PinoutThe diagram shows the pin configuration of a 16×2 LCD display. It has sixteen pins.
Pinout 16×2 LCDWe are using the following connections as described below. Refer to the schematic diagram to have a clearer idea of the connections.
16×2 LCD Arduino D4 – D7 Pin 5,4,3,2 Enable Pin 6 RS Pin 7 RW GND VEE 10k POT (Middle Leg) VSS GND VCC +5V LED+ +5V LED- GNDWe have an Arduino library for easy communication between LCDs called the LiquidCrystal library. It is an inbuilt library by Arduino Adafruit version.
You may also like to read:
Arduino with Servo MotorSG90 is a low-cost and high output power servo motor. It can rotate up to 180 degrees and each step can be of maximum of 90 degrees. Moreover, it is small enough that it can easily fit into your robotics ARM or obstacle avoidance robotics projects. On top of that, it requires only one output pulse signal to control its movement.
The following figure shows the pinout diagram of SG90 servo motor. It consists of three pins only such as PWM, ground and Vcc pin. Brown, orange and red wires are GND, Vcc and PWM pins respectively. Details and functionality of each pin is listed in the next section.
Pin Configuration DetailsVcc and ground, as their name suggests, are the power supply pins which are used to a power servo motor. Only 5 volts of power signal is required to power this motor. Mostly microcontrollers or development boards have onboard 5 volts supply which we can use to power SG90 servos.
This table briefly describes all three pins:
Wire of motor Possible colors of each wire VCC pin Red GND pin Black, or brown Control Signal / PWM pin Yellow, orange, or whiteConnections of Servo motor with Arduino are as follows:
Servo Motor Arduino VCC pin 5V GND pin GND Control Signal Pin 8 Door Security System Using RFID RC522When the user brings the token near the module it detects the token and reads its value. If the value is same as defined in the code then Access Granted message is shown on LCD and it opens the door for the user. After some delay which is also defined in the code the door automatically closes. This process occurs every time the user wants to access it. There can be multiple users but each user has it unique token.
Arduino CodeOpen your Arduino IDE and go to File > New to open a new file. Copy the code given below in that file and save it.
#include <deprecated.h>
#include <MFRC522.h>
#include <MFRC522Debug.h>
#include <MFRC522Extended.h>
#include <MFRC522Hack.h>
#include <require_cpp11.h>
#include<RFID.h>
#include <SPI.h>
#include <Servo.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
Servo myservo; // create servo object to control a servo
#define val0 117 // chnage the value according to token no
#define val1 134
int pos = 0;
/* Define the DIO used for the SDA (SS) and RST (reset) pins. */
#define SDA_DIO 10
#define RESET_DIO 9
RFID RC522(SDA_DIO, RESET_DIO);
void setup()
{
myservo.attach(8);
Serial.begin(9600);
/* Enable the SPI interface */
SPI.begin();
/* Initialise the RFID reader */
RC522.init();
lcd.begin(16, 2);
}
void loop()
{
byte i = 0;
int ID;
if (RC522.isCard())
{
RC522.readCardSerial();
Serial.println(RC522.serNum[i], DEC);
Serial.println("Card detected:");
ID = RC522.serNum[0];
}
delay(500);
if ( val0 == ID)
{ lcd.clear();
lcd.print("Access Granted");
lcd.setCursor(0, 1);
lcd.print("Welcome Haris");
delay(1800);
lcd.clear();
lcd.print("Door Opening");
delay(1500);
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
delay(5000);
lcd.clear();
lcd.print("Door Closing");
delay(1500);
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
else
{
lcd.clear();
lcd.print("Door Security ");
lcd.setCursor(0, 1);
lcd.print("System ");
}
if ( val1 == ID)
{ lcd.clear();
lcd.print("Access Granted");
lcd.setCursor(0, 1);
lcd.print("Welcome Bilal");
delay(1800);
lcd.clear();
lcd.print("Door Opening");
delay(1500);
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
delay(5000);
lcd.clear();
lcd.print("Door Closing");
delay(1500);
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
else
{
lcd.clear();
lcd.print("Door Security ");
lcd.setCursor(0, 1);
lcd.print("System ");
}
}
How the Code Works?
First include all the necessary libraries required for this project. These include libraries for the RC522 module, servo motor and the LCD.
#include <deprecated.h>
#include <MFRC522.h>
#include <MFRC522Debug.h>
#include <MFRC522Extended.h>
#include <MFRC522Hack.h>
#include <require_cpp11.h>
#include<RFID.h>
#include <SPI.h>
#include <Servo.h>
#include <LiquidCrystal.h>
Next, we declare the Arduino pins that are connected with the LCD. To define connections, we use the following line of code. This line creates a LiquidCrystal object and lcd is a name of the object that we are going to use to call LCD functions. You can also use any other name.
LiquidCrystal lcd(rs, en, d4, d5, d6, d7)
In our case, the pins are 7, 6, 5, 4, 3, and 2 respectively.
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
Then we will create an object of the Servo library called ‘myservo.’ You can use any other name as you like.
Servo myservo;
Specify the token numbers:
#define val0 117 // change the value according to token no
#define val1 134
Define the Arduino pins connected with SDA and RST of the RC522 module. Then create an instance of the RFID library.
#define SDA_DIO 10
#define RESET_DIO 9
RFID RC522(SDA_DIO, RESET_DIO);
setup()
Inside the setup() function, we will first open the serial communication at a baud rate of 9600.
Serial.begin(9600);
Then attach the Arduino pin connected with the signal pin of the servo with the servo object.
myservo.attach(8);
Also, enable the SPI interface using SPI.begin().
SPI.begin();
Also, initialize the RC522 module using the init() method on the RFID instance.
RC522.init();
Next, we use lcd.begin() routine to define the size of an LCD. The first argument to this function is a number of rows and the second argument is a number of columns. For instance, this line declares the size as 16 columns and 2 rows. That means 16×2 size.
lcd.begin(16, 2);
loop()
Inside the loop() function, we first check if an RFID card is detected. If it is then save its serial number in the variable ‘ID.’
byte i = 0;
int ID;
if (RC522.isCard())
{
RC522.readCardSerial();
Serial.println(RC522.serNum[i], DEC);
Serial.println("Card detected:");
ID = RC522.serNum[0];
}
Then we will check if this ID matches the token numbers we already specified in the code previously. We specified tokens for two different cards hence two cards/users will be granted access. The LCD will display “Access Granted”, a welcome message and the door opening message.
We will move the servo motor’s arm clockwise to show door opening and anti-clockwise to show door closing. This is done using the write() method on the servo object. We are passing the ‘pos’ variable as a parameter inside this function. This will position the servo arm according to the values held in the ‘pos’ variable that will first vary from 0-180 degrees and then 180 to 0 degrees by using a for loop. When the servo arm moves anticlockwise, the LCD will display “Door Closing”
if ( val0 == ID)
{ lcd.clear();
lcd.print("Access Granted");
lcd.setCursor(0, 1);
lcd.print("Welcome Haris");
delay(1800);
lcd.clear();
lcd.print("Door Opening");
delay(1500);
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
delay(5000);
lcd.clear();
lcd.print("Door Closing");
delay(1500);
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
else
{
lcd.clear();
lcd.print("Door Security ");
lcd.setCursor(0, 1);
lcd.print("System ");
}
if ( val1 == ID)
{ lcd.clear();
lcd.print("Access Granted");
lcd.setCursor(0, 1);
lcd.print("Welcome Bilal");
delay(1800);
lcd.clear();
lcd.print("Door Opening");
delay(1500);
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
delay(5000);
lcd.clear();
lcd.print("Door Closing");
delay(1500);
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
else
{
lcd.clear();
lcd.print("Door Security ");
lcd.setCursor(0, 1);
lcd.print("System ");
}
}
Demonstration
Make sure you choose the correct board and COM port before uploading your code to the board. Go to Tools > Board and select Arduino UNO. Next, go to Tools > Port and select the appropriate port through which your board is connected.
Click on the upload button to upload the code to the board.
Bring the RFID tag or card close to the RC522 module. If access is granted, the LCD will display relevant messages and the servo motor will start moving to indicate that the door is opening. After few seconds, the servo motor goes back to its initial position indicating the door is closing.
Watch the video demonstration below for better insight:
You may also like to read:
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4