Adquira estes componentes na Loja do Lab de Garagem
O encoder rotativo é um dispositivo de medição angular. Com ele é possível medir com precisão a rotação de motores. Alguns deles contém um botão pressionando o eixo. Neste tutorial, vamos mostrar como utilizá-lo com Arduino. Este encoder rotativo contém 7 pinos: dois para fixação, dois para o botão e três para medição de rotação. Vamos apenas utilizar os três pinos para medição de rotação. Para maiores informações sobre o encoder, clique aqui!
Primeiramente, faça a ligação abaixo:
Abra a IDE do Arduino e conecte seu Arduino no PC. Passe a programação abaixo:
/* Rotary encoder read example */
#define ENC_A 8
#define ENC_B 9
#define ENC_PORT PINB
void setup()
{
/* Setup encoder pins as inputs */
pinMode(ENC_A, INPUT);
digitalWrite(ENC_A, HIGH);
pinMode(ENC_B, INPUT);
digitalWrite(ENC_B, HIGH);
Serial.begin (9600);
Serial.println("Start");
}
void loop()
{
static uint8_t counter = 0; //this variable will be changed by encoder input
int8_t tmpdata;
/**/
tmpdata = read_encoder();
if( tmpdata ) {
Serial.print("Counter value: ");
Serial.println(counter, DEC);
counter += tmpdata;
}
}
/* returns change in encoder state (-1,0,1) */
int8_t read_encoder()
{
static int8_t enc_states[] = {0,-1,1,0,1,0,0,-1,-1,0,0,1,0,1,-1,0};
static uint8_t old_AB = 0;
/**/
old_AB = old_AB 2; //remember previous state
old_AB |= ( ENC_PORT & 0x03 ); //add current state
return ( enc_states[( old_AB & 0x0f )]);
}
Selecione a versão do seu Arduino (UNO, Duemilanove, etc) e a porta (COMx, ttyUSBx, ttyACMx, etc) e clique em UPLOAD.
Abra o Serial Monitor e configure o baud para 9600. A palavra "Start" aparecerá. Gire o encoder para um lado e para o outro. A imagem abaixo mostra os dados que chegam do encoder:
Ao girar o encoder, o Arduino detecta a variação de pulso (-1,0,1) que chega dos pinos 8 e 9 e os converte em inteiro e mostra no Serial Monitor.
E é isso! Esperamos que tenha gostado! Se tiver dúvidas, poste aqui neste blog! Para sugestões de tutoriais, clique aqui! Para ver outros tutoriais e projetos desenvolvidos pela equipe LdG e por outros garagistas, clique aqui e aqui! Até a próxima!
Referências:
http://en.wikipedia.org/wiki/Rotary_encoder
http://www.circuitsathome.com/mcu/programming/reading-rotary-encode...
Comentar
Estou tentando utilizar um encoder de 400ppr. ele possui 4 fios, um Vcc, Outro 0V, outro dois A e B e uma malha.
Nenhum dos códigos que eu tentei funcionaram.
Alguém pode me dar uma dica?
Não compila por causa desta linha "old_AB = old_AB 2; //remember previous state".
O que fazer quando não aparece a mensagem "start" no serial monitor?
não vai 5v nesse encoder? soh 2 saidas analogicas msm? eu tenho um aqui de 3 pernas apenas
Como sempre as explicações são muito boas, mas para quem quiser um encoder com giro mais diâmico aumentando os valores de acordo com as velocidade q o mesmo é girado. Segue esse link q achei na net, onde vc pode baixar uma biblioteca q deixa a implementação bem fácil. Observe, que as portas usadas não são digitais mais analógicas.
https://code.google.com/p/arduino-rotary-encoder-with-velocity/
Ola estou desenvolvendo um projeto para faculdade e gostaria de saber se a aplicação do codigo que você postou funciona em um Sensor de fluxo de água como este (http://lojabrasilrobotics.blogspot.com.br/2012/03/sensor-de-fluxo-d...), tenho que computar a rotação de água e mandar a informação para o arduino que mostra em um display, gostaria de saber se esse código me ajudaria com essa duvida ?
equivale a SE == a TRUE
alguem pode me explicar a linha:
if( tmpdata ) {
o que significa?quais sao os criterios que o ''if'' utiliza nesse caso?
Pessoal,
E no caso de múltiplos encoders?
Alguem já implementou algo do tipo, e qual experiências quanto a necessidade de interrupções?
oi, consegue me ajudar? eu gravei esse programa no arduino leonardo e funcionou de boa...o problema eh que estou querendo mandar outro programa pro micro, mas ele continua rodando este do encoder, mesmo dando o upload. Eu preciso limpar a memoria do microcontrolador ou coisa parecida?como faco o arduino rodar o codigo atual e nao o anterior?
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!
Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)