Hacer un encoder óptico con un optointerruptor y Arduino


arduino-encoder-optointerruptor

¿Qué es un optointerruptor?

Un optointerruptor es un sensor con forma de “U” que permite detectar un objeto que atraviesa el dispositivo por la ranura interior.

arduino-optointerruptor

Los optointerruptores son sensores sencillos. Uno de los extremos contiene un diodo emisor de infrarrojos, mientras que el otro contiene un fototransitor que recibe la señal. Cuando un objeto pasa por la ranura interrumpe el rayo de luz infrarroja, lo que es detectado por el fototransitor.

Los optointerruptores son muy empleados como encoder para detectar la velocidad de giro y posición del eje de un motor. Para ello se emplea un disco con ranuras acoplado al eje. También es posible emplear una lámina transparente sobre la que se imprimen franjas negras, algo que encontramos frecuentemente en impresoras.

Anuncio:

arduino-encoder

Además de como encoder, un optointerruptor puede ser empleado para detectar cualquier tipo de objecto que interrumpa el rayo como, por ejemplo, para detectar el cierre de una puerta, o como fin de carrera óptico en el desplazamiento de una máquina.

Otro sensor ampliamente empleado para realizar encoders y tacómetros es un sensor hall, como vimos en la entrada Detectar cambos magnéticos con Arduino y sensor hall A3144

Precio

Podemos encontrar placas con optoacoplador por unos por 0,60€ en vendedores internacionales de eBay y AliExpress.

No son componentes fáciles de encontrar porque cada vendedor le pone un nombre diferente y las traducciones de estas páginas son bastante malas. Probar buscando "photo interrupter" o "sensor velocidad arduino" o "sensor ranurado arduino"

arduino-encoder-optointerruptor-componente

También podemos encontrar optointerruptores en montajes de 2 o 4 canales. En general suelen ser más caros que comprarlos sueltos y no hay ninguna ventaja en tenerlos en un mismo dispositivo así que, en general, no son recomendables.

arduino-encoder-optointerruptor-multicanal

Al ser un sensor sencillo también podemos montarlo nosotros mismos. En general no merece la pena ya que sólo los componentes nos costarían más, sin contar el tiempo necesario y la calidad que podríamos obtener, por lo que lo normal es que usemos un modelo comercial.

Ensamblar nuestro propio sensor solo tiene sentido cuando, por la ubicación en la que tenga que ser montado el sensor, no dispongamos de espacio para alojar una placa comercial y nos veamos obligados a integrar el componente.

Esquema eléctrico

Si usáis una placa comercial, que como hemos dicho en general es recomendable, el montaje de un optointerruptor a Arduino es realmente sencillo. Alimentamos el módulo a través de Vcc y GND conectándolos, respectivamente, a la salida de 5V y GND en Arduino.

arduino-encoder-optointerruptor-esquema

Por otro lado conectamos la salida digital del sensor a una entrada digital para leer el estado del sensor.

arduino-encoder-optointerruptor-montaje

Si os decidís por hacer todo el montaje vosotros mismos, el esquema eléctrico tampoco es complicado. Simplemente necesitamos alimentar el módulo correctamente, respetando el esquema del componente. Como véis, el sentido de alimentación de ambas ramas suele estar invertido. Consultar el Datasheet de vuestro optoacoplador para verificar su patillaje.

arduino-optointerruptor-funcionamiento

Alimentamos al fotodiodo a través de una resistencia para limitar su corriente, como vimos en Encender un Led con Arduino. En la rama del fototransistor empleamos una resistencia de pull-down para leer el estado del sensor, como vimos en Leer un pulsador con Arduino

Ejemplos de código

Tenemos varias opciones para leer un optointerruptor con Arduino. Si estamos detectando la presencia de un objeto, simplemente leemos el estado de la entrada digital, tal y como vimos en la entrada Entradas digitales en Arduino.

Cuando el sensor se dispara, ejecutamos las acciones necesarias, cómo incrementar un contador, o medir el tiempo entre disparos.

Sin embargo, en el caso de usar el optointerruptor como encoder lo normal es que empleemos las interrupciones de Arduino, lo que nos simplificará considerablemente el código. El punto negativo es que tendremos que hacer debounce a las entradas y que Arduino UNO y Nano solo tenemos dos interrupciones externas, lo cuál en algunos vehículos se nos quedará corto.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección Tutoriales de Arduino

Anuncio:

Previous Controlar un servo con Arduino
Next Medir distancias con Arduino y sensor Sharp GP2Y0A02YK0F
1000
2 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
newest oldest
Miguel

La variable definida en el principio como "sensorPin" aparece en el void setup() definida como "pin". Para que funcione el programa solo hay que ponerle el mismo nombre a los 2.

Lluís

Quisiera hacer un cuentarevoluciones para motores eléctricos (CC) con los módulos LM393 de los que has hablado. La duda es;
Si estos motores pueden ir hasta 30.000 ó 40.000 R.P.M., esto significa un ciclo cada 1,5 ó 2,0 ms.
¿No me encontraré que 1 ms de debounce no resolverá la inercia del receptor IR?. ¿Hay solución para esos casos?, ¿Otro tipo de sensor?

Gracias por tus esfuerzos en ayudarnos.