Electroensaimada DIY, Raspberry Pi, Arduino ...
  • Home
  • Raspberry Pi
    • Básico >
      • Primeros pasos
      • IP estática
      • Montar Pendrive
      • Escritorio remoto
      • Conexión Wifi
      • no-ip
    • Intermedio >
      • Openelec Xbmc
      • OwnCloud
      • Torrent
      • Parpadeo led
      • Xbee
    • Avanzado >
      • SPI con WiringPi
      • ADC
      • Control temperatura
      • Alarma con aviso por mail
    • Raspberry Pi Expansion Board >
      • Control temperatura
      • Alarma con aviso por mail
  • Arduino
    • Motor paso a paso
    • Servomotor
    • PWM
    • Sensor Infrarrojo
    • SPI
    • I2C
    • Relé y LDR
    • Mando Radiocontrol
  • Blog
    • Contacto
  • CNC
    • Material
    • Codigo Maquina >
      • Leer el fichero
      • Decodificar fichero
      • Entorno de usuario
    • Movimiento >
      • Recta a trozos
      • Taladrar o cortar
    • Estructura
    • Estructura(2º Version)
    • Modelo CAD 3D
  • Software
    • Qt
    • Eagle >
      • Instalación y primeros pasos eagle
      • Librerías
  • Utilidades
  • Laboratorio
    • Fuente alimentación >
      • Material
      • Montaje

Tutorial Arduino : Sensor infrarrojo

En este tutorial vamos a ver como funciona el típico sensor infrarrojo para medir distancia. Este sensor se utiliza mucho ya que es relativamente barato y ofrece buenas prestaciones. En nuestro caso usaremos el Sharp GP2Y0A21YK. Aquí podéis ver una imagen y su datasheet. El sensor consta de tres pines, uno para masa otro para Vcc que suele ser 5 V y otro para la salida(Vo).
Imagen
gp2y0a21yk.pdf
File Size: 71 kb
File Type: pdf
Descargar archivo

Según podemos leer en el datasheet es capaz de medir distancias de entre 10 y 80 cm y mediante una salida analógica nos proporciona la información de la posición. De la tabla inferior obtenemos que para una distancia de 80 cm nos dará aproximadamente una tensión de 0.4V.
Imagen
Podemos leer que el asterisco 1 nos indica que esta salida depende del objeto al que este apuntando. Esto es debido a que estos tipos de sensores dependen mucho de los objetos a los que se apunta. En caso de ser objetos blancos nos llegara mas luz pero por contra con un objeto a la misma distancia pero de color negro, la distancia medida sera diferente. Estos cambios son apreciables pero tampoco imposibilitan el uso de este sensor para medidas de distancia. La mayor pega que tienen estos tipo de sensores es que son incapaces de medir objetos transparentes y ademas si algún foco de luz como el sol o una lampara les dan directamente en el sensor también puede cambiar la medida.
Ahora vamos a la parte mas importante, la gráfica que nos relaciona distancia con tensión.
Imagen
Vo vs Distancia.
Podemos ver que esta gráfica no es lineal, ademas de que para distancia algunas medidas tenemos dos distancias posibles. Es decir si nos da 1.5V es posible que estemos en 3 cm o en 18 cm. Esto se puede solucionar poniendo el sensor empotrado en algún hueco y asegurándonos que no nos medirá distancia menores a 10 cm. En caso de solo utilizar la parte de medida recomendada (10 a 80 cm). Tenemos una gráfica con una curva y lo que a nosotros nos resultaría mas sencillo seria una recta. En este caso tenemos tres opciones:
  1. La mas simple es coger el punto a 10 cm que serian unos 2.25 V y el punto a 80 cm que serian 0.4 V y aproximar la curva a una recta. En ese caso en los puntos centrales cometeríamos errores mayores y en ningún caso excepto los puntos extremos tendríamos el valor real. Basada en esta se puede hacer una recta que se aproxime a un numero mayor de puntos.
  2. Este caso es una extensión del anterior y se basa en usar una recta a trozos, por lo que podríamos coger tres puntos y crear dos rectas. Cogeríamos los puntos anteriores mas el punto intermedio de 45 cm que nos da 0.75V.
  3. El ultimo caso seria una aproximación cuadrática o exponencial de algún tipo. Mediante el excel podemos introducir los datos y que nos la calcule automticamente si ponemos insertar linea de tendencia.
Imagen
Se ve claramente como la función con la potencia es la mas adecuada ya que se adapta casi perfectamente a los datos. Ahora ya tenemos la tensión en función de la distancia, aunque nosotros mediremos tensión y queremos distancia, por lo que simplemente hay que despejar la x de la ecuación, en mi caso lo que haré sera graficar la función al revés donde las x son las y y viceversa. Os adjunto el excel usado.
Imagen
graficos_ir.xlsx
File Size: 53 kb
File Type: xlsx
Descargar archivo

Ahora ya tenemos la mejor ecuación para caracterizar nuestro infrarrojo. Es hora de usarlo con el Arduino y ver si realmente tiene el comportamiento esperado. Para ello empezaremos por la parte básica  que es conectar el sensor a un pin analogico del Arduino y hacer una lectura en bruto. Si teneis un cable para este tipo de sensor como el mio , el rojo es Vcc, el negro masa y el amarillo Vo. Sino las conexiones son la siguientes:
Imagen
Sensor con cable.
Imagen
Conexión del sensor IR
En el código de Arduino vamos a usar la función analogRead(pin) que nos permitirá leer desde uno de los conversores ADC que tiene. Simplemente conectamos el Vo del sensor al pin analog 0. Hay que tener en cuenta que el conversor es de 10 bits por lo que tendremos valores de entre 0 y 1023. Seguidamente los mostramos por el terminal. Es importante poner el delay ya que sino el terminal colapsaría.
Imagen
Codigo para leer del ADC.
Imagen
Lectura enviada desde Arduino
ir_1.rar
File Size: 0 kb
File Type: rar
Descargar archivo

Podemos ver que el valor que nos da es de aproximadamente 500 es decir una medida de unos 2.5V. El primer paso para poder usar todo lo echo anteriormente con las aproximaciones consiste en transformar esos valores del ADC en tensión. Para ello vamos hacer una simple regla de 3. Sabiendo que el máximo son 1023 y que corresponde a 5V y el mínimo es cero y corresponde a 0 V, es sencillo calcular la tensión de cada valor. Para ello vamos a crear una función que se llame ADC_to_Volt en la cual le pasaremos el valor del ADC como parámetro y nos devolverá la tensión en voltios.
Le damos a la parte superior derecha en la flecha que hay debajo de la lupa del monitor Serial. Y elegimos new Tab, y le ponemos un nombre, por ejemplo IR_SENSOR. Esto es un fichero nuevo que nos permitirá poner funciones separadas del código principal.
Imagen
Ahora se escribe la función en esa pestaña. La función simplemente multiplica el parámetro de entrada por 5 y lo divide entre 1023. En el loop la llamamos después del analog Read, y printamos los dos valores.
Imagen
Funcion ADC_to_Volt
Imagen
loop con llamada a ADC_to_Volt
Imagen
Monitor Serial
ir_2.rar
File Size: 0 kb
File Type: rar
Descargar archivo

Finalmente nos falta el ultimo paso. Que consiste en usar la función obtenida con el Excel y transformar tensión en distancia. Para ello crearemos una nueva función que llamaremos IR_Sensor donde el parámetro de entrada sera el pin que queremos leer y el parametro de salida la distancia en cm. De esta manera en el loop solo tendremos una función y dentro de la función IR_Sensor ya haremos la lectura analógica y todo el tratamiento.
Imagen
Funcion IR_Sensor
Imagen
Loop con llamada a la funcion IR_Sensor
ir_3.rar
File Size: 0 kb
File Type: rar
Descargar archivo

Aquí podemos ver el resultado en el terminal de la consola, donde se puede ver la salida en cm. 
Imagen
Ahora ya podemos usar esta función en todos nuestros proyectos copiando el archivo en la misma carpeta del proyecto. Otra opción es crear una librería, mas adelante se explicara como crear una.
Con tecnología de Crea tu propio sitio web único con plantillas personalizables.
  • Home
  • Raspberry Pi
    • Básico >
      • Primeros pasos
      • IP estática
      • Montar Pendrive
      • Escritorio remoto
      • Conexión Wifi
      • no-ip
    • Intermedio >
      • Openelec Xbmc
      • OwnCloud
      • Torrent
      • Parpadeo led
      • Xbee
    • Avanzado >
      • SPI con WiringPi
      • ADC
      • Control temperatura
      • Alarma con aviso por mail
    • Raspberry Pi Expansion Board >
      • Control temperatura
      • Alarma con aviso por mail
  • Arduino
    • Motor paso a paso
    • Servomotor
    • PWM
    • Sensor Infrarrojo
    • SPI
    • I2C
    • Relé y LDR
    • Mando Radiocontrol
  • Blog
    • Contacto
  • CNC
    • Material
    • Codigo Maquina >
      • Leer el fichero
      • Decodificar fichero
      • Entorno de usuario
    • Movimiento >
      • Recta a trozos
      • Taladrar o cortar
    • Estructura
    • Estructura(2º Version)
    • Modelo CAD 3D
  • Software
    • Qt
    • Eagle >
      • Instalación y primeros pasos eagle
      • Librerías
  • Utilidades
  • Laboratorio
    • Fuente alimentación >
      • Material
      • Montaje