Primeiros Passos com o BRIICK Encoder

Introdução
Neste tutorial veremos como utilizar o módulo BRIICK Encoder com a BlackBoard Edge, para que você possa adicionar mais interação aos seus projetos.
Lista de Materiais
Para este projeto você precisará dos seguintes itens:

Lista completa de produtos
comprar
BlackBoard Edge

BRIICK - Encoder

Cabo USB Micro B 80cm
Como o Encoder Funciona?
Um encoder é um componente eletromecânico para converter um movimento de rotação em um sinal elétrico. Ele é composto de diversos contatos intercalados que giram junto com o seu eixo e dois pinos estáticos, por onde são lidos os sinais, como mostrado na imagem abaixo. Isso faz com que uma tensão conectada aos contatos do disco (através de um pino comum - C) seja transmitida aos dois pinos estáticos (A e B) em intervalos de ângulo conforme o movimento.

Fonte: Build Electronic Circuits
O resultado nos pinos de saída é duas ondas quadradas e defasadas entre si (muitas vezes de 90°), como mostrado nas imagens abaixo.


Fonte: Wikipedia
A diferença nos sinais destes dois pinos permite que, utilizando um microcontrolador para ler ambos os sinais, saibamos o sentido de rotação do eixo do encoder, para incrementar ou decrementar uma variável, como veremos em breve. Além disso, podemos determinar a velocidade do movimento em função da frequência dos sinais lidos.
Instalação da Biblioteca
Para controlar o BRIICK com facilidade e realizar a leitura dos botões do módulo, desenvolvemos uma biblioteca, que pode ser baixada diretamente pelo "Gerenciador de Bibliotecas" da Arduino. Ao abrir o gerenciador, digite "briick encoder" no campo de pesquisa e então instale a opção retornada.

Após pressionar o botão para instalar e aguardar alguns instantes, a biblioteca estará instalada e pronta para ser usada.
Circuito
Utilizando módulos BRIICK, a conexão é extremamente simples, basta conectar o módulo à BlackBoard Edge com o cabo incluso ao módulo, como na imagem abaixo.

Botão e LED
Código
Neste primeiro projeto veremos como associar o botão do encoder ao LED, para que o LED acenda quando o botão for pressionado. Para isso, carregue o código abaixo na sua BlackBoard Edge. Caso seja a sua primeira vez utilizando a BlackBoard Edge, recomendamos que siga o tutorial de primeiros passos com a Edge.
Explicação do Código
O código se inicia com a inclusão da biblioteca "BRIICK_Encoder" instalada anteriormente e da biblioteca "Wire", também com a criação do objeto encoder
como instância da classe BRIICK_Encoder
da biblioteca.
Já nas configurações do código (função void setup()
), apenas inicializamos a comunicação com o módulo através da função encoder.config()
, e associamos o LED do módulo ao botão do encoder através do comando encoder.attachLED()
. Neste momento vale mencionar que, caso você queira utilizar outro endereço I2C do módulo, por exemplo, para utilizar mais de um módulo Encoder na mesma BlackBoard Edge, basta digitar o novo endereço I2C como parâmetro da função de configuração. Vale mencionar também que, neste caso, o endereço I2C deve ser alterado no módulo através dos jumpers de solda na face inferior do módulo.
Por fim, na repetição do código (função void loop()
) verificamos através da condição if (encoder.readButton() == HIGH)
se o botão do encoder foi pressionado, para informar no monitor serial. Juntamente com a mensagem no monitor serial, o LED do módulo irá acender, graças a um controle interno da biblioteca configurado na associação mencionada anteriormente.
O Que Deve Acontecer
Após carregar o código para a placa, pressione o botão pelo eixo do encoder, e veja que o LED irá se acender como no GIF abaixo.
Leitura do Encoder
Código
Para realizar a leitura do encoder em si, carregue o código a seguir para a sua BlackBoard Edge.
Explicação do Código
O código se inicia com a inclusão da biblioteca "BRIICK_Encoder" instalada anteriormente, e com a criação do objeto encoder
como instância da classe BRIICK_Encoder
da biblioteca, como no projeto anterior. Além disso, temos a criação das variáveis DELAY_TIME
e timeout
, que serão responsáveis por criar uma temporização no código sem interromper a sua execução, ao contrário da função delay()
.
Já nas configurações do código (função void setup()
), apenas inicializamos a comunicação com o módulo através da função encoder.config()
.
Por fim, na repetição do código (função void loop()
), verificamos pela condição if (millis() > timeout)
se a contagem de tempo de execução de código atual da placa é maior do que o valor da variável timeout
. Em outras palavras, a cada 100 milissegundos, será exibido no monitor serial o valor atualizado da leitura do encoder, retornado graças ao comando encoder.read()
. Para finalizar, a variável timeout
tem o seu valor atualizado pelo comando timeout = millis() + DELAY_TIME
.
O Que Deve Acontecer
Ao executar o código, abra o monitor serial da Arduino IDE e mova o eixo do encoder. Você verá que o valor irá diminuir ao girar o eixo no sentido anti-horário, e aumentar o valor ao girar no sentido horário, como na captura de tela abaixo.


Indo Além
Você pode adicionar o encoder em diversos projetos, por exemplo para navegar entre menus, para controlar a posição de um servomotor, entre outros. No entanto, é importante ter em mente que pausas no programa podem interferir no processo de leitura do encoder e fazer com que alguns movimentos não sejam lidos corretamente, por isso priorize a leitura do módulo (comando encoder.read()
).
Conclusão
Neste tutorial vimos como utilizar as funções do módulo BRIICK Encoder, e agora você pode incluir ainda mais funcionalidades ao seu projeto.