Hola Enryke.
Muchas gracias por tu contestación.
Leeré con calma el pdf que adjuntas. Ya lo había leido justo antesde de perdir el ultrasonidos, pero igual repasandolo ahora que sabemos como funciona me aclaro algo mejor.
De todas formas intentaré incluir un filtro modal al código que puse mas arriba, de forma que indique en el display la media de nueve medidas que realice.
Si te apetece, te invito a que me ayudes en esto y así dejamos trillado el medidor de ultrasonidos.
El tema del Laser lo he pensado, pero ¿No tendrá problemas a la hora de medir sobre un líquido en el que su superficie no es totalmente estanco?
A parte, no busque mucho, pero no encontré laser para medir distancias en Arduino.
Tomaré en cuenta tus ideas.
Un millon de gracias.
Acuerdate de la invitación.
Realmente no se como empezar con el filtro modal. Pero me niego a desestimar el ultrasonidos hasta no estar completamente convencida de su funcionamiento.
Para comenzar, tengo esto, que pertenece a un MaxSonar EZ1
A ver como lo encajo en el código de arriba,
//El uso del módulo de sonda MaxSonar EZ1 en modo analógico con arduino
//Filtro de mediana de cinco lecturas consecutivas para eliminar los picos
// Toma 5 lecturas y las guardar en un RangeValue array []
// Uso de un "tipo de insercción ascendente". Reorganizar los valores de la matriz en orden ascendente
// Selecciona el elemento central de la matriz, que será, por definición, la mediana del conjunto de valores
//
// El pin analógico 1 para la lectura de la tensión analógica del dispositivo MaxSonar.
int anPin = 13;
//variables necesarias para almacenar los valores
int arraysize = 5; // Cantidad de valores que va a tomar para tomar la media.
// Tiene que ser un número impar.
/Declara una matriz para almacenar las muestras. No es necesario poner ceros
a los valoresde la matriza aquí, esto solamente aclara el código/
int rangevalue[] = {0, 0, 0, 0, 0};
//*********************************************************************************************
void setup()
{
//Abrimos conexión serie
Serial.begin(9600);
printArray(rangevalue, arraysize);
delay(5000); //Esperamos a que se abra la ventana del monitor serie.
}
//********************************************************************************
void loop()
{
pinMode(anPin, INPUT);
for(int i = 0; i < arraysize; i++)
{ //array pointers go from 0 to 4
// Se usa para leer en la salida de tensión analógica que está siendo enviada por el dispositivo MaxSonar.
// El factor de escala es MaxSonar (Vcc/512) por pulgada. Un rendimiento de alimentación de 5V ~ 9.8mV/in
// El Arduino asignará voltajes de entrada entre 0 y 5 voltios en valores enteros entre 0 y 1023.
// Esto produce una resolución entre las lecturas de: 5 voltios / 1024 unidades o, 0.0049 voltios (4.9 mV) por unidad.
// Por lo tanto, una unidad de ADC del arduino representa 0,5 pulgadas
rangevalue* = analogRead(anPin);*
_ Serial.print("i, valor ");_
_ Serial.print(i);_
_ Serial.print(" , ");_
_ Serial.print(rangevalue*);_
_ Serial.println();_
_ delay(10); //tiempo de espera entre muestras*_
* } *
_ Serial.print("Sin clasificar ");
* printArray(rangevalue, arraysize);*
Serial.println();
* isort(rangevalue, arraysize);*
Serial.print("Clasificadas ");
* printArray(rangevalue, arraysize);*
Serial.println();_
* // Ahora mostramos la media *
* int midpoint = arraysize/2; //El punto medio de la matriz es el valor medio*
* //Tener en cuenta que para una matriz de 5, el punto medio es 2 y el primer punto es el elemento 0.*
_ Serial.print("Valor medio del rango ");
Serial.print(rangevalue[midpoint]);
Serial.println();
Serial.println(); _
* delay(3000); //Esperar un tiempo para que pueda leer los valores en el monitor serie*
} //fin del loop
/*--------------------------------------------------------------------
* FUNCIÓN DE CLASIFICACIÓN*
-----------------------------------------------------------------------*/
void isort(int *a, int n)
// "*a" es un punto del comando de la funcion
{
* for (int i = 1; i < n; ++i)*
* {*
_ int j = a*;
int k;
for (k = i - 1; (k >= 0) && (j < a[k]); k--)
{
a[k + 1] = a[k];
}
a[k + 1] = j;
}
}
/-----------------------------------------------------------
* La función imprime los valores de la matriz*
------------------------------------------------------------/
void printArray(int *a, int n)
{*_
* for (int i = 0; i < n; i++)*
* {*
_ Serial.print(a*, DEC);
Serial.print(' ');
}*_
_ Serial.println();
}
[/size][/size]
[/quote]
_