- Materiais requisitados
- Como funciona um codificador rotativo?
- Tipos de codificador rotativo
- Pinagem e descrição do codificador giratório KY-040
- Diagrama de circuito do codificador rotativo Arduino
- Programando seu Arduino para Codificador Rotativo
- Trabalhando com Codificador Rotativo com Arduino
Um codificador rotativo é um dispositivo de entrada que ajuda o usuário a interagir com um sistema. Ele se parece mais com um potenciômetro de rádio, mas emite uma seqüência de pulsos que torna sua aplicação única. Quando o botão do Encoder é girado, ele gira em forma de pequenos passos que o ajudam a ser usado para controle de motor de passo / servo, navegar por uma sequência de menu e aumentar / diminuir o valor de um número e muito mais.
Neste artigo, aprenderemos sobre os diferentes tipos de codificadores rotários e como eles funcionam. Também faremos a interface com o Arduino e controlaremos o valor de um inteiro girando o codificador e exibiremos seu valor em uma tela LCD 16 * 2. Ao final deste tutorial, você se sentirá confortável em usar um Rotary Encoder para seus projetos. Então vamos começar…
Materiais requisitados
- Codificador Rotativo (KY-040)
- Arduino UNO
- 16 * 2 LCD alfanumérico
- Potenciômetro 10k
- Tábua de pão
- Fios de conexão
Como funciona um codificador rotativo?
Um Codificador Rotativo é um transdutor eletromecânico, o que significa que converte movimentos mecânicos em pulsos eletrônicos. Consiste em um botão que ao girar se moverá passo a passo e produzirá uma sequência de trens de pulsos com largura pré-definida para cada passo. Existem muitos tipos de codificadores, cada um com seu próprio mecanismo de trabalho, aprenderemos sobre os tipos mais tarde, mas por enquanto, vamos nos concentrar apenas no codificador incremental KY040, já que o estamos usando em nosso tutorial.
A estrutura mecânica interna do codificador é mostrada abaixo. É basicamente constituído por um disco circular (cor cinza) com almofadas condutoras (cor cobre) colocadas no topo deste disco circular. Essas almofadas condutoras são colocadas a uma distância igual, conforme mostrado abaixo. Os pinos de saída são fixados no topo deste disco circular, de forma que ao girar o botão as pastilhas condutoras entrem em contato com os pinos de saída. Aqui, há dois pinos de saída, Saída A e Saída B, conforme mostrado na figura abaixo.
A forma de onda de saída produzida pelo pino de saída A e saída B é mostrada nas cores azul e verde, respectivamente. Quando a almofada condutora está diretamente sob o pino, ele fica alto, resultando em tempo e quando a almofada condutiva se afasta, o pino fica baixo, resultando em um tempo desligado da forma de onda mostrada acima. Agora, se contarmos o número de pulsos, seremos capazes de determinar quantos passos o codificador foi movido.
Agora pode surgir a pergunta: por que precisamos de dois sinais de pulso quando um é suficiente para contar o número de passos dados enquanto giramos o botão. Isso ocorre porque precisamos identificar em que direção o botão foi girado. Se você observar os dois pulsos, poderá notar que ambos estão 90 ° defasados. Portanto, quando o botão giratório for girado no sentido horário, a saída A aumentará primeiro e, quando o botão giratório for girado no sentido anti-horário, a saída B aumentará primeiro.
Tipos de codificador rotativo
Existem muitos tipos de codificadores rotativos no mercado que o projetista pode escolher de acordo com sua aplicação. Os tipos mais comuns estão listados abaixo
- Codificador incremental
- Codificador Absoluto
- Codificador Magnético
- Codificador Ótico
- Codificador de Laser
Esses codificadores são classificados com base no sinal de saída e na tecnologia de detecção, o codificador incremental e os codificadores absolutos são classificados com base no sinal de saída e os codificadores magnético, óptico e laser são classificados com base na tecnologia de detecção. O codificador usado aqui é um codificador de tipo incremental.
Pinagem e descrição do codificador giratório KY-040
A pinagem do codificador rotativo tipo incremental KY-040 é mostrada abaixo
Os primeiros dois pinos (terra e Vcc) são usados para alimentar o codificador, normalmente é usada uma fonte de + 5 V. Além de girar o botão no sentido horário e anti-horário, o codificador também possui uma chave (Ativo baixo) que pode ser pressionado pressionando o botão interno. O sinal desta chave é obtido através do pino 3 (chave). Finalmente, ele possui os dois pinos de saída que produzem as formas de onda conforme já discutido acima. Agora vamos aprender como fazer a interface com o Arduino.
Diagrama de circuito do codificador rotativo Arduino
O diagrama de circuito completo para a interface do codificador rotativo com o Arduino é mostrado na imagem abaixo
O Codificador Rotativo possui 5 pinos na ordem mostrada na etiqueta acima. Os primeiros dois pinos são Ground e Vcc que é conectado ao Ground e o pino de + 5V do Arduino. A chave do codificador é conectada ao pino digital D10 e também é puxada para cima através de um resistor de 1k. Os dois pinos de saída são conectados a D9 e D8 respectivamente.
Para exibir o valor da variável que será aumentada ou diminuída girando o codificador rotativo, precisamos de um módulo de exibição. O usado aqui é o display LCD alfanumérico 16 * 2 comumente disponível. Conectamos o display para ser operado no modo 4 bits e o alimentamos usando o pino de + 5V do Arduino. O potenciômetro é usado para ajustar o contraste do display LCD. Se você quiser saber mais sobre a interface do display LCD com o Arduino, siga o link. O circuito completo pode ser construído em cima de uma placa de ensaio, eu parecia algo assim abaixo, uma vez que todas as conexões foram feitas.
Programando seu Arduino para Codificador Rotativo
É bastante fácil e direto programar a placa Arduino para fazer a interface de um codificador rotativo com ela, se você compreender o princípio de funcionamento de um codificador rotativo. Simplesmente temos que ler o número de pulsos para determinar quantas voltas o codificador deu e verificar qual pulso aumentou primeiro para descobrir em qual direção o codificador foi girado. Neste tutorial mostraremos o número que está sendo incrementado ou decrescente na primeira linha do LCD e a direção do Encoder na segunda linha. O programa completo para fazer o mesmo pode ser encontrado no final desta página com um Vídeo de Demonstração, não requer nenhuma biblioteca. Agora, vamos dividir o programa em pequenos pedaços para entender o funcionamento.
Como usamos um display LCD, incluímos a biblioteca de cristal líquido, que por padrão está presente no IDE do Arduino. Em seguida, definimos os pinos para conectar o LCD ao Arduino. Finalmente inicializamos o display LCD nesses pinos.
#incluir
Em seguida, dentro da função de configuração , exibimos uma mensagem introdutória na tela LCD e, em seguida, esperamos 2 segundos para que essa mensagem seja legível pelo usuário. Isso é para garantir que o LCD esteja funcionando corretamente.
lcd.print ("Codificador Rotativo"); // Linha 1 da mensagem de introdução lcd.setCursor (0, 1); lcd.print ("Com Arduino"); // Mensagem de introdução linha 2 delay (2000); lcd.clear ();
O codificador rotativo tem três pinos de saída que serão pinos de entrada para o Arduino. Esses três pinos são o switch, a saída A e a saída B, respectivamente. Eles são declarados como entrada usando a função pinMode conforme mostrado abaixo.
// declaração do modo pin pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
Dentro da função de configuração void , lemos o status do pino A de saída para verificar o último status do pino. Em seguida, usaremos essas informações para comparar com o novo valor para verificar qual pino (Saída A ou Saída B) ficou alto.
Previous_Output = digitalRead (Encoder_OuputA); // Leia o valor inicial do Output A
Finalmente, dentro da função de loop principal, temos que comparar o valor da Saída A e da Saída B com a Saída Anterior para verificar qual deles vai alto primeiro. Isso pode ser feito simplesmente comparando o valor da saída de corrente de A e B com a saída anterior, conforme mostrado abaixo.
if (digitalRead (Encoder_OuputA)! = Previous_Output) { if (digitalRead (Encoder_OuputB)! = Previous_Output) { Encoder_Count ++; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("Sentido horário"); }
No código acima, a segunda condição if é executada se a Saída B mudou em relação à saída anterior. Nesse caso, o valor da variável do encoder é incrementado e o LCD exibe que o encoder está girado no sentido horário . Da mesma forma, se a condição if falhar, na condição else subsequente, decrementamos a variável e mostramos que o codificador é girado no sentido anti - horário . O código para o mesmo é mostrado abaixo.
else { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("Anti - Horário"); } }
Finalmente, ao final do loop principal, temos que atualizar o valor da saída anterior com o valor da saída atual para que o loop possa ser repetido com a mesma lógica. O código a seguir faz o mesmo
Previous_Output = digitalRead (Encoder_OuputA);
Outra coisa opcional é verificar se o interruptor do codificador está pressionado. Isso pode ser monitorado verificando o pino da chave no codificador rotativo. Este pino é um pino baixo ativo, o que significa que irá para baixo quando o botão for pressionado. Se não for pressionado, o pino permanece alto, também usamos um resistor pull up para garantir que ele permaneça alto quando a chave não é pressionada, evitando assim a condição de ponto flutuante.
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Botão pressionado"); }
Trabalhando com Codificador Rotativo com Arduino
Quando o hardware e o código estiverem prontos, basta fazer o upload do código para a placa Arduino e ligar a placa Arduino. Você pode ligá-lo através do cabo USB ou usar um adaptador de 12V. Quando ligado, o LCD deve exibir a mensagem de introdução e depois ficar em branco. Agora gire o codificador rotativo e você verá o valor começar a ser incrementado ou decrementado com base na direção em que você gira. A segunda linha mostrará se o codificador está sendo girado no sentido horário ou anti-horário. A imagem abaixo mostra o mesmo
Além disso, quando o botão é pressionado, a segunda linha exibirá que o botão foi pressionado. O trabalho completo pode ser conferido no vídeo abaixo. Este é apenas um programa de amostra para fazer a interface do codificador com o Arduino e verificar se está funcionando conforme o esperado. Assim que chegar aqui, você poderá usar o codificador para qualquer um de seus projetos e programar de acordo.
Espero que você tenha entendido o tutorial e as coisas funcionaram como deveriam. Se você tiver qualquer problema, use a seção de comentários ou os fóruns para obter ajuda técnica.