Repository navigation
3. Configuracion experimental
| Componente | Variable / Función | Pines ESP32 / Conexión | Voltaje | Notas de Acondicionamiento y Diseño |
|---|---|---|---|---|
| HC-SR04 | Nivel de agua (Ultrasonido) | TRIG: GPIO 5 ECHO: GPIO 18 |
5V | Requiere alimentación de 5V. La línea ECHO entrega 5 V sobre un GPIO de 3,3 V; ver limitaciones en 3.4. |
| DHT22 | Temperatura y Humedad | DATA: GPIO 15 | 3.3V | Se implementó una resistencia pull-up de 10kΩ entre el pin de datos y el riel de 3.3V para garantizar lecturas estables y evitar ruido en la línea. |
| LDR + resistencia de 10k Ω | Radiación solar (Luz) | AO (Analógico): GPIO 35 | 3.3V | Se utiliza únicamente la salida analógica (AO) para medir la intensidad lumínica. El pin digital (DO) se dejó desacoplado. |
| BMP280 | Presión atmosférica | SDA: GPIO 21 SCL: GPIO 22 |
3.3V | Configurado en el bus I2C. Dirección esclava 0x76 (pin SDO a GND). |
| LCD 1602 I2C | Visualización in situ | SDA: GPIO 21 SCL: GPIO 22 |
5V | Bus I2C compartido con el BMP280. Se alimentó a 5V para asegurar el brillo adecuado del backlight. |
| LEDs (3) | Indicadores de estado | Verde: GPIO 25 Amarillo: GPIO 26 Rojo: GPIO 27 |
3.3V | Cada LED cuenta con su respectiva resistencia limitadora de corriente de 220Ω en serie para proteger los pines del ESP32. |
| Buzzer | Alarma acústica | Signal: GPIO 33 | 5V / 3.3V | Conexión directa respetando la polaridad del componente. |
| ZJ-S201 | Caudal de agua | Signal: GPIO 32 | 5V | Requiere 5 V: a 3,3 V el sensor magnético no genera pulsos de forma confiable (ver 3.4). Factor de conversión calibrado: 3,88 pulsos por mililitro. |
| Wi-Fi (integrado en ESP32-WROOM) | Conectividad y tablero de control | Radio interna del SoC, sin pines externos | 3.3V | Opera en modo estación (STA) dentro de la WLAN de la zona. No requiere hardware adicional: el tablero se sirve desde el servidor web embebido en el propio microcontrolador. |
| Carcasa | Protección física del conjunto | — | — | PLA, 210 × 80 × 130 mm |
| Justificaciones: |
- Para conservar pines GPIO del ESP32, el sensor barométrico y la pantalla LCD comparten el mismo bus I2C de GPIO 21 y 22. Esto es posible ya que ambos módulos poseen direcciones de hardware, evitando colisiones en la comunicación.
- Para las señales digitales, el sensor DHT22 exige una topología de bus una sola línea, por lo que la inclusión de una resistencia es una decisión indispensable para estabilizar el estado en alto de la línea de datos.
- Los LEDs fueron aislados mediante resistencias de 220 Ω para limitar la corriente de salida de los GPIO. Las líneas de señal que provienen de componentes alimentados a 5 V (ECHO del HC-SR04 y salida del sensor de caudal) superan el máximo de 3,6 V que toleran los GPIO del ESP32. En el prototipo entregado se conectaron de forma directa y el sistema opera de manera estable, pero esta es una condición fuera de especificación que se documenta como limitación en la sección 3.4.
El firmware se desarrolló en C++ sobre el entorno de Arduino IDE para ESP32. Las librerías utilizadas son:
-
WiFi.h, del core de ESP32, gestiona la conexión en modo estación a la WLAN local. -
WebServer.h, del core de ESP32, implementa el servidor HTTP embebido que sirve el tablero de control. -
Wire.h, nativa de Arduino, gestiona el bus I2C y permite que el BMP280 y la pantalla LCD compartan los mismos pines. -
LiquidCrystal_I2Ccontrola la pantalla LCD1602 a través de su adaptador I2C. -
DHTesp, de beegee-tokyo, gestiona el protocolo de un hilo del DHT22. Es específica para ESP32 y maneja los tiempos con mayor precisión que la librería estándar de Arduino. -
Adafruit_BMP280.h, de Adafruit Industries, proporciona el controlador y la calibración de fábrica del sensor barométrico. -
Adafruit_Sensor.h, de Adafruit Industries, estandariza la salida de datos y es dependencia del driver del BMP280.
El enunciado exige que la medición se ejecute fuera del hilo principal. La adquisición se implementó como una tarea de FreeRTOS creada con xTaskCreatePinnedToCore(), anclada al núcleo 0, con prioridad 1 y pila de 4096 bytes. El periodo de la tarea es de 2000 ms y se mantiene con vTaskDelayUntil(), que conserva la cadencia independientemente de lo que tarde cada ciclo de lectura. El loop(), que en ESP32 corre en el núcleo 1, queda dedicado a atender las peticiones del servidor web.
Las dos tareas comparten la estructura de estado del sistema. El acceso se protege con un mutex de FreeRTOS, de modo que el tablero no pueda leer una estructura a medio actualizar mientras la tarea de medición la escribe.
El sensor de caudal genera pulsos de alta frecuencia proporcionales al flujo. Para no perder ninguno, se configuró una interrupción de hardware en el GPIO 32 que se dispara por flanco de bajada e incrementa un contador en memoria volatile. El acceso a ese contador se hace de forma atómica mediante portMUX_TYPE, tanto desde la ISR como desde la tarea de medición.
Se evitaron las funciones bloqueantes como delay() en la operación normal. La reconexión a la WLAN también es no bloqueante: el loop() revisa el estado de la red cada 10 segundos y reintenta la conexión si se perdió, mientras la tarea de medición y la alarma física continúan sin interrupción.
El tablero se sirve desde el ESP32 mediante WebServer.h en el puerto 80. El HTML, CSS y JavaScript están embebidos en PROGMEM, por lo que el tablero funciona en una WLAN sin salida a internet. El acceso queda restringido por dos mecanismos independientes: el servidor se expone únicamente en la dirección IP privada que el ESP32 recibe de la WLAN, no alcanzable desde fuera de la red local y todas las rutas exigen autenticación HTTP basic.
La página consume tres endpoints:
| Endpoint | Método | Qué devuelve |
|---|---|---|
/api/datos |
GET | Valores actuales de todas las variables, estado de alerta y estado del silencio |
/api/historico |
GET | Serie reciente de lecturas |
/api/silenciar |
POST | Silencia el buzzer sin apagar los LEDs |
El histórico se mantiene en un búfer circular en memoria: se guarda un punto cada 5 lecturas, es decir cada 10 segundos, con capacidad para 60 puntos, equivalentes a 10 minutos de registro. Al llenarse, cada punto nuevo descarta el más antiguo.
- Multiplexado por división de tiempo en el LCD. La pantalla alterna automáticamente cada 4 segundos entre tres vistas (nivel y temperatura con el estado, radiación y humedad, caudal y volumen acumulado), lo que permite exponer seis variables en una pantalla de 16×2 sin añadir botones.
- Filtrado en el BMP280. El sensor se configura por software con sobremuestreo de presión, filtro IIR y modo de espera de 500 ms. Esto delega el procesamiento de señal y la estabilización al propio sensor y reduce la carga computacional del ESP32.
- Silencio de alarma con rearme automático. Cuando la autoridad silencia la alarma desde el tablero, el buzzer se apaga pero los LEDs siguen mostrando el estado real. El silencio se rearma solo cuando el estado cambia, de modo que una alarma silenciada no oculta una agravación posterior.
El núcleo del sistema es la combinación de varias señales ambientales en el borde para decidir el nivel de alerta. La función evaluarAlerta() recibe tres entradas: nivel de agua, evaporación potencial y caudal instantáneo.
En el Challenge #1 se usaba un índice heurístico que ponderaba temperatura, humedad y radiación con pesos asignados por el equipo. En esta versión se reemplazó por la ecuación de Priestley-Taylor (1972), que entrega evaporación potencial en mm/día [8]:
E = \alpha \cdot \frac{\Delta}{\Delta + \gamma} \cdot \frac{R_n}{\lambda}Donde la pendiente de la curva de presión de vapor (Δ) se obtiene de la temperatura del DHT22 [6], la radiación neta (Rn) se deriva de la irradiancia medida por el LDR aplicando el albedo del agua, y la constante psicrométrica (γ) depende de la presión atmosférica medida por el BMP280.
| Parámetro | Valor | Justificación |
|---|---|---|
| α (coeficiente de Priestley-Taylor) | 1.26 | Valor original de Priestley y Taylor para superficies saturadas. La literatura reporta valores mayores en climas áridos, donde 1.26 subestima la evaporación. |
| Albedo | 0.06 | Corresponde a agua abierta. No se usa el 0.23 de FAO-56, que es para pasto de referencia. [9] |
| Temperatura | DHT22 | La temperatura del BMP280 queda disponible como verificación cruzada, pero no entra en el cálculo. |
| Presión | BMP280 | Medida en sitio. |
La humedad relativa se mide y se reporta en el LCD y en el tablero, pero no entra en este cálculo: Priestley-Taylor usa temperatura, radiación y presión.
La conversión de la lectura cruda del ADC a W/m² se implementa como una interpolación lineal entre dos puntos de calibración tomados en sitio: la lectura en sombra exterior y la lectura en sol directo al mediodía, a las que se asignan los valores de irradiancia que la literatura reporta para esas condiciones. El método de calibrar un LDR contra una referencia y ajustar una regresión está documentado en trabajos de instrumentación de bajo costo, donde se reportan correlaciones por encima de 0,99 entre el voltaje del LDR y la irradiancia dentro de rangos acotados [10].
Se trata, aun así, de una aproximación deliberada. La respuesta física de un LDR sigue una ley de potencia entre resistencia e iluminancia, R = A·E^−γ, con γ típicamente entre 0,7 y 0,9 para celdas de sulfuro de cadmio, que se linealiza en escala logarítmica y no en escala directa. A esto se suma que la respuesta espectral de estos sensores tiene su pico cerca de los 550 nm, por lo que subrepresenta la fracción infrarroja de la radiación solar. La escala en W/m² debe entenderse entonces como una estimación de orden de magnitud dentro del rango calibrado, suficiente para alimentar la lógica de alerta, no como una medición radiométrica.
| Parámetro | Valor |
|---|---|
| Nivel de advertencia | 30 % |
| Nivel crítico | 15 % |
| Caudal anómalo | 15 L/min |
| Evaporación alta | 5 mm/día |
- NORMAL (LED verde, sin alarma sonora): nivel por encima del 30 %, evaporación por debajo de 5 mm/día y caudal por debajo de 15 L/min.
- ADVERTENCIA (LED amarillo, buzzer intermitente de 1000 Hz): se activa si se cumple al menos una de las tres condiciones de riesgo.
- CRÍTICO (LED rojo, buzzer continuo de 2200 Hz): se activa cuando el nivel baja del 15 %, o cuando el nivel está por debajo del 30 % y además se cruza con evaporación alta o con consumo anómalo.
- FALLA (LED verde y rojo encendidos a la vez, pitido corto de 500 Hz, "FALLA DE SENSOR" en el LCD): no es un nivel de riesgo hídrico sino un estado de diagnóstico del propio dispositivo.
Los umbrales no son fijos: dependen del estado anterior. Para entrar en alerta se usa el umbral nominal, pero para salir de ella hay que superarlo por un margen.
| Variable | Margen |
|---|---|
| Nivel | 3 puntos porcentuales |
| Evaporación | 0,5 mm/día |
| Caudal | 2 L/min |
Con un margen de 3 puntos, el sistema entra en advertencia al bajar del 30 % pero solo vuelve a normal al superar el 33 %. El margen se aplica en una sola dirección, porque retrasar la entrada en alerta sería inaceptable en un sistema de alerta temprana. La histéresis se apoya en la última evaluación válida, no en el último estado mostrado, de modo que un episodio de FALLA no borra la memoria del estado hídrico.
El sistema vigila los dos sensores de los que depende directamente la evaluación de riesgo:
- HC-SR04 sin lectura válida (eco fuera de rango o sin retorno): el estado pasa a FALLA de inmediato, porque sin nivel no hay forma de evaluar riesgo hídrico. Esto corrige el diseño del Challenge #1, donde un sensor caído producía un estado NORMAL.
- DHT22 en NaN: la evaluación continúa con las demás variables, y la falla se reporta solo si no hay un estado crítico confirmado. Una emergencia hídrica real nunca queda oculta detrás de un aviso de diagnóstico. El LDR y el sensor de caudal no tienen detección de falla: el primero siempre entrega un valor por ADC aunque esté desconectado, y en el segundo la ausencia de pulsos es indistinguible de la ausencia de flujo. Queda documentado como limitación conocida.
El banco de pruebas se diseñó para validar el prototipo en cuatro frentes: la exactitud de cada sensor, la lógica de fusión y sus alertas, los canales de notificación y la robustez del sistema ante fallas. Todas las lecturas se tomaron desde el Monitor Serie del Arduino IDE (115200 baud) y desde el tablero de control.
Nivel (HC-SR04): Para hacer mediciones precisas de manera sencilla y sin manipular agua, el prototipo se colocó de lado, con una regla alineada desde la cara frontal del sensor. Como superficie de reflexión se usó un objeto plano a distancia al sensor, que simula la superficie del agua. Se tomaron seis puntos de distancia (2, 3, 4,5, 7, 9,5 y 11 cm), escogidos para cubrir las tres zonas de alerta del sistema: NORMAL, ADVERTENCIA (≤ 30%) y CRÍTICO (≤ 15%). En cada punto se registraron cinco lecturas consecutivas del nivel reportado, para calcular el promedio y el error frente al nivel real.
Radiación solar (LDR): Se caracterizó la respuesta del divisor de voltaje del LDR registrando la lectura cruda del ADC (0–4095) en cinco condiciones de iluminación. La respuesta es monótona: a mayor iluminación, mayor lectura, lo que confirma que el sensor y su divisor responden correctamente. Las lecturas de sol directo y de sombra exterior se usaron como los dos puntos de la interpolación lineal que convierte el ADC a W/m². Las constantes de calibración del firmware se ajustaron con estas dos lecturas propias, reemplazando los valores de ejemplo con los que se desarrolló inicialmente el código.
Caudal (ZJ-S201): Se hizo pasar un volumen conocido de agua (870 ml, medido con un recipiente graduado) a través del sensor y se comparó con el volumen acumulado que reporta el sistema.
Presión (BMP280): La presión medida se comparó con la presión registrada por la plataforma de AccuWeather para Bogotá, de 1026 hPa. Ese valor corresponde a la presión reducida al nivel del mar, que es la convención que usa la mayoría de los servicios meteorológicos para que los mapas de presión no queden distorsionados por las diferencias de elevación entre estaciones [12]. Como no es la presión que existe físicamente a 2600 m, se convirtió a presión local para la altitud de Bogotá mediante la relación de atmósfera estándar de la ecuación 7 de FAO-56 [9].
Temperatura (DHT22): Se midió la temperatura con el sensor y se comparó con la de un termómetro dentro del espacio.
Para provocar los eventos críticos en tiempo corto, en lugar de esperar condiciones ambientales reales, se usaron las siguientes fuentes:
- Descenso de nivel: vaciado controlado del recipiente de pruebas.
- Caudal: vertido controlado de agua a través del sensor.
- Radiación y temperatura: lámpara.
La emulación se empleó para llevar el sistema a cada estado de alerta y verificar su respuesta, no para caracterizar la evolución temporal de las variables. No se registró la secuencia de valores a lo largo del tiempo durante estas pruebas, lo que se declara en la autoevaluación del protocolo.
Se llevó el sistema a cada combinación relevante de condiciones y se comparó el estado reportado con el esperado según los umbrales definidos en 3.1.3. Las condiciones se forzaron mediante la emulación descrita arriba y, cuando no fue posible provocarlas físicamente, mediante inyección de valores en el código, práctica que se declara de forma explícita por transparencia metodológica.
- Pérdida de WLAN: se apagó el punto de acceso para comprobar que la medición y la alarma física sigan funcionando, y que el dispositivo se reconecte solo.
- Acceso restringido: se intentó abrir el tablero sin credenciales y con credenciales incorrectas.
Se realizaron pruebas sobre todos los sensores del circuito. El BMP280, que había quedado fuera del prototipo anterior, entregó lecturas válidas tras revisar sus conexiones e integrar su lectura en el firmware. El HC-SR04 y el ZJ-S201 requirieron calibración para entregar valores utilizables, y el LDR responde de forma consistente a la iluminación aunque su conversión a W/m² aún no está validada contra una referencia independiente. Los resultados de cada uno se detallan a continuación.
Con la configuración inicial (rango máximo de 7 cm) se observó una alta volatilidad ante cambios pequeños de distancia y una zona muerta cercana al sensor [5], en la que las lecturas son inconsistentes; a distancias muy cortas, el sensor no entrega lectura. Por ejemplo, a 2 cm reales el sensor reporta aproximadamente 3,8 cm. Tras la calibración con las lecturas del propio sensor (100% de capacidad a 2 cm reales y distancia máxima de 12 cm), se obtuvieron los siguientes resultados:
| Distancia sensor–agua (cm) | Nivel real (%) | Lectura 1 (%) | Lectura 2 (%) | Lectura 3 (%) | Lectura 4 (%) | Lectura 5 (%) | Promedio (%) | Error (p.p.) |
|---|---|---|---|---|---|---|---|---|
| 2,0 | 100 | 100,0 | 100,0 | 100,0 | 100,0 | 100,0 | 100,00 | 0,00 |
| 3,0 | 90 | 93,8 | 93,6 | 93,6 | 93,6 | 93,6 | 93,64 | 3,64 |
| 4,5 | 75 | 75,0 | 75,7 | 75,7 | 70,0 | 70,2 | 73,32 | -1,68 |
| 7,0 | 50 | 52,2 | 52,2 | 46,6 | 46,6 | 52,2 | 49,96 | -0,04 |
| 9,5 | 25 | 23,6 | 23,6 | 23,6 | 23,6 | 23,6 | 23,60 | -1,40 |
| 11,0 | 10 | 4,5 | 6,4 | 5,6 | 5,6 | 5,6 | 5,54 | -4,46 |
Error = promedio − nivel real.
Se caracterizó la respuesta del LDR registrando la lectura cruda del ADC en cinco condiciones de iluminación, representativas de las que enfrentará el sensor en campo. La lectura aumenta de forma consistente con la iluminación.
| Condición | ADC crudo | Radiación calculada (W/m²) |
|---|---|---|
| Tapado | 50 | 122 |
| Sombra | 170 | 150 |
| Interior | 289 | 178 |
| Ventana | 500 | 228 |
| Sol directo | 3357 | 900 |
Los puntos de sombra y sol directo son los que definen la recta de conversión, por lo que coinciden por construcción con los valores asignados. Las tres condiciones restantes son predicciones del modelo.
Como volumen de prueba se usó un termo con aproximadamente 870 ml de agua, vertido a través del sensor. Se realizaron cuatro pruebas variando el voltaje de alimentación, la velocidad de vertido y el factor de conversión:
| Prueba | Condición | Volumen esperado (ml) | Volumen registrado (ml) | Error (ml) | Error (%) |
|---|---|---|---|---|---|
| 1 | 3,3 V, factor 7,5 | 870 | 2 | -868 | -99,8 |
| 2 | 5 V, factor 7,5, flujo bajo | 870 | 190 | -680 | -78,2 |
| 3 | 5 V, factor 7,5, flujo alto | 870 | 450 | -420 | -48,3 |
| 4 | 5 V, factor calibrado (3,88), flujo alto | 870 | 790 | -80 | -9,2 |
Error = registrado − esperado.
Estos sensores no requirieron calibración; se verificó que sus lecturas fueran coherentes con los valores esperados para Bogotá durante un lapso de 5 minutos:
| Variable | Valor esperado | Rango registrado (5 min) |
|---|---|---|
| Presión | 75,06 kPa | 74,87–74,89 kPa |
| Humedad | 76,5% | 70,9–72,0% |
| Temperatura | 21,8 °C | 21,2–21,3 °C |
El valor esperado de la presión proviene de la aplicación AccuWeather [15] y el de humedad proviene de la página del SAB [14], consultados al momento de realizar las mediciones. La presión reportada corresponde al nivel del mar y se convirtió a la altitud de Bogotá. La temperatura de referencia proviene de la medición con un termómetro en el espacio.
| Condición forzada | Estado esperado | Estado obtenido | ¿Coincide? |
|---|---|---|---|
| Nivel normal, evaporación baja, caudal normal | NORMAL | NORMAL | Si |
| Nivel por debajo del 30 % | ADVERTENCIA | ADVERTENCIA | Si |
| Nivel por debajo del 30 % con evaporación alta | CRÍTICO | CRÍTICO | Si |
| Nivel por debajo del 30 % con caudal anómalo | CRÍTICO | CRÍTICO | Si |
| Nivel por debajo del 15 % | CRÍTICO | CRÍTICO | Si |
En las combinaciones probadas el estado reportado coincidió con el esperado. No se cuantificó la tasa de falsos positivos ni de falsos negativos: para ello se requeriría un número mayor de repeticiones por condición, lo que no se alcanzó a ejecutar en esta entrega.
| Prueba | Comportamiento esperado | Comportamiento observado |
|---|---|---|
| Apagado del punto de acceso WLAN | La medición y la alarma física continúan; el tablero deja de estar disponible | La alarma siguió sonando y el tablero dejó de cargar |
| Acceso al tablero sin credenciales | Acceso denegado | Acceso denegado |
| Acceso al tablero con credenciales incorrectas | Acceso denegado | Acceso denegado |
Estas pruebas se realizaron de forma cualitativa, observando el comportamiento del dispositivo. No se midió el tiempo de reconexión ni se verificó el acceso desde fuera de la WLAN, pruebas que se declaran como no ejecutadas en la sección 4.3.
La causa de los errores iniciales fue la zona muerta del sensor. Aunque la hoja de datos del HC-SR04 indica un rango mínimo de 2 cm, por debajo de esa distancia reporta siempre un valor similar, sin importar la distancia real. Con el rango original de 7 cm, buena parte del recorrido del agua caía en esa zona, lo que explicaba las lecturas inconsistentes. Calibrar el sensor con sus propias lecturas y ampliar la distancia máxima a 12 cm dejó casi todo el rango de medición en la zona donde el sensor responde de forma lineal.
Tras la calibración, el error promedio se mantuvo por debajo de 5 puntos porcentuales en todos los puntos medidos. El mayor error (−4,46 p.p.) se presentó a 11 cm, con el recipiente casi vacío. Aun así, en todos los puntos el sistema clasificó correctamente la zona de alerta: CRÍTICO a 11 cm, ADVERTENCIA a 9,5 cm y NORMAL en el resto. La mayor dispersión entre lecturas se observó a 4,5 cm (entre 70,0% y 75,7%), lo que refleja la volatilidad del sensor. Tambien en valores muy cercanos y comienza a dar valores nulos, el sistema ahora da FALLA.
Limitaciones:
- Entre 2 cm (y hasta un poco más) del sensor, la medición queda saturada, se ve que el sensor no distingue niveles dentro de esa franja superior. No afecta las alertas, que operan con niveles bajos (≤ 30%), lejos del sensor.
- Las pruebas se hicieron con un objeto plano en lugar de agua. La superficie del agua puede reflejar distinto (ondulaciones, ángulo), así que el comportamiento en campo podría variar.
El LDR responde de forma monótona a la iluminación, con buena separación entre condiciones: la lectura del ADC va de 50 con el sensor tapado a 3357 en sol directo. Esa separación confirma que el divisor de tensión funciona y que la señal es utilizable para distinguir condiciones de radiación.
Los dos puntos de calibración se fijaron asignando a la lectura en sombra y a la de sol directo los valores de irradiancia que reporta la literatura para esas condiciones (150 y 900 W/m²). La escala resultante es coherente con el orden de magnitud esperado al mediodía en Bogotá, pero por construcción pasa por esos dos puntos: la exactitud absoluta no queda verificada por esta prueba. Lo que sí resulta informativo son las condiciones intermedias, donde la recta no está obligada a pasar por ningún valor y los resultados (178 W/m² en interior, 228 en ventana) son plausibles.
Limitaciones:
- El LDR es un proxy de radiación, no un piranómetro: su respuesta depende del espectro de la luz incidente y de la temperatura, y la literatura reporta errores del orden del 30 % frente a instrumentos de referencia.
- La escala está anclada a las lecturas del sensor instalado, pero los valores de irradiancia asignados a los dos puntos provienen de literatura y no de una medición con instrumento. Validarlos contra un luxómetro o un piranómetro queda como trabajo pendiente.
- La recta se extrapola por debajo del punto de sombra, de modo que lecturas más oscuras siguen reportando valores positivos: con el sensor tapado el sistema calcula 122 W/m² en lugar de 0. No afecta la lógica de alerta, que responde a radiación alta, pero el extremo inferior de la escala no es confiable.
Las pruebas mostraron dos problemas sucesivos. Primero, alimentado a 3,3 V, el sensor prácticamente no generó pulsos (2 ml de 870 ml): su sensor magnético interno requiere 5 V para funcionar. Segundo, ya a 5 V, el volumen registrado dependió de la velocidad de vertido: 190 ml con flujo bajo y 450 ml con flujo alto, para el mismo volumen real. Esto indica que con caudales bajos (por debajo de ~1 L/min) el rotor no gira de forma proporcional al flujo y se pierden pulsos.
Limitaciones:
- La calibración solo es válida para flujos altos; con caudales bajos, el sistema subestima el volumen.
- La calibración se basa en una sola prueba; se requieren más repeticiones para confirmar el factor.
- La señal del sensor opera a 5 V y se conecta al ESP32 sin adaptación de nivel, por encima de su máximo de 3,6 V. Funciona en la práctica porque los diodos de protección del GPIO desvían el exceso de tensión, pero es una condición fuera de especificación que degrada el pin con el tiempo.
La presión registrada (74,87–74,89 kPa) coincide dentro del 0,25 % con el valor de referencia convertido a la altitud de Bogotá, lo que confirma que el BMP280 funciona tras la corrección de la entrega anterior. La temperatura se mantuvo estable (21,2–21,3 °C), con una diferencia de 0,5 °C frente a la referencia. La humedad registrada (70,9–72,0 %) quedó unos cinco puntos porcentuales por debajo de la referencia. La diferencia se explica porque la medición se hizo en un ambiente interior, cuya humedad no tiene por qué coincidir con la exterior.
- Las pruebas se realizaron en un ambiente doméstico, no en el sitio de despliegue (embalse del Neusa, ~3000 m).
- Si el BMP280 falla, la presión se estima por altitud; el sistema sigue operando, pero con menor exactitud en la evaporación.
- La carcasa impresa en PLA es adecuada para el prototipo y las pruebas de laboratorio. Para operación permanente a 3000 m, con heladas nocturnas y radiación directa, el PLA se vuelve quebradizo; una versión de campo debería imprimirse en PETG o ABS.