C# · Arduino · RFID · IoT · Published Research

RFID Attendance Monitoring
with Fraud Prevention Techniques

A published IEEE/IJET research paper proposing KUSmartLog — an RFID-based Attendance Monitoring System for educational institutions integrating a password-protected attendance module to prevent fraud. Implemented with Arduino Uno, MFRC-522 RFID reader, a 16×2 LCD, and a C# .NET N-Tier server application backed by SQL Server. Achieved a SUS usability score of 71.92 ("Good") and average response time of 1.11 seconds per tag.

Arduino RFID · MFRC-522 C# · .NET SQL Server N-Tier Architecture IoT IJET · 2018
Hardware
Arduino Uno · MFRC-522 · 16×2 LCD · Keypad
Software
C# .NET · Windows Forms · SQL Server 2014
Architecture
N-Tier · Entity · DAL · BOL · GUI
Results
SUS 71.92/100 · Avg. response 1.11s
Published
IJET Vol. 7(3) 2018 · pp. 1593–1598 · doi:10.14419/ijet.v7i3.13974
01About

Manual, paper-based attendance systems are unreliable, error-prone, and vulnerable to proxy attendance — where students mark attendance on behalf of absent peers. RFID-based systems offer an automated alternative, but most prior work focused on simple tag-reading without addressing the core challenge of fraudulence prevention. This paper plugs that gap.

KUSmartLog is an Attendance Monitoring System (AMS) that uses RFID student ID cards for identification, but adds a password-protected attendance counting module. A course teacher activates counting by entering a secret password on a keypad; students can only register attendance within that activated window — in front of the teacher — making proxy and out-of-class attendance physically impossible.

The system was implemented in a real classroom at Daffodil International University and evaluated on 30 students using the System Usability Scale (SUS) — achieving an average score of 71.92/100, classified as "Good" (range 71.4–85.5). Performance testing across 4 cable lengths and up to 25 RFID tags yielded an average response time of 1.11 seconds per tag.

Seven formal security constraints (c1–c7) were defined and implemented: only the assigned teacher can open attendance; no two courses can run simultaneously; attendance is date-locked; duplicate scans are rejected; and students can only register for enrolled courses. The system enforces every constraint via database validation queries in the Business Object Layer.

02Architecture

The system is divided into two physically separate modules communicating over a serial cable at 115,200 bps. The client module is an embedded system running on Arduino Uno. The server module is a C# .NET application running on a desktop PC, following the N-Tier architecture pattern with distinct Entity, DAL, BOL, and GUI layers compiled as separate assemblies.

Client Module — Arduino
Embedded Hardware Layer
  • MFRC-522 RFID Reader (SPI, SS=pin10)
  • 3×4 Matrix Keypad (ADC on A0)
  • 16×2 LCD Display (pins 2–7)
  • RGB LED indicators (A2=Red, A3=Green)
  • Buzzer (A4) — audio feedback
  • DigitalID.ino — Arduino C sketch
  • Reads 5-byte RFID tag serial numbers
  • Sends tagID / password over Serial.println()
Serial
115200 bps
USB cable
Server Module — C# .NET
KUSmartLog Application
  • AppGUI.cs — main form (757×500)
  • DataReceivedHandler() — serial listener
  • Login.cs · Add_Student.cs · Add_Course.cs
  • AssignCourse.cs · Attendance.cs
  • Student_List.cs · AdminProfile.cs
  • Operations.cs (BOL) — all DB queries
  • DbConnection.cs (DAL) — SqlConnection
  • Entity.dll — StudentInfo, Courses, UserProfile
Tier 1 — Presentation
GUI Layer
  • AppGUI · Login · Add_Student
  • AssignCourse · Attendance
  • Add_Course · AdminProfile
Tier 2 — Business Logic
BOL.dll (Operations.cs)
  • IsValidPassword() · TakeAttendance()
  • insertStudentInfo() · insertCourse()
  • IsAssignedToThisCourse() · login()
Tier 3 — Data Access
DAL.dll + SQL Server
  • DbConnection.cs · ExeNonQuery()
  • StudentInfo · Courses · UserProfile
  • Attendance table · SQL Server 2014
03Hardware

The client module is built from off-the-shelf components wired to an Arduino Uno. The RFID reader communicates over SPI; the keypad uses a single ADC pin with resistor-ladder voltage division to detect 12 keys (0–9, *, #); and LED indicators provide immediate visual feedback (green = success, red = error) alongside the buzzer and 16-character LCD messages.

📡
HW 01
RFID Reader
MFRC-522 · 13.56 MHz

SPI-connected MFRC-522 module reads passive RFID tags at 13.56 MHz. Each student ID card stores a unique 5-byte serial number transmitted to Arduino via rfid.serNum[]. Range: ~5 cm.

🎛️
HW 02
Microcontroller
Arduino Uno · ATmega328P

Central processing unit of the client module. Runs DigitalID.ino at 115,200 bps serial. Controls RFID, LCD, keypad, LEDs, and buzzer. Communicates with server via USB serial port.

⌨️
HW 03
Keypad & LCD
3×4 matrix · 16×2 LCD

A single ADC pin (A0) reads the full 3×4 keypad via voltage thresholds (25–938 analog range per key). The 16×2 LCD (pins 2–7) displays feedback: "....Welcome....", course names, "Attendance counted!", and error messages.

💡
HW 04
LED & Buzzer
RGB LED (A2/A3) · Digital Buzzer (A4)

Green LED (A3) + buzzer beep on successful attendance count. Red LED (A2) + 3× buzzer pulses for errors (wrong password, duplicate scan, not enrolled). Both default HIGH (off) and pulled LOW to activate.

04Security
05Key Results
Performance & Usability Verdict
SUS Usability Score
71.92 / 100 — "Good"

Tested on 30 random students with the System Usability Scale (10-question questionnaire, scored 1–5). Average SUS = 71.92, standard deviation = 6.21 — both within the "Good" band (71.4–85.5 / SD < 11.6). Best score: 82.5, worst: 60.

Average Response Time
1.11 seconds per RFID tag

Tested across 4 cable lengths (1.5m, 3m, 4.5m, 6m) and 6 tag counts (1, 5, 10, 15, 20, 25). Average per-tag response times: 0.87s (1.5m), 1.02s (3m), 1.10s (4.5m), 1.45s (6m). All well below the traditional paper-based system's processing time.

Response Time by Cable Length & Tag Count
Cable (m) 1 tag (s) 5 tags (s) 10 tags (s) 15 tags (s) 20 tags (s) 25 tags (s) Avg (s)
1.50.640.780.850.840.921.180.87
3.00.550.800.881.101.231.561.02
4.50.680.840.981.121.361.601.10
6.00.901.401.361.571.691.801.45
06Contributions
MCUArduino Uno · ATmega328P · Arduino IDE 1.8.5
RFIDMFRC-522 · 13.56 MHz · SPI · RFID.h library
LanguageC (Arduino sketch) · C# .NET Framework
UI FrameworkWindows Forms · Visual Studio 2015
ArchitectureN-Tier · Entity.dll · DAL.dll · BOL.dll · GUI
DatabaseSQL Server 2014 Express · SqlCommand · local .mdf
SerialSystem.IO.Ports.SerialPort · 115,200 bps · DataReceivedHandler
UsabilitySystem Usability Scale (SUS) · 30 participants · 10-question
PublishedIJET Vol. 7 Issue 3 · 2018 · pp. 1593–1598 · doi:10.14419/ijet.v7i3.13974

Read the full paper & source code

Published in IJET 2018 · Full C# solution and Arduino sketch on GitHub.