Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
O codificador giratório é um componente eletrônico capaz de monitorar o movimento e a posição ao girar. O codificador giratório utiliza sensores óticos que podem gerar pulsos quando o codificador giratório gira. A aplicação do codificador rotativo, geralmente como um monitor de movimento mecânico ou robótico, também pode ser usada para a seleção do menu na tela. O codificador rotativo tem duas saídas para que possa distinguir entre rotação negativa (CW) e positiva (CCW) e também possui um único botão.
Etapa 1: Fluxo de pulso do codificador giratório
O fluxo de pulso gerado pelo codificador rotativo a seguir é como a imagem acima.
Etapa 2: Pinagem do Codificador Rotativo
Explicação:
- GND GND
- + + 5V
- Botão SW do codificador rotativo quando pressionado
- Dados DT
- Dados CLK 2
Um dos pinos DT ou CLK deve ser conectado ao pé de interrupção do Arduino Uno, ou ambos DT e CLK estão conectados ao pino de interrupção.
Etapa 3: esquemático
- GND à GND Arduino Uno
- + à + 5V Arduino Uno
- SW à PIN 4 Arduino Uno
- DT à PIN 3 Arduino Uno
- CLK à PIN2 Arduino Uno
Etapa 4: Código
No tutorial a seguir, que será usado como uma interrupção é o PIN 2 do Arduino Uno, enquanto o PIN 3 é usado apenas como uma entrada regular.
# define encoder0PinA 2 # define encoder0PinB 3 # define encoder0Btn 4 int encoder0Pos = 0; void setup () {Serial.begin (9600); pinMode (encoder0PinA, INPUT_PULLUP); pinMode (encoder0PinB, INPUT_PULLUP); pinMode (encoder0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, CHANGE); } int valRotary, lastValRotary; void loop () {int btn = digitalRead (encoder0Btn); Serial.print (btn); Serial.print (""); Serial.print (valRotary); if (valRotary> lastValRotary) {Serial.print ("CW"); } if (valRotary {
Serial.print ("CCW");
} lastValRotary = valRotary; Serial.println (""); atraso (250); } void doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } else {encoder0Pos--; } valRotary = encoder0Pos / 2.5; }
Na linha 10 do sketch acima é usado para habilitar a interrupção do pino 2 do Arduino Uno. No "doEncoder" a função é calculada a partir do codificador rotativo. Se o valor de DT e CLK (interrupção de pino do Arduino Uno) for o mesmo, então a variável "encoder0Pos" será incrementada / adicionada, além dessa condição, a variável "encoder0Pos" será diminuída.
Etapa 5: Explicação
O valor ValRotary é o valor do número de etapas que foram executadas. O valor ValRotary é obtido a partir do valor de leitura do codificador do sensor rotativo dividido por 2,5. Um valor de 2,5 é obtido a partir do teste, uma vez que uma etapa do codificador rotativo pode exceder 1, então divida por 2,5 para seu valor de acordo com a etapa e também a adição do retardo de leitura.
Enquanto na linha 19-25 está um programa para determinar se o codificador rotativo rotativo está no sentido horário ou anti-horário. A explicação das linhas 19-25 é quando a leitura do codificador rotativo atual é maior do que os dados rotativos anteriores, então expressos como CW. Ao passo que, se a leitura atual for menor do que a leitura anterior, ela será declarada no sentido anti-horário.
Etapa 6: Saída
1 = o valor do botão inicial do rotativo quando não foi pressionado