02 · 2022

RFID attendance system

A card reader that takes classroom attendance in one beep, and an Android app to read it back.

ArduinoC++RFIDAndroidJava

My minor project in the seventh semester was a fee management system. It worked, and it was the same shape as everything else being handed in that year: car rental, library management, one CRUD app after another. For the final year I wanted something that wasn’t on that list.

I had been writing Android since early in college, so I knew I could carry that half of it to a finish. The other half I had never touched; I had not written a line of embedded code before this. That was the reason to pick it.

Attendance in a lecture hall is a roll call that eats the first ten minutes and produces a register nobody can query later. I wanted the recording part to take one second per student, and the reading part to be something you could open on a phone.

The prototype: an RC522 reader wired to the board, with a buzzer for feedback
The prototype: an RC522 reader wired to the board, with a buzzer for feedback

The device

An Arduino-based board with an RFID reader on it. A student holds their card near the box, it beeps twice, and the tap is recorded against their details. No queue, no signature sheet, no handwriting to decipher afterwards.

The reader in its enclosure
The reader in its enclosure

The beep matters more than it sounds like it should. Without it, people hover the card and then hover it again, unsure whether anything happened; with it, the interaction ends the moment they hear it.

The cards were blank, the sort you buy in a strip and assign to whoever you like. One card, one student, nothing printed on it.

The firmware

A blank card, same as the ones I handed out
A blank card, same as the ones I handed out

The board runs C++, written as an Arduino sketch and compiled against the Arduino core. It is C++ with the sharp edges left in the box: no exceptions, no dynamic allocation worth the name, and a fixed idea of how much memory you get.

The program is a loop. Poll the reader, and when a card comes into range, pull its UID off it, sound the buzzer, and hand the read on to be recorded. Everything interesting about the project sits either side of that loop; the loop itself stays short on purpose, because a reader that stalls mid-queue is worse than a paper register.

The app

An Android app in Java, sitting on top of the same records. It showed attendance per student and per session: who was present, when they tapped, and which sessions they had missed. Marking someone absent is not a separate action; it falls out of the sessions where their card never appeared.

That was the part worth building. A device that logs taps is a data-entry tool, and without something to read it back it just moves the paper register into a file nobody opens.