Índice:

Codificador Rotativo - Entenda e use-o (Arduino / outro ΜControlador): 3 etapas
Codificador Rotativo - Entenda e use-o (Arduino / outro ΜControlador): 3 etapas

Vídeo: Codificador Rotativo - Entenda e use-o (Arduino / outro ΜControlador): 3 etapas

Vídeo: Codificador Rotativo - Entenda e use-o (Arduino / outro ΜControlador): 3 etapas
Vídeo: Encoder rotativo com Arduino 2024, Julho
Anonim
Codificador Rotativo - Entenda e use-o (Arduino / outro ΜControlador)
Codificador Rotativo - Entenda e use-o (Arduino / outro ΜControlador)

Um codificador rotativo é um dispositivo eletromecânico que converte o movimento rotacional em informações digitais ou analógicas. Ele pode girar no sentido horário ou anti-horário. Existem dois tipos de codificadores rotativos: Codificadores absolutos e relativos (incrementais).

Enquanto um encoder absoluto produz um valor proporcional ao ângulo atual do eixo, um encoder incremental produz a etapa do eixo e sua direção. (Neste caso, temos um encoder incremental)

Os codificadores rotativos estão se tornando mais populares porque você é capaz de usar duas funções em um módulo elétrico: Um interruptor simples para confirmar as operações e o codificador rotativo para navegar, por exemplo, através de um menu.

Um codificador rotativo incremental gera dois sinais de saída enquanto seu eixo está girando. Dependendo da direção, um dos sinais conduz o outro. (Veja abaixo)

Etapa 1: Compreendendo os dados de saída

Compreendendo os dados de saída
Compreendendo os dados de saída

Como você pode ver, quando o eixo do encoder começa a girar no sentido horário, a Saída A cai para BAIXO primeiro e a Saída B o segue. No sentido anti-horário, a operação gira no sentido oposto.

Agora só temos que implementar isso em nosso µController (usei um Arduino Nano).

Etapa 2: construir o circuito

Construa o Circuito
Construa o Circuito
Construa o Circuito
Construa o Circuito

Como descrevi antes, as saídas criam um flanco ALTO e um flanco BAIXO. Para obter um HIGH limpo nos pinos de dados A e B do µController, temos que adicionar resistores Pull-Up. O pino C comum vai direto para o solo para o flanco BAIXO.

Para obter informações sobre a chave interna (botão de pressão), usaremos os outros dois pinos. Um deles vai para o VCC e o outro para um Pin de dados do µController. Também temos que adicionar um resistor pull-down ao pino de dados para obter um LOW limpo.

Também é possível usar resistores internos pull-up e pull-down do seu µController!

No meu caso, a pinagem se parece com:

  • +3, 3V => +3, 3V (Arduino) (também + 5V possível)
  • GND => GND (Arduino)
  • A => Pin10
  • B =>

    Alfinete

    11

  • C => GND
  • SW =>

    Alfinete

    12

Etapa 3: escrever o código

pinA int = 10; // switch interno A int pinB = 11; // switch interno B int pinSW = 12; // switch (encoder pressionado) int encoderPosCount = 0; // começa do zero, mude se quiser

int positionval;

bool switchval; int mrotateLast; int mrotate;

void setup () {

int mrotateLast = digitalRead (pinA); Serial.begin (9600); atraso (50); }

void loop () {readencoder (); if (readswitch () == 1) {Serial.println ("Switch = 1"); }}

int readencoder () {

mrotate = digitalRead (pinA); if (mrotate! = mrotateLast) {// botão giratório if (digitalRead (pinB)! = mrotate) {// switch A mudou primeiro -> girando no sentido horário encoderPosCount ++; Serial.println ("girado no sentido horário"); } else {// switch B mudou primeiro -> girando no sentido anti-horário encoderPosCount--; Serial.println ("girado no sentido anti-horário"); }

Serial.print ("Posição do codificador:"); Serial.println (encoderPosCount); Serial.println (""); } mrotateLast = mrotate; return encoderPosCount; } bool readswitch () {

if (digitalRead (pinSW)! = 0) {// interruptor é pressionado

while (digitalRead (pinSW)! = 0) {} // interruptor atualmente pressionado switchval = 1; } else {switchval = 0;} // switch não está pressionado return switchval; }

Agora você pode girar o encoder e a variável encoderPosCount contará se você girar no sentido horário e contará regressivamente se girar no sentido anti-horário.

É isso! Simples e útil.

Sinta-se à vontade para alterar e executar o código. Você pode implementá-lo em seu projeto.

Também irei fazer upload de um projeto de LED onde usei o codificador para definir o brilho dos meus LEDs.

Recomendado: