Faça você mesmo: roda de medição/roda do topógrafo usando Arduino e codificador rotativo
Conteudo
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
Componente | Especificação | Quantidade |
---|---|---|
Arduino | Nano | 1 |
Rotary Encoder | 1 | |
LCD | 16X2 | 1 |
Bateria | 9 Volt | 1 |
Suporte da bateria | 1 | |
Interruptor | 1 | |
Roda | 1 | |
Potenciômetro | 10K | 1 |
Fios | 3 |
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.
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”.