back to top
sexta-feira - 02 / janeiro / 2026

Encoder rotativo: como funciona e como usar?

O encoder rotativo parece um potenciômetro, mas o funcionamento é totalmente diferente. Como funciona e como usar no Arduino são os assuntos de hoje.

Como funciona o encoder rotativo?

É um componente eletromecânico, converte o movimento de rotação em pulsos elétricos de onda quadrada, estes podem ser lidos por microcontroladores. Dentro deste componente, há um disco opaco com ranhuras que permitem a passagem de luz.

rodas de encoder
Existem discos de vários tamanhos e padrões, que determinam a
frequência do pulso de saída. Fonte: UWE.

Em um lado do disco, há uma fonte de luz, geralmente um LED infravermelho. No lado oposto, há um ou mais sensores de luz, geralmente fototransistores e um circuito eletrônico para transformar o sinal elétrico do sensor em onda quadrada.

encoder explodido
Fonte: ComoFunciona.

O encoder pode enviar sinais de realimentação para sistemas de controle, mostrando informações como velocidade, sentido de rotação, posição e ângulo.

como o encoder funciona
2 sensores podem indicar o sentido de rotação pela diferença de fase entre as
ondas Output A e Output B. Fonte: Mytechtutor.
Um encoder para aplicações industriais e de alta potência.
Um encoder para aplicações industriais e de alta potência. Fonte: OMNI Auttomação.

O encoder KY-040

encoder_DESTAQUE

O KY-040 possui 2 fototransistores (phototransistor) para detectar o sentido de rotação e um botão que é pressionado apertando o eixo do encoder (rotating shaft). Permite rotação contínua com uma resolução de 20 pulsos/revolução. Sua tensão de operação é de 5 Volts, com corrente máxima de 10 mA.

Esquemático do interior do KY-040.
Esquemático do interior do KY-040. Fonte: Domoticx.
encoder ky-040

Os pinos do KY-040:

  • + e GND: são a alimentação e o terra respectivamente.
  • SW: o sinal que indica se o botão foi pressionado. Fica no nível “baixo” quando o eixo é pressionado.
  • DT: de onde saem os pulsos de direção.
  • CLK: é o clock, sinal que coordena as funções dos chips.
resistores de pull-up
Estes são os resistores de pull-up, estão ligados aos terminais SW, DT e CLK e ao pino +. As suas funções são manter os estados binários “alto” ou “baixo”, evitando flutuações.
esquemático do encoder KY-040
Esquemático do encoder KY-040. Fonte: Microrobotics.

Usando o KY-040 com o Arduino

Testando o encoder

Para usar este encoder rotativo, é muito mais fácil baixar a biblioteca “RotaryEncoder.h”, cujo link se encontra aqui. Para este teste, são necessários apenas o módulo KY-040, 1 Arduino Uno e fios para ligar ambos.

  • O pino CLK é ligado ao pino GND.
  • + é conectado com 5 V.
  • SW é ligado ao pino digital 7 do Arduino.
  • DT com o pino analógico A2.
  • CLK com o pino analógico A3.

O código fonte abaixo.

#include <RotaryEncoder.h>
RotaryEncoder encoder(A2,A3); //pinos de ligação.
int valor=0; //variável para o botão de encoder.
int newPos=0;
void setup() {
pinMode(7,INPUT);
Serial.begin(9600);
Serial.println("Gire o encoder...");
}
void loop() {
//O botão foi pressionado?
valor=digitalRead(7);
if(valor != 1){
Serial.println("Botão pressionado");
while(digitalRead(7)==0)
delay(10);
}
//Lê as informações do encoder
static int pos=0;
encoder.tick();
int newPos=encoder.getPosition();
//Se a posição foi alterada, mostra o valor no Monitor serial.
if(pos != newPos){
Serial.print(newPos);
Serial.println();
pos=newPos;
}
}

Inicialmente, o monitor serial deve mostrar a frase “Gire o encoder…”, girando em um sentido deve aparecer números positivos, negativos no sentido oposto. Se apertar o botão, aparece a mensagem “Botão pressionado”.

teste de encoder monitor serial

À medida que você gira o encoder em uma direção, a variável pos aumenta ou diminui de valor.

teste de encoder monitor serial

Projeto

Neste projeto são adicionados 2 conjuntos de 6 LEDs em série e um LED amarelo com um resistor de 470 Ω, este indica se o botão foi pressionado.

driver de leds

Lista de materiais:

  • 1 Arduino Uno.
  • Protoboard.
  • 1 encoder KY-040.
  • 13 LEDs, 6 de cada cor e 1 de uma cor diferente.
  • 2 TIP 120.
  • 5 resistores, 3 de 470 Ω e 2 de 1,5 kΩ.
  • Placa de circuito impresso e/ou ponte de terminais.

O código fonte abaixo.

#include <RotaryEncoder.h>
RotaryEncoder encoder(A2,A3);
int redPin=9;
int yellowPin=5;
int greenPin=6;
int button=7;
int valor=0;
int newPos=0;
void setup() {
pinMode(button,INPUT);
pinMode(redPin,OUTPUT);
pinMode(yellowPin,OUTPUT);
pinMode(greenPin,OUTPUT);
Serial.begin(9600);
}
void loop() {
if(digitalRead(button)==LOW){
digitalWrite(yellowPin,HIGH);
}else{
digitalWrite(yellowPin,LOW);
}
static int pos=0;
encoder.tick();
int newPos=encoder.getPosition();
//se a posição foi alterada, mostra o valor no Serial.
if(pos != newPos){
Serial.print(newPos);
Serial.println();
if(pos<newPos){ //Verifica qual direção está girando.
digitalWrite(redPin,HIGH);
digitalWrite(greenPin,LOW);
}else if(pos>newPos){
digitalWrite(redPin,LOW);
digitalWrite(greenPin,HIGH);
}
pos=newPos;
}
}

O vídeo abaixo mostra as saídas de CLK e DT e como o projeto deve funcionar.

Related Articles

  1. Saudações,

    Preciso de sua ajuda para verificar a velocidade (pulsos/segundo) de um sensor encoder de uma impressora HP. Para isso utilizo a biblioteca RotaryEncoder, até agora só consigo observar as posições deste tipo de sensor.

    Atenciosamente,
    Prof. Edmar

  2. Saudações,
    Sou professor do Ensino Médio e trabalho com projetos do Arduino. Espero que vc me ajude, preciso registrar a velocidade utilizando um sensor encoder de impressora HP, para isso utilizo a biblioteca RotaryEncoder.
    Até agora só consigo obter as posições com este tipo de sensor.

    Atenciosamente,
    Prof. Edmar

DEIXE UMA RESPOSTA

Por favor digite seu comentário!
Por favor, digite seu nome aqui

- Advertisement -

Últimos posts