Automação, Componentes eletrônicos, Hobby, Instrumentação, Projetos, Sensores

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.

About Pedro Ney Stroski

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *