Introduction: Scure Lock With RFID Tag and PIN
You checked in a hotel and given a RFID tag to access your room. If you lost your card and someone else had the lost card can access to your room. Wouldn't it be more secure if another piece of information like PIN is required to open the door?
I have made a simple system using Arduino, RFID reader, display panel and keypad just to demonstrate that. Here I use a LED as a metaphor of a door lock.
Step 1: The Components
Follow are the list of hardware and software component required to build this project:
Arduino UNO & Genuino UNO
RFID-RC522
LCD-LCM1602 IIC
Generic Keypad
Jumper wires (generic)
Male/Female Jumper Wires
Arduino IDE
Some RFID/NFC cards
Step 2: Connect the LCD Display
Connect to LCD-LCM1602 IIC according to the following:
LCD GND pin to GND
LCD VCC pin to 5V
LCD SDA pin to analog 4
LCD SCL pin to analog 5
Please note that I am not able to find a 4-pin LCD-LCM1602 IIC item in fritzing, you need to match the above connection accordingly.
Step 3: Connect the LED
Connect the LED to pin 7.
Step 4: Connect the Keypad
Connect keypad according to the following configuration:
Keypad pin 1 to digital pin 5
Keypad pin 1 to digital pin 4
Keypad pin 1 to digital pin 3
Keypad pin 1 to digital pin 2
Keypad pin 1 to digital pin 14
Keypad pin 1 to digital pin 15
Keypad pin 1 to digital pin 16
Keypad pin 1 to digital pin 17
Please note that digital pins 14, 15, 16,and 17 are extended by analog pins A0, A1, A2, and A3.
Step 5: Connect the RFID Card Reader
I am using the RFID-RC522 card reader. Connect the card reader to match the following configuration:
RFID pin Reset to pin 9
RFID pin SS/SDA to pin 10
RFID pin MOSI to pin 11
RFID pin MISO to pin 12
RFID pin SCK to pin 13
RFID pin GND to pin GND
RFID pin 3.3V to pin 3.3V
Step 6: The Schema
This is the final schema.
Step 7: The Codes
Setup the cards, user names and passwords.
// init paralle arrays
byte knownCards[NR_KNOWN_CARDS][CARD_SIZE] = {
{0x93, 0x47, 0xe0, 0x00},
{0xe5, 0xa2, 0x9c, 0x2c}
};
char name[NR_KNOWN_CARDS][10] = {
"James",
"Richard"
};
char password[NR_KNOWN_CARDS][5] = {
"1234",
"8888"
};
Setup the keypad.
// define for keypad
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 4;
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {5, 4, 3, 2};
byte colPins[COLS] = {14, 15, 16, 17};
Setup the LCD display.
// define for lcd
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
The main event loop.
void loop() {
init_lcd();
scan_new_card();
key_in_password();
}
Attachments
Step 8: Demo: a Welcome Prompt
A welcome greeting!