Llegó el turno del sensor de flujo de agua, otra pieza más del rompecabezas que estoy armando para mi módulo IOT de registro de consumo de agua en mi domicilio.
Primero tuve que dar caza a un sensor de consumo de agua apropiado. Hay diversas tecnologías y métricas en el mercado de venta de sensores de «water flow«.
(Lamentablemente) opté por un sensor de flujo de agua de bajo costo, debido a que los verdaderamente fiables cuestan varios cientos de dólares (o más).
Adquirí en la tienda de amazon.com un «Water Flow Sensor» de la marca DIGITEN, que mide caudales de hasta 60 litros por minuto, con un pase de rosca de 3/4 de pulgada.
En su configuración final, este sensor irá colocado después de la válvula o llave automática de la que hablé en mi post anterior.
Por otra parte, es el sensor preferido por los entusiastas de Arduino y otros microcontroladores, por lo que hay una cantidad de ejemplos de uso.
¿ Cómo funciona este sensor de flujo de agua ?
El sensor de flujo de agua es muy similar al contador de agua que coloca la compañía a la entrada de nuestro domicilio:
Dentro del sensor existe un eje con una serie de paletas, convenientemente colocadas en el medio del paso del agua, que girarán con la circulación del líquido.
En la parte superior del eje se produce la medición gracias a un sensor de «hall effect» que al girar y por medio de un imán, cierra un circuito mandando impulsos al Arduino.
El sensor de flujo de agua tiene en su etiqueta superior una serie de datos, entre los cuales se incluye la presión de trabajo (menor a 1.2MPa), capacidad (1 a 6 litros por minuto) y coeficiente para calcular litros (se multiplica la cantidad de impulsos por 5.5 para obtener los litros por minuto).
Utilizando el sensor de flujo de agua en un proyecto Arduino
De los tres cables que salen del sensor de flujo de agua, dos se utilizan para alimentarlo:
Si bien dice funcionar con 5 volts, yo lo he conectado a la salida de 3.3v de mi ESP8266 y parece funcionar perfectamente.
El tercer cable se conecta a una pata digital del Arduino compatible que pueda funcionar con interrupciones.
//El sensor de flow de agua va al gpio5 (D1) #define aguapin 5 </code> //Variable que va a ir sumando impulsos unsigned long aguacont=0; //preparo timer cada 1 segundo unsigned long mspasadosseg = 0; const unsigned long millisxseg = 1000; //Inicializo el WATER FLOW METER: pinMode(aguapin, INPUT_PULLUP); attachInterrupt(aguapin, agua, CHANGE); void setup() { Serial.begin(115200); //Inicializo el WATER FLOW METER: pinMode(aguapin, INPUT_PULLUP); attachInterrupt(aguapin, agua, CHANGE); } void loop() { yield(); //para el ESP8266 if ((millis() - mspasadosseg) > millisxseg) //Si ya pasó un segundo ... { mspasadosseg = millis(); Serial.println((String)aguacont); } } //Cada vez que el hall sensor del molinete del medidor de agua se activa void agua() { aguacont += 1; }
La idea es activar una interrupción al inicio de nuestro código, para que llame a una función que contabilice cada impulso que el sensor de flujo de agua genere.
Evidentemente el código de arriba es básico y solamente sirve para ilustrar los rudimentos de funcionamiento. En futuros artículos entraremos a pulir este sensor de flujo de agua.