PROYECTO_05

ZKTeco

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
  • React
  • Vite
  • TailwindCSS
  • Java
  • Spring Boot
  • MySQL
  • Arduino / ESP32
  • C++
  • KiCad
  • Wiegand 26/34

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.

CAPTURAS

Lector de tarjetas MIFARE ZKTeco PROID10BM utilizado en el control de acceso
Lector ZKTeco PROID10BM
Lector ZKTeco instalado junto a la puerta de acceso
Instalación en sitio
Diseño de la PCB propia con Arduino y relé para la chapa eléctrica
Diseño de la PCB
Vista del ruteo de pistas de la placa de control de acceso
Ruteo de pistas
Vista 3D de la placa con los conectores y las fuentes step-down
Vista 3D de la placa
Vista 3D de la placa por el reverso, con la serigrafía de las borneras del lector
Serigrafía de borneras
Pantalla de inicio de sesión del panel web de control de acceso
Acceso al panel
Listado de alumnos registrados en el panel de administración
Alumnos registrados
Formulario de alta de alumno y asignación de tarjeta
Alta de alumno
Registro histórico de accesos con fecha y hora
Historial de accesos
Panel de administración mostrando el estado de los alumnos
Estado de alumnos
Vista de configuración del sistema de control de acceso
Configuración

01 01