Menu mobile
Un encoder rotativo es un dispositivo genérico que permite determinar la posición y velocidad angular de un accionamiento realizado físicamente, y registrar la medición desde un procesador o autómata como Arduino.
Estos codificadores constan de dos pines para el pulsador (funciona como un pulsador normal) y tres pines para el codificador. Los tres pines del codificador van conectados uno a masa y los otros dos a las respectivas entradas que designemos en la placa Arduino. Estas dos señales que salen del encoder nos dan un total de 4 combinaciones. 00, 01, 10, y 11. Esto se conoce como 2 bits de código Grey.
Si tratamos a los pines en código binario, las leemos como 00, 01, 10, o 11. La secuencia de las salidas del codificador mientras giramos en sentido de las agujas del reloj es 00, 01, 11, 10
Conexión
El módulo se alimenta directamente de Arduino, así que no necesitamos una fuente de alimentación externa. Para conectar el encoder a Arduino, necesitamos tres entradas digitales, dos para la detección del encoder y una adicional si queremos registrar la pulsación de la palanca (SW)
Los pines están conectados según la tabla:
Pin Módulo
Pin de Arduino UNO
CLK
D2
DT
D3
SW
D4
+
5V
GND
Los pines 5 y 6 de Arduino, van a los ánodos (+) de los respectivos LEDs, y sus cátodos a la masa común que ira al puerto GND de Arduino. Recuerda que todas las masas deben estar unidas.
La configuración, sin las resistencias en serie quedaría así:
Código
Abre un sketch nuevo y copia el siguiente código:
const int interruptA = 0; // Interrupt 0
const int interruptB = 1; // Interrupt 1
int CLK = 2; // PIN2
int DAT = 3; // PIN3
int BUTTON = 4; // PIN4
int LED1 = 5; // PIN5
int LED2 = 6; // PIN6
int COUNT = 0;
void setup()
{
attachInterrupt(interruptA, RoteStateChanged, FALLING);
// attachInterrupt(interruptB, buttonState, FALLING);
pinMode(CLK, INPUT);
digitalWrite(2, HIGH); // Pull High Restance
pinMode(DAT, INPUT);
digitalWrite(3, HIGH); // Pull High Restance
pinMode(BUTTON, INPUT);
digitalWrite(4, HIGH); // Pull High Restance
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
Serial.begin(9600);
}
void loop()
if (!(digitalRead(BUTTON)))
COUNT = 0;
Serial.println("STOP COUNT = 0");
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
delay (2000);
Serial.println(COUNT);
//-------------------------------------------
void RoteStateChanged() //When CLK FALLING READ DAT
if (digitalRead(DAT)) // When DAT = HIGH IS FORWARD
COUNT++;
digitalWrite(LED1, HIGH);
delay(20);
else // When DAT = LOW IS BackRote
COUNT--;
digitalWrite(LED2, HIGH);
Puedes ver como varía el nivel de los LEDs según gires la palanca.