PROJECT_05
Control de Acceso Físico
Access control for a school: a custom Arduino PCB, a ZKTeco card reader and a web panel to manage students.
- TYPE
- Hardware · Full Stack
- STATUS
- IN PRODUCTION
- SCREENSHOTS
- 12
CONTEXT
An end-to-end project: the circuit, the firmware, the backend that decides who gets in, and the panel where it is managed, hosted on the school’s own server.
HIGHLIGHTS
- Custom PCB integrating the Arduino, the lock relay and step-down power supplies.
- ZKTeco PROID10BM MIFARE slave card reader (13.56 MHz) to identify each student by card.
- The backend checks whether the student is active or blocked before opening.
- Web panel to add, remove and block students, hosted on the school server.
THE BOARD · REV A
- Designed in KiCad: 170 × 115 mm, 61 components all through-hole so the whole board solders with one technique, 42 nets, and ERC and DRC at zero.
- Two independent Wiegand readers, two door relays broken out as dry contacts (COM/NC/NO) and two exit buttons, all driven by an Arduino Nano.
- 12 V input with a resettable PTC and a Schottky against reverse polarity; an MP1584 buck steps down to 5 V for the Nano and the pull-ups.
- Every Wiegand line passes through a TVS, a 1 nF filter and a 220 Ω series resistor before reaching the AVR: that is what buys cable length on a bus that is not differential.
- A single ULN2003A drives the LED and buzzer of both readers, with four unpopulated pull-ups left in place in case a reader asserts high instead of pulling to ground.
- The three on-board LEDs cost no pin at all: the PWR one hangs off the 5 V rail and the relay ones sit across the coil, so they report the actual actuation rather than what the firmware believes.
THE FIRMWARE
- Wiegand 26 and 34 decoded on interrupt, validating both parity bits before the card list is even consulted; a frame that is not exactly 26 or 34 bits discards itself.
- The Nano has only two hardware interrupts and four lines were needed: the second reader runs on a pin-change interrupt over port D, comparing against the previous state to keep only the falling edges.
- Up to 100 cards held in EEPROM: they are enrolled over the serial port at 115200, on site and without recompiling.
- Not a single delay(): relays, LEDs and beeps are state machines, so one reader can be beeping while the other reads.
- A 2 s watchdog, and the first thing setup() does is drop both relays: if the reset happened with a door open, it does not stay open.
- 6.5 KB of flash (21 %) and 324 B of RAM, compiled warning-free for arduino:avr:nano.