Sistema de esgrima inalambrica basado en ESP32 para detectar tocados en tiempo real entre dos tiradores.
El proyecto usa una arquitectura cliente-servidor sobre WiFi y UDP:
- Un ESP32 actua como servidor (Access Point + receptor UDP).
- Uno o dos ESP32 actuan como clientes (tirador izquierda/derecha).
- El servidor procesa paquetes, detecta tocados, analiza dobles y controla marcador/tiempo.
- Comunicacion UDP de baja latencia (puertos 4210 y 4211).
- Deteccion de tocado valido/no valido.
- Ventana temporal para doble tocado (300 ms).
- Estadisticas de comunicacion: paquetes perdidos, PPS y porcentaje de perdida.
- Marcador y cronometro para combate.
- Soporte para matriz LED MAX72XX (funciones incluidas en el servidor).
Wireless_Fencing/
Cliente/
Cliente.ino
config.h
Server/
Server.ino
maquina.h
libraries/
IRremote-4.4.0/
WiFi-1.2.7/
.vscode/
arduino.json
Archivo principal: Server/Server.ino
- Crea un Access Point:
- SSID:
ESP32_Server - Password:
12345678
- SSID:
- Escucha paquetes UDP en:
- Puerto
4210(tirador izquierda) - Puerto
4211(tirador derecha)
- Puerto
- Espera paquetes de este formato de texto:
ID:<numero>
TICK:<millis>
V0:<valor>
V1:<valor>
Logica principal:
V0 == 0indica tocado del florete del tirador emisor.V1en el rival se usa para validar tocado sobre blanco valido.- Si hay eventos cercanos, evalua doble tocado dentro de 300 ms.
Archivo principal: Cliente/Cliente.ino
- Se conecta al AP
ESP32_Server. - Envia paquetes UDP periodicamente (~cada 20 ms).
- Puede configurarse como:
IZQ(puerto 4210)DER(puerto 4211)
- 2 o 3 placas ESP32 (1 servidor + 1/2 clientes).
- Arduino IDE o extension Arduino en VS Code.
- Core ESP32 instalado (
esp32 by Espressif). - Librerias:
WiFi(incluida en el core ESP32)MD_MAX72XX(si se usa la matriz LED)SPI(core)
En Cliente/Cliente.ino:
- Define rol del tirador:
#define IZQo#define DER
- Mantener IP del servidor/AP en
192.168.4.1(por defecto de SoftAP).
En Cliente/config.h:
- SSID y password del AP (por defecto ya apuntan a
ESP32_Server).
En Server/Server.ino:
- Verifica SSID/password del AP.
- Si usas matriz LED MAX72XX, habilita la inicializacion en
setup()(hay lineas comentadas listas para activar).
- Abre
Server/Server.inoy subelo al ESP32 servidor. - Abre
Cliente/Cliente.inoy subelo a cada ESP32 cliente. - Para el segundo tirador, compila cliente con
#define DER.
El proyecto ya incluye configuracion en .vscode/arduino.json con placa:
esp32:esp32:esp32doit-devkit-v1
Ajusta el puerto serie segun tu equipo y sube cada sketch por separado.
- Encender el ESP32 servidor.
- Encender cliente IZQ y cliente DER.
- Cada cliente se conecta al AP y comienza a enviar paquetes UDP.
- El servidor procesa tocados y muestra diagnostico por Serial.
- (Opcional) Visualizar estado en matriz LED si esta habilitada.
Definidos en Server/maquina.h:
CLK_PIN: 13DATA_PIN: 11CS_PIN: 10IR_RECEIVE_PIN: 12
Nota:
- En comentarios del proyecto aparece mapeo alternativo para ESP32 tipico (
MOSI 23,MISO 19,SCK 18,SS 5). Ajusta segun tu cableado real.
Por puerto serie, el servidor imprime:
- Paquetes perdidos por conexion.
- Paquetes por segundo (PPS).
- Porcentaje de perdida.
- Deteccion de tocado valido/no valido.
- El motor principal UDP y logica de deteccion esta implementado.
- La parte IR esta en preparacion y comentada en varias secciones.
- Hay comentarios de mejoras futuras (por ejemplo, ajustes de cronometro y visualizacion).