GITAF
Firmware

Lógica de Audio

Generación, control y secuenciación de señales acústicas en GITAF PRO

Arquitectura de Generación de Sonido

A diferencia de sistemas básicos que utilizan tonos sintéticos (beep/buzzer), GITAF PRO implementa una arquitectura de Audio de Alta Fidelidad basada en reproducción de muestras MP3 pregrabadas.

¿Por qué DFPlayer Mini y no el DAC interno?

El ESP32 posee un conversor Digital-Analógico (DAC) interno, pero para este proyecto optamos por un módulo dedicado DFPlayer Mini por tres razones críticas:

  1. Calidad Psicoacústica: Permite reproducir sonidos diseñados específicamente para ser localizados por el oído humano (Ruido Rosa, pulsos cortos) en lugar de ondas senoidales puras que pueden ser confusas.
  2. Desacople de CPU: La decodificación del MP3 la hace el chip del módulo, liberando al procesador del ESP32 para mantener la conexión WiFi/ESP-NOW estable.
  3. Almacenamiento: Permite cambiar los sonidos simplemente reemplazando archivos en la MicroSD, sin reprogramar el chip.

Cadena de Señal (Signal Chain)

El flujo de audio sigue un recorrido diseñado para maximizar la potencia y minimizar el ruido eléctrico.

graph LR
    ESP[ESP32] -->|UART: 9600 baud| MP3[DFPlayer Mini]
    MP3 -->|DAC_R / DAC_L| Filter[Filtro Pasivo]
    Filter -->|Señal Limpia| AMP[Amplificador PAM8403]
    AMP -->|Potencia 5W| SPK[Parlante]

Filtrado de Hardware

Para eliminar el "zumbido" digital característico de la transmisión WiFi, implementamos un filtro físico entre el módulo MP3 y el amplificador:

  • Resistencia 1kΩ (Serie): Reduce la ganancia de entrada para evitar saturación.
  • Capacitor 1000uF (Paralelo a Fuente): Absorbe los picos de consumo del amplificador.

Lógica del Secuenciador (Firmware)

El corazón de la orientación no es solo "reproducir sonido", sino cómo se reproduce. El firmware implementa una Máquina de Estados Finita para controlar la secuencia.

El Algoritmo de "3 Repeticiones"

Para evitar la contaminación acústica en la cancha, el sistema no suena continuamente. Sigue este patrón estricto:

  1. Trigger: Recibe comando '1' (Start).
  2. Bucle Activo:
  • Reproduce Pista 001.
  • Espera 3 Segundos.
  • Reproduce Pista 001.
  • Espera 3 Segundos.
  • Reproduce Pista 001.
  1. Auto-Stop: Detiene el audio y entra en bajo consumo.

Implementación en Código

// Fragmento real del firmware GITAF PRO

const int MAX_PLAYS = 3;        // Límite de repeticiones
const int PLAY_INTERVAL = 3000; // Silencio entre audios (ms)

void audioLoop() {
  if (sequenceActive) {
      unsigned long currentMillis = millis();

      // Verifica si es momento de sonar (Non-blocking delay)
      if (currentMillis - lastPlayTime >= PLAY_INTERVAL || lastPlayTime == 0) {
          
          if (playCount < MAX_PLAYS) {
              // --- ACCIÓN DE REPRODUCCIÓN ---
              myDFPlayer.play(1); 
              Serial.println("Reproduciendo Beacon...");
              
              playCount++;
              lastPlayTime = currentMillis; 
          } else {
              // --- FINALIZACIÓN ---
              sequenceActive = false;
              playCount = 0;
              // El sistema queda en silencio automáticamente
          }
      }
  }
}

Este enfoque "no bloqueante" (usando millis() en lugar de delay()) es fundamental. Permite que el ESP32 siga escuchando comandos de "STOP" de emergencia incluso mientras espera entre sonidos.

Gestión de Archivos en Tarjeta SD

El módulo DFPlayer Mini requiere una estructura de archivos muy específica para funcionar correctamente.

Estructura de Carpetas

La tarjeta MicroSD (formateada en FAT32) debe tener la siguiente jerarquía:

(Raíz de la SD)

└── mp3/             <-- Carpeta obligatoria llamada "mp3"

    ├── 0001.mp3     <-- Sonido principal (Beacon)
    ├── 0002.mp3     <-- (Opcional) Sonido de batería baja
    └── 0003.mp3     <-- (Opcional) Sonido de confirmación

Reglas de Nombrado

  • Los archivos DEBEN empezar con 4 dígitos numéricos: 0001, 0002, etc.
  • Puedes añadir texto después de los números, ej: 0001_Sonido_Gol.mp3, pero los números son lo único que lee el chip.
  • En el código, llamamos al archivo con myDFPlayer.play(1); para el 0001.mp3.

Control de Volumen y Ganancia

El sistema tiene dos etapas de control de volumen:

  1. Digital (Software): Controlado por el comando myDFPlayer.volume(25);.
  • Rango: 0 a 30.
  • Valor óptimo GITAF: 25 (Valores superiores a 28 suelen introducir distorsión).
  1. Analógico (Hardware): El amplificador PAM8403 suele incluir un pequeño potenciómetro.
  • Recomendación: Dejar el potenciómetro físico al máximo y controlar el volumen final solo desde el código para asegurar que todos los postes suenen igual.

Tipos de Sonido Recomendados

Para fútbol de ciegos, el tipo de audio es crucial para la ecolocalización.

Tipo de AudioDescripciónUso en GITAF
Ruido Rosa / BlancoSonido estático tipo "lluvia".Recomendado. Excelente para ubicación espacial.
Pulsos (Beeps)Tonos agudos intermitentes.Útil, pero puede rebotar mucho en gimnasios cerrados (eco).
Voz HumanaGrabación diciendo "Arco", "Aquí".Intuitivo, pero menos preciso para calcular distancia.
PercusiónSonido de golpe seco (madera/metal).Muy bueno para simular el sonido del balón o los postes.

Para el archivo 0001.mp3, recomendamos un sonido de percusión metálica breve (aprox 1 segundo) o una ráfaga corta de ruido rosa. Evita canciones o melodías largas.

On this page