Manual

do

Maker

.

com

Encoder rotativo P17 da GBK Robotics

Encoder rotativo P17 da GBK Robotics

Esse dispositivo é muito fácil de usar, não tem nenhum segredo, mas tem características interessantes que por acaso vem bem a calhar no projeto de dispenser de água, cujo primeiro parte do projeto foi o senso de fluxo de água. Não considero esse post como parte direta do projeto, por isso já informo que a segunda parte do projeto será publicada no início da semana útil. Esse post é só um adendo, porque esse encoder rotativo será utilizado para incrementar ou decrementar o valor de liquido a ser dispensado.

Encoder rotativo 360 graus

Esse dispositivo da GBK Robotics é bem bacana para utilizar no projeto junto ao Arduino Nano sobre uma board de expansão de IO, porque dispensaremos solda, já que dá pra fazer tudo com jumpers.

Utilizar esse encoder tem vantagens sobre um potenciômetro porque o pontenciômetro não tem passos precisos e também não tem giro infinito. Utilizando o encoder rotativo 360º não há limite de voltas, por isso fica mais fácil utilizar um número variável não previsto.

Biblioteca

A biblioteca para utilizá-lo está disponível através do gerenciador de bibliotecas da IDE do Arduino e se chama RotaryEncoder. Instalando-a, você encontrará nos exemplos algumas formas de manipular o dispositivo, dentre as quais a que achei mais interessante, o interruptRotator, que habilita as interrupções nos pinos analógicos 2 e 3. O código é bastante objetivo, só adicionei uma variável para proporcionalizar um pulso para 100ml:

#include <RotaryEncoder.h>

// Setup a RoraryEncoder for pins A2 and A3:
RotaryEncoder encoder(A2, A3);

long dispense = 0;

void setup(){
  Serial.begin(115200);
  Serial.println("SimplePollRotator example for the RotaryEncoder library.");

  // You may have to modify the next 2 lines if using other pins than A2 and A3
  PCICR |= (1 << PCIE1);    // This enables Pin Change Interrupt 1 that covers the Analog input pins or Port C.
  PCMSK1 |= (1 << PCINT10) | (1 << PCINT11);  // This enables the interrupt for pin 2 and 3 of Port C.
}

ISR(PCINT1_vect) {
  encoder.tick(); // just call tick() to check the state.
}

void loop()
{
  static int pos = 0;

  int newPos = encoder.getPosition();
  if (pos != newPos) {
    Serial.print(newPos);
    Serial.println();
    pos = newPos;
    dispense = pos > 0 ? pos*100 : 0;
    Serial.print(dispense);
    Serial.println("ml");
  }
}

Wiring

Esse é básico também;

  • conecte o GND do encoder rotativo a um GND do Arduino.
  • Conecte o Signal1 ao analógico 3 do Arduino.
  • Conecte o Signal2 ao analógico 2 do Arduino.

É só isso, não precisa entrar com tensão positiva nem nada mais.

Outro projeto interessante

E esse encoder rotativo é tão legal que dá pra fazer um cofre digital, contabilizando pulsos para direita e esquerda, como se fosse um cofre antigo. Talvez eu até faça esse projeto de cofre, mas por enquanto eu só queria mesmo era fazer essa introdução ao dispositivo para reduzir o tamanho do próximo artigo relacionado ao dispenser. Acompanhe!

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.