Manual
do
Maker
.
com
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.
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.
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");
}
}
Esse é básico também;
É só isso, não precisa entrar com tensão positiva nem nada mais.
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.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.