Como funciona o Rotary Encoder e sua interface com o Arduino

Como Funciona O Rotary Encoder E Sua Interface Com O Arduino



O Rotary Encoder é um importante dispositivo eletromecânico que possui diversos usos no campo da eletrônica. Este artigo explicará os tipos e funcionamento do codificador rotativo junto com sua interface com o Arduino.

O que é um Codificador Rotativo

Um codificador rotativo é um dispositivo de entrada digital que detecta a posição angular do botão giratório e envia sinais para o microcontrolador ou qualquer outro dispositivo ao qual esteja conectado. Eles podem girar 360° sem parar. Também é chamado de codificador de eixo. É usado em impressoras, eletrônicos de áudio, motores e controladores.









Tipos de codificadores rotativos

Existem principalmente dois tipos de codificadores rotativos que são decididos com base no sinal de saída gerado por eles. Esses tipos são nomeados:



Codificador Rotativo Incremental

Este tipo de codificador conta as revoluções do botão rotativo na forma de pulsos. Quando o botão é girado uma vez, um pulso é gerado. Para cada pulso, o contador aumenta para indicar a posição angular do eixo.





Codificador Rotativo Absoluto

Este tipo de codificador fornece a posição angular absoluta do eixo, pois possui um código separado para cada posição do eixo e mede o ângulo por meio desse código. Não precisa de um contador para dar uma saída de posição angular. Mesmo se o encoder rotativo absoluto for desenergizado, os respectivos valores para as posições angulares são retidos. É também um codificador de baixo custo.



Funcionamento do Codificador Rotativo

O codificador rotativo consiste em um disco com áreas igualmente espaçadas conectadas a um pino C comum que é aterrado. Os outros dois pinos A e B são pinos de contato que fazem contato com C quando o botão giratório é girado. Quando o pino A ou B é conectado ao terra, um sinal é gerado. Esses sinais gerados pelos pinos de saída estão 90° fora de fase. Isso ocorre porque o pino A é conectado ao terra quando o botão é girado no sentido horário e o pino B é conectado ao terra primeiro quando o botão é girado no sentido anti-horário. Portanto, o sentido de rotação do botão é determinado por meio dessas conexões.

Se o estado de B não é igual a A , então o botão girou no sentido horário.


Se o estado de B for igual a A, o botão girou no sentido anti-horário.

Configuração de pinos do codificador rotativo

O diagrama abaixo fornece uma pinagem do codificador rotativo que mostra os pinos de saída A e B, uma chave rotativa que pode ser usada como botão de pressão e pinos para fonte de alimentação.

Pin Descrição do Codificador Rotativo

A seguir está a descrição fornecida de todos os pinos do codificador rotativo.

Saída B ou CLK

Este pino dá uma saída de quantas vezes o botão ou codificador rotativo girou. Cada vez que o botão é girado, o CLK completa um ciclo de HIGH e LOW. É contado como uma rotação.

Saída A ou DT

Este é o segundo pino de saída do codificador rotativo que determina a direção da rotação. Ele fica 90° atrás do sinal CLK. Portanto, se o seu estado não for igual ao estado do CLK então o sentido de rotação é horário, caso contrário, anti-horário.

Trocar

O pino do interruptor é usado para verificar se o botão de pressão está pressionado ou não.

VCC

Este pino está conectado a uma fonte de 5V

GND

Este pino é conectado ao terra

Interface do Rotary Encoder com o Arduino

O codificador rotativo tem cinco pinos. VCC e GND do codificador rotativo são conectados ao do Arduino. Os pinos restantes CLK, DT e SW são conectados aos pinos de entrada digital do Arduino.

Código Arduino para codificador rotativo

// Entradas do Codificador Rotativo
#define CLK_PIN 2
#define DT_PIN 3
#define SW_PIN 4
contador int = 0 ;
int currentCLKState;
int últimoCLKState;
Direção atual da string = '' ;
unsigned long lastButtonPressTime = 0 ;
anular configuração ( ) {
// Definir pinos do codificador como entradas
    pinMode ( CLK_PIN, ENTRADA ) ;
    pinMode ( DT_PIN, ENTRADA ) ;
    pinMode ( SW_PIN, INPUT_PULLUP ) ;
// Configurar monitor serial
Serial.begin ( 9600 ) ;
// Leia o estado inicial de CLK
últimoCLKState = digitalRead ( CLK_PIN ) ;
}
loop vazio ( ) {
// Leia o estado atual do CLK
currentCLKState = digitalRead ( CLK_PIN ) ;
// Se o durar e o estado atual do CLK é diferente, então um pulso ocorreu
// Reagir apenas a 1 mudança de estado para evitar contagem dupla
se ( estadoCLKatual ! = últimoCLKState && estadoCLK atual == 1 ) {
// Se o estado DT for diferente do estado CLK, então
// O codificador está girando no sentido anti-horário, então o decremento
se ( leitura digital ( DT_PIN ) ! = estadoCLKatual ) {
contador--;
currentDirection = 'CCW' ;
} outro {
// O codificador está girando no sentido horário, então incremente
contador++;
currentDirection = 'CW' ;
}
Serial.print ( 'Sentido de Rotação: ' ) ;
Serial.print ( currentDirection ) ;
Serial.print ( ' | Valor do contador: ' ) ;
Serial.println ( contador ) ;
}
// Lembre o durar estado CLK
últimoCLKState = currentCLKState;
// Leia o estado do botão
int buttonState = digitalRead ( SW_PIN ) ;
// Se detectarmos um sinal BAIXO, o botão é pressionado
se ( estado do botão == BAIXO ) {
// Se 50ms se passaram desde o durar Pulso BAIXO, significa que o
// botão foi pressionado, solto e pressionado novamente
se ( mililitros ( ) - lastButtonPressTime > cinquenta ) {
Serial.println ( 'Botão pressionado!' ) ;
}
// Lembre o durar evento de pressionamento de botão tempo
lastButtonPressTime = milissegundos ( ) ;
}
// Colocar em um pequeno atraso para ajuda rebater a leitura
atraso ( 1 ) ;
}


No código acima, o estado do pino CLK é verificado na função loop(). Se não for igual ao estado anterior, indica que o botão rotativo girou. Agora, para verificar a direção da rotação do botão, o estado atual de CLK é comparado com o estado de DT. Se ambos os estados forem desiguais, isso mostra que o botão girou no sentido horário e o contador incrementa seu valor para mostrar a posição do botão rotativo. No caso oposto, o contador decrementa.

Conclusão

Os codificadores rotativos são sensores de posição avançados que podem girar continuamente. Eles estão disponíveis em dois tipos: incrementais e absolutos. O codificador rotativo funciona contando pulsos gerados devido à rotação do botão. Possui diversas aplicações desde a eletrônica do dia a dia até a automação industrial.