#1
05-06-2017, 12:18 PM
(Última modificación: 07-06-2017, 11:42 AM por
albertoespinosa.)
Hola!
Por seguridad y evitar un desbordamiento o un vaciado excesivo en caso de que se atasque la sonda de nivel por alguna hoja de una planta, puse un sistema de ultrasonidos que mide la altura del agua. El problema es que los sensores de ultrasonidos de vez en cuando dan datos absurdos y más en un acuario donde el sonido pude rebotar o cambia la forma de la superficie del agua constantemente. Es por eso, que había pensando en recoger los datos es un vector (con Array) y luego sacar la moda del conjunto de datos. He intentado escribir yo esa parte del codigo para calcular la moda y buscar codigos por la web pero no acabo de encontrar algo que funcione realmente bien. ¿Se os ocurre alguna forma?
Gracias
No creo que tenga sentido usar la moda.
La moda sólo tiene sentido para un conjunto de números discretos, en números continuos no tiene sentido, tendrás que recurrir a la media o a la media móvil.
Más explicaciones:
Conjunto de datos discretos: [2 4 5 7 4 3 1 4 7 8 4]
Moda: 4.
Conjunto de datos contínuos: [7 7.1 6.9 6.8 6.7 6.5 2 6.3 6.2]
Moda: no existe, al ser continuos no hay dos números iguales.
Una media móvil sería, por ejemplo, tomar la media de los últimos 20 datos recogidos.
#3
05-06-2017, 12:53 PM
(Última modificación: 05-06-2017, 12:53 PM por
juanma15.)
De acuerdo con Dudo.
En un proyecto parecido usé la media y me fue bien.
Yo el ultrasonido lo usé con "sólido" y no era demasiado preciso, por lo que creo que con agua te va a costar mas...
Creo que para lo que quieres es mejor poner una segunda sonda de nivel
#5
05-06-2017, 01:31 PM
(Última modificación: 05-06-2017, 01:35 PM por
albertoespinosa.)
En el caso que lo voy a aplicar, con que me de números enteros me vale pues no necesito una altura de agua concreta sino encender la alarma y apagar el sistema de llenado cuando el nivel varié considerablemente de lo normal. Por tanto con int() puedo pasar la matriz a números enteros. El problema es que el sensor suele dar un vector (suponiendo, por ejemplo, que la distancia real es de 8) de [8 8 7 8 9 21]. Si hago la media, con datos tan dispersos, el valor no tendrá sentido. También podría ir descartando datos si comparo una medición la anterior y las elimino en el caso de que difieran en, por ejemplo, 1cm; pero seguiría teniendo el 7 y el 9 como datos erróneos que sería poco recomendable incluir en la media porque ya se que el sensor me da el dato bueno de vez en cuando. Por tanto, el valor estadístico que yo creo que mejor puede funcionar es la moda.
Juanma, estoy de acuerdo contigo... Estos sensores aunque dicen que tienen un error de +/-3mm, en condiciones donde el sonido puede rebotar de distinta forma o tener interferencias, puede dejar que desear. Pero bueno, como medida preventiva espero poder usarlo.
Busca código en c en general, no hace falta que lo busques exclusivo para arduino.
Yo creo que el parámetro estadístico que mejor te puede servir es la Mediana, este valor será el valor central en el conjunto de datos recopilados. La mediana no se ve afectada por la dispersión de los datos y la media como bien has dicho sí, sin embargo, cuando la dispersión es baja o nula suelen coincidir. Otro aspecto que creo que deberías tener en cuenta es que con int vas a meter un valor entero, para pasar la matriz a enteros realmente lo que tienes que buscar es un comando que te devuelva la parte entera de cada coeficiente de la matriz, no se cual es pero creo recordar que hay uno.
Estoy de acuerdo con Dudo si tienes una moda muy irregular te puede dar fallo
por ejemplo en 10,4,5,18,4,10,4, la moda (4) no tiene nada que ver con lo que buscas, si tuvieras los niveles mas o menos iguales o con un rango muy próximo podría valerte pero yo no me arriesgaría.
A nivel industrial, no he encontrado sondas de ultrasonidos ni laser que funcionen bien con agua, microondas guiadas si pero son caras, y de lo que he usado capacitivas para valores analogicos y conductivas para digitales son las que mejor van,
#12
05-06-2017, 11:08 PM
(Última modificación: 05-06-2017, 11:10 PM por
JIgnacio.)
Fiables 100% pero caras, por encima de 100€, algunas muy muy por encima, ya dije que a nivel industrial, IFM electrónic, vega, Endres Hauser.
Es un tema de la tecnología usada en la medición, el agua no rebota de manera lineal ni las ondas ni la luz,
Seguro que hay sondas económicas capacitivas, y más aún conductivas. Pero no sabría recomendarte alguna en concreto.
¿Son los valores reales o son ejemplos?