Skip to content

Banco de Pruebas

Jcstevez edited this page Oct 3, 2026 · 1 revision

Banco de Pruebas — Configuración Experimental, Resultados y Análisis

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é.

1. Calibración de sensores contra referencia conocida (ground truth)

HC-SR04 (nivel)

  • 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_CM por 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.

HX711 + celda de carga (peso)

  • 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 comandos t (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.

BME280 / BH1750

  • 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.

2. Emulación acelerada de condiciones reales

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

3. Validación de la lógica de fusión y de los umbrales de alerta

  • 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_nivel y riesgo_peso.

4. Pruebas de notificación

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

5. Pruebas de robustez y casos límite

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

6. Repetibilidad, precisión y desempeño

  • 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).

Resumen de calibraciones (para referencia rápida)

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;

Clone this wiki locally