Led sensor

by Carol Ximena Naranjo = Descripción = En este tutorial se da una guía de como utilizar un led como sensor utilizando el efecto fotoeléctrico. Se ofrece un ejemplo para el microcontrolador atmega8 y se da una breve aproximación al uso de una matriz de leds como matriz de sensores. Este tutorial está basado fuertemente en los conceptos que se presentan en el proyecto "Laser Command", en donde se presenta la descripción de dos técnicas de sensado que se usarán de forma muy similar aquí, razón por la cual se recomienda leer previamente dicha información aquí. En este tutorial se usan las dos técnicas descritas, usando los periféricos ADC y PIO, con algunas modificaciones en especial para el caso de la técnica que usa el periférico ADC.

En el proyecto de ejemplo implementado se usará un solo led, para el cual se detectará la presencia de luz de laser utilizando ambas técnicas. Los resultados del sensado se envía por UART para ser observados por una terminal en el computador. En particular se usa VTerminal, que se caracteriza por su amigable interfaz y fácil configuración. Puede obtener VTerminal en la sección de descargas.

= Marco teórico = Aunque como se dijo anteriormente es útil leer los conceptos presentados en el proyecto Laser Command, aquí se hará una breve descripción de las técnicas utilizadas, ambas fundamentadas en el efecto fotoeléctrico. La primera de las técnicas hace uso de la capacitancia parásita del led al aplicar un voltaje inverso, el valor de esta capacitancia varía dependiendo de la luz incidente. Aprovechando esta variación la técnica consiste en aplicar un voltaje inverso sobre el led para precargar la capacitancia e identificar el tiempo en que esta demora en descargarse. Para esto, se utiliza el periférico PIO para detectar el momento en que el voltaje en el cátodo pasa de un valor alto a un valor bajo. Como resultado se encuentra que el tiempo de descarga es mucho mayor en un led apuntado con el laser.

Imagen tomada de http://www.cs.cmu.edu/~ehayashi/projects/lasercommand/

La segunda técnica hace uso del ADC para medir directamente el voltaje puesto por el led ante la presencia de luz, la técnica usada en este tutorial difiere un poco de la descrita en el sensado de "Laser command" según una caracterización previa como se muestra a continuación:

Caracterización preliminar
Para verificar el voltaje inverso que presenta el led ante la incidencia de luz, se realizó un sencillo experimento apuntando el led utilizado como sensor con una luz de laser. Para este experimento el led se descargó previamente colocando ambos terminales a tierra, posterior a esto, al apuntar el led con el laser se midió el voltaje diferencial en el led, con lo que se encontró que el led pasa de tener un voltaje inverso nulo a uno de 50mV al ser apuntado por el laser. Tenga en cuenta que el valor de dicho voltaje puede variar dependiendo del led utilizado y las condiciones de luz ambiente, sin embargo como se verá más adelante, la técnica implementada en el microcontrolador es independiente de los valores exactos de voltaje siempre y cuando se mantenga una diferencia mínima para ambos casos (con o sin laser).

Basándose en el comportamiento del led en términos del voltaje inverso puesto, la técnica implementada aquí consiste en precargar ambos terminales del led con un voltaje alto, para luego medir el voltaje inverso en el ánodo, que como se muestra más adelante en los resultados y videos de demostración presenta una diferencia significativa ante la presencia del láser.

Imagen original de http://www.cs.cmu.edu/~ehayashi/projects/lasercommand/

= Implementación en ATMEGA8 = Teniendo en cuenta las dos técnicas descritas, es proyecto de ejemplo aquí desarrollado consiste en medir un led por ambas técnicas, y enviar los resultados obtenidos por UART para ser observados en el computador. Como se muestra en el esquemático, en este caso se usaron únicamente los pines PC0(ADC0) y PB0(PIO_B) para medir el led, además del pin de TX para observar los resultados. En este proyecto, los datos que se envían por UART son: En primer lugar el byte 0xAA par indicar el inicio del programa, seguido de un voltaje de threshold de calibración obtenido en condiciones de luz ambiente para ser usado en la técnica de medición de voltaje inverso (en 2 bytes). En segundo lugar se envían mediciones consecutivas iniciando con el byte 0x4E para diferenciar una nueva medida, seguido del tiempo de descarga de la capacitancia en voltaje inverso (en 2 bytes) y del valor de voltaje medido con el ADC (en 2 bytes - 10bits del ADC).

Diagrama de flujo
En el diagrama de flujo se presenta el algoritmo general del proyecto de ejemplo realizado, de igual forma, el código fuente de dicho proyecto disponible en la sección de descargas está claramente comentado paso a paso para una mayor claridad de la implementación realizada.



Esquemático
El montaje mostrado incluye tanto la ubicación del led para el proyecto desarrollado como el montaje realizado para el MAX232 para observar los resultados en el computador.



Resultados
Tenga en cuenta que de un experimento a otro, las medidas encontradas pueden variar levemente incluso con el mismo montaje circuital. Sin embargo note que siempre se mantiene una diferencia para el caso en el que se ilumina el led con el laser con respecto a los resultados con luz ambiente. Aquí se muestran los resultados de una de las pruebas realizadas que puede observarse también en el primer video de demostración. De esta forma y según como se describió antes, en primer lugar se observaron en la terminal los bytes de inicialización así:

AA  03   B6

Luego, cuando el led está en presencia de luz ambiente en la terminal se observará una secuencia de bytes así:

4E  03   BE   00   C8

Mientras que cuando el led se apunta con el laser en la terminal se observará la siguiente secuencia: 4E  03   FF   00   67

= Videos de demostración =

En los videos se muestra el montaje realizado que incluye el driver de potencia con el MAX232, y los resultados obtenidos como se describe previamente. Note que es suficiente con alimentar el circuito con 3.3V, que es también la referencia del ADC.

000UseDrAzk XSoEaHHHm0E

= Futuros trabajos =

En el proyecto desarrollado se evidencia el manejo del led como sensor de luz. A partir de este trabajo es posible desarrollar de forma similar proyectos de sensado en donde se use una matriz de leds. Basta con ampliar el código con el manejo de un vector para filas y uno para columnas en lugar de controlar un sólo led, basándose en la configuración de una matriz típica de leds 8x8 como se muestra en la figura, puede verse que la técnica que utiliza el ADC puede utilizarse para identificar que columna se encuentra iluminada, mientras que la técnica de descarga de la capacitancia del led en inversa puede utilizarse para identificar que fila está iluminada. Juntando estas dos puede dientificar con exactitud que led es el que se encuentra apuntado por el láser. Puede basarse en el proyecto "Laser command" de la bibliografía para tener una visión más clara en el manejo de vectores para las filas y columnas.

= Herramientas =

Herramientas Software

 * AVR Studio 4 Visitar página
 * Terminal v1.6 BY Bray [[Media:Terminal.zip|Descargar]]

Herramientas Hardware

 * Microcontrolador Atmega8
 * Driver de potencia MAX232, condensadores, conector db9
 * Led 3mm, resistencia de 330ohms

= Descargas =

Proyecto de ejemplo

 * Proyecto completo Led Sensor [[Media:tuto_ledSensor.zip|Descargar]]
 * Archivo principal de código fuente [[Media:LedSensor.c|Descargar]]
 * Ejecutable .HEX [[Media:LedSensor.hex|Descargar]]

= Bibliografía=
 * Proyecto Laser Command Ir
 * Hoja de datos Atmega 8 Datasheet