Calibrando los sensores
Calibrando los sensores
A continuación, se va a definir el método que se ha utilizado para la calibración de los sensores que se encuentran a la entrada del parking.
Una vez montado el subsistema, lo primero que debemos hacer es calibrar los sensores para que las mediciones sean correctas y evitar medidas erróneas o falsos positivos.
Para esta tarea, se ha hecho uso de una librería de Arduino llamada ResponsiveAnalogRead. Esta librería cuenta con un algoritmo perfeccionado de reducción de ruidos en medición de sensores analógicos, en el siguiente enlace se puede visualizar el comportamiento de este:
Los pasos que hace esta librería para eliminar el ruido son los siguientes:
Código para el calibrado
Una vez explicada la librería que vamos a utilizar, el siguiente punto es realizar el código que se va a ejecutar la primera vez que se inicialice el subsistema de control de entrada/salida.
Una vez montado el subsistema, lo primero que debemos hacer es calibrar los sensores para que las mediciones sean correctas y evitar medidas erróneas o falsos positivos.
Para esta tarea, se ha hecho uso de una librería de Arduino llamada ResponsiveAnalogRead. Esta librería cuenta con un algoritmo perfeccionado de reducción de ruidos en medición de sensores analógicos, en el siguiente enlace se puede visualizar el comportamiento de este:
Los pasos que hace esta librería para eliminar el ruido son los siguientes:
- Visualising the problem En este punto observa el problema que existe al recibir datos analogicos de un sensor, donde el ruido hace que los datos no se mantengan estáticos.
- The exponential moving average En este punto empieza a aplicar un algoritmo primitivo de suavizado de datos mediante el siguiente código:
- Being responsive En este punto realiza un cambio en el algoritmo para que se ajuste el ruido según la velocidad de cambio en las mediciones del sensor.
- Applying the brakes Este último cambio busca “frenar” el comportamiento ruidoso de la lectura analogica del dato, de forma que si el sensor ha medido y no ha vuelto a medir más, el valor se refleje estático. Esta última parte está pensada mayormente al control de potenciómetros
Código para el calibrado
Una vez explicada la librería que vamos a utilizar, el siguiente punto es realizar el código que se va a ejecutar la primera vez que se inicialice el subsistema de control de entrada/salida.
//Sensors
const int NUM_SENSORES = 2; // Número de Sensores
const int settime = 5000; // Tiempo dedicado al ajuste desde el inicio del programa
int limitCoche[] = {0,0}; // Offset pasa coche
int PLAZAS_LIBRES = 2; // Número de plazas libres
int ValorLDR[] = {0,0}; // Valor lectura LDR
int MinLDR[] = {1023, 1023}; // Valor mínimo de la LDR
int MaxLDR[] = {0,0}; // Valor máximo de la LDR
int enable[] = { D5, D6 }; // Pines habilitado sensores
ResponsiveAnalogRead luz(A0, true);
void setup() {
Serial.begin(9600);
for(int i=0; i<NUM_SENSORES; i++) {
pinMode(enable[i], OUTPUT);
}
Serial.println((String)"Calibrando durante "+settime+" ms...");
//Iniciamos la calibración
for(int j=0; j<(settime)/100; j++) {
for(int i=0; i<NUM_SENSORES; i++) {
// habilita el ldr
digitalWrite(enable[i], HIGH);
// update the ResponsiveAnalogRead object every loop
luz.update();
ValorLDR[i] = luz.getValue(); // Leemos el valor del sensor 1
// deshabilita el ldr
digitalWrite(enable[i], LOW);
// Grabamos el valor máximo si es mayor que el guardado
if (ValorLDR[i] > MaxLDR[i]) {
MaxLDR[i] = ValorLDR[i];
}
// Grabamos el valor mínimo si es menor que el guardado
if (ValorLDR[i] < MinLDR[i]) {
MinLDR[i] = ValorLDR[i];
limitCoche[i] = MinLDR[i]+40;
}
}
delay(100);
}
Serial.println("Fin calibrado");
}
|
Este código calibrará los sensores durante 5 segundos, alternando la medición entre un sensor y otro hasta que finaliza el tiempo. Para ello empezamos a calibrar sin ningún objeto sobre los sensores LDR y a continuación vamos introduciendo un objeto consiguiendo menos luminosidad en ambos sensores.
La forma en cómo se calibra es la siguiente:
De esta forma obtendremos la calibración del sistema acotado entre un valor mínimo y un valor máximo.
La forma en cómo se calibra es la siguiente:
- Un bucle selecciona el sensor que se va a medir.
- Habilita el sensor que va a medir.
- Se recoge el valor, sin ruidos, del sensor mediante el uso del método update() de la librería ResponsiveAnalogRead.
- Leemos el valor mediante el uso del método getValue() y lo guardamos en la variable ValorLDR.
- Deshabilita el sensor una vez se ha obtenido el resultado.
- Si ValorLDR es mayor que MaxLDR, guardamos el valor máximo.
De esta forma obtendremos la calibración del sistema acotado entre un valor mínimo y un valor máximo.
Comentarios
Publicar un comentario