Bombear agua con arduino es algo que no parece apasionante. Resulta paradójico hablar de robótica educativa y a la vez de aire acondicionado. Sin embargo, una vez planteado y resuelto el problema que vamos a analizar, podremos comprender la gran versatilidad de arduino.
Como vimos en una entrada anterior, utilizaremos arduino para bombear los condensados de agua del aire acondicionado.
Vamos a desarrollar el problema y lo vamos a resolver, planteando la situación y definiendo los componentes y la programación.
El problema: bombear agua con arduino
Recogemos los condensados del aire acondicionado en un depósito. Cuando este se llena, nos interesa llevar el agua a un depósito mayor.
Este segundo depósito se termina llenando. Debemos, por tanto, vaciarlo, pero algo nos tiene que avisar para no estar pendiente de él todo el tiempo. El aviso debe ser continuo hasta que se vacíe el depósito. Una vez lleno, retiramos manualmente el tapón, tiramos el agua y comienza de nuevo el ciclo.
Material necesario
El material para hacer el montaje que se expone es el siguiente (ver además fotografía del principio):
- Arduino UNO
- Bomba de agua
- Zumbador
- Sensor de distancia SR-HC04
- Sensor de nivel EK1195
- Placa de prototipos (protoboard)
- Transistor BC547
- Diodo 1N4001
- Resistencia de 220 Ω (para transistor)
- Varios cables de conexión
- Portapilas de alimentación conexión jack para arduino
- 70 cm de manguera de plástico
Además, serán necesarios dos bidones de plástico de 5 litros, unas tijeras o cúter.
Bombear agua con arduino: entradas del proyecto
Las entradas proporcionan la información que va a requerir nuestro sistema (la placa de arduino) para tomar las decisiones necesarias para la resolución del problema tal y como lo hemos planteado.
1. Detección del nivel de agua del depósito que recibe los condensados
Será nuestra primera entrada y, como tal, la proporciona un sensor. En nuestro caso, hemos seleccionado el sensor de ultrasonidos HC-SR04.
Debido al funcionamiento de este sensor, para su conexión hacen falta dos pines de arduino, uno de ellos debe estar configurado como salida (pin trigger, el que lanza el ultrasonido), y el otro como entrada (pin echo, el que recoge la onda de sonido rebotada). Además, hay que alimentar el sensor conectándolo a 5V y a tierra (GND o 0V).
Esto no ofrece ninguna dificultad, sólo hay que conectarlos a sus pines correspondientes. El cálculo de la distancia a la superficie del agua lo realiza arduino de forma automática, con unas líneas de código que están disponibles en Internet o bien en el propio software de programación gráfica, como veremos.
2. Detección de nivel del segundo depósito
Cuando el segundo depósito (de almacenamiento) está a punto de llenarse, el agua toca el sensor de nivel que hemos instalado (EK1195).
Como todos los sensores, lo alimentamos desde la placa, proporcionando una señal de entrada a arduino de tipo analógico: va a variar en función de la cantidad de agua que recubra la lengüeta del sensor.
Se conecta a una entrada analógica (A0 por ejemplo).
Podríamos haber utilizado otro sensor de ultrasonidos, pero el tapón tiene un espacio reducido para el sensor y la tubería que debe entrar. Esta interferiría con toda seguridad en la medida del sensor.
Cuáles son las salidas del problema
1. En función de las condiciones de funcionamiento, la bomba del primer depósito recibe una orden de arduino para arrancar o parar. Es, por tanto, una salida digital.
2. Por otra parte, al llenarse el segundo depósito, arduino activa un zumbador. Es una salida digital.
Resumen entradas y salidas
E/S | E. Analógica | E. Digital | S. Analógica | S. Digital |
Sensor nivel SR-HC04 | 0 | 1 | 0 | 1 |
Sensor nivel EK1195 | 1 | 0 | 0 | 0 |
Zumbador | 0 | 0 | 0 | 1 |
Bomba | 0 | 0 | 0 | 1 |
Debemos usar dos entradas de arduino (una de ellas analógica) y 3 salidas.
Bombear agua con arduino: conexionado
Tenemos las condiciones y la instalación preparada. El conexionado de todos los elementos se observa en el esquema siguiente (hemos usado un sensor de humedad como sensor de nivel, pero el conexionado es igual a la entrada analógica, según la foto que hemos puesto arriba).
Hemos conectado el detector de nivel a los pines 2 (echo) y 3 (trig), el detector de nivel del segundo depósito en A0, el zumbador en el pin 6 y la activación de la bomba en el pin 4.
Con relación a la bomba, el pin 4 está conectado a la base de un transistor BC547. Cuando arduino pone nivel alto (5 V) en el pin 4, el transistor conduce y la bomba se alimenta desde la placa a 5 V.
Nota (actualización nov-2020): puede utilizarse la siguiente conexión para la bomba:
Falta la programación del sistema que es de relativa sencillez. Presentamos a continuación cómo se programaría con el software gráfico visualino, específico para arduino y con mblock, que utilizamos para programar los robots mbot de la casa makeblock.
Bombear agua con arduino: la programación
Hemos definido las entradas y las salidas, podemos seleccionar los pines de arduino donde vamos a conectarlas. Ahora hay que hacer el programa que nos permita retirar el agua de condensados y activar una alarma cuando el depósito de almacenamiento se llene.
Cuando la distancia es menor que 5 cm, nuestro programa pone en marcha la bomba. Esta se para cuando la distancia es tal que el depósito está casi vacío (por ejemplo, cuando el sensor mide 15 cm). Hay que tener cuidado en no vaciar por completo el depósito para evitar que la bomba trabaje en vacío (sin agua la bomba se rompe)
Además, cuando el segundo depósito se llena, se activa el otro sensor de nivel y arduino da la orden de parada a la bomba y activa un zumbadro.
En resumen, arduino actúa de una forma u otra en función de la información que le llega (las entradas):
- La primera entrada es del detector de ultrasonidos: en función de la distancia medida pone en marcha o para la bomba
- La segunda entrada es la que indica el llenado del segundo depósito. Genera dos señales de salida: la orden de paro de la bomba para evitar el rebosamiento y una alarma de aviso.
Programación con visualino
En la siguiente imagen vemos cómo queda el programa:
El bloque BAT – Sensor de ultrasonidos ya incorpora todas las instrucciones necesarias para que el sensor funcione correctamente.
Conseguir bombear agua con arduino no parece un trabajo muy complicado.
Visualino permite programar mediante bloques la placa de arduino. Está disponible en español.
Programación con mblock
Seguidamente vemos cómo se hace el programa:
Se puede observar que algunos de los parámetros numéricos no son iguales en los dos programas. En las pruebas de la instalación es normal hacer ajustes según lo que se quiera mostrar o la respuesta que se quiera obtener del sistema.
mblock es el software de programación utilizado para programar mbot. También está disponible en español.
Podéis ver en una entrada anterior el vídeo de funcionamiento de la instalación final.
A partir de ciertas condiciones, hemos conseguido bombear agua con arduino, un montaje que se puede llevar a la práctica. El paso siguiente sería la optimización de los componentes y la instalación.
Bombear agua con arduino: componentes STEM
Hemos hablado a menudo en este blog del acrónimo inglés STEM que representa a un conglomerado de disciplinas que convergen en la robótica educativa. Vamos a identificar en nuestro montaje dónde está presente cada una de estas cuatro disciplinas.
Física
El emisor de ultrasonidos. El sensor emite una onda de sonido y recoge la onda rebotada. El sonido es una onda longitudinal de presión. El oído humano solo puede escuchar una banda de frecuencias, por encima y por debajo de esa banda de frecuencias, no puede oírlas.
El sonido presenta una velocidad constante, por lo que se le puede aplicar S=v t. Es la ecuación del movimiento rectilíneo uniforme, a partir de la cual se calcula la distancia al nivel de agua.
Matemáticas
La velocidad del sonido es de unos 340 m/s. Arduino mide el tiempo que tarda en llegar el pulso y lo divide entre 2 (ida y vuelta). Después calcula el cociente entre el tiempo y la velocidad, de acuerdo con la ecuación anterior.
Se nos ocurre el siguiente problema:
Imaginemos que lanzamos una taza desde un piso y tardamos en escuchar el destrozo (si tenemos buen oído y no hay ruido) 5 segundos, ¿qué altura tiene el edificio?.
Un interesante problema donde aparece la velocidad del sonido, que resolvimos en alguna de nuestras clases de repaso de bachillerato. La solución es 107 metros.
Ingeniería
Una de las estrellas de las instalaciones de fábricas de todo tipo son las bombas de agua. Su presencia en el montaje propuesto ya justifica que se la incluya en este apartado.
La pequeña bomba que he utilizado en el montaje no puede trabajar en vacío. Si la conectamos sin estar sumergida los álabes se rompen y es inservible.
Las bombas sumergidas suelen utilizarse en pozos de grandes profundidades. Las bombas de aspiración solo pueden aspirar hasta los 10 metros de profundidad.
Por otra parte, cuando se desconecta la bomba (que recordemos, tiene una bobina en su interior), la tensión pasa de 5V a 0V, lo que puede generar intensidades que dañen al transistor o a la placa. Hay que situar un diodo de protección (1N4007, por ejemplo) inversamente polarizado entre los contactos de la bomba. Es decir, el cátodo (banda blanca del diodo) al polo + (5V) y el ánodo a tierra (GND). Observad el esquema y la foto:
Finalmente, ingeniería y matemáticas se unen en la creación de algoritmos que permiten resolver los problemas. El algoritmo permite resolver correctamente las condiciones que hemos impuesto a nuestro montaje. Es cómo construir el programa de control para que todo funcione como queremos. En nuestro ha resultado bastante sencillo.
Tecnología
Aquí entramos en el terreno de la fabricación, uso de componentes y montaje de los sistemas. Montaje también de las instalaciones y la mejor forma de situar los componentes.
Al realizar la programación de control de la instalación podemos pensar que funciona, incluso después de realizar un prototipo.
Pero la realidad debe tener en cuenta los «imponderables» de la tecnología utilizada. En nuestro caso, es decisivo el retraso que introducimos en el programa para que la medida del sensor de profundidad sea correcta. Si no se pone, puede ocurrir que la bomba arranque y pare y no funcione correctamente.
Hola, quisiera hacer lo mismo, pero reemplazando 2 componentes: el sensor de agua y el de ultrasonido, que para mi casi son vulnerables a oxidar (lo requiero para un estanque agua salada en acuario marino). Me podrias ayudar a como hacer ese reemplazo usando un sensor de boya que arroja solo un 1 ó 0.
Hola, Manuel,
gracias por tu interés en la página.
No tengo claro si lo que quieres es retirar agua o introducirla, no obstante, te comento lo siguiente:
Deduzco que en tu montaje tienes una boya con un contacto libre de potencial (parecido a un interruptor), es decir, que pone en contacto dos cables cuando llega al límite. La programación del sistema es en este caso más fácil. Basta con que conectes estos dos puntos como lo harías con un botón, sin olvidar la resistencia del pull-down. Cuando la boya llegue al extremo, tendrás un 1 de entrada en un pin de la placa. En la instrucción condicional sólo tienes que ver si la entrada es un 1. Cuando sea así, pondrás en funcionamiento la bomba a través de una orden de salida digital que puede actuar sobre un relé. El relé te permite poner en marcha cargas elevadas como la bomba (en el montaje del artículo utilizo un transistor como interruptor).
No estoy seguro de haber entendido con exactitud el funcionamiento de tu sistema. Espero que te haya servido de algo.
Hola, una pregunta, en la imagen del conexionado no muestra cuáles son los pines positivos y negativos de la placa protoboard, me podrían ayudar?
Hola, Juan Esteban. En la primera imagen (la de fritzing) los pines positivos son los que están conectados a través de un cable rojo desde los 5V de la placa de arduino. Es la línea roja del a protoboard. Los pines negativos de la protoboard son los que están conectados al cable negro. Es la línea negra en el esquema.
En la fotografía de abajo, igual. Ten en cuenta que el diodo de protección debe tener la pata con la banda blanca en el polo positivo y la otra al negativo.
Espero haberte ayudado. Saludos.
Muchas gracias, otra pregunta, yo solo quiero hacer la parte del vaciado del primer tanque con el sensor de distancia y la bomba de agua, me podrían pasar o indicar cómo hacer el código para el Programa Arduino?
Hola, Juan Esteban. Para hacer eso, se me ocurre lo siguiente: cuando el detector de distancia detecte que el depósito está muy lleno, dar orden de marcha a la bomba. Cuando el nivel baje lo suficiente (se mide también con el sensor), parar la bomba para que no trabaje en vacío. Programarlo es muy sencillo. es una instrucción condicional. Luego se pueden añadir otros sensores de seguridad, por ejemplo, para que la bomba se pare si hay problemas o errores o falla el sensor de distancia
Hola tengo otra pregunta la bomba de agua hasta que Voltaje se puede conectar, tengo una de 12v y no sé si pueda dañar el sistema, yo quiero hacer solo la parte de vaciar el tanque con el sensor de distancia y la moto bomba, me podrían pasar o indicar cómo hacer eso en el programa de Arduino
Hola de nuevo. Una placa de arduino proporciona 5V como máximo y tiene limitada la intensidad que suministra (potencia). Por lo tanto, no puedes alimentar directamente una bomba de 12V desde la placa. Una opción es trabajar con un relé, que permite utilizar una fuente externa para alimentar la bomba. Un relé es una salida digital de arduino que manda cerrar o abrir un contacto que pondrá en marcha la bomba alimentada con la fuente externa.
Hola disculpa, estoy por hacer un dispensador de agua con 2 bebidas, utilizaré 2 botones, 2 bombas de agua, y un sensor ultrasonico, quiero saber como le hago para seleccionar la bebida, osea para activar una bomba presionando su botón respectivo (botón 1 = coca, botón 2 = agua) y al momento de poner el vaso cerca del sensor ultrasonico empiece a salir la bebida que seleccioné y se llene por un tiempo determinado
Hola buenas, he estado probando y no me funciona, me parece que es cosa de que el BC547 no llega a dar toda la intensidad que necesita la bomba que tengo, he mirado con el tester y si enchufo la bomba directo al PIN de 5v si que funciona y me da una intensidad de unos 120mA, en cambio pasándola a través del transistor me da unos 30mA y me imagino que no es suficiente para que la bomba funcione.
Sabes si puede ser debido a esto? Y en caso de que sí, alguna alternativa de transistor que pueda llegar a darme toda la intensidad que necesita la bomba? La verdad me gustaría poder alimentarla directamente desde el arduino y no desde fuentes externas…
Gracias y un saludo!
Hola, Oriol, en principio debería funcionar. Comprueba que el transistor esté bien conectado (pata del emisor a GND – el emisor está a la derecha, viendo la parte plana-). Puedes también probar con un BC548 o un 2N2222 (en este último cambian los pines EBC).
Gracias por comentar en el blog.
Hola que tal, estoy por hacer una fuente de jardín, y la bomba debería subir el líquido desde el depósito, una altura de un metro aproximadamente. El circuito de allí funcionaría, o en todo caso, que debería agregar o sacar de él?
Hola, Fabricio,
gracias por acercarte al blog.
La bomba de agua que he utilizado en la entrada, según he visto en información por Internet, permite una elevación de hasta 110 cm, por lo que lo veo un poco ajustado. En caso de que no fuera suficiente, puedes utilizar una bomba de mayor potencia. En este caso, no es probable que la placa de arduino pueda proporcionar potencia suficiente. Puedes utilizar arduino para controlar un relé y una fuente de alimentación externa para la bomba.
¿Cómo quedaría el circuito si fuera código de texto?
Hola, Omar, hace mucho que hice el programa. Puedes bajarte visualino, copiar el código de bloques y en el lado derecho de la pantalla del programa está el código listo para cargar en el IDE. Son pocas instrucciones condicionales (if (condición){instrucciones}) y la librería o subprograma que calcula la distancia.
Saludos
Federico