Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
El codificador rotatorio es un componente electrónico capaz de monitorear el movimiento y la posición al girar. 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 que pueda distinguir entre rotación negativa (CW) y positiva (CCW) y también tiene un solo botón.
Paso 1: Flujo de pulsos del codificador rotatorio
El flujo de pulsos generado por el siguiente codificador rotatorio es como la imagen de arriba.
Paso 2: Pinout del codificador rotatorio
Explicación:
- GND GND
- + + 5V
- Botón SW del codificador rotatorio cuando se presiona
- Datos DT
- Datos CLK 2
Uno de los pines DT o CLK debe estar conectado al pie de interrupción de Arduino Uno, o tanto DT como CLK están conectados al pin de interrupción.
Paso 3: esquema
- GND a 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, el que se usará como 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 vacía () {Serial.begin (9600); pinMode (encoder0PinA, INPUT_PULLUP); pinMode (encoder0PinB, INPUT_PULLUP); pinMode (encoder0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, CHANGE); } int valRotary, lastValRotary; bucle vacío () {int btn = digitalRead (encoder0Btn); Serial.print (btn); Serial.print (""); Serial.print (valRotary); if (valRotary> lastValRotary) {Serial.print ("CW"); } si (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 se incrementará / agregará la variable "encoder0Pos", además de esa condición, se decrementará la variable "encoder0Pos".
Paso 5: Explicación
El valor de ValRotary es el valor del número de pasos que se han estado ejecutando. El valor de ValRotary se obtiene a partir del valor de lectura del codificador del sensor giratorio dividido por 2,5. Se obtiene un valor de 2.5 de la prueba, ya que un paso del codificador rotatorio puede exceder 1, entonces divida por 2.5 por su valor de acuerdo con el perstep y también la suma del retardo de lectura.
Mientras que en la línea 19 - 25 hay un programa para determinar si el codificador rotatorio giratorio CW o CCW. La explicación de las líneas 19 a 25 es cuando la lectura del codificador rotatorio actual es mayor que los datos rotativos anteriores y luego se expresan como CW. Mientras que si la lectura actual es menor que la lectura anterior, entonces se indica como CCW.
Paso 6: Salida
1 = el valor del botón de inicio del rotativo cuando no se ha presionado