Firmware · Hardware
Monitor de lavadora con cámara y acelerómetro
Una placa ESP32-S3 con cámara y pantalla «lee» los LEDs del panel de una lavadora Mabe y su vibración para saber en qué etapa va el ciclo y avisar en Home Assistant.
- Año
- 2026
- Estado
- Prototipo funcional
- Rol
- Firmware, visión por computadora y calibración
- Repositorio
- Repositorio en preparación
01 · Problema
La lavadora no tiene conectividad ni avisa cuando termina. La única pista de en qué va el ciclo son los LEDs del panel: llenar, remojar, lavar, enjuagar, centrifugar, pausa, seguro de tapa y cálculo de carga.
02 · Enfoque
Una placa Waveshare ESP32-S3 (pantalla táctil, cámara OV2640 y acelerómetro QMI8658) apunta al panel. Un script con OpenCV analiza regiones calibradas sobre los 8 LEDs —incluido el parpadeo, con historial de muestras— y la placa combina ese estado con el RMS de la vibración en una máquina de estados con histéresis.
03 · Resultado
Detecta llenado, remojo, lavado, enjuague, centrifugado, pausa y terminado; publica el estado por MQTT para Home Assistant y lo muestra en la pantalla con LVGL. Incluye herramientas para calibrar las regiones desde la imagen en vivo y ajustar umbrales sin reprogramar.
04 · Stack
- ESP32-S3
- Cámara OV2640
- QMI8658
- LVGL
- FreeRTOS
- MQTT
- Python
- OpenCV

Cómo decide en qué etapa va
- LEDs. Cada 2 s se toma un cuadro y se mide el brillo normalizado de cada región (respecto a la mediana de la imagen). Con un historial de 4 muestras se distingue un LED encendido fijo de uno que parpadea.
- Vibración. El acelerómetro muestrea a 50 Hz; en una ventana de 2 s se quita la gravedad, se calcula el RMS y se clasifica en cuatro niveles: quieto, leve, agitando y centrifugando.
- Máquina de estados. Los LEDs mandan; la vibración desempata (por ejemplo, agitación fuerte sin LED claro = lavado). Una transición solo se confirma tras 6 evaluaciones seguidas de 500 ms, y el estado «terminado» se mantiene 5 minutos.
Por qué el análisis salió del chip
La primera versión detectaba los LEDs en el propio ESP32, pero cambiar el formato de imagen del sensor para analizarla volvía inestable el video. Moví la detección a un script de Python en la PC que publica el estado de los LEDs por MQTT; la placa lo consume igual que antes y el video quedó estable.