- Materiales necesarios
- ¿Cómo funciona un codificador rotatorio?
- Tipos de codificador rotatorio
- Pinout y descripción del codificador rotatorio KY-040
- Diagrama de circuito del codificador rotatorio Arduino
- Programación de su Arduino para codificador rotatorio
- Funcionamiento del codificador rotatorio con Arduino
Un codificador rotatorio es un dispositivo de entrada que ayuda al usuario a interactuar con un sistema. Se parece más a un potenciómetro de radio, pero emite un tren de pulsos que hace que su aplicación sea única. Cuando se gira la perilla del codificador, gira en forma de pequeños pasos, lo que ayuda a usarlo para controlar el motor paso a paso / servomotor, navegar a través de una secuencia de menú y aumentar / disminuir el valor de un número y mucho más.
En este artículo aprenderemos sobre los diferentes tipos de codificadores rotatorios y cómo funcionan. También lo conectaremos con Arduino y controlaremos el valor de un número entero girando el codificador y mostraremos su valor en una pantalla LCD de 16 * 2. Al final de este tutorial, se sentirá cómodo utilizando un codificador rotatorio para sus proyectos. Entonces empecemos…
Materiales necesarios
- Codificador rotatorio (KY-040)
- Arduino UNO
- LCD alfanumérico de 16 * 2
- Potenciómetro 10k
- Tablero de circuitos
- Cables de conexión
¿Cómo funciona un codificador rotatorio?
Un codificador rotatorio es un transductor electromecánico, lo que significa que convierte los movimientos mecánicos en pulsos electrónicos. Consiste en una perilla que cuando gira se moverá paso a paso y producirá una secuencia de trenes de pulsos con un ancho predefinido para cada paso. Hay muchos tipos de codificadores, cada uno con su propio mecanismo de trabajo, aprenderemos sobre los tipos más adelante, pero por ahora concentrémonos solo en el codificador incremental KY040 ya que lo estamos usando para nuestro tutorial.
La estructura mecánica interna del codificador se muestra a continuación. Básicamente consiste en un disco circular (color gris) con almohadillas conductoras (color cobre) colocadas encima de este disco circular. Estas almohadillas conductoras se colocan a la misma distancia que se muestra a continuación. Los pines de salida están fijados en la parte superior de este disco circular, de tal manera que cuando la perilla gira, las almohadillas conductoras entran en contacto con los pines de salida. Aquí hay dos pines de salida, Salida A y Salida B, como se muestra en la siguiente figura.
La forma de onda de salida producida por el pin de salida A y la salida B se muestra en color azul y verde respectivamente. Cuando la almohadilla conductora está directamente debajo de la patilla, sube a tiempo y cuando la almohadilla conductora se aleja, la patilla baja, lo que da como resultado un tiempo de inactividad de la forma de onda que se muestra arriba. Ahora, si contamos el número de pulsos podremos determinar cuántos pasos se ha movido el codificador.
Ahora puede surgir la pregunta de por qué necesitamos dos señales de pulso cuando una es suficiente para contar el número de pasos dados mientras se gira la perilla. Esto se debe a que necesitamos identificar en qué dirección se ha girado la perilla. Si observa los dos pulsos, puede notar que ambos están desfasados 90 °. Por lo tanto, cuando se gira la perilla en el sentido de las agujas del reloj, la Salida A aumentará primero y cuando se gira la perilla en sentido antihorario, la Salida B aumentará primero.
Tipos de codificador rotatorio
Hay muchos tipos de codificadores rotativos en el mercado, el diseñador puede elegir uno según su aplicación. Los tipos más comunes se enumeran a continuación
- Codificador incremental
- Codificador absoluto
- Codificador magnético
- Codificador óptico
- Codificador láser
Estos codificadores se clasifican en función de la señal de salida y la tecnología de detección, el codificador incremental y los codificadores absolutos se clasifican en función de la señal de salida y los codificadores magnéticos, ópticos y láser se clasifican en función de la tecnología de detección. El codificador utilizado aquí es un codificador de tipo incremental.
Pinout y descripción del codificador rotatorio KY-040
Los pines del codificador rotatorio de tipo incremental KY-040 se muestran a continuación
Los dos primeros pines (tierra y Vcc) se utilizan para alimentar el codificador, normalmente se utiliza una fuente de + 5V. Además de girar la perilla en sentido horario y antihorario, el codificador también tiene un interruptor (Activo bajo) que se puede presionar presionando la perilla en el interior. La señal de este interruptor se obtiene a través del pin 3 (Interruptor). Finalmente, tiene los dos pines de salida que producen las formas de onda como ya se discutió anteriormente. Ahora aprendamos a conectarlo con Arduino.
Diagrama de circuito del codificador rotatorio Arduino
El diagrama de circuito completo para la interfaz del codificador rotatorio con Arduino se muestra en la siguiente imagen
El codificador rotatorio tiene 5 pines en el orden que se muestra en la etiqueta anterior. Los dos primeros pines son Ground y Vcc que está conectado a Ground y al pin + 5V del Arduino. El interruptor del codificador está conectado al pin digital D10 y también se eleva a través de una resistencia de 1k. Los dos pines de salida están conectados a D9 y D8 respectivamente.
Para mostrar el valor de la variable que aumentará o disminuirá girando el codificador rotatorio, necesitamos un módulo de visualización. El que se utiliza aquí es una pantalla LCD alfanumérica de 16 * 2 comúnmente disponible. Hemos conectado la pantalla para que funcione en modo de 4 bits y la hemos encendido usando el pin + 5V de Arduino. El potenciómetro se utiliza para ajustar el contraste de la pantalla LCD. Si desea saber más sobre la interfaz de la pantalla LCD con Arduino, siga el enlace. El circuito completo se puede construir en la parte superior de una placa de pruebas, mi aspecto es algo así a continuación una vez que se hicieron todas las conexiones.
Programación de su Arduino para codificador rotatorio
Es bastante fácil y directo programar la placa Arduino para conectar un codificador rotatorio con ella si hubiera entendido el principio de funcionamiento de un codificador rotatorio. Simplemente tenemos que leer el número de pulsos para determinar cuántas vueltas ha dado el codificador y verificar qué pulso subió primero para encontrar en qué dirección se giró el codificador. En este tutorial mostraremos el número que se incrementa o decrementa en la primera fila de la pantalla LCD y la dirección del codificador en la segunda línea. El programa completo para hacer lo mismo se puede encontrar al final de esta página con un video de demostración, no requiere biblioteca. Ahora, dividamos el programa en pequeños trozos para entender el funcionamiento.
Dado que hemos utilizado una pantalla LCD, incluimos la biblioteca de cristal líquido que está presente por defecto en el IDE de Arduino. Luego definimos pines para conectar LCD con Arduino. Finalmente inicializamos la pantalla LCD en esos pines.
#incluir
A continuación, dentro de la función de configuración , mostramos un mensaje introductorio en la pantalla LCD y luego esperamos 2 segundos para que el usuario pueda leer ese mensaje. Esto es para garantizar que la pantalla LCD funcione correctamente.
lcd.print ("Codificador rotatorio"); // Línea de mensaje de introducción 1 lcd.setCursor (0, 1); lcd.print ("Con Arduino"); // Retraso de la línea 2 del mensaje de introducción (2000); lcd.clear ();
El codificador rotatorio tiene tres pines de salida que serán pines de ENTRADA para el Arduino. Estos tres pines son el interruptor, la salida A y la salida B, respectivamente. Estos se declaran como Entrada usando la función pinMode como se muestra a continuación.
// declaración de modo pin pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
Dentro de la función de configuración de vacío , leemos el estado del pin de salida A para verificar el último estado del pin. Luego usaremos esta información para comparar con el nuevo valor para verificar qué pin (Salida A o Salida B) se ha puesto alto.
Salida_anterior = digitalRead (Encoder_OuputA); // Leer el valor inicial de la Salida A
Finalmente, dentro de la función del bucle principal, tenemos que comparar el valor de la Salida A y la Salida B con la Salida Anterior para verificar cuál sube primero. Esto se puede hacer simplemente comparando el valor de la salida actual de A y B con la salida anterior como se muestra a continuación.
if (digitalRead (Encoder_OuputA)! = Previous_Output) { if (digitalRead (Encoder_OuputB)! = Previous_Output) { Encoder_Count ++; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("A la derecha"); }
En el código anterior, la segunda condición if se ejecuta si la Salida B ha cambiado con respecto a la salida anterior. En ese caso, el valor de la variable del codificador se incrementa y la pantalla LCD muestra que el codificador se gira en el sentido de las agujas del reloj . De manera similar, si la condición if falla, en la condición else posterior disminuimos la variable y mostramos que el codificador se gira en la dirección contraria a las agujas del reloj . El código para el mismo se muestra a continuación.
else { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("antihorario"); } }
Finalmente, al final del ciclo principal tenemos que actualizar el valor de salida anterior con el valor de salida actual para que el ciclo se pueda repetir con la misma lógica. El siguiente código hace lo mismo
Salida_anterior = digitalRead (Encoder_OuputA);
Otra cosa opcional es verificar si el interruptor del codificador está presionado. Esto se puede monitorear verificando el pin del interruptor en el codificador giratorio. Este pin es un pin activo bajo, lo que significa que bajará cuando se presione el botón. Si no se presiona, el pin permanece alto, también hemos usado una resistencia pull up para asegurarnos de que se mantenga alto cuando no se presiona el interruptor, evitando así la condición de punto flotante.
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Interruptor pulsado"); }
Funcionamiento del codificador rotatorio con Arduino
Una vez que el hardware y el código estén listos, simplemente cargue el código en la placa Arduino y encienda la placa Arduino. Puede alimentarlo a través del cable USB o usar un adaptador de 12V. Cuando se enciende, la pantalla LCD debe mostrar el mensaje de introducción y luego quedar en blanco. Ahora gire el codificador rotatorio y debería ver que el valor comienza aumentando o disminuyendo según la dirección en la que gira. La segunda línea le mostrará si el codificador se está girando en sentido horario o antihorario. La siguiente imagen muestra lo mismo
Además, cuando se presiona el botón, la segunda línea mostrará que se presiona el botón. El trabajo completo se puede encontrar en el video a continuación. Este es solo un programa de muestra para conectar el codificador con Arduino y verificar si está funcionando como se esperaba. Una vez que llegue aquí, debería poder usar el codificador para cualquiera de sus proyectos y programar en consecuencia.
Espero que hayas entendido el tutorial y que las cosas hayan funcionado como se supone. Si tiene algún problema, utilice la sección de comentarios o los foros para obtener ayuda técnica.