0. Componentes e programação necessária para um codificador rotativo com eixo de pressão

Componentes necessários:

{Produto: 2.000} {Produto: 703}
  • - 2 LEDs
  • - 2 resistores 1K Ohm

I. Como usar o módulo codificador rotativo com botão de pressão

Um codificador rotativo é um dispositivo genérico que permite determinar a posição e a velocidade angular de um acionamento executado fisicamente e registrar a medição de um processador ou autômato como Arduino .

Esses codificadores consistem em dois pinos para o botão (funciona como um botão normal) e três pinos para o codificador. Os três pinos do codificador são conectados um ao terra e os outros dois às respectivas entradas que designamos na placa Arduino . Esses dois sinais que saem do codificador nos dão um total de 4 combinações. 00, 01, 10 e 11. Isso é conhecido como 2 bits de código Gray.

Se tratarmos os pinos em código binário, os lemos como 00, 01, 10 ou 11. A sequência das saídas do codificador conforme giramos no sentido horário é 00, 01, 11, 10

II. Procedimentos experimentais

Conexão

O módulo é alimentado diretamente por Arduino , então não precisamos de uma fonte de alimentação externa. Para conectar o codificador a Arduino , precisamos de três entradas digitais, duas para detecção do codificador e uma adicional se quisermos gravar a pressão da alavanca (SW)

Os pinos são conectados de acordo com a tabela:

Módulo Pin

Pin por Arduino UNO

CLK

D2

DT

D3

SW

D4

+

5V

GND

GND

Arduino 5 e 6 de Arduino vão para os ânodos (+) dos respectivos LEDs, e seus cátodos para o aterramento comum que vai para a porta GND de Arduino . Lembre-se de que todas as massas devem estar unidas.

A configuração, sem os resistores em série, ficaria assim:

Código

Abra um novo esboço e copie o seguinte código:

const int interruptA = 0; // Interromper 0

const int interruptB = 1; // Interromper 1

int CLK = 2; // PIN2

int DAT = 3; // PIN3

int BOTÃO = 4; // PIN4

int LED1 = 5; // PIN5

int LED2 = 6; // PIN6

int COUNT = 0;

configuração vazia ()

{

attachInterrupt (interruptA, RoteStateChanged, FALLING);

// attachInterrupt (interruptB, buttonState, FALLING);

pinMode (CLK, INPUT);

digitalWrite (2, ALTO); // Puxe a alta restauração

pinMode (DAT, INPUT);

digitalWrite (3, ALTO); // Puxe a alta restauração

pinMode (BUTTON, INPUT);

digitalWrite (4, ALTO); // Puxe a alta restauração

pinMode (LED1, OUTPUT);

pinMode (LED2, OUTPUT);

Serial.begin (9600);

}

void loop ()

{

if (! (digitalRead (BUTTON)))

{

CONTAGEM = 0;

Serial.println ("STOP COUNT = 0");

digitalWrite (LED1, LOW);

digitalWrite (LED2, LOW);

atraso (2000);

}

Serial.println (COUNT);

}

// -------------------------------------------

void RoteStateChanged () // Quando CLK FALLING READ DAT

{

if (digitalRead (DAT)) // Quando DAT = HIGH IS FORWARD

{

COUNT ++;

digitalWrite (LED1, HIGH);

digitalWrite (LED2, LOW);

atraso (20);

}

else // Quando DAT = LOW IS BackRote

{

CONTAR--;

digitalWrite (LED2, ALTO);

digitalWrite (LED1, LOW);

atraso (20);

}

}

Você pode ver como o nível dos LEDs varia conforme você gira a alavanca.