Controlador de nivel de agua en tanque con sensor ultrasonico y Arduino.

Este será el primer tutorial de muchos de la serie Arduino. El propósito del mismo es dar a conocer que está realizando la comunidad de arduineros en cuba. El siguiente tutorial fue realizado por Leonardo Navarro (AKA @LeoNavarro95) miembro de la comunidad cubana de Arduino (https://t.me/ArduinoCuba).

Resumen:

En el presente tutorial se muestra cómo implementar un sistema de control de nivel para tanque elevado basado en ESP32. Como elemento sensor de nivel se escogió un sensor ultrasónico impermeable. El sistema es capaz de detectar si la bomba hidráulica está funcionando correctamente gracias a un flujómetro. La información del nivel y del flujo a la salida de la bomba es mostrada por una pantalla LCD. Un buzzer sirve como interfaz sonora para conocer de posibles eventos en el sistema.

Introducción:

El agua es un recurso de gran valor para la sociedad, de más está decir la necesidad de la misma para realizar las actividades hogareñas. Cuando en una casa falta este recurso nada funciona bien todo depende del agua, desde la limpieza hasta la elaboración de los alimentos. Por lo tanto, resulta incuestionable que este tesoro natural no se derroche y que se aproveche al máximo. En Cuba son muchos los casos en los que nos encontramos con casas que disponen de tanques elevados o cisternas, los cuales se llenan a través de una bomba que succiona agua de un pozo o cisterna.

En mi casa contamos con un pozo y un tanque elevado que se encarga de almacenar el agua que es bombeada. La idea de este proyecto vino principalmente de la molestia que resulta tener que estar al tanto del encendido y apagado de la bomba hidráulica de la casa, además de que cuando el tanque se llena se salpican de agua las casas de los vecinos y también se derrocha el preciado líquido. Por otro lado, nunca nos sucedió, pero si se te olvida que habías puesto la “turbina” (término mal usado en la población cubana, debe ser bomba) y te ibas para la calle por mucho tiempo, se le podía poner el cartel de EPD a la bomba que se iba a quemar. En muchas ocasiones los vecinos eran quienes nos avisaban de que el tanque se estaba desbordando, lo que constituye un sistema sensorial muy primitivo jejeje, y es muy molesto para ellos. Cuidar la bomba hidráulica es un aspecto importantísimo pues estas no son muy baratas que digamos.

Cuando conocí el mundo de Arduino me di cuenta que no era tan complejo hacer un sistema automático para el control del llenado/vaciado del tanque. Y me puse manos a la obra, desarrollé uno que lleva más de un mes funcionando a la perfección, entonces pensé ¿por qué no compartirlo con todos? Así que en el presente tutorial les muestro cómo lo hice.

Listado de materiales para el proyecto:

  • Placa basada en microcontrolador: DOIT ESP32 DevKit V1 (Cantidad x1)

  • Sensor ultrasónico impermeable: JSN SR04T (Cantidad x1)

  • Módulo relé de un canal : (Cantidad x1)

  • Sensor de flujo: Yf-s201 (Cantidad x1)

  • Pantalla LCD 16×2: (Cantidad x1)

  • Placa para prototipo de bakelita (perfboard): (Cantidad x1)

  • Buzzer: (Cantidad x1)

  • Fuente de alimentación de 5V a 500mA (Cantidad x1)

Diagrama de conexiones:

¿Cómo funciona el sistema?

El sistema va a medir el nivel del tanque y a partir de dos parámetros prefijados para el nivel alto y el nivel bajo, va a tomar la decisión de encender o apagar la bomba. En otras palabras, si por ejemplo, se toma como nivel bajo el 40% del total de la capacidad del tanque y como nivel alto el 90%, el sistema va a mandar a encender la bomba (por medio del relé) cuando el nivel sea inferior a 40% hasta que llegue al 90% donde será apagada. Paralelamente a este proceso, mientras esté encendida la bomba, el sistema va a chequear que exista flujo a su salida (que la bomba esté “halando” agua) y en caso de que no exista flujo a la salida de la bomba, la va a mandar a parar, esto es para evitar que se queme, pues una bomba encendida sin bombear agua un tiempo relativamente corto se quema, pues se basa en el agua para su propia lubricación y enfriamiento.

Adicionado a todo esto, en la pantalla LCD se mostrará todo el tiempo los datos del % de agua existente en el tanque, el flujo de agua y notificará en caso de algún error como cuando la bomba no bombea. Como un apoyo a la pantalla, el sistema contará con un buzzer a forma de señal sonora, el que producirá sonidos ante la ocurrencia de eventos como: encendido de la bomba, parada de la bomba y error.

A continuación se presentan un número de pasos que servirán de guía para la realización de este proyecto:

Paso 1: Instalación del sensor ultrasónico.

El sistema se basa principalmente en medir el nivel del tanque por medio del sensor ultrasónico impermeable JSN SR-04T el cual va a estar ubicado en la tapa del tanque apuntando hacia el agua. En la figura que se muestra se aprecia cómo se logra medir el nivel de agua (N) con este sensor, a partir de tener la altura del tanque (H) (que es constante) y la distancia medida por el sensor (S), el nivel de agua sería la resta de la altura del tanque menos la distancia medida por el sensor: N = H – S. Entonces con esa sencilla ecuación es posible conocer el nivel existente en nuestro tanque. Este debería ser el primer paso, colocar el sensor en el tanque y visualizar por la pantalla LCD el nivel de agua existente en el tanque.

Si la distancia existente entre la placa de control del sensor y el microcontrolador es grande no se preocupe, el sistema que monté tiene 13m de cable entre ambos y solo hay una pérdida de 0.1V en tal distancia. Para el cableado de los sensores se empleó cable UTP (conocido también como cable de red o par trenzado). En la imagen que sigue se muestra como quedaría conectado el cable UTP.

Durante estas pruebas con solo el sensor ultrasónico conectado tuve que emplear filtrado digital pues las lecturas del sensor esporádicamente se hacían cero (esto pasa cuando se dan lecturas fuera de rango, sospecho que se deba al eco que se puede producir en el interior del tanque pues es una estructura cerrada). Además, las lecturas se volvían muy ruidosas cuando se encendía la bomba, seguro porque el cable que alimenta a la bomba pasaba junto al del sensor. Con un filtro promedio se resolvió el problema este y las lecturas del sensor se ven en la LCD con estabilidad.

Como el sensor ultrasónico trae separado el sensor de la electrónica es necesario idear alguna forma de que la placa de control quede bien aislada del medio ambiente. En la imagen siguiente se muestra una cajita que se desarrolló para proteger a la placa electrónica que controla al sensor.

Luego de probar tal sensor por unos días y comprobar que todo funcione correctamente se procede al siguiente paso:

Paso 2: Instalación del sensor de flujo y comprobación de su correcto funcionamiento.

Si se quiere que este sensor posea buena precisión es requerida su calibración, como en este caso especial no nos interesa conocer con exactitud la cuantía de flujo, sino su existencia, no se cubrirá tal aspecto. En la imagen se muestra cómo queda el sensor instalado en la tubería.

En la imagen siguiente se muestra el display LCD mostrando los datos de las lecturas del flujómetro. Para comprobar el correcto funcionamiento de tal sensor se simuló como si la bomba hubiese dejado de funcionar, quitándole la alimentación, en todos los casos el sensor se comportó correctamente.

Paso 3: Empleo del módulo relé para controlar el encendido y apagado de la bomba.

En la imagen anterior también ya se estaba haciendo uso del módulo relé, pues se mandaba a encender la bomba un tiempo predeterminado el cual se muestra en la LCD en la primera fila. Por otro lado en estos experimentos el sistema tomaba la decisión de apagar la bomba si el flujómetro no detectaba caudal por la tubería y si todo marchaba bien al terminarse el tiempo programado se apagaba la bomba.

Paso 4: Unión de todo para conformar el sistema completo.

En la siguiente figura se muestra todo el sistema en una caja plástica. Como fuente de alimentación (esquina derecha superior dentro de la caja) se escogió una fuente de un DVD que se encontraba obsoleto, pero se puede emplear cualquier fuente de cargador de teléfono móvil que de una salida de corriente mayor que 250mA.

La pantalla LCD mostrando los datos de los sensores. La flecha indica que se está bombeando, si estuviese hacia abajo indica lo contrario.

Programación del microcontrolador

Para programar el microcontrolador se emplea el IDE de Arduino, dado que se empleará una placa ESP32, hay que instalarla en el IDE, seguir este tutorial para ello. Una vez instalada la placa ESP32 en el IDE de Arduino se selecciona el modelo de la placa y el puerto al cual se encuentra conectada:

Aquí les dejo el código del proyecto:

Para los que les interese mejorar y participar en este proyecto mejore el código usando VSCODE y PLATFORMIO y lo subí a github.Las mejoras en esta versión son:

    • Código más organizado por módulos.
    • Actualización via OTA
    • Uso de tareas para aprovechar los núcleos del ESP32
    • Implementación de una web para el control del proyecto

Próximamente les compartiré el mismo código con muchísimas mejoras más. Como usar el modo 3 del sensor el cual manda el dato por serial es más exacto y económico. También el uso de 2 sensores ultrasónicos uno para el tanque elevado y el otro para la cisterna. Código más modular aun, permitiendo activar o desactivar módulos de software sino usa determinado sensor o actuador. Así como animaciones en el display.

Asi es como quedo el proyecto finalmente

Espero que este humilde aporte les sirva a muchos en sus casas. Siéntanse libre de modificar el código a su gusto y de darme recomendaciones para su mejora.

 

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 4.8 / 5. Recuento de votos: 38

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Sobre Alexander Rivas Alpizar 61 artículos
Administrador de Redes EMPRESTUR Cienfuegos

22 comentarios

  1. Microsoft Edge 81.0.416.64 Microsoft Edge 81.0.416.64 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36 Edg/81.0.416.64

    Soy nuevo en Arduino, pero me surgió el interés de usarlo y buscando que hacer para estos días me encontré tu proyecto.
    Me parece excelso tu proyecto, lo tratare de replicar en un Arduino uno, o en un NODEMCU, la verdad se casi nada de programación pero soy bueno para discernir como funciona el código, y comenzarlo a modificar poco a poco.
    Espero tener contacto contigo para que me apoyes en mi proceso.

    si lo hago en NODEMCU Tratare de implementar Blynk,

    te mantendré al tanto esperando tu interés.

    Saludos cordiales.

  2. Opera 67.0.3575.115 Opera 67.0.3575.115 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 OPR/67.0.3575.115

    Gracias por el comentario, estoy a tu disposición para lo que necesites.
    Puedes hacerlo con la placa arduino que desees. Si empleas un display LCD i2c te ahorras muchos pines.
    Saludos

  3. Google Chrome 79.0.3945.116 Google Chrome 79.0.3945.116 Android 7.1.1 Android 7.1.1
    Mozilla/5.0 (Linux; Android 7.1.1; Moto E (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.116 Mobile Safari/537.36

    Muchas gracias por compartir este proyecto, creo que es exelente y pienso implementarlo lo más pronto posible solo me faltan algunos componentes como el sensor de ultrasonidos, la LCD y el sensor de flujo, bueno casi todo, pero lo voy a mandar a comprar en cuanto se restablezcan los vuelos, cuando lo logre armar comparto que tal me fue. Saludos

  4. Google Chrome 84.0.4147.105 Google Chrome 84.0.4147.105 Windows 10 Windows 10
    Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36

    Que fantástico aporte, estoy planeando la instalación de un tanque y bomba de funcionamiento automático, si me lo permites usaría parte de tu diseño.
    Buen trabajo!

  5. Google Chrome 79.0.3945.136 Google Chrome 79.0.3945.136 Android 9 Android 9
    Mozilla/5.0 (Linux; Android 9; Redmi Note 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.136 Mobile Safari/537.36

    De nada amigo, para eso es esta comunidad, para compartir y ayudarnos. Si quieres te puedes unir a u nuestra comunidad de Arduino en Telegram @ArduinoCuba
    Espero que puedas hacer el proyecto y consigas todo lo que te falta.
    PD: viene una mejora de este sistema con página web embebida ?, así que atentos a este sitio. Saludos

  6. Google Chrome 79.0.3945.136 Google Chrome 79.0.3945.136 Android 9 Android 9
    Mozilla/5.0 (Linux; Android 9; Redmi Note 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.136 Mobile Safari/537.36

    Perfecto, no hay ningún problema respecto a usarlo, sí me gustaría que compartieras lo que hagas y si le añades mejoras. Tenemos un grupo en Telegram @ArduinoCuba que tiene las puertas abiertas.
    Saludos

  7. Google Chrome 68.0.3440.106 Google Chrome 68.0.3440.106 Windows 7 x64 Edition Windows 7 x64 Edition
    Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36

    hola amigo me gustaria implementar tu codigo pero con un arduino uno si me funcionaria agradezco tu colaboracion gracias.

  8. Google Chrome 80.0.3987.99 Google Chrome 80.0.3987.99 Android 9 Android 9
    Mozilla/5.0 (Linux; Android 9; Redmi Note 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.99 Mobile Safari/537.36

    Hola, creo que ya te comunicaste conmigo por Telegram. Saludos

  9. Safari 13.0.5 Safari 13.0.5 iPhone iOS 13.3.1 iPhone iOS 13.3.1
    Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Mobile/15E148 Safari/604.1

    Hola, una pregunta qué tal ese sensor de flujo? que tiempo lleva trabajando ya?

  10. Microsoft Edge 88.0.705.50 Microsoft Edge 88.0.705.50 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.50

    estimado muy bueno su tutorial, pero será posible que tenga como va el circuito conectado a la bomba y la tubería que pasa por el sensor de flujo donde nace y hacia donde se dirige además de la conexión a la fuente de poder, estoy construyendo mi casa y cualquier ayuda para disminuir los gastos es bueno y si lo puedo hacer , agradezco si me echas una mano

  11. Google Chrome 80.0.3987.99 Google Chrome 80.0.3987.99 Android 9 Android 9
    Mozilla/5.0 (Linux; Android 9; Redmi Note 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.99 Mobile Safari/537.36

    Hola, el sensor de flujo va de maravilla, lo que no te puedo comentar de su exactitud en las mediciones, pues solo lo uso para detectar la existencia de flujo; El sistema lleva un poco más de 1 año funcionando y todo va perfecto

  12. Google Chrome 88.0.4324.150 Google Chrome 88.0.4324.150 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36

    Hola soy cubano pero trabajo en mexico, y de hecho actualmente estoy trabajando con ese sensor en varios proyectos y te recomiendo usar una funcion diferente para computar el average de las mediciones, pues no es la mejor aunque se que la copiaste de de internet, de hecho si graficas en el monitor serie del IDE de aurduino vas a ver que no estan exacta es funcion comparada con la distancia medida, te voy a hacer una gran recomendacion usa el algoritmo de Kalman o filtro de Kalman que te da una aproximacion mas exacta de la distancia medida sin procesar y te protege de los efectos de eco que te puediara dar el sensor ultrasonico que es muy frecuente, adeemas para hacer mas ciencia tienes que tener en cuenta que las mediciones ultrasonicas son afectadas por la temperatura pues la velocidad del sonido varia con la temperatura por lo cual deberias hacer una correccion en el calculo de la distancia , saludos por lo demas muy buen trabajo y mas en cuba que no hay nada

  13. Firefox 85.0 Firefox 85.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0

    Tienes algun codigo que quieras compartir del filtro de kalman? para asi cuando se haga la 2da version del tutorial tenerlo en cuanta. Tambien puedes crear una peticion en el git de leonardo. https://github.com/leoNavarro95/Manati_System
    y dejarle el codigo como recomendacion
    alex out

  14. Google Chrome 80.0.3987.99 Google Chrome 80.0.3987.99 Android 9 Android 9
    Mozilla/5.0 (Linux; Android 9; Redmi Note 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.99 Mobile Safari/537.36

    Muchas gracias por el comentario, tienes razón tengo que investigar al respecto. Saludos

  15. Google Chrome 90.0.4430.212 Google Chrome 90.0.4430.212 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36

    Excelente articulo, estoy deseoso de poder implementarlo cuanto antes. Gracias.

  16. Google Chrome 91.0.4472.77 Google Chrome 91.0.4472.77 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36

    gracias por la informacion, queria preguntarte si tienes este proyecto en un informe de investigacion?

  17. Firefox 67.0 Firefox 67.0 Android 7.0 Android 7.0
    Mozilla/5.0 (Android 7.0; Mobile; rv:67.0) Gecko/67.0 Firefox/67.0

    Donde comprar módulos de Arduino hoy en Cuba

  18. Firefox 67.0 Firefox 67.0 Android 7.0 Android 7.0
    Mozilla/5.0 (Android 7.0; Mobile; rv:67.0) Gecko/67.0 Firefox/67.0

    Alguien me puede decir donde comprar módulos de Arduino hoy en Cuba, por favor.

  19. Google Chrome 97.0.4692.71 Google Chrome 97.0.4692.71 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

    Hola, tendrán el esquematico en archivo? Para fritzing o proteus? no encuentro el esquemático para este sensor de distancia.

  20. Firefox 96.0 Firefox 96.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0

    Estas pidiendo el diagrama del Sensor ultrasónico impermeable: JSN SR04T?? Para que lo quiere??

  21. Google Chrome 97.0.4692.99 Google Chrome 97.0.4692.99 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36

    Saludos,
    Muy buen proyecto! Bien detallado e interesante! Es una pena que se haya dificultado tanto la adquisición de módulos de arduino por estos tiempos.
    De paso les pregunto: alguien me puede recomendar un canal de telegram para Arduino en Cuba? El que me aparece está como «grupo privado».
    Gracias!

  22. Google Chrome 101.0.4951.67 Google Chrome 101.0.4951.67 Windows 7 x64 Edition Windows 7 x64 Edition
    Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36

    al copmpilarlo me sale un error en esta parte void IRAM_ATTR pulseCounter()

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.