Se pueden controlar muchos proyectos con componentes como botones o dispositivos deslizantes pero, ¿qué ocurre si su diseño requiere de una perilla específica? Si el proyecto exige una entrada giratoria, tiene dos opciones: un potenciómetro o un codificador rotatorio.
Los potenciómetros, que varían la resistencia según la posición de la perilla, son más simples y suelen ser una buena elección, pero solo se pueden girar en sentido horario o antihorario (hasta ahora). Si necesita algo que pueda girar continuamente en cualquier dirección, lo recomendable es un codificador rotatorio. Si necesita ayuda para decidir entre los dos, nuestro análisis de codificador vs. potenciómetro lo ayudará a encontrar la respuesta.
Los codificadores se presentan en dos estilos básicos:
1. Codificadores incrementales, que usan una serie de pulsos en un arreglo de cuadratura para indicar a qué distancia y en qué dirección gira un eje.
2. Codificadores absolutos, que saben inherentemente su posición angular.
Este artículo se centrará principalmente en los codificadores incrementales, el tipo de codificador que verá con mayor frecuencia. También existen codificadores de salida única (también conocidos como tacómetros), pero resultan mucho menos útiles pues solo indican la distancia de desplazamiento de un eje, no su dirección. Para obtener un análisis más detallado, puede revisar nuestro artículo sobre los tipos de codificadores, pero hoy solo abarcaremos los aspectos básicos de cómo funciona un codificador incremental y cómo interconectarlo con una placa Arduino.
Descripción de los codificadores en cuadratura
Leyenda: Diagrama de cuadratura para señales de codificador A y B. Un flanco ascendente para B y una señal baja para A significa un desplazamiento hacia la derecha en este patrón, mientras que un flanco descendente para A con B en alto significa un desplazamiento hacia la izquierda.
En el centro de la mayoría de los codificadores se encuentran las salidas "A" y "B", que emiten pulsos de manera constante y progresiva. Estas salidas se combinan con la alimentación y la puesta a tierra, según sea necesario. Las salidas A y B están "codificadas con cuadratura", lo que significa que cada señal tiene un ciclo de trabajo del 50 % (activada la mitad del tiempo y desactivada la otra mitad del tiempo). Así funciona:
- Cada ciclo de trabajo está 90° desfasado con respecto al otro; una de las salidas cambia cuando la otra está a mitad del tiempo que tarda en cambiar de estado.
- Un microcontrolador conectado o una placa dedicada convierte estos pulsos en un incremento de rotación, y la secuencia de pulso indicará en qué dirección gira el eje.
Tal como se muestra en el diagrama anterior, si la señal B se eleva mientras la A se encuentra en un estado de baja potencia, la posición de esta patrón avanza hacia la derecha. Sin embargo, si la señal B se eleva cuando la A ya se encuentra en estado de alta potencia, entonces se avanzaría hacia la izquierda. En combinación con la subida y bajada de la señal A, esto nos da cuatro estados distintos para cada línea:
El mismo patrón de señales está disponible para la señal A, lo que da ocho posibles transiciones distintas y cuatro en cada dirección. Con este patrón envuelto y repetitivo en un círculo, ahora tenemos la base para un codificador rotatorio en cuadratura.
1. B en subida, A baja
2. B en bajada, A alta
3. B en subida, A alta
4. B en bajada, A baja
Uso de codificadores con Arduino
Realizaremos el emparejamiento de dos tipos de codificadores con Arduino:
- Codificador de contacto: más pequeño, por lo general se usa como dispositivo de interfaz.
- Codificador óptico (LPD3806-600BM-G5-24C): estilo más grande con un soporte de cojinetes, por lo general se usa para medición de la velocidad de un motor.
Si va a utilizar el codificador más pequeño, realice los siguientes pasos:
1. Conecte la línea media a tierra.
2. Enganche una conexión exterior a D2 y la otra a D3; no se requiere tensión positiva.
Para el codificador más grande, siga estos pasos:
1. Conecte la línea de alimentación roja a +5 V y el cable negro a tierra.
2. Cablee las líneas A y B (verde y blanca) a Arduino D2 ad D3.
3. Tenga en cuenta que las conexiones, los requisitos de tensión y los esquemas de color pueden variar según la implementación.
Código del codificador Arduino
Imagen: Jeremy S. Cook
Una vez que se comprende cómo vibran las líneas A y B de un codificador con la rotación, la obtención de resultados útiles se centra en convertir esta entrada en código. Esta paso resulta sencillo en teoría, pero puede ser complicado en la práctica. Puede encontrar el código de ejemplo aquí (junto con una superficie imprimible en 3D como ayuda para las pruebas). Si bien la superficie no es perfecta, direccionalmente es precisa e ilustra cómo funciona un codificador. Cuando el microcontrolador de Arduino detecta una transición entre potencia alta y baja en cualquiera de las líneas, compara los estados de ambas líneas y añade o resta un incremento según corresponda.
Asegúrese de seleccionar D2 y D3 ya que son las únicas dos entradas para ATmega328 en muchas placas Arduino que son capaces de generar una interrupción. Esto significa que cuando aquí se ve una transición, esta inmediatamente va a una rutina de lectura, sin esperar que la lógica del programa la invoque.
Tenga presente también el código de supresión de rebotes en milisegundos (ms), el cual se adapta a una entrada que cambia rápidamente entre los estados durante una transición y que se puede conectar y desconectar con rapidez por poco tiempo. Si bien este código funciona de manera aceptable en algunas aplicaciones y puede ayudarlo a comprender cómo funcionan los codificadores, obtener lecturas con un 100 % de precisión no resulta fácil.
La forma fácil: biblioteca de codificadores
El código del codificador Arduino lo ayudará a comprender cómo funcionan los codificadores, pero si solo desea utilizar uno en su proyecto, aproveche la biblioteca ya preparada de Paul Stoffregen. Siga estos pasos para comenzar:
1. Descargue la biblioteca de codificadores desde GitHub.
2. En el entorno IDE de Arduino, navegue hasta Sketch ==> Include Library ==> Add .ZIP Library, y agregue "Encoder-master.zip.
3. Una vez instalado, verá en File ==> Examples ==> Encoder, que hay cuatro programas enumerados. Cargue el ejemplo "básico" y transfiéralo a su placa Arduino.
4. Conecte su codificador con el positivo y el negativo conectados como antes, pero esta vez enrute los cables de las señales A y B a D5 y D6.
5. Abra el monitor en serie a 9600 baudios y podrá ver el incremento y decremento de posición de manera precisa.
Al igual que con el codificador óptico, la posición debería cambiar sin ningún tipo de manipulación. Para mayor diversión, abra el trazador en serie del IDE de Arduino a la misma tasa de baudios. En lugar de indicarle simplemente los números de posición, creará un gráfico de los valores en forma automática.
Independientemente de si los utilice como interfaz personalizada o para medir la velocidad y distancia, los codificadores ofrecen un excelente método de entrada giratoria para su proyecto con Arduino. Su configuración toma un poco más de trabajo en comparación con otros tipos de dispositivos, pero los resultados valen la pena.