Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Cómo funciona el codificador rotatorio y cómo usarlo con Arduino

En este tutorial aprenderemos cómo funciona el codificador rotatorio y cómo usarlo con Arduino. Puede ver el siguiente video o leer el tutorial escrito a continuación.

Resumen

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.

Hay muchos tipos diferentes de codificadores rotatorios que se clasifican por señal de salida o tecnología de detección. El codificador rotatorio particular que usaremos en este tutorial es un codificador rotatorio incremental y es el sensor de posición más simple para medir la rotación.

Este codificador rotatorio también se conoce como codificador de cuadratura o codificador rotatorio relativo y su salida es una serie de pulsos de onda cuadrada.

Cómo funciona el 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 que están conectadas al pin común C y otros dos pines de contacto separados A y B, como se ilustra a continuación.

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 las dos señales de salida de onda cuadrada se generarán en consecuencia.

Cualquiera de las dos salidas puede usarse para determinar la posición rotada si solo contamos los pulsos de la señal. Sin embargo, si también queremos determinar la dirección de rotación, debemos considerar ambas señales al mismo tiempo.

Podemos notar que las dos señales de salida están desfasadas 90 grados entre sí. Si el codificador gira en el sentido de las agujas del reloj, la salida A estará por delante de la salida B.

Entonces, si contamos los pasos cada vez que cambia la señal, de alta a baja o de baja a alta, podemos notar que en ese momento las dos señales de salida tienen valores opuestos. Viceversa, si el codificador gira en sentido contrario a las agujas del reloj, las señales de salida tienen valores iguales. Entonces, 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

Hagamos un ejemplo práctico de ello usando el Arduino. El módulo particular que usaré para este ejemplo viene en una placa de conexiones y tiene cinco pines. El primer pin es la salida A, el segundo pin es la salida B, el tercer pin es el botón y, por supuesto, los otros dos pines son VCC y GND.

Podemos conectar los pines de salida a cualquier pin digital de la placa Arduino.

Puede obtener los componentes necesarios para este tutorial de Arduino desde los siguientes enlaces:

  • Módulo codificador rotatorio……………….
  • Placa Arduino ………………………………
  • Placa de prueba y cables de salto ……… 

Código fuente

Aquí está el código de 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, debemos 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 y poner el valor en la variable aLastState.

Luego, en la sección de bucle, leemos la salida A nuevamente, pero ahora ponemos el valor en la variable aState. Entonces, si giramos el codificador y se genera un pulso, estos dos valores diferirán y la primera declaración "si" se volverá verdadera. Inmediatamente después de eso, usando la segunda declaración "if", determinamos la dirección de rotación. Si el estado de la salida B difiere del estado de la salida A, el contador aumentará en uno; de lo contrario, disminuirá. Al final, después de imprimir los resultados en el monitor serial, necesitamos actualizar la variable aLastState con la variable aState.

Eso es todo lo que necesitamos para este ejemplo. Si carga el código, inicia el monitor serie y comienza a girar el codificador, comenzaremos a obtener los valores en el monitor serie. El módulo particular que tengo hace 30 cuentas cada ciclo completo.

Más información:Sensor ultrasónico HC-SR04 y Arduino:guía completa

Ejemplo 2:controlar un motor paso a paso mediante un codificador rotatorio

Además de este ejemplo básico, hice un ejemplo más de cómo controlar la posición de un motor paso a paso usando el codificador rotatorio.

Aquí está el código fuente de este ejemplo:

/*     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 cualquier pregunta en la sección de comentarios a continuación.


Proceso de manufactura

  1. C# Queue con ejemplos:¿Qué es C# Queue y cómo usarlo?
  2. Control del servomotor con Arduino y MPU6050
  3. Rueda de medición simple de bricolaje con codificador giratorio
  4. Módulo GPS u-blox LEA-6H 02 con Arduino y Python
  5. Cómo leer la temperatura y la humedad en Blynk con DHT11
  6. ¡¿Qué tan fácil es usar un termistor ?!
  7. Cómo hacer música con un Arduino
  8. Cómo utilizar NMEA-0183 con Arduino
  9. Cómo utilizar Modbus con Arduino
  10. Reconocimiento de voz con Arduino y BitVoicer Server
  11. Robot asistente de IA con Arduino y Python