Repository navigation
Banco de Pruebas
Este documento describe el experimento diseñado para validar rigurosamente el sistema, siguiendo la estructura exigida: calibración contra referencia conocida, emulación acelerada de condiciones críticas, validación de la lógica de fusión y umbrales, pruebas de notificación, pruebas de robustez y casos límite, y repetibilidad/desempeño. Todas las pruebas se realizaron sobre el modelo a escala de laboratorio que emula el comportamiento de un cuerpo de agua como el embalse de Tominé.
- Referencia: regla física insertada en el tanque, midiendo la altura real de la columna de agua.
-
Procedimiento: con el tanque vacío se midió la distancia sensor→fondo (
SENSOR_ALTURA_CM); con el tanque lleno al 80% se midió la distancia sensor→superficie y se calculóNIVEL_MAX_CMpor diferencia. -
Resultado:
SENSOR_ALTURA_CM = 10.54 cm,NIVEL_MAX_CM = 5.44 cm. -
Herramienta de calibración: sketch dedicado (
05_calibracion_hcsr04.ino) que reporta 10 lecturas por muestra, promedio y desviación estándar, para descartar inestabilidad antes de fijar los valores.
- Referencia: báscula de precisión ("gramera") como ground truth.
-
Procedimiento: regresión lineal de mínimos cuadrados con múltiples pares (peso real, lectura cruda), mediante un sketch dedicado (
04_calibracion_galga.ino) con comandost(tara),<peso>(registrar punto),c(calcular regresión). - Primer intento (20-sep): 12 puntos, error promedio 73.8g, error máximo 148.4g, con saltos de signo en la lectura cruda — diagnosticado como torsión mecánica de la celda (montaje no perfectamente horizontal / extremo fijo no realmente inmóvil), no como ruido electrónico.
- Corrección: se ajustó el montaje mecánico (nivelación, fijación del extremo fijo, centrado consistente del objeto).
- Segundo intento (27-sep), tras corregir el montaje: 7 puntos (90g–402g).
| Peso real (g) | Lectura cruda | Peso estimado (g) | Error (g) |
|---|---|---|---|
| 90.0 | 56844 | 83.6 | 6.4 |
| 169.0 | 108747 | 165.4 | 3.6 |
| 233.0 | 149547 | 229.7 | 3.3 |
| 402.0 | 259349 | 402.8 | 0.8 |
| 157.0 | 105439 | 160.2 | 3.2 |
| 140.0 | 99054 | 150.1 | 10.1 |
| 353.0 | 227203 | 352.1 | 0.9 |
Factor de calibración final: 634.3359 · Intercepto: 3824.06 · Error promedio: 4.04 g · Error máximo: 10.13 g.
Hallazgo adicional del banco de pruebas: el peso real del tanque (modelo a escala) lleno resultó ser ~100g (no el valor inicialmente asumido de 1000g), y se identificó que la celda de carga es más susceptible a interferencia mecánica externa (presión accidental sobre el tanque) que el HC-SR04. Como resultado, se ajustó la lógica de fusión para priorizar el sensor de nivel (70/30 en condiciones normales, 100% nivel si hay discrepancia) — ver Variables Ambientales y Lógica de Fusión.
- Verificación funcional mediante bus I2C scanner y comparación de valores contra referencia ambiental (termómetro/higrómetro de referencia, y prueba de oclusión de luz con la mano para confirmar respuesta del BH1750).
- Presión atmosférica leída (~748-751 hPa) es consistente con la altitud de la sabana de Bogotá / zona del embalse de Tominé (~2600 msnm), validando la plausibilidad física de la lectura.
| Condición emulada | Método | Resultado esperado |
|---|---|---|
| Vaciado del embalse (modelo a escala) — nivel crítico | Extracción manual de agua / manipulación del nivel | Escalamiento Normal→Preventivo→Alto→Crítico, LEDs y buzzer cambiando en cada umbral |
| Llenado del embalse (modelo a escala) — mejora de nivel | Adición controlada de agua al tanque | Escalamiento inverso Crítico→Alto→Preventivo→Normal, demostrando que la lógica responde en ambas direcciones |
| Calor y radiación | Fuente de calor + linterna sobre BME280/BH1750 | Aumento del IEE; si IEE > 0.7 y hay riesgo base ≥25%, escalamiento +25 puntos ("ESCALADO") |
| Ventana corta de evapotranspiración |
VENTANA_EVAP_MS reducido temporalmente (de 1h a ~2 min) para pruebas de banco |
Cálculo de ET0 visible en /api/data y Monitor Serial sin esperar el ciclo real de producción (24h) |
| Discrepancia entre sensores | Fuerza externa manual sobre el tanque (alterando el peso sin alterar el nivel real) | El sistema detecta discrepancia_sensores = true y prioriza el nivel en vez de tomar el peor caso |
- Se verificó cada transición de estado (Normal↔Preventivo↔Alto↔Crítico) variando manualmente el nivel de agua, confirmando que el cambio de LEDs, patrón de buzzer y pantalla del LCD coincide con los umbrales definidos (25/50/75%).
- Se verificó el escalamiento climático (IEE) de forma aislada, confirmando que no se dispara si el riesgo base es Normal (<25%), evitando falsos positivos por clima cuando el nivel aún es saludable.
- Se verificó la regla de discrepancia forzando una diferencia >20 puntos entre
riesgo_nivelyriesgo_peso.
| Prueba | Procedimiento | Resultado |
|---|---|---|
| Latencia de alarma física | Cambio brusco de nivel → medir tiempo hasta cambio de LED/buzzer | ≤2s (ciclo de fusión) |
| Actualización del tablero web | Cambio de estado → medir tiempo hasta reflejarse en /api/data
|
≤3s (polling del frontend) |
| Actualización del histórico | Verificar /api/historico tras >5 min de ejecución |
Buffer circular de 60 muestras poblándose correctamente |
| Desactivación de alarma desde el tablero |
POST /api/silenciar con alarma activa |
Buzzer se silencia 10 min; LEDs continúan reflejando el estado real |
| Caso | Procedimiento | Resultado |
|---|---|---|
| Valores fuera de rango | Sensor desconectado / lectura inválida del HC-SR04 (duracion == 0) |
Se marca *_ok = false, expuesto en /api/data, evitando que una lectura inválida (-1) contamine el cálculo de nivel |
| Pérdida de WLAN | Apagar el router / alejar el ESP32 | El sistema sigue operando localmente (sensores, LEDs, buzzer, LCD); el tablero web queda inaccesible pero no se congela el firmware |
| Reconexión de WLAN | Restaurar la señal | Reconexión automática en ≤10s, sin reiniciar el ESP32 (gestionarWiFi() no bloqueante) |
| Acceso no autorizado | Intentar acceder a /api/data sin credenciales |
Solicitud de autenticación HTTP; sin credenciales válidas, no se expone ningún dato |
| Falla de subida de firmware por interferencia de pin | GPIO2 con periférico activo durante boot | Reubicación de la señal (HX711 SCK) a GPIO14, eliminando el conflicto |
- Calibración de la celda de carga repetida en dos sesiones (20-sep y 27-sep), documentando la mejora de error tras corregir la causa raíz mecánica — evidenciando un proceso de calibración repetible y trazable, no un ajuste de una sola vez.
- Consumo energético / autonomía estimada: (completar con medición de corriente promedio del sistema en operación normal, si se dispone de multímetro/medidor de consumo; estimar autonomía si se alimentara por batería).
const float SENSOR_ALTURA_CM = 10.54;
const float NIVEL_MAX_CM = 5.44;
const float FACTOR_CALIBRACION_HX711 = 634.3359;
const float PESO_MAX_TANQUE_G = 100.0;HydroSentry — Challenge #2
- Home
- Contexto y Problema
- Requisitos y Restricciones
- Arquitectura de la Solución
- Diseño de Hardware
- Diagramas UML
- Variables Ambientales y Lógica de Fusión
- Servidor Web Embebido
- Implementación Física y Carcasa
- Banco de Pruebas
- Autoevaluación del Protocolo
- Mejoras respecto al Challenge 1
- Uso de Inteligencia Artificial
- Resultados y Análisis
- Conclusiones, Retos y Trabajo Futuro
- Roles del Equipo
- Referencias
- Anexos