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

Arduino UNO RFID Access Control with LCD Feedback

View and Edit Project In Cirkit DesignerImage of Arduino UNO RFID Access Control with LCD Feedback

Circuit Documentation

Summary

This circuit is designed around an Arduino UNO microcontroller and includes various peripherals such as an RFID-RC522 module for RFID reading, a 16x2 I2C LCD for display purposes, and two LEDs (red and green) for status indication. The circuit is powered by the Arduino's 3.3V output, which is also used to power the RFID module and the LCD. The LEDs are connected to digital pins on the Arduino through 220-ohm resistors to limit the current. The RFID module communicates with the Arduino via the SPI interface, while the LCD uses the I2C protocol.

Component List

Arduino UNO

LED: Two Pin (red)

LED: Two Pin (green)

16x2 I2C LCD

Resistor (220 Ohms)

RFID-RC522

Wiring Details

Arduino UNO

LED: Two Pin (red)

LED: Two Pin (green)

16x2 I2C LCD

Resistor (220 Ohms)

RFID-RC522

Documented Code

#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define SS_PIN 10
#define RST_PIN 9

#define LED_DENIED_PIN 7
#define LED_ACCESS_PIN 6

LiquidCrystal_I2C lcd(0x3F,16,2);
MFRC522 mfrc522(SS_PIN, RST_PIN); // Instance of the class

int code[] = {32,154,149,117}; //This is the stored UID (Unlock Card)
int codeRead = 0;
String uidString;

void setup() {
   Serial.begin(9600);
   SPI.begin();       // Init SPI bus
   mfrc522.PCD_Init(); // Init MFRC522
   Serial.println("Arduino RFID reading UID");

   pinMode(LED_DENIED_PIN, OUTPUT);
   pinMode(LED_ACCESS_PIN, OUTPUT);

   lcd.init();
   lcd.backlight();
   lcd.setCursor(0,0);
   lcd.print("Show your card:)");
}

void loop() {
   if (mfrc522.PICC_IsNewCardPresent()) {
       if (mfrc522.PICC_ReadCardSerial()) {
           lcd.clear();
           Serial.print("Tag UID:");
           lcd.setCursor(0,0);
           lcd.print("Tag UID:");
           lcd.setCursor(0,1);
           for (byte i = 0; i < mfrc522.uid.size; i++) {
                  Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
                  Serial.print(mfrc522.uid.uidByte[i], HEX);
                  
                  lcd.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
                  lcd.print(mfrc522.uid.uidByte[i], HEX);
            }
            
            Serial.println();

            int i = 0;
            boolean match = true;
            while(i<mfrc522.uid.size) {
               if(!(int(mfrc522.uid.uidByte[i]) == int(code[i]))) {
                  match = false;
               }
              i++;
            }

            delay(3000);
           lcd.clear();
           lcd.setCursor(0,0);
           
           if(match) {
              digitalWrite(LED_ACCESS_PIN, HIGH);
              lcd.print("Authorized access");
           } else {
              digitalWrite(LED_DENIED_PIN, HIGH);
              lcd.print(" Access denied  ");
              Serial.println("\nUnknown Card");
           }
             
             Serial.println("============================");
             
             mfrc522.PICC_HaltA();

             delay(3000);
             reset_state();
        }
   }
}

void reset_state() {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Show your card:)");
    
    digitalWrite(LED_ACCESS_PIN, LOW);
    digitalWrite(LED_DENIED_PIN, LOW);
}

This code is responsible for initializing the RFID reader and the LCD display, reading RFID tags, comparing the read UID with a stored UID, and then turning on the appropriate LED based on whether the UID matches. The LCD displays messages to guide the user and to show the UID of the scanned tag.