0. Componentes y programación necesaria para un Encoder Rotativo con Eje Pulsador

Componentes requeridos:

{Product:2000}{Product:703}
  • - 2 LEDs
  • - 2 Resistencias 1K Ohm

I. Cómo utilizar el módulo Codificador Rotativo con Switch Eje Pulsador

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

II. Procedimientos experimentales

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

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);

    digitalWrite(LED2, LOW);

    delay(20);

  }

  else                   // When DAT = LOW IS BackRote

  {

    COUNT--;

    digitalWrite(LED2, HIGH);

    digitalWrite(LED1, LOW);

    delay(20);

  }

}

Puedes ver como varía el nivel de los LEDs según gires la palanca.