O botão de volume de um som antigo trava nas pontas. Já o de um equipamento moderno gira para sempre, nos dois sentidos, e o volume acompanha. A diferença entre os dois é o encoder rotativo.

Ele não tem começo nem fim: não informa uma posição, informa movimento — quantos passos e para que lado.

Neste guia você vai entender como dois sinais defasados revelam o sentido do giro, por que a leitura simples falha e como resolver o bounce.

💡 Salve este guia: a parte de bounce e interrupção é o que separa o encoder que funciona do que pula passos.

🔄 O que é e por que gira infinito

Por dentro há um disco com contatos e duas chaves, chamadas A e B. Conforme você gira, cada chave abre e fecha em sequência — mas não ao mesmo tempo: uma sempre muda um pouquinho antes da outra.

Não existe fim de curso porque o disco simplesmente continua girando. Por isso o encoder não sabe em que posição está — só sabe que se moveu.

🧭 Como ele descobre o sentido

Este é o coração do encoder. Os sinais A e B ficam defasados em 90° (o que se chama sinal em quadratura). Quando você gira num sentido, A muda primeiro; no outro, B muda primeiro.

  1. O código detecta que o sinal A mudou de estado.
  2. Nesse instante, ele olha o sinal B.
  3. Se B estiver diferente de A, o giro foi para um lado.
  4. Se B estiver igual a A, foi para o outro.
  5. Soma ou subtrai 1 no contador — e pronto.
🔎 É só isso: todo o segredo do encoder cabe em uma comparação. Quem mudou primeiro define o sentido.

🔌 Os pinos do KY-040

  • CLK (ou A): primeiro sinal de quadratura.
  • DT (ou B): segundo sinal, defasado.
  • SW: o botão de apertar o eixo — sim, ele também clica.
  • + e GND: alimentação, 3,3 V ou 5 V.

⚡ Bounce: por que os passos pulam

Os contatos internos são mecânicos. Ao mudar de estado, eles trepidam por alguns milissegundos, gerando uma rajada de pulsos falsos. O resultado é o clássico: você gira um passo e o contador pula três, ou anda para trás.

Há duas formas de resolver, e o ideal é usar as duas:

Por hardware
Um capacitor de 100 nF de cada sinal para o GND, com o resistor de pull-up, filtra a trepidação.
filtro RC
Por software
Ignore mudanças que aconteçam a menos de 2 a 5 ms da anterior.
debounce
Interrupção
Ler por interrupção em vez de dentro do loop garante que nenhum passo se perca.
attachInterrupt
🌡️ Por que interrupção: se o seu loop() estiver ocupado atualizando um display, ele pode perder a mudança do sinal. A interrupção para tudo e atende o encoder na hora.

🆚 Encoder x potenciômetro

Potenciômetro
  • Informa posição absoluta
  • Tem começo e fim de curso
  • Saída analógica
  • Ideal para volume e brilho fixos
Encoder rotativo
  • Informa movimento relativo
  • Gira infinito, sem fim
  • Saída digital (2 sinais)
  • Ideal para menus e ajuste fino

🧮 Exemplo prático: ajuste de temperatura

📖 Um menu de forno

1) Contador: começa em 180 (graus).

2) Giro horário: a cada passo, +1 grau.

3) Giro anti-horário: −1 grau.

4) Limites: trave entre 100 e 250 no código, porque o encoder giraria para sempre.

5) Clique (SW): confirma e sai do ajuste.

Sem fim de curso mecânico, mas com limites definidos por software

🎯 Onde usar

  • Menus em display OLED ou LCD.
  • Ajuste de volume, brilho e temperatura.
  • Contagem de voltas de um eixo.
  • Interfaces onde um botão só não basta.

🛠️ Problemas comuns

SintomaCausa provávelSolução
Conta vários passos por cliqueBounce dos contatosCapacitor de 100 nF + debounce
Anda para trás sozinhoLeitura fora de sincronismoUse interrupção na borda do sinal A
Perde passos ao girar rápidoLoop ocupadoTroque a leitura do loop por interrupção
Sentido invertidoCLK e DT trocadosInverta os dois fios ou a lógica
Botão SW não respondeFalta pull-upUse INPUT_PULLUP
🛒 Na Mamute tem o KY-040, displays OLED para mostrar o valor e as placas para montar o menu.

🚀 Conclusão

O encoder resolve o que o potenciômetro não consegue: ajuste infinito com clique de confirmação, tudo num componente só.

Guarde o essencial: dois sinais defasados revelam o sentido, e bounce se trata — com capacitor, com debounce e, de preferência, lendo por interrupção.

Vai usar num menu de quê? Comenta aí! 🦣⚡

Mamute Eletrônica · Componentes, Módulos e Robótica · Rua Vitória, 125 — Santa Efigênia/SP · mamuteeletronica.com.br

Para montar o que você acabou de ler

Encoder combina com display: gira, vê o valor mudar na tela e confirma no clique.