Uso de codificadores rotativos con placas Arduino
Puedes controlar muchos proyectos utilizando componentes como botones o deslizadores, pero ¿qué pasa si tu construcción requiere una perilla? Si tu proyecto necesita una entrada rotativa, tienes dos opciones: un potenciómetro o un codificador rotativo.
Los potenciómetros, que varían la resistencia según la posición del perilla, son más simples y a menudo una elección sólida, pero solo se pueden girar en el sentido de las agujas del reloj o en sentido contrario (hasta ahora). Si necesitas algo que pueda girar continuamente en cualquier dirección, tu mejor opción es un codificador rotatorio. Si necesitas ayuda para decidir entre los dos, nuestra discusión sobre codificador vs. potenciómetro puede ayudarte a encontrar tu respuesta.
Los codificadores se presentan en dos estilos básicos:
1. Codificadores incrementales utilizan una serie de pulsos en una disposición de cuadratura para indicar cuánto y en qué dirección gira un eje.
2. Codificadores absolutos saben inherentemente su posición angular.
Este artículo se centrará principalmente en los codificadores incrementales, el tipo de codificador que más comúnmente verás. También están disponibles codificadores de salida única (también conocidos como tacómetros), pero son mucho menos útiles ya que solo indican cuánto se ha movido un eje, no su dirección. Puedes consultar nuestro artículo sobre tipos de codificadores para una discusión más detallada, pero hoy cubriremos los conceptos básicos de cómo funciona un codificador incremental y cómo interconectarlo con un Arduino board.
Encoders Cuadratura: Tutorial y Visión General
Diagrama de cuadratura para señales del codificador A y B. Un borde ascendente para B y una señal baja para A indica movimiento a la derecha en este patrón, mientras que un borde descendente para A con B alto indica movimiento a la izquierda.
En el corazón de la mayoría de los codificadores se encuentran las salidas "A" y "B", pulsando de manera constante e incremental. Estas salidas se combinan con potencia y tierra, según sea necesario. Las salidas A y B están "codificadas en cuadratura", lo que significa que cada señal tiene un ciclo de trabajo del 50% (activada la mitad del tiempo y desactivada la mitad del tiempo). Así es como funciona:
- Cada ciclo de trabajo está desfasado 90° respecto al otro; una salida cambia cuando la otra está a mitad del tiempo que tarda en cambiar de estado.
- Un microcontrolador o placa dedicada conectada traduce estos pulsos en un incremento de rotación, y la secuencia de pulsos indicará en qué dirección se ha girado el eje.
Como se muestra en el diagrama de arriba, si la señal B sube mientras A está en un estado bajo, entonces la posición en este patrón ha avanzado hacia la derecha. Sin embargo, si la señal B sube cuando A ya está en un estado alto, entonces se avanzaría hacia la izquierda. Combinado con el aumento y la caída de la señal A, esto da cuatro estados distintos para cada línea:
El mismo patrón de señal está disponible para la señal A, dando ocho posibles transiciones distintas y cuatro en cada dirección. Con este patrón envuelto y repitiéndose en un círculo, ahora tienes la base para un codificador rotativo de cuadratura.
1. B subiendo, A bajo
2. B bajando, A alto
3. B subiendo, A alto
4. B bajando, A bajo
Uso de un codificador rotatorio con Arduino
Vamos a emparejar dos tipos de encoders con el Arduino:
- Encoder de contacto: más pequeño, generalmente utilizado como dispositivo de interfaz.
- Encoder óptico (LPD3806-600BM-G5-24C): de estilo más grande con soporte de rodamiento, generalmente usado para medir la velocidad del motor.
Si estás usando el encoder más pequeño, realiza los siguientes pasos:
1. Conecta la línea del medio a tierra.
2. Conecta una conexión externa a D2 y la otra a D3; no se requiere voltaje positivo.
Para el encoder más grande, sigue estos pasos:
1. Conecta la línea de alimentación roja a +5V y el cable negro a tierra.
2. Conecta las líneas A y B (verde y blanca) a Arduino D2 y D3.
3. Nota que las conexiones, los requisitos de voltaje y los esquemas de colores pueden variar dependiendo de tu implementación.
Código del codificador de Arduino
Imagen: Jeremy S. Cook
Una vez que comprendas cómo pulsan las líneas A y B de un codificador con la rotación, obtener una salida útil es cuestión de traducir esta entrada en código. Este paso es simple en teoría pero puede ser complicado en la práctica. Puedes encontrar el código de ejemplo aquí (junto con una tapa imprimible en 3D para ayudar en las pruebas). Aunque la tapa no es perfecta, es direccionalmente precisa e ilustra cómo funciona un codificador. Cuando el microcontrolador de Arduino detecta una transición entre alto y bajo en cualquiera de las líneas, compara ambos estados de línea y suma o resta un incremento según corresponda.
Asegúrate de seleccionar D2 y D3 porque son las dos únicas entradas para el ATmega328 en muchas placas de Arduino capaces de generar una interrupción. Esto significa que cuando se detecta una transición aquí, inmediatamente entra en una rutina de lectura, sin esperar a que la lógica del programa lo llame.
También ten en cuenta el código debounce de millis(), que se adapta a una entrada que cambia rápidamente entre estados durante una transición y puede conectarse y desconectarse rápidamente por un corto tiempo. Aunque este código funciona aceptablemente en algunas aplicaciones y puede ayudarte a entender cómo funcionan los codificadores, obtener lecturas con un 100% de precisión no es fácil.
Uso de la biblioteca Arduino Encoder
El código del codificador Arduino te ayudará a entender cómo funcionan los codificadores, pero si solo quieres usar uno en tu proyecto, aprovecha la biblioteca lista para usar de Paul Stoffregen. Aquí tienes cómo empezar:
1. Descarga la biblioteca del codificador de GitHub.
2. En el IDE de Arduino, navega a Sketch ==> Include Library ==> Add .ZIP Library, y añade “Encoder-master.zip”.
3. Una vez instalada, verás bajo File ==> Examples ==> Encoder, que tiene cuatro programas listados. Carga el ejemplo “Basic” y transfiérelo a tu placa Arduino.
4. Conecta tu codificador con positivo y negativo conectados como antes, pero esta vez dirige los cables de señal A y B a D5 y D6.
5. Abre el monitor serial a 9600 baudios y verás que la posición incrementa y decrementa con precisión.
Al igual que con el codificador óptico, la posición debería cambiar sin ningún tipo de manipulación. Para diversión adicional, abre el trazador serial del IDE de Arduino a la misma velocidad de baudios. En lugar de simplemente mostrarte los números de posición, creará automáticamente un gráfico de los valores.
Ya sea que los uses como una interfaz personalizada o para medir la velocidad y la distancia, los codificadores proporcionan un excelente método de entrada rotativa para tu proyecto con Arduino. Requieren un poco más de trabajo para configurarse que muchos otros tipos de dispositivos, pero los resultados pueden valer la pena.
Etiquetas de artículo