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.
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.
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.
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.
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.
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.
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.
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.
runningCourse,
a different password attempt returns "Another course is running now." — preventing
two courses from running simultaneously on the same reader.
attendence_date column is set server-side
at the time of counting. The admin panel is password-protected, so students cannot
backdate or future-date an attendance record.
IsAssignedToThisCourse(tagID, runningCourse)
queries the database before accepting any scan. Unregistered students receive
"You are not assigned to this course!" on the LCD.
TakeAttendance() checks for an existing
record before inserting. A second scan from the same student returns
"Duplicate entry! Attendance already counted!" and is rejected.
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.
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.
| Cable (m) | 1 tag (s) | 5 tags (s) | 10 tags (s) | 15 tags (s) | 20 tags (s) | 25 tags (s) | Avg (s) |
|---|---|---|---|---|---|---|---|
| 1.5 | 0.64 | 0.78 | 0.85 | 0.84 | 0.92 | 1.18 | 0.87 |
| 3.0 | 0.55 | 0.80 | 0.88 | 1.10 | 1.23 | 1.56 | 1.02 |
| 4.5 | 0.68 | 0.84 | 0.98 | 1.12 | 1.36 | 1.60 | 1.10 |
| 6.0 | 0.90 | 1.40 | 1.36 | 1.57 | 1.69 | 1.80 | 1.45 |
DataReceivedHandler, and a live-updating
DataGridView displaying today's attendance in real time.
| MCU | Arduino Uno · ATmega328P · Arduino IDE 1.8.5 |
| RFID | MFRC-522 · 13.56 MHz · SPI · RFID.h library |
| Language | C (Arduino sketch) · C# .NET Framework |
| UI Framework | Windows Forms · Visual Studio 2015 |
| Architecture | N-Tier · Entity.dll · DAL.dll · BOL.dll · GUI |
| Database | SQL Server 2014 Express · SqlCommand · local .mdf |
| Serial | System.IO.Ports.SerialPort · 115,200 bps · DataReceivedHandler |
| Usability | System Usability Scale (SUS) · 30 participants · 10-question |
| Published | IJET Vol. 7 Issue 3 · 2018 · pp. 1593–1598 · doi:10.14419/ijet.v7i3.13974 |
Published in IJET 2018 · Full C# solution and Arduino sketch on GitHub.