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.