Sensores de distancia infrarrojos para Arduino

En muchas ocasiones en nuestros proyectos con arduino necesitamos medir distancias, ya sea para saber si un robot tiene un objeto delante al cual debe esquivar o para saber que tan lleno est谩 un tanque de agua. Para lograr este objetivo utilizamos sensores de distancia.

En el mercado podemos conseguir 3 tipos de sensores para medir distancias:聽los sensores ultras贸nicos, los sensores l谩ser y los sensores infrarrojos.

Cuando hablamos de sensores infrarrojos para medir distancias nos referimos a los sensores SHARP (conocidos as铆 por su fabricante). Existe otro tipo de sensores IR utilizados para detectar objetos cercanos, pero no son buenos para calcular distancias, por lo que s贸lo nos enfocaremos en la l铆nea de sensores SHARP.

En este tutorial veremos c贸mo funcionan los sensores IR (o infrarrojos) y c贸mo podemos usarlos con Arduino. Se incluyen los diferentes modelos de sensores, diagramas de cableado y c贸digos de ejemplo para poder empezar a experimentar con el sensor.

驴C贸mo funciona un sensor de distancia IR?

Led IR y PSD en sensor infrarojoUn sensor de distancia IR utiliza un haz de luz infrarroja para reflejar un objeto y medir su distancia. La distancia se calcula utilizando la triangulaci贸n del haz de luz. El sensor consta de un LED IR y un detector de luz o PSD (Position Sensing Device). Cuando el haz de luz es reflejado por un objeto, el haz reflejado alcanzar谩 el detector de luz y se formar谩 un 芦punto 贸ptico禄 en la PSD.

Cuando la posici贸n del objeto cambia, tambi茅n cambia el 谩ngulo del haz reflejado y la posici贸n del punto en la PSD. Vea el punto 1 y el punto 2 en la siguiente imagen.

punto optico en sensor SHARP IR de distancia

El sensor tiene un circuito de procesamiento de se帽ales incorporado. Este circuito procesa la posici贸n del punto 贸ptico en la PSD para determinar la posici贸n (distancia) del objeto reflectante. Produce una se帽al anal贸gica que depender谩 de la ubicaci贸n del objeto que est谩 delante del sensor.

驴C贸mo leer un sensor de distancia IR?

Los sensores de distancia IR emiten una se帽al anal贸gica, que cambia dependiendo de la distancia entre el sensor y un objeto. En el Datasheet de cada modelo de sensor se pueden consultar los rangos de voltaje de salida. Por ejemplo, en el caso del sensor SHARP GP2Y0A21YK0F, el voltaje de salida es de 2,3 V cuando un objeto est谩 a 10 cm de distancia y 0,4 V cuando un objeto est谩 a 80 cm de distancia.

El gr谩fico inclu铆do en el Datasheet tambi茅n muestra por qu茅 el rango de detecci贸n utilizable comienza en 10 cm.聽Podemos observar que el voltaje de salida de un objeto que est谩 a 2 cm de distancia es el mismo que el voltaje de salida de un objeto que est谩 a 28 cm de distancia, en los 2 casos el voltaje de salida es de 1 V. Por lo tanto, el rango de detecci贸n que podremos utilizar comienza despu茅s del pico, a unos 10 cm o 2,3 V.

Voltaje de salida

La gr谩fica tambi茅n muestra el inconveniente de este tipo de sensores: la respuesta es no lineal. En otras palabras, un gran cambio en la tensi贸n de salida no siempre corresponde a un gran cambio en el rango. Para determinar la distancia existente entre el sensor y un objeto, es necesario encontrar una funci贸n que convierta la tensi贸n de salida en un valor de rango.

Para el ejemplo anterior del sensor SHARP GP2Y0A21YK0F, la formula a utilizar es:

Distancia (cm)= 27.726X POW(Tensi贸n_de_salida, -1.2045)

Esta es la funci贸n que se usa en la librer铆a SharpIR, la cual usaremos m谩s tarde. Tenga en cuenta que esta funci贸n se basa 煤nicamente en los datos de la hoja de datos de SHARP. Las caracter铆sticas de salida del sensor variar谩n ligeramente de un sensor a otro, por lo que es posible que obtenga lecturas inexactas.

Si desea mejorar la precisi贸n de sus lecturas, puede intentar medir y graficar muchos puntos de datos en Excel y ajustar una curva a trav茅s de estos puntos. Una vez que tenga una nueva funci贸n para su sensor espec铆fico, necesitar谩 cambiar la f贸rmula utilizada en el archivo SharpIR.cpp.

Modelos de Sensores de Distancia IR

Modelos de sensores IR SHARP

modelos shrap en pololu

El fabricante SHARP ofrece varios modelos de sensores infrarrojos para medir distancias que podemos utilizar con arduino, deberemos elegir el que mejor se adapte a nuestros requerimientos en cuanto a prestaciones y precio, ya que los sensores SHARP son en general m谩s caros que los sensores ultras贸nicos.

Cabe aclarar que los sensores que se ofrecen por internet en Aliexpress o Amazon en su gran mayor铆a son clones. Mientras que en la web de Polulu el modelo GP2Y0A21YK0F tiene un valor de 11u$s, los clones chinos se pueden conseguir por algo m谩s de 3u$s.

Invalid table id.

Conectando el sensor IR a Arduino

Para los ejemplos de este tutorial trabajaremos con el sensor de distancia por infrarrojos SHARP GP2Y0A21. Su uso es simple y tiene un rango de medici贸n de 10 a 80 cm, por lo que una buena opci贸n para utilizar en proyectos de robots aut贸nomos o donde necesitemos un interruptor 贸ptico sin contacto.

El siguiente diagrama de cableado muestra c贸mo conectar el sensor de distancia IR GP2Y0A21YK0F a un Arduino.

conexion del sensor al arduino

Este tipo de sensores de distancia tienden a generar un poco de ruido, por lo que se recomienda a帽adir un condensador entre Vcc y GND. La hoja de datos sugiere un condensador de 10 碌F o m谩s (recomiendo 220 碌F).
Se debe conectar el positivo del condensador a la conexi贸n del cable Vcc y el negativo a la conexi贸n del cable GND (como se aprecia en la imagen). Los condensadores suelen estar marcados con una banda que indica el conductor negativo.

Ejemplos de c贸digo para utilizar el sensor IR SHARP GP2Y0A21YK0F con Arduino

Disponemos de varias blibliotecas para utilizar este tipo de sensores. Las m谩s utilizadas y que mejor funcionan son las librer铆as SharpIR y ZSharpIR

C贸digo de ejemplo para biblioteca SharpIR

La biblioteca SharpIR (desarrollada por Guillaume Rico y Thibaut Mauon) facilita mucho el trabajo con sensores SHARP IR. Incluye las f贸rmulas necesarias para convertir el voltaje de salida medido a una distancia en cent铆metros. Actualmente la biblioteca soporta los siguientes sensores: GP2Y0A02YK0F, GP2Y0A21YK0F, GP2Y0A710K0F y GP2YA41SK0F. La 煤ltima versi贸n de la biblioteca se puede descargar aqu铆 en GitHub.

Como las lecturas del sensor pueden fluctuar bastante, la biblioteca resuelve el problema tomando m煤ltiples lecturas seguidas, descartando los valores at铆picos y tomando la media para obtener una lectura de distancia m谩s estable.

El siguiente c贸digo de ejemplo puede utilizarse con el sensor GP2Y0A21YK0F y muestra la distancia medida en cent铆metros en el monitor serie.

#include <SharpIR.h>   // Incluye la biblioteca
/* Modelos disponibles :
  GP2Y0A02YK0F --> 20150
  GP2Y0A21YK0F --> 1080
  GP2Y0A710K0F --> 100500
  GP2YA41SK0F --> 430
*/
#define IRPin A0       // Define input pin
#define model 1080     // Define modelo
int distancia_cm;      // Crea una variable para guardar la distancia

SharpIR mySensor = SharpIR(IRPin, model);  // Crea una nueva instancia de la clse SharpIR
void setup() {
  Serial.begin(9600);
}
void loop() {
  distancia_cm = mySensor.distance(); // Calcula la distancia y la guarda en distancia_cm
  Serial.print("Distancia: ");    // Imprime la distancia obtenida en el monitor serie
  Serial.print(distancia_cm);
  Serial.println(" cm");
  delay(1000);
  }

Ten en cuenta que en este ejemplo hemos llamado al sensor 芦mySensor禄. Si necesitamos utilizar varios sensores de distancia IR, se puede crear otra instancia de sensor con un nombre diferente: SharpIR mySensor2 = SharpIR(IRPin2, modelo); pudiendo utilizar un pin de entrada diferente para el segundo sensor.

Cuando la tensi贸n de salida es inferior a 1,4 V o superior a 3,3 V, ver谩 芦Distancia: 0 cm禄 en el monitor serie.

Conclusi贸n

Conviene utilizar los sensores de distancia SHARP IR en nuestros proyectos con Arduino? La respuesta es : depende. Si los comparamos con los sensores ultras贸nicos como el HC-SR04 los sensores infrarrojos son bastante m谩s costosos y el rango de medici贸n es menor. Tambi茅n podemos decir que los sensores infrarrojos suelen fallar bajo luz solar. Pero tienen algunas ventajas como ser mayor precisi贸n ante objetos curvos, mayor robustez (por eso son utilizados en los sumobots) y mayor velocidad de respuesta. Habr谩 que evaluar y analizar que es lo mejor para nuestro proyecto.

Si buscas un sensor de distancia con mayor alcance o un sensor resistente al agua puedes ver los tutoriales que tenemos disponibles de los sensores HC-SR04 y JSN-SR04T respectivamente.