Um Encoder, é um dispositivo que codifica, por exemplo, a movimentação de uma roda em informações digitais que podem ser processadas em um programa.
Ele serve para agente descobri o quanto a roda do robô rodou. E então podemos saber também qual foi o deslocamento do robô.
Uma forma bem usual de se montar um encoder é fazendo furos em uma roda e colocando de um lado um emissor de infra-vermelho e do outro lado um receptor, que pode ser ligado em uma entrada digital do Arduino. Esta configuração é semelhante ao funcionamento de mouses antigos(aqueles que tinham uma bola).
Quando um Furo estiver na mira do transmissor e do receptor a entrada digital do arduino fica em LOW, e quando a comunicação dos dispositivos infra veremelho estiver impedida a entrada fica em HIGH.
A leitura por infre-vermelho também pode ser reflexiva, ou seja, colocando o emissor e receptor do mesmo lado e olhando para a roda. Parte da Roda é preta e não reflete a luz IV, parte da roda é branca e reflete.
Também é muito usual sensores magnéticos com imãs, como nos marcadores de velocidade de bicicleta .
Existem ainda os encoders industriais. Para utilizar esses, se deve ligar uma correia ao eixo da roda do robô e o encoder enviará um sinal que pode ser pulsos, como nos dois outros casos, variação de tensão, ou ainda dados em algum protocolo como rs232, I2C ou até mesmo ethernet, dentre inúmeros outros.
De qualquer forma precisamos ainda, principalmente no caso dos caras que usam um pino serial para conversar com o arduino, tratar a informação (pulsos) e utilizá-la em nossos programas.
Existem três técnicas bem comuns de se fazer isso:
Pooling - é quando agente fica vigiando o pino de i/o, toda hora eu vou lá e pergunto para ele se mudou o estado (HIGH, LOW) e conto quantas vezes essa ,udança ocorre para saber qual foi o deslocamento.
Interrupção - é quando agente associa uma função ao pino, e toda hora que ele mudar ocorre uma interrupção no sistema que executa a função que faz a contagem. No arduino agente utiliza o comando attachInterrupt para fazer isso.
Contador Externo - Nesse caso é necessário que o microcontrolador tenha um hardware chamado contado externo e esse contador possa ser associado a um pino.
O contador externo fica contando a variação dos pulsos e de vez enquando agente vai lá e pergunta pŕa ele qual é a contagem.
O ATmega328, que é o microcontrolado do arduino duomilanove até tem esse cara, mas não tem como utiliza-lo nesse modo pela arquitetura do arduino. Acho que logo teremos essa função implementada, mas enquanto isso só podemos utilizar contador externo fazendo códigos diretamente para o micrtocontrolador oque não é escopo deste post.
Veja nos artefatos uma descrição melhor de como funciona cada um desses caras e a baixe implementação.
O esquema elétrico do infre vermelho é simples assim:
Existe um ótimo tutorial sobre o assunto no Luso Robótica, que é uma das fontes desse post.
Ou