Los codificadores rotatorios son una herramienta fundamental en el mundo de la electrónica y la programación. En este artículo, te explicaremos de manera sencilla cómo funciona un codificador rotatorio y cómo puedes utilizarlo en tus proyectos con Arduino. Descubre todo lo que necesitas saber para sacarle el máximo provecho a esta práctica herramienta. ¡Sigue leyendo!
En este tutorial aprenderemos cómo funciona el codificador rotatorio y cómo usarlo con Arduino. Puede ver el vídeo a continuación o leer el tutorial escrito a continuación.
descripción general
Un codificador rotatorio es un tipo de sensor de posición que se utiliza para determinar la posición angular de un eje giratorio. Dependiendo del movimiento de rotación genera una señal eléctrica, ya sea analógica o digital.
Hay>
Este>
Cómo funciona un codificador rotatorio
Echemos un vistazo más de cerca al codificador y veamos su principio de funcionamiento. Así es como se generan los pulsos de onda cuadrada: el codificador tiene un disco con zonas de contacto espaciadas uniformemente conectadas al pin común C y otros dos pines de contacto separados A y B, como se muestra a continuación.
Cuando>
Cualquiera de las dos salidas nos puede servir para determinar la posición girada si solo contamos los pulsos de la señal. Sin embargo, si también queremos determinar el sentido de giro, debemos tener en cuenta ambas señales al mismo tiempo.
Podemos notar que las dos señales de salida están desfasadas 90 grados entre sí. Cuando el codificador gira en el sentido de las agujas del reloj, la salida A está delante de la salida B.
Entonces,>
Ejemplo de codificador rotatorio para Arduino
Hagamos un ejemplo práctico usando Arduino. El módulo específico que usaré para este ejemplo está en una placa de conexión y tiene cinco pines. El primer pin es la salida A, el segundo pin es la salida B, el tercer pin es el pin del botón y, por supuesto, los otros dos pines son el VCC y el pin GND.
Podemos>
Puede obtener los componentes necesarios para este tutorial de Arduino en los siguientes enlaces:
- Módulo codificador rotatorio………………. Amazon / Banggood / AliExpress
- Placa Arduino……………………………… Amazon / Banggood / AliExpress
- Cables de puente y de placa de pruebas………… Amazon / Banggood / AliExpress
Divulgación: estos son enlaces de afiliados. Como asociado de Amazon, gano con compras que califican.
Código fuente
Aquí está el código Arduino:
/* Arduino Rotary Encoder Tutorial
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
*/
#define outputA 6
#define outputB 7
int counter = 0;
int aState;
int aLastState;
void setup() {
pinMode (outputA,INPUT);
pinMode (outputB,INPUT);
Serial.begin (9600);
// Reads the initial state of the outputA
aLastState = digitalRead(outputA);
}
void loop() {
aState = digitalRead(outputA); // Reads the "current" state of the outputA
// If the previous and the current state of the outputA are different, that means a Pulse has occured
if (aState != aLastState){
// If the outputB state is different to the outputA state, that means the encoder is rotating clockwise
if (digitalRead(outputB) != aState) {
counter ++;
} else {
counter --;
}
Serial.print("Position: ");
Serial.println(counter);
}
aLastState = aState; // Updates the previous state of the outputA with the current state
}
Code language: Arduino (arduino)
Descripción del código: Entonces, primero debemos definir los pines a los que está conectado nuestro codificador y definir algunas variables necesarias para el programa. En la sección de configuración, necesitamos definir los dos pines como entradas, iniciar la comunicación en serie para imprimir los resultados en el monitor en serie, así como leer el valor inicial de la salida A e ingresar el valor en la variable aLastState.
Luego, en la sección del bucle leemos la salida A nuevamente, pero ahora ingresamos el valor en la variable aState. Entonces, cuando giramos el codificador y se genera un pulso, estos dos valores difieren y la primera declaración «si» se vuelve verdadera. Inmediatamente después determinamos el sentido de rotación con la segunda declaración «if». Si el estado de la salida B difiere del estado de la salida A, el contador se incrementa en uno; en caso contrario, se disminuye. Al final, después de imprimir los resultados en el monitor serie, necesitamos actualizar la variable aLastState con la variable aState.
Eso es todo lo que necesitamos para este ejemplo. Cuando cargue el código, inicie el monitor serie y gire el codificador, los valores se mostrarán en el monitor serie. El módulo particular que tengo cuenta 30 en cada ciclo completo.
Más información: Sensor ultrasónico HC-SR04 y Arduino – Guía completa
Ejemplo 2: control de un motor paso a paso mediante un codificador
Además de este ejemplo simple, creé otro ejemplo de control de la posición de un motor paso a paso usando el codificador rotatorio.
Aquí>
/* Stepper Motor using a Rotary Encoder
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
*/
#include <LiquidCrystal.h> // includes the LiquidCrystal Library
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7)
// defines pins numbers
#define stepPin 8
#define dirPin 9
#define outputA 10
#define outputB 11
int counter = 0;
int angle = 0;
int aState;
int aLastState;
void setup() {
// Sets the two pins as Outputs
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
pinMode (outputA,INPUT);
pinMode (outputB,INPUT);
aLastState = digitalRead(outputA);
lcd.begin(16,2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display }
}
void loop() {
aState = digitalRead(outputA);
if (aState != aLastState){
if (digitalRead(outputB) != aState) {
counter ++;
angle ++;
rotateCW();
}
else {
counter--;
angle --;
rotateCCW();
}
if (counter >=30 ) {
counter =0;
}
lcd.clear();
lcd.print("Position: ");
lcd.print(int(angle*(-1.8)));
lcd.print("deg");
lcd.setCursor(0,0);
}
aLastState = aState;
}
void rotateCW() {
digitalWrite(dirPin,LOW);
digitalWrite(stepPin,HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin,LOW);
delayMicroseconds(2000);
}
void rotateCCW() {
digitalWrite(dirPin,HIGH);
digitalWrite(stepPin,HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin,LOW);
delayMicroseconds(2000);
}
Code language: Arduino (arduino)
No dude en hacer sus preguntas en la sección de comentarios a continuación.
Cómo funciona el codificador rotatorio y cómo usarlo con Arduino
En este tutorial vamos a aprender cómo funciona un codificador rotatorio y cómo utilizarlo con Arduino. Un codificador rotatorio es un tipo de sensor de posición que se utiliza para determinar la posición angular de un eje giratorio. Genera una señal eléctrica, ya sea analógica o digital, según el movimiento de rotación.
Tipos de codificadores rotatorios
Existen muchos tipos diferentes de codificadores rotatorios que se clasifican por la Señal de Salida o la Tecnología de Detección. El codificador rotatorio que utilizaremos en este tutorial es un codificador rotatorio incremental, que es el sensor de posición más simple para medir la rotación. Este codificador rotatorio también se conoce como codificador cuadrature o codificador rotatorio relativo y su salida es una serie de pulsos de onda cuadrada.
¿Cómo funciona un codificador rotatorio?
El codificador tiene un disco con zonas de contacto espaciadas de manera uniforme que están conectadas al pin común C y a otros dos pines de contacto separados A y B. Cuando el disco comience a girar paso a paso, los pines A y B comenzarán a hacer contacto con el pin común y se generan las dos señales de salida de onda cuadrada correspondientemente.
Cualquiera de las dos salidas se puede utilizar para determinar la posición rotada si simplemente contamos los pulsos de la señal. Sin embargo, si queremos determinar la dirección de rotación también, debemos considerar ambas señales al mismo tiempo. Podemos observar que las dos señales de salida están desplazadas 90 grados fuera de fase entre sí. Si el codificador gira en el sentido de las agujas del reloj, la salida A estará adelantada en relación a la salida B.
Entonces, contando los pasos cada vez que la señal cambia, de Alto a Bajo o de Bajo a Alto, podemos notar que en ese momento las dos señales de salida tienen valores opuestos. Por el contrario, si el codificador gira en sentido contrario a las agujas del reloj, las señales de salida tendrán valores iguales. Por lo tanto, considerando esto, podemos programar fácilmente nuestro controlador para leer la posición del codificador y la dirección de rotación.
Ejemplo de codificador rotatorio Arduino
Veamos un ejemplo práctico de esto usando Arduino. El módulo en particular que utilizaré para este ejemplo viene en una placa de breakout y tiene cinco pines. El primer pin es la salida A, el segundo pin es la salida B, el tercer pin es el pin del botón y, por supuesto, los otros dos pines son el pin VCC y el pin GND.
Podemos conectar los pines de salida a cualquier pin digital de la placa Arduino.
Código fuente:
- Define los pines a los que está conectado el codificador y algunas variables necesarias para el programa.
- En la sección de configuración, define los dos pines como entradas, inicia la comunicación serial para imprimir los resultados en el monitor serial, así como lee el valor inicial del pin de salida A y coloca el valor en la variable aLastState.
- En la sección del bucle, lee nuevamente la salida A pero ahora coloca el valor en la variable aState. Por lo tanto, si giramos el codificador y se genera un pulso, estos dos valores diferirán y la primera declaración «if» será verdadera. Justo después de eso, utilizando la segunda declaración «if», determinamos la dirección de rotación.
- Al final, después de imprimir los resultados en el monitor serial, debemos actualizar la variable aLastState con la variable aState.
Eso es todo lo que necesitamos para este ejemplo. Si cargamos el código, iniciamos el Monitor Serial y comenzamos a girar el codificador, comenzaremos a obtener los valores en el monitor serial. El módulo en particular que tengo hace 30 cuentas cada ciclo completo.
Si tienes alguna pregunta, déjala en la sección de comentarios a continuación.
Este contenido está inspirado y complementado por el tutorial original disponible en HowToMechatronics.com.