Ocho barras cuelgan frente al jugador, sostenidas por un pestillo de resorte. El ESP32 las libera una por una, en momentos aleatorios — el reto es atraparlas todas antes de que caigan al piso.
Cada barra descansa en un pestillo mecánico con resorte, similar a una chapa de puerta: al empujar la barra hacia adentro, el pestillo la atrapa solo. Un actuador universal de seguro eléctrico (de los que se usan en los seguros centralizados de auto) está acoplado a ese pestillo. Al recibir un pulso breve de corriente, el actuador mueve el pestillo y libera la barra; el resorte regresa el mecanismo a su posición de "listo para atrapar" sin ayuda eléctrica — por eso recargar el juego es tan simple como empujar los tubos de nuevo, sin ningún botón de reset.
Un ESP32 controla los 8 actuadores a través de dos tarjetas de relevadores de 4 canales. Al presionar START, una cuenta regresiva breve da paso a la secuencia: las 8 barras se sueltan una por una, en orden aleatorio y con intervalos de tiempo también aleatorios entre cada una. Un potenciómetro ajusta ese rango de intervalos — girado a un extremo, las sueltas vienen muy seguidas (difícil); al otro extremo, más espaciadas (fácil).
| Cant. | Componente | Notas |
|---|---|---|
| 1 | ESP32 DevKit V1 | controlador principal |
| 2 | Tarjeta de relevadores, 4 canales, 5V optoacoplada | 10A/250V·30VDC, terminales NA/NC/COM |
| 8 | Actuador universal de seguro eléctrico | 2 cables, reversible — solo se usa un sentido |
| 8 | Mecanismo de pestillo + resorte de retorno | fabricación propia, uno por canal |
| 8 | Barra / tubo | ligero, sin bordes filosos |
| 8 | Diodo flyback (1N4007 o similar) | uno en paralelo por actuador |
| 1 | Potenciómetro (10kΩ lineal típico) | ajuste de dificultad |
| 1 | Botón pulsador momentáneo | START |
| 1 | Fuente de alimentación 5V (≥1A) | VCC de ambas tarjetas de relé |
| 1 | Fuente de alimentación 12V | dimensionada según los actuadores, con margen |
| — | Cable, borneras, estructura/rieles de soporte | según tu montaje |
Recorrido de señal lógica (3.3V) desde el ESP32 hacia las tarjetas de relé y potencia conmutada (12V para actuadores y 5V para relés), compartiendo tierra común (GND):
Máquina de estados no bloqueante (usa millis(), no delay()): espera → cuenta regresiva → secuencia aleatoria → fin. Antes de cablear los 8 canales, prueba uno solo y confirma la polaridad de tu tarjeta de relé (activa en alto o en bajo) — ajusta RELE_ACTIVO_EN_BAJO según el resultado.
// --- extracto: control de un canal de relé, con polaridad configurable ---
const bool RELE_ACTIVO_EN_BAJO = true; // cambia a false si tu tarjeta es activa en alto
void encenderActuador(uint8_t indice) {
digitalWrite(PINES_RELE[indice], RELE_ACTIVO_EN_BAJO ? LOW : HIGH);
}
void apagarActuador(uint8_t indice) {
digitalWrite(PINES_RELE[indice], RELE_ACTIVO_EN_BAJO ? HIGH : LOW);
}
// --- extracto: intervalo aleatorio entre sueltas, según el potenciómetro ---
unsigned long intervaloAleatorio() {
int lecturaPot = analogRead(PIN_POTENCIOMETRO); // 0-4095 (ADC de 12 bits)
long intervaloMax = map(lecturaPot, 0, 4095,
(long)INTERVALO_MIN_DIFICIL_MS,
(long)INTERVALO_MAX_FACIL_MS);
long intervaloMin = intervaloMax / 3;
return (unsigned long) random(intervaloMin, intervaloMax + 1);
}
// El archivo completo (descargas/reflejos_esp32.ino) incluye la máquina de
// estados completa, el antirrebote del botón START y los mensajes de
// diagnóstico por Serial (115200 baudios).
Por qué el diseño terminó así — útil si quieres adaptar el proyecto en vez de copiarlo tal cual.
Documentación técnica, librerías y guías para complementar el armado del proyecto:
¿Te gustó este proyecto, te sirvió para aprender o estás pensando en armarlo? El diseño de los circuitos, las pruebas mecánicas y el código libre llevan muchas horas de trabajo. Si quieres apoyar para que pueda seguir creando y documentando proyectos como este, ¡puedes invitarme un café!