Faça você mesmo: roda de medição/roda do topógrafo usando Arduino e codificador rotativo

Tempo de leitura: 5 minutes

Faça você mesmo: roda de medição/roda do topógrafo usando Arduino e codificador rotativo

A roda de um topógrafo também pode ser conhecida por outros nomes como: clickwheel, hodômetro, waywiser, rodízio, roda de medição ou um carrinho de bebê. Todos esses dispositivos têm um único propósito, que é medir distâncias.

A origem da roda do topógrafo é de um hodômetro. O odômetro simplesmente conta o número de rotações da roda. A distância percorrida pela roda é diretamente proporcional ao raio da roda.

No Surveyor’s Wheel digital, um codificador rotativo é anexado à roda. Este codificador rotativo conta com precisão o número de rotações. Ele também conta o ângulo de rotação e, portanto, o sistema digital é muito mais preciso que o sistema mecânico.

Um Arduino Nano é usado como unidade de controle. Ele lê os pulsos vindos do codificador rotativo e calcula a distância percorrida e imprime no LCD (Display de Cristal Líquido).

 

Componentes

 

Trabalhando

Quando o codificador rotativo gira, ele envia os pulsos para o Arduino. Os pinos de saída do codificador rotativo são conectados aos pinos D2 e D3 do Arduino. O Arduino identifica a rotação e a direção (sentido horário ou anti-horário) da roda. O Arduino conta os pulsos e os converte à distância usando algumas operações matemáticas básicas, chamadas de calibração. Agora a distância calculada é mostrada no LCD.

 

Codificador rotativo

No codificador rotativo, os condutores espaçados são colocados em um disco e conectados a um pino comum. O codificador tem dois pinos de saída (OUT1 e OUT2), quando o codificador gira, os pinos de saída dão ZERO e UM. O padrão de ZERO e UM em OUT1 e OUT2 ajuda na determinação da direção e rotação.

 

Arduino

O Arduino é o cérebro de todo o projeto que conta a rotação. O Arduino converte a rotação em distância usando calibração e exibe as informações no LCD.

 

LCD

LCD (tela de cristal líquido) é o dispositivo de saída; mostra a distância medida em centímetros.

Neste projeto, estamos usando LCD 16×2 (16 colunas e 2 linhas). O LCD tem 16 pinos, alguns pinos são pinos de alimentação e 6 pinos são conectados ao Arduino e dois pinos são usados para luz de fundo. Uma predefinição também é conectada ao terceiro pino do LCD, que é usado para o controle de contraste do LCD.

 

O circuito

No circuito Arduino, LCD e Codificador Rotativo são os principais componentes. O codificador rotativo possui três pinos. Um pino é conectado ao GND e dois pinos são conectados aos pinos D2 e D3 do Arduino. O LCD é conectado ao Arduino por meio dos pinos D0 a D5. O pino Vin do Arduino é alimentado por uma bateria de 9 volts por meio de um Interruptor.

Neste projeto, um PCB é projetado usando o software EAGLE CAD. Se você é bom em gravação de PCB, você pode usar a figura fornecida abaixo para DIY.

Roda de medição/roda do topógrafo usando Arduino e codificador rotativo

 

Você também pode fazer o circuito em ProtoBoard ou Zero PCB usando a imagem abaixo.

 

Fazendo um protótipo deste design

Você está planejando fazer um protótipo de placa deste design? Nesse caso, você pode considerar o serviço da PCBWay. Nós os experimentamos muitas vezes para imprimir nosso protótipo de PCB. Obviamente, existem muitas outras empresas de impressão de PCBs, mas o que torna esses caras diferentes são os requisitos de baixo volume. Eles literalmente não têm requisitos mínimos especificados. Você pode pedir apenas 5 peças se quiser apenas esse número de cópias. Nós apenas sugerimos um serviço que achamos bom. Você é livre para escolher o que preferir.

Calibração

Neste projeto DIY, o codificador rotativo mede o número da rotação, mas temos que converter a rotação em distância percorrida. A distância percorrida depende do diâmetro da roda.

O codificador rotativo se move 22 etapas em uma rotação completa (360 graus). Os passos por rotação dependem do codificador rotativo que pode ser alterado de 8 para 48, mas no nosso caso é 22.

Suponha que N são os passos por rotação e R é o raio da roda.

  • A distância percorrida em uma rotação é = 2xπxR
  • A distância percorrida em uma etapa é = 2xπxR/N

No nosso caso

N = 22
R = 7

Resolvendo

  • A distância percorrida em uma etapa é = 2R

 

Código

#include <LiquidCrystal.h>

LiquidCrystal lcd(5, 6, 7, 8, 9, 10);

int pin1 = 2;
int pin2 = 3;

int Pos = 0; 
int State;
int LastState;  

const float pi = 3.14;

const int R = 7;
const int N = 22;

float distance = 0;

void setup() { 
  pinMode (pin1 ,INPUT);
  pinMode (pin2 ,INPUT);

  lcd.begin(16, 2);
  lcd.print("RODA DO SURVEYOR");
  
  LastState = digitalRead(pin1);    
} 

void loop() { 
  State = digitalRead(pin1);
   if (State != LastState){     
     if (digitalRead(pin2) != State) { 
       Pos ++;
     } 
     
     else {
       Pos --;
     }
   } 

  distance = (2*pi*R)/N;

  lcd.setCursor(0, 1);
  lcd.print( distance);

  lcd.setCursor(3, 1);
  lcd.print("cm  ");
   
  LastState = State;
 }

No início do código, o arquivo de cabeçalho “LiquidCrystal.h” é usado para o visor LCD. Depois disso, o LCD é declarado pela função “LiquidCrystal lcd (5, 6, 7, 8, 9, 10)”, onde os pinos são declarados entre colchetes.

Nas linhas 5 e 6, dois inteiros são declarados pelos nomes pin1 e Pin2, que são pinos de interrupção do Arduino. Três inteiros são declarados nas linhas 8, 9 e 10, onde Pos é a posição atual do codificador rotativo. Outros dois inteiros são “State” e “LastState”.

Agora, um “float constante” é declarado pelo nome “pi”, que é igual a 3,14. Dois inteiros constantes são declarados pelo nome “R” que é Raio e “N” é passo por revolução do codificador rotativo. Agora, um flutuador é declarado pelo nome de “distância”, que é a distância medida

Na seção de configuração de void, pin1 e pin2 são declarados por INPUT.

Na linha 23 o LCD é iniciado e na linha 24 “RODA DO SURVEYOR” é exibido no LCD.

Na linha 26, “LastState” é o valor de leitura digital se “pin1”. Na seção de loop vazio, o estado inteiro é igual a “digitalRead (pin1)”. Um loop “if” é usado na linha 30 e torna-se verdadeiro quando “State” e “LastState” não são iguais. Um “if” também é usado dentro do loop, torna-se verdadeiro quando “digitalRead (pin2)” não é igual ao “State”. Neste loop “Pos” aumenta e no outro “Pos” diminui.

Agora a distância medida é 2 * pi * R / N, que são as circunstâncias do círculo (roda). Onde Pi é 3,14, R é o raio e N é o passo por revolução do codificador rotativo. Agora esta distância é impressa no LCD, no final “LastState torna-se” igual ao “State”.