Control de Marcador Deportivo vía Bluetooth con ESP32 y Aplicación Android
Objetivo
Implementar un sistema de marcador deportivo controlado mediante una aplicación Android vía Bluetooth, utilizando una ESP32 y mostrando los resultados en una pantalla LCD.
Materiales necesarios
-
ESP32
-
Módulo Bluetooth HC-05 o similar (o usar Bluetooth integrado de ESP32)
-
Pantalla LCD I2C 16×2
-
5 pulsadores (o menos si se simplifica)
-
Protoboard y cables
-
Smartphone Android
-
IDE Arduino
Parte 1: Modificación del Código para Incluir Bluetooth
#include <LiquidCrystal_I2C.h> #include <BluetoothSerial.h> // Configuración LCD 16x2 con dirección I2C 0x27 LiquidCrystal_I2C lcd(0x27, 16, 2); // Objeto Bluetooth BluetoothSerial SerialBT; // Definición de pines para los botones const int btn_up_team1 = 25; // Incrementa equipo 1 const int btn_down_team1 = 26; // Decrementa equipo 1 const int btn_up_team2 = 27; // Incrementa equipo 2 const int btn_down_team2 = 14; // Decrementa equipo 2 const int btn_reset = 12; // Resetear marcador // Variables para almacenar los puntos int score_team1 = 0; int score_team2 = 0; // Variables para control de rebote (debounce) unsigned long lastDebounceTime = 0; unsigned long debounceDelay = 200; // tiempo en milisegundos void setup() { // Configurar pines de los botones con pull-up interno pinMode(btn_up_team1, INPUT_PULLUP); pinMode(btn_down_team1, INPUT_PULLUP); pinMode(btn_up_team2, INPUT_PULLUP); pinMode(btn_down_team2, INPUT_PULLUP); pinMode(btn_reset, INPUT_PULLUP); // Inicializar LCD lcd.init(); lcd.backlight(); // Inicializar Bluetooth SerialBT.begin("MarcadorDeportivo"); // Nombre del dispositivo Bluetooth Serial.begin(115200); // Mostrar encabezados iniciales updateDisplay(); } void loop() { // Manejar comandos Bluetooth if (SerialBT.available()) { char command = SerialBT.read(); handleBluetoothCommand(command); } // Manejar botones con debounce if ((millis() - lastDebounceTime) > debounceDelay) { // Botón incrementar equipo 1 if (digitalRead(btn_up_team1) == LOW) { score_team1++; updateDisplay(); sendScores(); lastDebounceTime = millis(); } // Botón decrementar equipo 1 if (digitalRead(btn_down_team1) == LOW && score_team1 > 0) { score_team1--; updateDisplay(); sendScores(); lastDebounceTime = millis(); } // Botón incrementar equipo 2 if (digitalRead(btn_up_team2) == LOW) { score_team2++; updateDisplay(); sendScores(); lastDebounceTime = millis(); } // Botón decrementar equipo 2 if (digitalRead(btn_down_team2) == LOW && score_team2 > 0) { score_team2--; updateDisplay(); sendScores(); lastDebounceTime = millis(); } // Botón resetear marcador if (digitalRead(btn_reset) == LOW) { score_team1 = 0; score_team2 = 0; updateDisplay(); sendScores(); lastDebounceTime = millis(); } } } void handleBluetoothCommand(char command) { switch(command) { case 'A': // Incrementar equipo A score_team1++; break; case 'a': // Decrementar equipo A if(score_team1 > 0) score_team1--; break; case 'B': // Incrementar equipo B score_team2++; break; case 'b': // Decrementar equipo B if(score_team2 > 0) score_team2--; break; case 'R': // Resetear score_team1 = 0; score_team2 = 0; break; case 'S': // Solicitar estado actual break; } updateDisplay(); sendScores(); } void sendScores() { SerialBT.print("A:"); SerialBT.print(score_team1); SerialBT.print(",B:"); SerialBT.println(score_team2); } void updateDisplay() { char scoreStr[10]; lcd.clear(); // Mostrar nombres de equipos lcd.setCursor(0, 0); lcd.print("Equipo A:"); lcd.setCursor(8, 0); lcd.print("Equipo B:"); // Mostrar puntuaciones lcd.setCursor(2,1); sprintf(scoreStr, "%02d", score_team1); lcd.print(scoreStr); lcd.setCursor(10, 1); lcd.print(score_team2); }
Parte 2: Desarrollo de la Aplicación Android
Puedes crear una aplicación Android simple usando MIT App Inventor (https://appinventor.mit.edu/) con los siguientes componentes:
-
Interfaz de usuario:
-
2 Etiquetas para mostrar los marcadores
-
4 Botones (A+, A-, B+, B-)
-
1 Botón de Reset
-
Lista de dispositivos Bluetooth emparejados
-
Botón de conexión
-
-
Funcionalidad Bluetooth:
-
Conectar al dispositivo «MarcadorDeportivo»
-
Enviar comandos (‘A’, ‘a’, ‘B’, ‘b’, ‘R’)
-
Recibir actualizaciones de marcador
-
Parte 3: Pruebas y Validación
-
Pruebas físicas:
-
Verificar que los botones incrementen/decrementen correctamente
-
Confirmar que el LCD muestra los valores correctos
-
-
Pruebas Bluetooth:
-
Emparejar el dispositivo desde el teléfono
-
Verificar que los comandos desde la app modifican el marcador
-
Confirmar que los cambios físicos se reflejan en la app
-
Parte 4: Mejoras Opcionales
-
Agregar temporizador
-
Implementar historial de puntuaciones
-
Añadir sonidos para cambios de marcador
-
Implementar cambio de nombres de equipos
-
Agregar indicador visual de conexión Bluetooth
Evaluación
-
Funcionamiento correcto del hardware (30%)
-
Comunicación Bluetooth estable (30%)
-
Aplicación Android funcional (20%)
-
Documentación y presentación (20%)
Entregables
-
Código Arduino completo
-
Archivo .aia de la aplicación Android
-
Video demostrativo del funcionamiento
-
Breve informe con:
-
Diagrama de conexiones
-
Explicación del código
-
Problemas encontrados y soluciones
-
