Tutorial de codificador rotatorio con Arduino

El codificador rotatorio es un componente electrónico capaz de monitorear el movimiento y la posición al rotar. El codificador rotatorio utiliza sensores ópticos que pueden generar pulsos cuando el codificador rotatorio gira. La aplicación del codificador rotatorio generalmente como un monitor de movimiento mecánico o robótico también se puede utilizar para la selección del menú en la pantalla. El codificador rotatorio tiene dos salidas para poder distinguir entre rotación negativa (CW) y positiva (CCW) y también tiene un solo botón.

Paso 1: flujo de pulso del codificador rotatorio

El flujo de pulso generado por el siguiente codificador rotatorio es como la imagen de arriba.

Paso 2: Pinout del codificador rotatorio

Explicación:

  • GND -> GND
  • + -> + 5V
  • SW -> botón del codificador giratorio cuando se presiona
  • DT -> Datos
  • CLK -> Datos 2

Uno de los pines DT o CLK debe estar conectado al pie de interrupción de Arduino Uno, o ambos DT y CLK están conectados al pin de interrupción.

Paso 3: Esquema

  • GND à GND Arduino Uno
  • + à + 5V Arduino Uno
  • SW à PIN 4 Arduino Uno
  • DT à PIN 3 Arduino Uno
  • CLK à PIN2 Arduino Uno

Paso 4: Código

En el siguiente tutorial, que se usará como una interrupción es el PIN 2 de Arduino Uno, mientras que el PIN 3 solo se usa como entrada regular.

#define encoder0PinA 2
#define encoder0PinB 3 #define encoder0Btn 4 int encoder0Pos = 0; configuración nula () {Serial.begin (9600); pinMode (encoder0PinA, INPUT_PULLUP); pinMode (encoder0PinB, INPUT_PULLUP); pinMode (encoder0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, CHANGE); } int valRotary, lastValRotary; void loop () {int btn = digitalRead (encoder0Btn); Serial.print (btn); Serial.print (""); Serial.print (valRotary); if (valRotary> lastValRotary) {Serial.print ("CW"); } if (valRotary {

Serial.print ("CCW"); } lastValRotary = valRotary; Serial.println (""); retraso (250); } void doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } else {encoder0Pos--; } valRotary = encoder0Pos / 2.5; }

En la línea 10 del boceto anterior se usa para habilitar la interrupción del pin 2 Arduino Uno. En la función "doEncoder" se calcula a partir del codificador rotatorio. Si el valor de DT y CLK (interrupción de pin de Arduino Uno) es el mismo, entonces la variable "encoder0Pos" se incrementará / agregará, además de esa condición, se disminuirá la variable "encoder0Pos".

Paso 5: explicación

El valor ValRotary es el valor del número de pasos que se han estado ejecutando. El valor ValRotary se obtiene del valor de lectura del codificador del sensor giratorio dividido por 2.5. Se obtiene un valor de 2.5 a partir de la prueba, ya que un paso del codificador rotatorio puede exceder 1, por lo tanto, divida entre 2.5 por su valor de acuerdo con el paso y también la adición del retraso de lectura.

Mientras está en la línea 19-25, hay un programa para determinar si el codificador rotatorio rotativo CW o CCW. La explicación de las líneas 19-25 es cuando la lectura actual del codificador rotatorio es mayor que los datos rotativos previos expresados ​​como CW. Mientras que si la lectura actual es menor que la lectura anterior, se indica como CCW.

Paso 6: salida

1 = el valor del botón de inicio del rotativo cuando no se ha presionado

Artículos Relacionados