usar-un-optointerruptor-con-arduino

Hacer un encoder óptico con un optointerruptor y Arduino

¿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.

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 veis, 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.

const int sensorPin = 9;

void setup() {
  Serial.begin(9600);   //iniciar puerto serie
  pinMode(sensorPin , INPUT);  //definir pin como entrada
}
 
void loop(){
  int value = 0;
  value = digitalRead(sensorPin );  //lectura digital de pin
 
  if (value == LOW) {
      Serial.println("Optointerruptor activado");
  }
  delay(1000);
}

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.

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github. github-full