Mejora tus proyectos de Arduino con un Encoder Rotativo Incremental

Introducción

Los encoders son componentes esenciales en muchos sistemas que requieren precisión en el movimiento. Desde robótica hasta sistemas de control de movimiento, estos sensores proporcionan información precisa sobre la velocidad y dirección, lo que permite a los dispositivos comportarse con un nivel de precisión antes inalcanzable.

En este tutorial te enseñaremos las bases y un ejemplo práctico de como usar un encoder en una placa Arduino, aquí usaremos un motor simple pero puedes usarlo con cualquier eje del cual quieras saber las revoluciones por minuto.

 

¿Qué es y cómo funciona un Encoder Rotativo Incremental óptico?

También conocido como sensor de velocidad fotoeléctrico, es un tipo de sensor que se utiliza para detectar cambios en la posición, velocidad y dirección de un objeto en movimiento. Estos sensores suelen usarse en una variedad de aplicaciones, que van desde la robótica hasta los sistemas de control industrial.

El sensor de velocidad de encoder fotoeléctrico funciona basándose en principios fotoeléctricos. Estos sensores suelen constar de un emisor de luz (usualmente un LED o un diodo láser) y un detector de luz (usualmente un fotodiodo o un fototransistor). Estos componentes están separados por un disco decodificador que tiene patrones de ranuras o marcas en él.

A medida que el objeto en movimiento (como el eje de un motor) rota, hace girar el disco decodificador, las ranuras o marcas en el disco interrumpen la luz del emisor hacia el detector a medida que pasa. Esto crea pulsos de luz que son detectados por el detector de luz, que los convierte a pulsos eléctricos.

Estos pulsos eléctricos se pueden contar y medir para determinar la posición y la velocidad del objeto en movimiento. Por ejemplo, si se sabe que un disco tiene 100 ranuras y se cuentan 100 pulsos en un segundo, se puede determinar que el objeto está girando a una velocidad de una revolución por segundo.

Este sensor además es de cuadratura de doble canal es decir que cuenta con dos salidas de señales con un desfase de 90º entre sí. De este modo el controlador puede determinar la dirección de rotación.

Uso con Arduino

Montaje

El primer paso en este proceso implica adaptar el accesorio plástico proporcionado con tu encoder al eje de tu motor. Este accesorio, a menudo referido como un acoplador, se ajusta entre el eje del motor y el disco rotativo del encoder. Asegúrate de que el acoplador esté firmemente asentado en el eje del motor para evitar cualquier juego o deslizamiento.

Una vez que el acoplador esté en su lugar, es hora de montar el disco rotativo. Este disco, que contiene una serie de marcas o ranuras, se inserta en el acoplador. Al girar con el motor, estos marcadores interrumpirán el haz de luz del encoder, generando una señal que puede utilizarse para determinar la posición y la velocidad del motor.

Finalmente, para asegurar el disco en su lugar, aprieta suavemente la tuerca proporcionada en el eje.

Para garantizar una correcta detección de las revoluciones del motor mediante nuestro sensor, debemos montar el motor de tal manera que el disco rotativo quede posicionado exactamente entre la apertura del sensor como en la siguiente imagen.

Conecta tu motor a un circuito que te permita variar las RPM como un PWM o un controlador de voltaje.

Diagrama

En este tutorial calcularemos las RPM de un motor, para nuestro propósito, solo requeriremos una señal de salida del sensor y la alimentación del circuito.

  1. Conecta el terminal positivo (+) de tu sensor al pin de alimentación de 3.3V en tu placa Arduino.
  2. Conecta el terminal negativo (-) de tu sensor al pin de tierra (GND) en tu placa Arduino.
  3. Por último, conecta el cable del terminal de salida (01) de tu sensor al pin digital 2 en tu placa Arduino.

Código

 Una vez conectado el encoder al Arduino crea un nuevo sketch y copia el código que esta a continuación:   

 Aquí está una descripción detallada de cada parte del código:

  • volatile int interrupciones = 0; declara una variable entera volátil llamada interrupciones que se usará para contar cuántas veces se ha interrumpido el sensor.

  • int pin = 2; define el pin de entrada que está conectado al sensor de encoder.

  • void rpm() { interrupciones++; } define una función de interrupción para ser llamada cada vez que se detecta un cambio de estado en el pin del sensor.

  • void setup() es la función de configuración que se ejecuta solo una vez al principio del programa. Dentro de esta función, la comunicación serie se inicia con Serial.begin(9600); y se adjunta una interrupción en el cambio de estado del pin del sensor.

  • void loop() se ejecuta continuamente después de la función setup(). Dentro de este bucle, el código reinicia el contador de interrupciones, habilita las interrupciones, espera un segundo, luego deshabilita las interrupciones.

  • float rpm_val = (float)interrupciones * 60.0/100.0; calcula las RPM basándose en las interrupciones contadas durante ese segundo. Multiplica por 60 para obtener las RPM y divide por 100 debido a que el encoder tiene 100 líneas.

  • Serial.print("RPM = "); Serial.println(rpm_val); imprime el valor de las RPM en la consola serie.

Resultados

 Abre el monitor serial a 9600 bauds y controla el giro del eje que mides para poder visualzar las RPM.

Cabe resaltar que este ejemplo es muy sencillo y no es la mejor opción para medir altas revoluciones, para una aplicación completa te recomendamos medir el tiempo con algún timer por hardware, asi como comparar la señal del encoder usando un timer en modo comparador o un microcontolador con una frecuencia de reloj más alta. 

En el caso de los encoders ópticos, al girar el eje del encoder, las ranuras del disco generan interrupciones en el haz de luz, que se detectan luego como pulsos. Sin embargo, en algunos casos, especialmente a alta velocidad o en presencia de vibraciones, el sensor puede detectar falsas fluctuaciones y considerarlas como pulsos válidos. Este fenómeno se conoce como "rebote" o "bounce". El "debouncing" se realiza para filtrar estos falsos pulsos.

Conclusión

Los encoders representan una potente herramienta de control de movimiento cuando se utilizan con Arduino. Facilitan la construcción de proyectos de robótica precisos, sistemas de navegación y cualquier cosa que requiera un control sofisticado de la velocidad y la dirección. Al desbloquear su potencial, podrás llevar tus proyectos al siguiente nivel de precisión y funcionalidad.

 

 

Productos Relacionados

Ver artículo

Ver artículo

ArduinoEncoder

Deja un comentario