PROYECTO_05
Control de Acceso Físico
Control de acceso para una escuela: PCB propia con Arduino, lector de tarjetas ZKTeco y panel web para gestionar alumnos.
- TIPO
- Hardware · Full Stack
- ESTADO
- EN PRODUCCIÓN
- CAPTURAS
- 12
CONTEXTO
Proyecto de punta a punta: el circuito, el firmware, el backend que decide quién entra y el panel donde se administra, hospedado en el servidor de la propia escuela.
LO DESTACABLE
- PCB propia que integra Arduino, relé de la chapa y fuentes step-down.
- Lector esclavo de tarjetas MIFARE ZKTeco PROID10BM (13.56 MHz) para identificar al alumno por tarjeta.
- El backend valida si el alumno está activo o bloqueado antes de abrir.
- Panel web para altas, bajas y bloqueos, hospedado en el servidor de la escuela.
LA PLACA · REV A
- Diseñada en KiCad: 170 × 115 mm, 61 componentes todos THT para soldarla entera con la misma técnica, 42 redes y ERC y DRC en cero.
- Dos lectores Wiegand independientes, dos relés de puerta que salen como contacto seco (COM/NC/NO) y dos botones de salida, gobernados por un Arduino Nano.
- Entrada de 12 V con PTC rearmable y Schottky contra polaridad invertida; un buck MP1584 baja a 5 V para el Nano y los pull-ups.
- Cada línea Wiegand pasa por TVS, filtro de 1 nF y 220 Ω en serie antes de tocar el AVR: eso es lo que compra distancia en un bus que no es diferencial.
- Un ULN2003A maneja LED y buzzer de ambos lectores, con cuatro pull-ups sin poblar previstos por si el lector se activa en alto en vez de a masa.
- Los tres LED de la placa no gastan un pin: el de PWR cuelga del riel de 5 V y los de relé van en paralelo a la bobina, así que indican el accionamiento real y no lo que cree el firmware.
EL FIRMWARE
- Wiegand 26 y 34 decodificados por interrupción, validando las dos paridades antes de mirar la lista; una trama que no dé exactamente 26 o 34 bits se descarta sola.
- El Nano solo tiene dos interrupciones por hardware y hacían falta cuatro líneas: el segundo lector va por pin-change sobre el puerto D, comparando contra el estado anterior para quedarse solo con los flancos de bajada.
- Hasta 100 tarjetas guardadas en EEPROM: se dan de alta por el puerto serie a 115200, en obra y sin recompilar.
- Ni un solo delay(): relés, LEDs y pitidos son máquinas de estado, así que un lector puede estar pitando mientras el otro lee.
- Watchdog de 2 s, y lo primero que hace setup() es apagar los dos relés: si el reset ocurrió con una puerta abierta, no se queda abierta.
- 6.5 KB de flash (21 %) y 324 B de RAM, compilado sin avisos para arduino:avr:nano.