Tacômetro com Arduino 2

Muitas vezes, fazendo protótipos de robótica ou fazendo algum troubleshooting em alguma ferramenta elétrica, é necessário medir rotação. O custo de um instrumento de medir rotação/pulsação(tacômetro) é relativamente alto para usar tão pouco e esporadicamente.
A depender da aplicação até dá pra improvisar a medição com um osciloscopio, leds, imãs e sensores hall, mas, como sempre, é bem útil ter algo pronto e disponível quando necessário. Esse post é dedicado a prototipar um tacômetro com Arduino.

Para isso, podemos construir um tacômetro óptico, que se baseia em oscilações luminosas, na verdade, em variações ritmadas de reflexão de uma superfície.

Diagrama mostrando o funcionamento de um tacômetro óptico, que se baseia em oscilações luminosas
Funcionamento de um Tacômetro Óptico

Isso quer dizer que ele faz uma medição de velocidade de maneira não-invasiva, porque basta colocar uma fita ou marcar com caneta o eixo que vai ser medido, criando uma diferença de reflexão entre a superfície do eixo e a superfície coberta por fita.

Estratégia de medição

A estratégia de medição é simples: contar o tempo entre uma pulsação e outra, assumindo que uma pulsação equivale a uma revolução(logo, coloque apenas um trecho de fita no eixo). Dessa forma, encontramos o período de rotação.

Equação para período de rotação

Com isso, podemos calcular a rotação em rpm:

Equação para calcular a rotação

Construtivamente, o tacômetro DIY vai consistir em 4 componentes principais:

  • sensor ótico
  • potenciômetro de ajuste, usado para calibração do limiar de detecção do sensor
  • microcontrolador
  • display

Materiais necessários Para montar o Tacômetro com Arduino

Opcionais para portabilidade:

Diagrama de ligação do Tacômetro com Arduino

A shield multifunções (inclusive, temos outros posts sobre ela) facilita bastante as coisas pois o display, o potenciômetro e os terminais de sinal já estão instalados e agrupados, basta então montar externamente o circuito do sensor, que consiste nos resistores de 200 (que limita a corrente do emissor) e o resistor de 10k (pull-down associado ao receptor), como no diagrama abaixo.

Diagrama de ligação dos componentes do Tacômetro com Arduino
Diagrama de ligação dos componentes para o Tacômetro com Arduino

Vale destacar, em verde, o grupo de pinos de entrada do sensor e o potenciômetro que deve ser usado para calibrar o limiar de luminosidade (isso é útil para calibrar, se necessário, o limite de detecção do sensor, em situações variadas de luminosidade e reflexão das superfícies medidas)
O projeto pode ser alimentado por pela USB do arduino Uno, ou pela entrada p4, usando uma bateria 9v e seu suporte (melhorando a portabilidade), como descrito na lista de materiais necessários.

Código

O código basicamente inicia exibindo o valor de referência coletado pelo pino do trimmer ( um valor de 0 a 1024). Esse valor corresponde ao limiar de tensão do sensor, no qual abaixo desse valor quer dizer pouca reflexão, e acima quer dizer alta reflexão ( reflexão essa que ocorre quando a fita branca passa na frente do sensor, fechando um ciclo). Dessa forma, é sempre possível consultar esse valor resetando o arduino.

Após isso, temos a estratégia de medição implementada: o valor do sensor é lido e comparado com o valor do trimmer, se o valor do sensor for maior que o valor do trimmer, quer dizer que estamos na parte clara do ciclo, então o tempo atual é capturado e, em seguida, esperamos até a parte escura do ciclo, quando o valor lido do sensor fica menor que o de referência.
Feito isso, repetimos o processo 10 vezes, tiramos a média do tempo de ciclo e calculamos a rotação em rpm usando a fórmula descrita no início desse post.

#include <TimerOne.h> // Bibliotec TimerOne
#include <MultiFuncShield.h> // Biblioteca Multifunction shield

const int n_amostras = 10,
tcrt5000_pino = A5,
trimmer_pino = A0;
int count,
rpm,
valor_trimmer,
valor_sensor;
long ultimo_pulso = 0,
pulso_atual;
float periodo,
periodo_medio;

void setup()
{
// Inicializando a biblioteca da MultiFunction Shield
Timer1.initialize();
MFS.initialize(&Timer1);

// Exibindo o valor de referencia do trimmer durante alguns segundos
valor_trimmer = analogRead(trimmer_pino);
MFS.write(valor_trimmer);
delay(3000);
}

void loop()
{
count = 0;
periodo_medio = 0;

int valor_sensor = analogRead(tcrt5000_pino);

// Executando amostragem e média do tempo entre pulsos
do {
valor_sensor = analogRead(tcrt5000_pino);
valor_trimmer = analogRead(trimmer_pino);
if (valor_sensor > valor_trimmer) { // a parte clara do ciclo, dentro da fita/marcação
pulso_atual = millis();
periodo = pulso_atual - ultimo_pulso;
periodo_medio = periodo_medio + periodo;
ultimo_pulso = pulso_atual;
count++;
while (valor_sensor > valor_trimmer) { // esperando a parte escura do ciclo, fora da fita/marcação
valor_sensor = analogRead(tcrt5000_pino);
}
}
} while (count < n_amostras)
periodo_medio = periodo_medio / n_amostras;
rpm = int(60000.0 / periodo_medio);

MFS.write(rpm);
}

Testes e Conclusão

Nesse vídeo, eu instalei o tacômetro no meu torno de bancada, cuja rotação varia entre 0 e 3000rpm, dá uma olhada:

YouTube video

Atenção ao detalhe da distância entre o sensor e a fita, isso pode precisar de testes para encontrar a distância ideal, mas recomendo inicialmente cerca de 2 centímetros.

 

Deixe um comentário abaixo contando pra nós se você gostou de aprender a montar um Tacômetro usando o Arduino. E nos siga no Instagram para ficar por dentro de todas as novidades da MakerHero

 

Faça seu comentário

Acesse sua conta e participe

2 Comentários

  1. boa tarde, da erro” tacometro:51:3: error: expected ‘;’ before ‘periodo_medio'”

    1. Olá Jaci.

      Confirme que você instalou corretamente todas as bibliotecas.

      Att.
      Vitor Mattos.
      Suporte Técnico MakerHero.