domingo, 13 de septiembre de 2015

Sensor de distancia infrarrojo GP2Y0A21YK0F - Sketch




En entradas anteriores ya hemos presentado las características más relevantes del sensor de distancia infrarrojo GP2Y0A21YK0F, sus limitaciones y cómo podemos conectarlo a nuestra placa Arduino.


Hoy vamos a ver como escribir un sketch sencillo para empezar a obtener datos rápidamente.


Pero antes, volvamos al principio, volvamos al datasheet the SHARP y la recomendación qu identificamos cuando estuvimos haciendo la presentación del mismo.

Sin entrar en detallar el valor de los condensadores entre las líneas de alimentación y el valor de los condensadores para filtrar los ruidos electrónicos (que no son más que falsas perturbaciones en la señal que puede ser interpretada como información y no lo son), podemos decir que para este sensor de distancia de SHARP, lo recomendable no solo es ponerle el condensador electrolítico de 10 microfaradios sino además ponerle uno cerámico de 100 nanofaradios, entre la alimentación y el GND, además de una pequeña resistencia de 10 ohms (tal como aconseja el fabricante bq).

Es posible que si no los ponemos, no tengamos mayores problemas, si nuestro Arduino no tiene muchos más sensores o motores montados, pero podría ser que no fuera ese nuestro caso y el sensor empiece a comportarse de forma extraña.

Por ello y como no va a hacer ningún mal al dispositivo, si tenéis algo a mano, lo recomendable es montarlo. En otra entrada intentaremos caracterizar el impacto de esta mejora de forma cuantitativa.

Dicho esto,  a continuación hemos incluido la versión más simplificada del código que podéis usar para detectar obstáculos con este sensor. Viendo el tipo de datos que suministra que da, no nos resultará complicado implementar algunos comportamientos a nuestro robot.

Pero si lo que vais persiguiendo no es solo detectar obstáculos sino medir a las distancias a las que se encuentran, la tarea es un poco más complicada, por dos razones:

  1. Como vimos en la introducción, el comportamiento de la señal no es lineal, por lo que tendremos que empezar primero calibrando la respuesta en todo el rango de medidas, una vez hecho esto, tendremos nuestro "traductor" personal
  1. Como las medidas pueden estar sujetas a ruidos electrónicos que provoquen resultados erróneos, tendremos que implementar un sistema de corrección en el sketch por un procedimiento de medidas medias, esto hará que consumamos un poco más de los recursos iniciales previstos (aunque muy probablemente ni lo notemos)


Así que en la próxima y última entrada, presentaremos el procedimiento de calibración y ajuste de las medidas.

Y ya sabéis, si tenéis alguna sugerencia o duda, no tenéis más que mandarnos un correo a


e intentaremos responder a vuestra pregunta lo antes que podamos.



/*
 
 Sensor de distancia infrarrojo Sharp GP2Y0A21
 
 VCC conectado a Arduino 5v 
 GND conectado a Arduino GND
 Salida analogica conectada al pin analogico de Arduino A0 
 
 Creado el 13 de septiembre de 2015
 por M.Dominguez 
 
*/


// Vamos a empezar definiendo las variables que vamos a usar en nuestro Sketch


int salida = 0; // Es el PIN analogico que vamos a usar para detectar


// Ahora configuramos el bloque setup 
// que es la parte del sketch donde decimos que pines vamos a usar
// y si son analogicos (ANALOG) o digitales (DIGITAL)
// si son de recepcion (INPUT) o (OUTPUT)
// si vamos a comunicarnos por el puerto serie o no
// (y asi poder ver leer por el monitor los resultados)
// etc


void setup(){
  Serial.begin(9600);
  
  // Gracias al puerto serie, podemos leer lo que Arduino recibe por sus canales 
  // Abre un puerto de comunicacion serie 
  // y espera a que se abra
  // y le estable la velocidad de transmision 
  // de esta informacion en baudios
  // un baudio es un bit por segundo 
  // En este caso a 9600 baudios
}

// Configuramos el bloque loop
// Es la parte principal de nuestro programa pues en el tendremos 
// que poner el código para que el microcontrolador lo ejecute las ordenes
// que le demos lo ejecute de manera repetitiva, 
// mientras la placa Arduino tenga energía

void loop(){
  int val = analogRead(salida); // aqui lo que hacemos es definir la variable
  // local, esto es que solo se utilizan en esta parte del codigo
  // y le dice al microcontrolador que tanto la 
  // duracion como la distancia, van a ser numeros enteros (INT)
  Serial.println(val); //pintamos en el monitor serie el valor que obtenemos
  delay(100); // y con objeto de que no vaya demasiado rapido, hacemos que se 
  // pausando  100 milisegundos antes de comenzar otra lectura

}







No hay comentarios:

Publicar un comentario