19. Mejoras respecto al Challenge #1 - diegogopa/Challenge-IOT GitHub Wiki

19.1 Retroalimentación recibida y cómo se abordó

Observación del Challenge #1 Qué se hizo en el Challenge #2 Dónde verlo
La lógica de fusión no estaba implementada: el estado dependía solo del nivel y las demás variables eran informativas Se implementó una fusión en dos niveles: (1) señal — temperatura que corrige el ultrasónico e índice de evaporación T+HR+UV; (2) decisión — reglas que combinan nivel, tasa de cambio, evaporación y tendencia de presión. FUGA y SEQUIA por riesgo dependen de varias variables a la vez Secciones 8 y 11.4
Contradicción documental sobre el núcleo de la solución (la Wiki prometía fusión y luego decía que no existía) Se reescribieron objetivos, arquitectura, lógica y autoevaluación para describir una sola lógica, la implementada en calcularEstado(), citando los mismos parámetros que el código Secciones 2, 7, 8, 12
Resultados no medidos Banco de pruebas B1–B6 con mediciones reales: calibración con referencia, tiempos de detección, matriz de confusión, latencias y robustez. Lo que es estimación (consumo) se indica explícitamente Secciones 10 y 11
Requisitos ausentes (presión atmosférica, medición en hilo independiente, tablero de control) BMP180 integrado en la lógica; medición en tarea FreeRTOS; tablero embebido con acceso restringido, histórico, eventos y silenciado Secciones 4.6, 5.2, 7.9

19.2 Comparación entre Challenge #1 y Challenge #2

Challenge #1 Challenge #2 (v3.2) Evidencia
Solo el nivel determinaba el estado Fusión de nivel, tasa, evaporación (T+HR+UV) y presión Sección 8
Sin medición de presión BMP180 en el bus I2C compartido con la OLED Secciones 4.6 y 6.5
Umbrales sin histéresis Histéresis 95/90 % y 20/25 %, verificada Secciones 8.5 y 11.4
Lectura directa del HC-SR04 5 muestras, mediana, EMA y compensación por temperatura Sección 8.3
Estados OK, SEQUIA, DESBORDE + FUGA y ERROR_SENSOR Sección 8.4
Sin detección de fallas Falla y recuperación por componente (6 bits) Secciones 7.8 y 11.6
Todo en loop() Tarea de sensado FreeRTOS y dos mutex Sección 5.2
Sin tablero Servidor web embebido en la WLAN Sección 7.9
Sin control de acceso Subred (403) + HTTP Basic (401) Sección 11.6
Sin histórico 60 muestras + 10 eventos Sección 9.11
Montaje en protoboard Caja de protección comercial con tapa transparente, con aberturas para el fotodiodo y el DHT22 Sección 17
Pruebas informales Banco B1–B6 con métricas Secciones 10 y 11
Sin diagramas UML Casos de uso, clases, estados, secuencia y actividad Sección 7.12

19.3 Mejoras de arquitectura y software

La versión Challenge #2 separa adquisición, filtrado, fusión, detección de fallas, notificación local, monitoreo web y registro. La tarea de sensado escribe en una estructura protegida por mutexDatos; el ciclo principal y el servidor web leen copias; el bus I2C compartido se protege con mutexI2C.

19.4 Mejoras de conectividad

El tablero de control es un requisito del reto, pero se diseñó para que la WLAN no sea una dependencia de la operación crítica: si la red cae, el sensado, la clasificación, la OLED y el buzzer continúan, y el ESP32 se reconecta solo cada 10 s.