Arduineces y otras hierbas (Monitorizar fugas de agua)

Todo cuanto tiene que ver con la obtención, almacenamiento y proceso de la información digital, sus aplicaciones y el software y hardware utilizado.
Responder
Mensaje
Autor
Avatar de Usuario
Anilandro
Mensajes: 4905
Registrado: Dom Feb 11, 2007 10:16 pm
Ubicación: Islas Baleares, España
Contactar:

Re: Arduineces y otras hierbas (UPP, Ultrasonic Pulse Positi

#391 Mensaje por Anilandro »

He seguido trabajando con la parte matemática del sistema UPP, y poco a poco he ido desgranando resultados...

Para empezar establecí el sistema de unidades de cálculo en décimas de milímetro (0,1 mm.), con lo cual, según los datos obtenidos en una simulación anterior de emisión-recepción directa, en que obtuve lecturas con variación de +/- 1 unidad sobre 20.000, en teoría el software del sistema podría responder a un precisión de 0,2 mm...

Naturalmente, cuando incorpore el sistema físico de transmisión por ultrasonidos, la precisión será inferior. Yo establecí la meta que creo realista en una precisión de 1 cm. para "campos" de 4 metros de lado... así que veremos al final en qué queda la cosa...

Luego, para hacerme alguna idea previa, realicé un programa de Arduino que me calculaba las coordenadas de las hipérbolas creadas por un eje de orientación horizontal y distancia entre focos de 40.000 u. (4 metros), explorando con un bucle "for()", valores desde -20.000 a +20.000 (recordar que el eje de coordenadas ocupa el centro 0,0)... Y con los valores obtenidos realicé gráficas, comprobando que el sistema seguía bien las curvas hiperbólicas...

Los cálculos los realicé utilizando las fórmulas canónicas, pero con la de eje vertical me salían resultados extraños, sólo obtenía datos en un pequeño margen... hasta que me di cuenta que al ser curvas que sólo existen desde su vértice hacia valores mayores, por debajo de este valor la variable Y no tiene ninguna correspondencia de X, con lo cual el algoritmo del Arduino en vez de un número me daba "nan" que significa "not a number"...

Estos días me he visto obligado a refrescar algunos olvidados conceptos de matemáticas, pero me ha resultado hasta interesante.

Para simplificar los cálculos he desarrollado fórmulas a partir de otras, y algunas me han llevado bastante trabajo a pesar de que por suerte no aparecen por ningún sitio expresiones de segundo grado, porque o bien me equivocaba en algún paso de transformación o el resultado era más enrevesado que el original. Naturalmente, como algunas operaciones implicarán divisiones, las variables deberán ser decimales del tipo "float", porque con enteros la cosa no iría ni a tiros. A la vez, recordar que las incógnitas son solamente X e Y, puesto que "a" y "b" son cantidades numéricas conocidas que dependen de la diferencia de tiempos entre impulsos y de la distancia entre emisores, con una relación de cálculo que ya expliqué en un mensaje anterior...

.. Al final de las fórmulas canónicas me ha salido esto:

Para eje horizontal: b²x²-a²y²-a²b²=0
Para eje vertical__: b²y²-a²x²-a²b²=0

De las cuales, para despejar x² (cuya raíz se obtendrá al final, si se necesita) han salido:

Para eje horizontal: x² = (a²y²+a²b²)/b²
Para eje vertical__: x² = (b²y²-a²b²)/a²

Para identificar los parámetros de la primera curva de eje horizontal añadiremos la letra "h" y para la curva de eje vertical la "v", con lo cual quedaría:

Para eje horizontal: xh² = ((ah²·yh²)+(ah²·bh²))/bh²
Para eje vertical__: xv² = ((bv²·yv²)-(av²·bv²))/av²

¿Y todo esto para qué? ...pues para poder hallar de forma algebraica el punto de intersección entre dos hipérbolas pertenecientes a diferencias de tiempo de emisores distintos. Realizar el cálculo por álgebra es mucho más "elegante" y rápido que hacerlo por "fuerza bruta" mediante bucles incrementales probando valores hasta que coincidan. Como le dije a Baldo, esta segunda opción sólo la habría intentado si hubiera visto muy complicada la primera...

Para el algoritmo que me encuentra el punto de coincidencia ya no ha hecho falta acudir a mi amigo matemático. En este punto es evidente que los valores de X e Y (y por tanto sus cuadrados X² e Y²) de ambas curvas serán iguales, por tanto, si enfrentamos el X² de la curva "horizontal" con el X² de la "vertical" nos queda así:

((ah²·yh²)+(ah²·bh²))/bh² = ((bv²·yv²)-(av²·bv²))/av²

Despejando...

(((ah²·yh²)+(ah²·bh²))/bh²) - (((bv²·yv²)-(av²·bv²))/av²) = 0

Como las Y serán también iguales, tanto la yh² como la "yv²" podrán sustituirse por la misma Y²

(((ah²·Y²)+(ah²·bh²))/bh²) - (((bv²·Y²)-(av²·bv²))/av²) = 0

Despejando la Y² al final obtengo la expresión:

Y² = -((bh² · av² · bv²)+(av² · ah² · bh²)) / ((av² · ah²)-(bh² · bv²));

De aquí ya obtendré la Y² que corresponde al punto Y de corte entre las dos curvas.
Ahora, para encontrar la X² coincidente bastará aplicar cualquiera de las fórmulas de la Hipérbola H o V...

X² = ((ah² · Y²) + (ah² · bh²)) / bh²

Luego sacando las raíces de X² e Y² ya tendríamos el punto de corte y por tanto la situación real del receptor en el área de cobertura del sistema...

Un problema que me he encontrado han sido los signos, porque los valores al cuadrado siempre los convierten en +, y además las raíces tienen dos valores + y -. Para discriminarlos bastan dos simples órdenes

if(Dif_H<0) X = -X; // Si la diferencia de tiempos H es negativa, X será negativa
if(Dif_V<0) Y = -Y; // Si la diferencia de tiempos V es negativa, V será negativa


Imagen

Una vez trasplantado todo eso a código y realizadas las primeras pruebas utilizando distintas diferencias de tiempos calculadas a partir de coordenadas X e Y reales, los resultados de situación han sido totalmente coincidentes.

Continuará...

Saludos
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)

*** La Web de Anilandro *** http://sites.google.com/site/anilandro

joseluis7696
Mensajes: 5282
Registrado: Mar Nov 10, 2009 3:26 pm
País: españa
Ciudad: madrid
Ubicación: Madrid

Re: Arduineces y otras hierbas (UPP, Ultrasonic Pulse Positi

#392 Mensaje por joseluis7696 »

Perdón por irrumpir sin méritos ni conocimientos suficientes. Es solo para comentar las dificultades insalvables o casi que tuvo hace unos años un amigo que necesitaba conocer el nivel de agua de un embalse de varios metros de profunfidad con una precisión inferior al milímetro.
En sus primeros intentos usaba transductores ultrasónicos, pero tenía muchos problemas por los cambios en la velocidad del sonido en función de la tempertaura y la presión atmosférica.
Sé que finalmente lo resolvió no sé como. En ese tiempo no había arduino pero sí otros micros.

Avatar de Usuario
Anilandro
Mensajes: 4905
Registrado: Dom Feb 11, 2007 10:16 pm
Ubicación: Islas Baleares, España
Contactar:

Re: Arduineces y otras hierbas (UPP, Ultrasonic Pulse Positi

#393 Mensaje por Anilandro »

Ninguna interrupción, Joseluis... Por el tema que citas es precisamente por el que establezco la meta de precisión de 1 cm en un cuadrado de 4x4 metros, con la que ya estaría más que contento. A la vez, estoy intentando que otros errores de la cadena sean lo más pequeños posible (en el conjunto del software es de tan solo 0,2 mm.)

Sin duda, la variación de la velocidad del sonido con la temperatura es un factor importante de error (en m/s, la velocidad es 331+0,61 x Cº), error que sería casi nulo en el centro de coordenadas pero iría aumentando al alejarnos de la cruz. No obstante habría métodos para minimizarlo. Por ejemplo, de forma muy simple con un sensor NTC que corrija las lecturas en el receptor, o de forma un poco más sofisticada por el sistema que propuse de efectuar dos emisiones de impulsos en cada eje, primero en un sentido y luego en el otro, con lo cual, como el error de velocidad/tiempo tendrá signo contrario, podrá anularse...

En fin, sigo paso a paso con el tema...

Saludos
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)

*** La Web de Anilandro *** http://sites.google.com/site/anilandro

Avatar de Usuario
Anilandro
Mensajes: 4905
Registrado: Dom Feb 11, 2007 10:16 pm
Ubicación: Islas Baleares, España
Contactar:

Re: Arduineces y otras hierbas (UPP, Ultrasonic Pulse Positi

#394 Mensaje por Anilandro »

He seguido trabajando en el tema del UPP, en concreto he hecho un programa de simulación para el "campo" de hipérbolas, que me suministra los valores de cada curva determinada por su "diferencia" de tiempos o distancias, que para una velocidad constante viene a ser lo mismo, y también los posibles límites de los puntos de cruce, ya que en distancias próximas a los emisores las hipérbolas se "doblan" mucho hacia a fuera, y en algunas situaciones físicas no habría ningún punto de cruce con la curva de eje perpenticular...

Imagen

Esta primera numeración muestra grupos de coordenadas de dos hipérbolas iguales pero con sus ejes girados 90º. El grupo de arriba es de curvas con una diferencia de distancia de 150,00. (cuyo punto de origen el los ejes de coordenadas es siempre la mitad, 75,00). Con estos datos podemos dibujar las curvas, pero además el programa nos proporciona el punto de corte entre ambas, que en concreto es X=82,01 e Y=82,01.

...En estas cifras vemos que las coordenadas de corte X e Y son naturalmente iguales, porque ambas curvas tiene la misma "diferencia" y sus ejes son perpenticulares, por lo tanto, en estas circunstancias, los puntos de cruce estarán siempre situados sobre su mediana...

...A continuación una representación parcial (de un solo cuadrante) de las curvas obtenidas con estas series de números. Los focos o emisores son los puntos azules situados en las coordenadas 200, y los puntos rojos son los de corte entre ambas curvas.
Aquí también puede observarse lo que ya he dicho, que el principal parámetro que define la hipérbola, que es la "diferencia" de distancias a los "focos" (en azul), son el doble de la coordenada al cruzar el eje X o Y...

Imagen


En este gráfico observamos otra cosa. Como las curvas de mayor "diferencia", 275, no se cortan en la parte representada, pero en cambio sí lo harían "fuera del papel", en concreto en las coordenadas X=427 e Y=427. Dos curvas con algo más de "diferencia", pongamos 300, ya no se cortarían en ningún punto, y por tanto no servirían para situarnos, aunque como veremos más tarde, una curva de 300 y otra de 160 sí lo harían...

Continuará...

Saludos
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)

*** La Web de Anilandro *** http://sites.google.com/site/anilandro

Avatar de Usuario
Anilandro
Mensajes: 4905
Registrado: Dom Feb 11, 2007 10:16 pm
Ubicación: Islas Baleares, España
Contactar:

Re: Arduineces y otras hierbas (UPP, Ultrasonic Pulse Positi

#395 Mensaje por Anilandro »

El anterior listado se refería a coordenadas X-Y de pares de hipérbolas iguales pero giradas 90º, en que veíamos los límites de los puntos de corte sobre la línea mediana entre las curvas. Ahora muestro otro tipo de listado que también me suministra mi programa, y que calcula los puntos de corte entre curvas asimétricas, en concreto ésta es de una hipérbola de eje horizontal con "diferencia" DifH=260, una serie de 24 hipérbolas de eje vertical, desde DifV=0 a DifV=230, que es la última que para esta horizontal tiene el punto de corte inferior a coordenadas X o Y 210.

Este límite de coordenadas X-Y "aceptables" para el sistema UPP, de 210, lo he establecido por dos motivos. El primero es que no podemos superar demasiado el cuadrado teórico de -200 a +200 que representa un cuadrado físico de 4x4 metros, porque si bien aún más allá podrían determinarse situaciones, en la zona exterior el error provocado por el ángulo cada vez más agudo con que se cruzan las hipérbolas crece de forma geométrica, y el segundo es que además existen "zonas de sombra" más allá de los puntos emisores en que las curvas no se cortan y por tanto no puede conseguirse una situación.

Imagen


Con los puntos de corte obtenidos de esta segunda serie de datos, he dibujado un gráfico en que se ve uno de los cuadrantes de 2x2 metros que forman la superficie total de 4x4, y la zona marcada en rojo en que el sistema UPP proporcionaría las coordenadas de la situación física del receptor...

Imagen


...Las hipérbolas las he dibujado a mano desde su origen en los ejes X e Y hasta los puntos de corte determinados en las listas de datos, así que es posible que la forma de las curvas sea mejorable, pero eso no afecta al área entre límites marcada en rojo, e incluso así puede verse su mayor "inclinación" a medida que nos acercamos a los focos emisores, situados a 200 (200 cm en la realidad) del origen de coordenadas...

Continuará...

Saludos
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)

*** La Web de Anilandro *** http://sites.google.com/site/anilandro

Avatar de Usuario
Anilandro
Mensajes: 4905
Registrado: Dom Feb 11, 2007 10:16 pm
Ubicación: Islas Baleares, España
Contactar:

Re: Arduineces y otras hierbas (UPP, Ultrasonic Pulse Positi

#396 Mensaje por Anilandro »

Aparte de varios proyectos particulares que llevo de forma simultánea y a distintas velocidades, en el trabajo tengo un encargo reciente a realizar. Se trata de monitorizar un contador de agua situado en una urbanización de la parte norte del puerto de mi ciudad. A continuación del contador viene un tubo de polietileno de 10 Atm y 50 mm de sección y de una longitud de 1,4 Km, de los cuales 900 metros transcurren bajo el mar. Las condiciones son bastante duras y cada año tenemos tres o cuatro fugas con miles de toneladas perdidas, y eso al margen del gasto económico es un pecado en una isla en que el agua potable no es especialmente abundante...

El contador está en una pequeña arqueta situada en una acera, con una pesada tapa de hierro que apenas deja un par de milímetros libres sobre él...

Imagen


En cuanto al propio contador, es de la marca Itron y del modelo Flodis, totalmente mecánico, con 7 dígitos y una rueda cuyo giro corresponde a 1 litro...

Imagen


En un primer momento ya observé que dicha rueda tiene un pequeño triángulo metálico cuya única explicación es que en su giro esté destinado a activar un sensor-contador externo. Investigué un poco en la compañía de aguas, y me informaron que no sabían nada de tal sensor pero que ellos disponían de un sistema de monitorización electrónico que se instalaba en un contador distinto y en una caja externa, pero tal sistema, aparte de carísimo es muy poco configurable, realiza una lectura cada día, cada semana o cada mes, y su detección de fugas se basa en observar las lecturas de tres días y ver si en total supera una cierta cantidad establecida de litros...

Eso no nos ayudaría demasiado, porque muchas de nuestras fugas son causadas por agujeros provocados por el roce del tubo sobre las rocas del fondo y al principio son siempre de poca entidad con respecto al consumo normal, ya que el final de esta conducción va a un aljibe de 200 toneladas que alimenta un conjunto de grandes edificios, cuyo consumo es además muy irregular dependiendo de las actividades que en ellos se realizan...

Mi idea es pasar del sistema de la compañía y establecer dos puntos de medición, uno en el propio contador, y otro al final del tubo, justo antes de la electroválvula que alimenta el aljibe. En mi caso las medidas se tomarían cada minuto y un microcontrolador, tras establecer valores medios, podría calcular la diferencia entre lo que sale de un sitio y lo que llega al otro, con lo cual, en un máximo de 2-3 minutos detectaríamos cualquier fuga por pequeña que fuera...

Sin embargo la cosa se complica un poco por la distancia directa entre los sensores (como 1 Km) y su ubicación sin acceso a internet y sin corriente en la parte del actual contador, con lo cual vamos a tener que utilizar algún tipo de enlace de datos por radio que ya determinaré ...pero yendo paso a paso lo primero va a ser construir el sensor adecuado...

Continuará...

Un saludo
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)

*** La Web de Anilandro *** http://sites.google.com/site/anilandro

Avatar de Usuario
heli
Mensajes: 1946
Registrado: Mié Sep 06, 2006 7:28 am
País: España
Ciudad: Alcalá de Henares
Ubicación: Alcala de Henares (Madrid, España)
Contactar:

Re: Arduineces y otras hierbas (Monitorizar fugas de agua)

#397 Mensaje por heli »

Es un proyecto interesante!

Efectivamente, la parte metálica es para montar un sensor hall:
https://www.itron.com/apac/solutions/pr ... /flodis-ci
https://www.itron.com/lam/solutions/pro ... ble-sensor

Hay gente que ha llegado a usar una cámara de visión artificial para leer el contador: https://forum.mysensors.org/topic/1594/ ... h-a-webcam
Ventajas: no necesita alimentación permanente, se puede encender para leer y apagar.
Inconvenientes: es mucho más complejo y cuando esta encendido consume más...

Para comunicar los sensores a distancia uedes usar los Nrf24L01+PA: http://www.yourduino.com/sunshop/index. ... tail&p=489 que trabajan en la banda ISM de 2.4Mhz y consumen poco.
Pero tienes placas integradas Arduino + RF muy chulas, y algunas con tecnología LoRa y alimentación a baterías:
https://www.aprendiendoarduino.com/2018 ... y-lorawan/
¡No es imposible, lo que pasa es que no sabes como hacerlo!
Aka: no es difícil si sabes como.
http://heli.xbot.es

Avatar de Usuario
Anilandro
Mensajes: 4905
Registrado: Dom Feb 11, 2007 10:16 pm
Ubicación: Islas Baleares, España
Contactar:

Re: Arduineces y otras hierbas (Monitorizar fugas de agua)

#398 Mensaje por Anilandro »

Gracias Heli. Este sensor ya lo vi, así como otro que integra envío de señal por GPRS y alertas por SMS GSM, pero no puedo usarlos, porque no tengo espacio sobre el contador, ya que a 2 o 3 mm. está la tapa de hierro de la arqueta.

Sobre la tecnología del sensor, el que muestras no he visto de qué tipo es, pero el GPRS es de tipo electromagnético, como los de proximidad, por la mayor amortiguación que introduce un metal cercano en una bobina osciladora, pero tampoco puedo utilizar este sistema por la misma falta de espacio vertical y por la previsible interferencia de la enorme y pesada tapa de hierro que también estaría pegada a él, con lo cual el margen de resolución de la señal sería a la fuerza muy pequeño.

En mi caso utilizaré un sensor óptico que ya tengo construido...

Imagen


...Aprovechando que la empresa de aguas me ha dejado un contador del mismo tipo (que luego tal vez compraremos para utilizarlo al otro extremo del tubo, antes del aljibe), he cortado un soporte de metacrilato de 4 mm. que utiliza los tres puntos de sujeción del contador Flodis, que además he mecanizado con un Dremel para que se adapte a los diversos resaltes que tiene la cara superior del contador. En el radio de giro de la plaquita metálica he situado un LED IR y un fototransistor extraídos de un viejo mouse de bola, que además están montados en taladros de 2 mm. con el ángulo aproximado para que su reflexión coincida con la distancia a la que pasa la plaquita metálica...

Imagen

Imagen


...La reflexión útil la he optimizado para que la señal IR espúrea que se crea por reflexión interna de esta parte del contador, que además es de color blanco, tenga una relación lo más buena posible. Utilizando 7 mA de excitación en el emisor y cargando el fototransistor con 40K consigo que la señal leída por el Arduino en reposo sea de 150 (sobre 1024) y suba a 680 cuando la plaquita pasa por delante, lo cual me parece un buen margen. En realidad estos receptores IR tienen en su interior dos fototransistores, que se utilizan en los mouse para discernir el sentido de giro. Yo he utilizado sólo uno de ellos, el que me daba mejor relación de señal. Además este conjunto sensor me permite incluso cerrar la tapa del contador, cuyo espacio interno es de 6 mm...

Imagen


...Ahora lo siguiente será insertar en el propio soporte de metacrilato un conformador de señal tipo Schmitt, que construiré con componentes discretos SMD para poder jugar con la sensibilidad y bajar la impedancia, y que la señal pueda viajar tres o cuatro metros por un cable hasta donde estará la electrónica, sin temor a que las posibles interferencias de RF me la alteren...

El envío de señal RF también había pensado en el LoRa, ya que he visto alcances increíbles con bajas potencias y además un consumo casi ridículo. Cuando acabe el sensor me meteré con ello. Ya te consultaré las dudas que me vayan surgiendo, porque hasta el momento no he hecho nada con esta tecnología...

Otra cosa que se ve en la primera imagen es el sistema de "test" que utilizo para hacer girar el contador durante las pruebas, un simple miniventilador de 12 V, procedente de un viejo switch desguazado, acoplado a la entrada del contador con un tubo de cartón endurecido con cianocrilato, en el que además he practicado unas ventanas longitudinales que permiten dejar escapar más o menos aire y disminuir la velocidad de giro del indicador circular de litros.

Saludos
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)

*** La Web de Anilandro *** http://sites.google.com/site/anilandro

XBaroman
Mensajes: 167
Registrado: Dom Feb 13, 2011 7:04 pm
País: España
Ciudad: Alnorte

Re: Arduineces y otras hierbas (Monitorizar fugas de agua)

#399 Mensaje por XBaroman »

Hola Anilandro.

Porqué no instalas otro contador a la salida (menos de 10 €.) y comparas las lecturas ??
Barato, ejercita la actividad y la memoria acordándose de leerlo !!! claro está …. jajajaja.

Otro método pero necesita alimentación poner sensores de presión a la entrada y la salida midiendo presión diferencial sobre un umbral calculado o medido ??

Un tercer método, instalar un único sensor de presión a la entrada y en el caso de rotura de la tubería cuando no exista consumo de agua la presión caerá a la presión correspondiente a la profundidad máxima a la que esté la tubería y … entonces alarma y corte de electroválvula (que estará instalada).

Se me ocurren otra variantes pero que sean simples y efectivas …. no sé ….


Un saludo.

Avatar de Usuario
Anilandro
Mensajes: 4905
Registrado: Dom Feb 11, 2007 10:16 pm
Ubicación: Islas Baleares, España
Contactar:

Re: Arduineces y otras hierbas (Monitorizar fugas de agua)

#400 Mensaje por Anilandro »

Claro, instalar otro contador justo antes del aljibe y restar de las lecturas es la idea, posiblemente el contador que estoy utilizando para las pruebas será el segundo, aunque es de 50 mm, con la base de latón y bastante más caro de 10€. Naturalmente las lecturas deberán ser automáticas, yendo por por tierra hay unos 10 Km entre ambos contadores ya que se ha de rodear el final del puerto, y no es práctico enviar dos o tres veces por día a un operario de mantenimiento a comprobarlos, además el sistema debe trabajar las 24 horas sin interrupción, y enviar un SMS al responsable en pocos minutos si detecta una fuga. En origen no tenemos corriente eléctrica, así que no podemos instalar una electroválvula para cortar en caso de fuga, pero tampoco sería muy complicado diseñar un servo con un motor de 12Vcc (por ejemplo de un elevalunas de coche), un eje sin fin y una corona para actuar sobre la válvula manual existente. En este caso la batería de alimentación del sistema de lectura sería suficiente para abrirlo y cerrarlo cuando hiciera falta...

También puedo eliminar el segundo contador y simplemente monitorizar el estado de la electroválvula del aljibe. Si está cerrada y hay consumo en origen es que hay fuga en el tubo... pero es más elegante y precisa la primera opción de doble lectura...

Lo de medir presiones no me gusta tanto porque 1,4 Km. de tubería es mucha inercia, y hasta pueden crearse ondas de presión que viajen por el interior del tubo, e incluso que reboten formando verdaderas ondas estacionarias... Los grandes buques pasan casi sobre el tubo y el ruido que generan llegan incluso al rango de los subsonidos, que también podrían afectar a las lecturas. Además un sistema así no detectaría fugas de poca entidad... Prefiero los contadores mecánicos...

Saludos
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)

*** La Web de Anilandro *** http://sites.google.com/site/anilandro

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados