Medición ultrasónica del nivel de un tanque


El desarrollo de este circuito es posterior al del medidor de distancias ultrasónicas con representación analógica por medio de un servo para modelismo, en esa nota se explica en detalle como es la técnica empleada para determinar la distancia por medio de ultrasonidos y recomendamos hacer clic aquí para tener un panorama mas completo de ser necesario. El circuito aquí propuesto es por demás simple y consiste únicamente en el Arduino y el módulo emisor/receptor ultrasónico. No hay representación física de la capacidad del tanque, los datos se ven en pantalla de la computadora por medio de una comunicación serie a 9600 baudios.

Al utilizar los pines 13, 12 y 11 para recepción del eco, disparo del pulso y alimentación respectivamente el terminal de masa del módulo ultrasónico queda perfectamente alineado con el terminal de masa de la placa arduino quedando por resolver únicamente la alimentación que al no estar dispuesta en el terminal 5V del arduino sino en el pin 11 hay que configurarla como salida y darle un nivel alto para que en dicho pin se presenten los 5V y se provea alimentación al mismo. La forma empleada para medir la cantidad de líquido en el recipiente es la siguiente:

El módulo emisor/receptor ultrasónico se ubica fuera del recipiente en esta prueba lo coloqué a 9 cm de altura por sobre el borde del mismo, este número no es arbitrario, como se observa en la foto de taller lo suspendí en el aire por medio de cables que hicieron las veces de tensores y estos quedaron como quedaron y me base en esa posición aprovechando que quedo relativamente firme pero no es necesario que en una futura aplicación en campo se deba guardar esta distancia. Lo único que hay que saber es que distancia es para incorporar dicho valor en el cálculo de volumen que luego se explicará en detalle. Nótese que el recipiente que utilicé es un sifón de soda desechable y estos suelen venir en su parte inferior con forma esférica siendo entonces que los primeros centímetros desde el piso del envase hasta donde se convierte en un cilindro no tendrán el mismo volumen por centímetro que el resto del recipiente. Una solución de compromiso que encontré fue hacer un piso de agua o nivel mínimo a partir del cual se considera vacío pese a tener agua no la considero. Para facilitar la determinación de que nivel sería esto use la base plástica o canasta de sujeción como nivel de dicho piso. Quedo así completamente cilíndrico y sin partes diferentes en toda su extensión con un alto útil de 20 cm. Vemos en el esquema de la izquierda la explicación de como se lleva a cabo la medición el emisor envía al aire un pulso representado por la línea roja, este pulso impacta el agua y rebota volviendo por la ruta descrita por la línea anaranjada y es recibido por el sensor ultrasónico. El cálculo de volumen de un recipiente cilíndrico es muy simple:

Volumen = π x Radio² x Altura

Datos que sabemos para despejar esto: Pi equivale a 3.14, el envase usado para las pruebas tiene un radio de 5,5 cm y tiene una altura de 20 cm por lo que el volumen máximo del envase es de 3.14 x 5.5² x 20 lo que equivale a 3.14 x 30.25 x 20 = 1.9 litros. Si bien es un sifón de dos litros de soda lo cierto es que he despreciado o dejado de ocupar la parte esférica de la base por lo que no estoy aprovechando ese plus de volumen. Simplificando la fórmula si sólo multiplico el valor de Pi (3.14) por el valor del radio al cuadrado (30.25) arroja que en cada centímetro de alto del envase entran 95cc de líquido. Por lo visto en la nota del medidor de distancias con indicación analógica es muy fácil medir distancias con esta tecnología, si sabemos el alto del envase, la distancia del equipo hasta el tope del envase y el alto al cual está el agua podemos saber que alto tiene la columna de agua presente en el envase y esto resulta de:

Alto de agua en el recipiente = 20 - Distancia hasta el agua - 9

Donde 20 es el alto útil del envase y se lo resta de principio para obtener el complemento (o lo que hay en vez de lo que resta), la distancia hasta el agua la determina la medición de distancia propiamente dicha y 9 corresponde al offset o alto del sensor por encima del tope del recipiente. Para convertir esto en cantidad o volumen de agua basta con multiplicarlo por 95 que es la cantidad de agua que almacena cada centímetro de alto para esos datos y tenemos como resultante cuanta agua hay en el mismo.

En este primer pantallazo se observa el envase con agua únicamente hasta su parte azul donde el mismo comienza a ser perfectamente parejo mientras que la pantalla refleja que hay 29 cm hasta el envase, la altura de la columna de agua es 0 cm y por supuesto la cantidad de agua es 0 cc.

Aprovecho un vaso medidor y le tiro agua hasta alcanzar los 3 cm de alto veo que en la pantalla marca que la distancia ahora es menor en tres centímetros, distancia que se equipara con la altura de agua y el cálculo de volumen indica 285 cc corroborando el buen funcionamiento.

Una prueba mas y los datos siguen siendo certeros y el funcionamiento correcto.

Y la última prueba osada por demás un centímetro por encima de donde quería llenarlo pasando casi para afuera! Buena medición de altura, buena determinación de alto de la columna de agua y buena determinación del volumen.

Indudablemente se preguntarán porqué tengo saltos de a 95cc lo cual suena a poco preciso y la respuesta es que mi idea no es hacer un instrumental para laboratorio, es una experiencia con estos sensores económicos y por lo que cuestan y valen bien valen lo que cuestan! Si van a usar esto para preparar bebidas o recetas magistrales están fritos! Pero si lo van a usar como quiero hacerlo yo pronto para determinar el nivel del tanque de agua de una casa y actuar sobre un sistema de respaldo en consecuencia permitiendo entre otras cosas consultar por BT o WIFI ya veré por que me decido bien, para eso va mas que perfecto con saltos así. Un indicador de reserva de agua suele tener cuatro a seis luces que se encienden y se apagan conforme se agota el agua, tener algo que marque de a 1 cm de resolución es mas que aceptable! Incluso en un improvisado reservorio utilizando un recipiente de 200 litros cuyas medidas son 60cm de diámetro y 80cm de altura el volumen se calcula 3.14 x 30² x 80 = 226.080 ml lo que equivale a 226 litros, convengamos que eso es a tope y chorreando, no se suelen llenar así pero incluso vemos que si tomamos por un único centímetro la resolución de este prototipo para este tanque de 200 litros sería de 2,8 litros

En este link pueden descargar el programa para cargar en el Arduino, el mismo se encuentra bastante comentado por lo que entenderlo no va a presentar demasiados retos.

Dentro del programa observarán la siguiente fracción del código donde una de las fórmulas está comentada para que no se compile ni se programe en el micro.

//Calcula la distancia
//Distancia=int(Distancia/(29.15*2));

//Calcula la distancia sin decimales
Distancia=Distancia*10/292/2;
 

En la parte superior el cálculo de distancia se hace de la misma forma que en el medidor de distancia con indicación analógica y funciona igual de bien pero quería hacer la prueba de hacer el mismo cálculo sólo que sin decimales, con números enteros a fin de evaluar con que eficiencia el compilador trabaja y cuanto menos recursos ocupa en el microcontrolador del Arduino haciéndolo de esta forma. En la forma inicial con decimales el programa ocupó 3.526 palabras lo que representa un 10% de la memoria de programa y utiliza 252 posiciones de RAM o sea un 12% de ésta. Mientras que en el segundo código sin uso de decimales requirió 3.018 palabras de ROM equivalentes al 9% y mismo 12% (252 bytes) de RAM. El resultado en funcionamiento es el mismo por lo que pueden usar el que mas les guste.

Se puede hacer mas preciso ? Por supuesto que si! Sólo es necesario dejar de medir en centímetros y hacerlo en milímetros y con ello multiplicaremos por diez la resolución dividiendo por diez la cantidad de agua de salto en salto.

 

Pablo Canello, 03/ABR/2020