RFID-Based Attendance System Using Arduino Ek Wi-Fi | Smart, Paperless & Real-Time!

by rohanbarnwal in Circuits > Arduino

18 Views, 1 Favorites, 0 Comments

RFID-Based Attendance System Using Arduino Ek Wi-Fi | Smart, Paperless & Real-Time!

ChatGPT Image May 10, 2025, 03_06_11 PM.png

RFID-Based Attendance System using Arduino Ek R4 Wi-Fi is a smart and automated solution to traditional attendance marking systems. Leveraging RFID technology and the power of the Arduino Ek Wi-Fi, this project enables real-time attendance tracking using RFID cards. Once a card is scanned, the student's name, class, and presence status are shown on a 20x4 LCD screen, and logged on the Serial Monitor with a buzzer beep for instant feedback.

By using the R4 Wi-Fi board, the project also opens the door for future upgrades like sending attendance to the cloud, IoT dashboards, or even mobile alerts.


Inspiration / Story Behind the Project

This project was born out of a simple but impactful thought:

Why rely on outdated paper-based attendance when technology can do it faster, cleaner, and smarter?

We all know that making paper requires cutting down trees Every school register, attendance sheet, or visitor log contributes to deforestation in some way. Apart from that, manual attendance is time-consuming, error-prone, and not eco-friendly.

With this RFID-based system

  1. Attendance becomes automatic
  2. No trees are harmed
  3. And your class start on time -- every time!

So, this isn't just a tech project -- its a step towards smarter and greener solutions

Applications

This RFID-based attendance system can be used in a variety of real-world environments to streamline attendance tracking and reduce manual effort:

Schools and Colleges

  1. Automates student attendance in classrooms
  2. Reduces paperwork and human error
  3. Easy integration into existing school management systems

Offices and Workspaces

  1. Track employee attendance and punctuality
  2. Secure access control to restricted zones

Libraries and Labs

  1. Keeps track of visitor logs
  2. Allow only registered students to enter resource areas

Clubs and Gyms

  1. Member attendance management
  2. Tag-based check-in to avoid long queues

Supplies

download (16).jpeg
download (15).jpeg
download (12).jpeg
download (17).jpeg
download (18).jpeg

Components Required

  1. Arduino UNO EK R4 Wi-Fi Board x1: Powerful microcontroller board with built-in Wi-Fi acts as the brain of the system.
  2. MFRC522 RFID Module x1: Reads unique IDs from RFID cards and tags -- used to identify students
  3. RFID Cards/Tags: Used by individuals to mark their presence -- each has a unique ID.
  4. 20x4 I2C LCD Display x1: Displays student name, class, and attendance status in real time.
  5. Buzzer x1: Gives an audible beep when a card is successfully scanned.
  6. Jumper Wires: Connects all components electrically--ensures proper communication.
  7. Breadboard: Temporary platform to connect components without soldering

Wiring Connections

Untitled Sketch_bb.jpg

RFID Module To Arduino Uno Ek R4 Wi-Fi

  1. SDA To D10
  2. SCK To D13
  3. MOSI To D11
  4. MISO To D12
  5. RST To D9
  6. GND To GND
  7. 3.3v TO 3.3v

20x4 I2C LCD To Arduino Uno Ek R4 Wi-Fi

  1. SDA To A4
  2. SCL To A5
  3. VCC To 5v
  4. GND To GND

Buzzer To Arduino Uno Ek R4 Wi-Fi

  1. +ve pin To D7
  2. -ve pin To GND



Code Breakdown

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

#define SS_PIN 10
#define RST_PIN 9
#define BUZZER_PIN 7

MFRC522 rfid(SS_PIN, RST_PIN);
LiquidCrystal_I2C lcd(0x27, 20, 4); // Adjust if needed

// Student structure
struct Student {
byte uid[4];
const char* name;
const char* section;
bool present;
};

// Student list
Student students[] = {
{{0xD7, 0x84, 0xD5, 0x00}, "AVC", "10A", false},
{{0x31, 0x0A, 0xF4, 0x00}, "QWE", "10A", false},
{{0xE2, 0xD2, 0xD5, 0x00}, "RTY", "10A", false},
{{0x7E, 0xB6, 0xF3, 0x00}, "UIO", "10A", false},
{{0x82, 0x7E, 0xD6, 0x00}, "PAS", "10A", false}
};

const int studentCount = sizeof(students) / sizeof(Student);
String inputCommand = "";

void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
lcd.init();
lcd.backlight();
pinMode(BUZZER_PIN, OUTPUT);

showWelcome(); // Show startup message

Serial.println("System ready. Scan RFID card or type 'how many student are present'");
}

void loop() {
checkRFID();
checkSerialInput();
}

void checkRFID() {
if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) {
return;
}

beepBuzzer(); // 🔔 Beep on scan

for (int i = 0; i < studentCount; i++) {
if (compareUID(rfid.uid.uidByte, students[i].uid)) {
if (!students[i].present) {
students[i].present = true;
showOnLCD(students[i].name, students[i].section);
Serial.print("Marked present: ");
Serial.println(students[i].name);
} else {
showOnLCD(students[i].name, students[i].section); // Show info again
Serial.print("Already marked: ");
Serial.println(students[i].name);
}
delay(3000); // 3 seconds delay for message
showWelcome(); // Back to welcome screen
break;
}
}

rfid.PICC_HaltA();
}

bool compareUID(byte* a, byte* b) {
for (int i = 0; i < 4; i++) {
if (a[i] != b[i]) return false;
}
return true;
}

void showOnLCD(const char* name, const char* section) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Name: ");
lcd.print(name);
lcd.setCursor(0, 1);
lcd.print("Class: ");
lcd.print(section);
lcd.setCursor(0, 2);
lcd.print("Status: Present");
}

void showWelcome() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Student Attendance");
lcd.setCursor(0, 1);
lcd.print("System");
}

void checkSerialInput() {
while (Serial.available()) {
char c = Serial.read();
if (c == '\n') {
inputCommand.trim();
if (inputCommand.equalsIgnoreCase("how many student are present")) {
showAttendance();
}
inputCommand = "";
} else {
inputCommand += c;
}
}
}

void showAttendance() {
Serial.println("---- Attendance Report ----");
for (int i = 0; i < studentCount; i++) {
Serial.print(students[i].name);
Serial.print(" - ");
Serial.println(students[i].present ? "Present" : "Absent");
}
Serial.println("---------------------------");
}

void beepBuzzer() {
digitalWrite(BUZZER_PIN, HIGH);
delay(200);
digitalWrite(BUZZER_PIN, LOW);
}

The code initializes the RFID module, 20x4 I2C LCD, and Buzzer. It then waits for an RFID card to be scanned. When a known card is detected, it marks the student present, displays their name and class on the LCD, and logs the status to the Serial Monitor. A buzzer beep provides instant feedback, and a command via serial input can show full attendance status.

Key Features:

  1. Uses MFRC522 and LiquidCrystal_I2C libraries
  2. Displays Name, Class, and "Present" status on LCD
  3. Buzzer feedback on every successful scan
  4. Serial Monitor shows real-time logs
  5. Responds to the typed command "how many student are present"
  6. Easy to add/edit students via UID array
  7. Clean LCD transition: welcome screen & status updates

Video Demonstration

RFID Attendance System with Arduino | #arduinoprojects #Shorts #arduinoproject #arduino #raspberrypi

Watch this quick demo (under 40 seconds) to see system works Don’t forget to Like, Share & Subscribe to support future projects.