Imagine adicionar o recurso de GPS no seu projeto ioT?…
Como usar com Arduino – Encoder Rotativo com Botão
– Descrição:
O Encoder Rotativo com Botão é um componente de medição regular desenvolvido com a finalidade de converter movimentos rotativos (ou lineares) em impulsos elétricos de onda quadrada. Os impulsos elétricos produzidos pelo encoder podem ser interpretados por plataformas microcontroladas e estes impulsos produzem uma quantidade exata (de 20 pulsos por rotação) em cada volta.
O Encoder Rotativo com Botão tem a aparência de um potenciômetro, contudo seu funcionamento é diferente. Além disso, este encoder possui rotação contínua e tem um botão embutido em seu eixo, bastando pressionar o eixo para acionamento do botão.
– Especificações e características:
– Tensão máxima: 5VDC
– Corrente máxima: 10mA
– Pulsos por rotação: 20
– Vida útil mínima (rotação): 30000 ciclos
– Vida útil mínima (botão): 20000 ciclos
– Temperatura de operação: -30º a 70º celsius
– Comprimento do eixo: 12mm
– Diâmetro do eixo: 6mm
– Comprimento total do eixo: 15mm
– Aplicações:
Projetos com Arduino ou outras plataformas microcontroladas em que seja necessário converter movimentos rotativos (ou lineares) em impulsos elétricos de onda quadrada.
– Proposta da prática:
Utilizar o Encoder Rotativo com Botão em conjunto com o Arduino e mostrar no monitor serial do ambiente de programação do Arduino o sentido do giro do eixo e a posição atual do encoder.
– Lista dos itens necessários:
01 – Arduino com Cabo USB
01 – Encoder Rotativo com Botão
05 – Cabos Jumper macho-fêmea
– Esquema de ligação da prática:
– Tutorial de instalação e configuração do ambiente de programação do Arduino:
Arduino – Instalação e Configuração da IDE no Windows
– Código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
const int pinoCLK = 3; //PINO DIGITAL (CLK) const int pinoDT = 4; //PINO DIGITAL (DT) const int pinoSW = 5; //PINO DIGITAL (SW) int contadorPos = 0; //CONTADOR DE POSIÇÕES DO ENCODER int ultPosicao; //REGISTRA A ÚLTIMA POSIÇÃO DO ENCODER int leituraCLK; //VARIÁVEL PARA ARMAZENAR LEITURA DO PINO CLK boolean bCW; //VARIÁVEL DE CONTROLE DO SENTIDO (HORÁRIO / ANTI-HORÁRIO) void setup() { Serial.begin (9600); //INICIALIZA A SERIAL pinMode (pinoCLK,INPUT_PULLUP); //DEFINE O PINO COMO ENTRADA pinMode (pinoDT,INPUT_PULLUP); //DEFINE O PINO COMO ENTRADA pinMode (pinoSW,INPUT_PULLUP); //DEFINE O PINO COMO ENTRADA / "_PULLUP" É PARA ATIVAR O RESISTOR INTERNO //DO ARDUINO PARA GARANTIR QUE NÃO EXISTA FLUTUAÇÃO ENTRE 0 (LOW) E 1 (HIGH) ultPosicao = digitalRead(pinoCLK); //VARIÁVEL RECEBE A LEITURA DO PINO CLK } void loop() { leituraCLK = digitalRead(pinoCLK); //VARIÁVEL RECEBE A LEITURA DO PINO CLK if (leituraCLK != ultPosicao){ //SE VALOR DA VARIÁVEL FOR DIFERENTE DO VALOR DE "ultPosicao", FAZ if (digitalRead(pinoDT) != leituraCLK) { //SE LEITURA DO PINO FOR DIFERENTE DA LEITURA DE "leituraCLK", //SIGNIFICA QUE O EIXO ESTÁ SENDO GIRADO NO SENTIDO HORÁRIO E FAZ contadorPos --; //INCREMENTA CONTAGEM DA VARIÁVEL EM +1 bCW = false; //VARIÁVEL BOOLEANA RECEBE VERDADEIRO (SENTIDO HORÁRIO) } else { //SENÃO, SIGNIFICA QUE O EIXO ESTÁ SENDO GIRADO NO SENTIDO ANTI-HORÁRIO E FAZ bCW = true; //VARIÁVEL BOOLEANA RECEBE FALSO (SENTIDO ANTI-HORÁRIO) contadorPos++; //DECREMENTA CONTAGEM DA VARIÁVEL EM -1 } Serial.print("Giro no "); //IMPRIME O TEXTO NA SERIAL if (bCW){ //SE VARIÁVEL FOR IGUAL A VERDADEIRO, FAZ Serial.print("sentido horário"); //IMPRIME O TEXTO NA SERIAL }else{ //SENÃO, FAZ Serial.print("sentido anti-horário"); //IMPRIME O TEXTO NA SERIAL } Serial.print(" / Posição do encoder: "); //IMPRIME O TEXTO NA SERIAL Serial.println(contadorPos); //IMPRIME NO MONITOR SERIAL A POSIÇÃO ATUAL DO ENCODER } if(digitalRead(pinoSW) == LOW){ //SE LEITURA DO PINO FOR IGUAL A LOW, FAZ Serial.println ("Botão pressionado"); //IMPRIME O TEXTO NA SERIAL delay(200); //INTERVALO DE 200 MILISSEGUNDOS } ultPosicao = leituraCLK; //VARIÁVEL RECEBE O VALOR DE "leituraCLK" } |
– Resultado final:
Gostou desta prática? Então deixa seu comentário, dúvida ou sugestão aí embaixo!
Loja online: https://www.masterwalkershop.com.br
Fan page no Facebook: https://www.facebook.com/masterwalkershop
Nos ajude a espalhar conhecimento clicando no botão de compartilhar (f Like) que está mais abaixo.
Obrigado e até a próxima!
Seu feedback é muito importante! Que tal dar uma nota para esta postagem?! Faça sua avaliação aqui embaixo.
Postagem anterior: Como usar com Arduino – Sensor Indutivo PNP de Proximidade 5V LJ18A3-8-Z/BY
Próxima postagem: Como usar com Arduino – Controle Remoto Infravermelho
EXCELENTE POSTAGEM, NUNCA VI ALGO IGUAL, ESTOU CONTENTE, SE CONSEGUIREM COM ENCODER DE 600 PULSOS E UM DISPLAY LCD, SERÁ TOP, COM ZERAMENTO, PARA USAR EM COORDENADAS DE FRESAS.
Olá Nelson.
Agradeço pelo comentário!
Vou deixar anotado aqui e quem sabe mais pra frente pode sair alguma postagem nesses moldes que mencionou.