Cómo usar encoders rotativos con Arduino

  • Los encoders son dispositivos electro mecánicos que convierten el movimiento en señales digitales.
  • Se diferencian de los potenciómetros porque permiten giros indefinidos y no ajustan resistencia.
  • Son muy útiles en proyectos donde se necesita un control preciso del giro y dirección del eje.
  • La implementación en Arduino es sencilla y permite medir tanto la posición como el sentido de giro.

arduino encoders

Los encoders rotativos son componentes electrónicos que han ganado popularidad en proyectos DIY y en el ecosistema de Arduino. Estos dispositivos permiten la lectura del movimiento de un eje, lo que se traduce en la posibilidad de hacer un seguimiento de la velocidad y la posición angular de diferentes sistemas. Sin embargo, a pesar de lo útiles que pueden ser, muchas veces se confunden con otros aparatos como los potenciómetros, lo que puede generar malentendidos sobre su uso y funcionalidad.

En este artículo te explicaremos en detalle qué son los encoders rotativos, cómo funcionan y cómo puedes utilizar uno con Arduino. También revisaremos las conexiones, el uso del código y algunos ejemplos prácticos que te ayudarán a integrarlo en tus proyectos de una manera eficaz. Pero antes de entrar en detalles técnicos, es importante entender qué hace a este dispositivo uno de los preferidos en proyectos de electrónica.

¿Qué es un encoder rotativo?

esquema de motor paso a paso Nema 17 y Arduino

Un encoder rotativo es un dispositivo electromecánico que convierte el movimiento de rotación de un eje en una serie de señales, generalmente digitales. Estas señales pueden ser utilizadas por un sistema como Arduino para interpretar información relacionada con la velocidad de giro, la posición del eje e incluso el sentido de rotación. A diferencia de los potenciómetros, que tienen un límite en el número de giros, los encoders pueden girar indefinidamente.

Existen diferentes tipos de encoders rotativos, pero se pueden dividir en dos grandes categorías: absolutos e incrementales. Los encoders absolutos ofrecen una lectura exacta de la posición del eje en todo momento, sin importar cuántas vueltas haya dado. Por otro lado, los encoders incrementales solo registran el movimiento relativo desde una posición inicial, sin tener una referencia absoluta del ángulo.

El tipo de encoder más común en proyectos DIY o con Arduino es el encoder incremental. Son económicos, fáciles de encontrar y se pueden utilizar para una amplia gama de aplicaciones como control de volumen, ajuste de brillo de pantallas LCD, entre otros. Además, muchos de ellos incluyen un botón pulsador, que ayuda a integrar acciones de control adicionales en tus proyectos.

Cómo funciona un encoder rotativo

El corazón de un encoder rotativo está formado por una serie de interrupciones que se activan cada vez que el eje gira. Esto genera una señal digital que puede ser leída por un dispositivo electrónico. Este tipo de encoder suele tener dos salidas principales, las cuales generan señales en fase de cuadratura. Esto significa que hay un desfase de 90 grados entre ambas señales, lo que permite no solo contar los giros, sino también determinar el sentido del giro (horario o antihorario).

El dispositivo proporciona un número de pulsos por cada vuelta, y según el número de pulsos, podemos determinar con mayor precisión el movimiento del eje. Un encoder estándar puede tener desde 20 hasta más de 256 pulsos por vuelta, dependiendo del modelo. Los pulsos se cuentan utilizando un sistema de cuadratura, lo cual también permite determinar si el giro ha sido en sentido horario (CW) o antihorario (CCW), lo que lo hace muy práctico para sistemas de control y navegación.

Además, estos dispositivos pueden incluir un pulsador que actúa al presionar el eje. Este pulsador permite registrar una acción como si fuese un botón, lo que amplía las posibilidades de uso. En resumen, el encoder no solo permite registrar el giro del eje, sino también su dirección y posición en tiempo real.

Diferencias entre un encoder rotativo y un potenciómetro

Es muy común confundir un encoder rotativo con un potenciómetro debido a su aspecto similiar, pero hay diferencias fundamentales que los separan. Un potenciómetro ajusta un valor de resistencia de acuerdo con el ángulo de giro, proporcionando una salida analógica. Por el contrario, un encoder rotativo genera una serie de impulsos digitales que representan el giro del eje. Otra diferencia clave es que los encoders pueden girar indefinidamente, mientras que los potenciómetros tienen un límite físico en el número de giros.

Por estas razones, los encoders son ideales para situaciones en las que se requiere un control continuo y preciso del giro, como en sistemas de control de motores, mientras que los potenciómetros se utilizan comúnmente para ajustar parámetros estáticos como el volumen o la luminosidad.

Conexión de un encoder a Arduino

Conectar un encoder rotativo a un Arduino es relativamente sencillo. Dependiendo del modelo, el encoder tendrá tres salidas principales: dos para los canales A y B, y una para el pulsador. El pulsador se conecta a una entrada digital de Arduino, mientras que los canales A y B se conectan a otras dos entradas digitales.

Para obtener una lectura precisa del movimiento del encoder, es recomendable usar pines de interrupción en Arduino para los canales A y B. Sin embargo, esto no siempre es necesario. Si solo necesitas precisión simple o doble, puedes obtener lecturas consultando estas salidas periódicamente (método de polling), aunque esto afectará a la eficiencia del código.

La conexión para un proyecto típico sería algo como esto:

  • Canal A conectado a D9
  • Canal B conectado a D10
  • Pulsador conectado a D11

Es importante asegurarse de que los pines seleccionados para las interrupciones sean los correctos, ya que no todos los pines en las placas Arduino admiten interrupciones. En resumen, puedes conectar un encoder sin tener interrupciones, pero la precisión será menor.

Código para usar un encoder rotativo con Arduino

Arduino IDE, tipos de datos, programación

El código para leer un encoder con Arduino es sencillo. A continuación te mostramos un ejemplo básico para leer el número de pulsos generados en el canal A, determinando además el sentido del giro con la ayuda del canal B. Esta es una aproximación simple utilizando el método polling, pero si necesitas mayor precisión, puedes modificar el código para trabajar con interrupciones.

const int channelPinA = 9; 
const int channelPinB = 10; 
int prevStateChannelA = 0;
int value = 0;
unsigned long currentTime = 0;
unsigned long prevTime = 0;
void setup() { 
 Serial.begin(9600); 
 pinMode(channelPinA, INPUT); 
 pinMode(channelPinB, INPUT); 
 prevStateChannelA = digitalRead(channelPinA); 
} 
void loop() { 
 currentTime = millis(); 
 int currentStateChannelA = digitalRead(channelPinA); 
 if (currentStateChannelA != prevStateChannelA) { 
 if (digitalRead(channelPinB) != currentStateChannelA) { 
 value++; 
 } else { 
 value--; 
 } 
 Serial.println(value); 
 prevStateChannelA = currentStateChannelA; 
 currentTime = millis(); 
 } 
}

Este código detecta el cambio de estado en el canal A y evalúa el canal B para determinar el sentido en el que se ha girado el encoder. Cada vez que el valor cambie, el código actualizará el número de pulsos registrados e imprimirá el valor en el monitor serie.

Ejemplos de uso común

Los encoders rotativos se utilizan en una amplia gama de aplicaciones tanto profesionales como caseras. En el ámbito de los proyectos con Arduino, se pueden emplear para ajustar parámetros en tiempo real, como el control de la dirección de un robot móvil, la regulación del volumen de un altavoz o el ajuste del brillo de una pantalla LCD. También son ampliamente utilizados en sistemas de control para motores paso a paso o servos, donde se requiere un control preciso de la posición del eje.

Una de las aplicaciones más interesantes es la creación de interfaces con feedback visual o auditivo, donde el encoder no solo ajusta un parámetro, sino que también proporciona al usuario retroalimentación física al girarlo, algo que no se consigue con botones tradicionales.

Además, los encoders son extremadamente útiles como reemplazo para potenciómetros en sistemas que requieren un mayor grado de durabilidad, ya que no tienen límites de giro, lo que reduce el desgaste mecánico.

El uso de encoders en la programación de robots y sistemas autónomos también está creciendo. Pueden conectarse directamente a las ruedas de un robot para medir el movimiento preciso, optimizando así los cálculos de desplazamiento y dirección, lo que mejora la eficiencia y capacidad de navegación de los robots.

Los encoders rotativos también han llegado al desarrollo de dispositivos médicos y paneles de control industriales, donde se requiere un control constante del movimiento para lograr una precisión milimétrica en la maquinaria.

En general, los encoders son una opción versátil y económica para proyectos en los que la medición precisa de la rotación es clave.

Si estás buscando una solución económica y eficiente para tus proyectos con Arduino, el uso de encoders rotativos puede proporcionarte una excelente alternativa frente a otros métodos de control analógico, como los potenciómetros. Su capacidad de brindar un control preciso con un amplio margen de giros los hace ideales para una gran variedad de aplicaciones.


Comienza la conversación

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.