Neste projeto mostraremos como utilizar o Arduino como tacômetro. Tacômetro é um medidor de voltas que pode ser medido por RPM (rotações por minuto), RPS (rotações por segundo) e etc.

Neste projeto vamos utilizar:

  • Emissor IR
  • Receptor IR
  • Arduino
  • Resistor 220ohm
  • LCD 16x2
  • potenciômerto de 10K Ohm

Primeiramente faça a seguinte ligação:

Agora que foi feito as ligações acima, passe a programação:

#include <LiquidCrystal.h>

/*
* Optical Tachometer
*
* Uses an IR LED and IR phototransistor to implement an optical tachometer.
* The IR LED is connected to pin 13 and ran continually. A status LED is connected
* to pin 12. Pin 2 (interrupt 0) is connected across the IR detector.
*
*
*/

int ledPin = 13; // IR LED connected to digital pin 13
int statusPin = 6; // LED connected to digital pin 12

volatile byte rpmcount;
volatile int status;

unsigned int rpm;

unsigned long timeold;
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
void rpm_fun()
{
//Each rotation, this interrupt function is run twice, so take that into consideration for
//calculating RPM
//Update count
rpmcount++;

//Toggle status LED
if (status == LOW) {
status = HIGH;
} else {
status = LOW;
}
digitalWrite(statusPin, status);
}

void setup()
{
Serial.begin(9600);
//Interrupt 0 is digital pin 2, so that is where the IR detector is connected
//Triggers on FALLING (change from HIGH to LOW)
attachInterrupt(0, rpm_fun, FALLING);
lcd.begin(16,2);
//Turn on IR LED
//pinMode(ledPin, OUTPUT);
//digitalWrite(ledPin, HIGH);

//Use statusPin to flash along with interrupts
//pinMode(statusPin, OUTPUT);

rpmcount = 0;
rpm = 0;
timeold = 0;
status = LOW;
}

void loop()
{
//Update RPM every second
delay(1000);
lcd.clear();
//Don't process interrupts during calculations
detachInterrupt(0);
//Note that this would be 60*1000/(millis() - timeold)*rpmcount if the interrupt
//happened once per revolution instead of twice. Other multiples could be used
//for multi-bladed propellers or fans
rpm = 10*1000/(millis() - timeold)*rpmcount;
timeold = millis();
rpmcount = 0;

//Write it out to serial port
Serial.println(rpm,DEC);
lcd.print("RPM: ");
lcd.print(rpm);
//Restart the interrupt processing
attachInterrupt(0, rpm_fun, FALLING);
}

Agora abra IDE do Arduino, cole a programação e conecte o Arduino na porta USB do seu PC. Selecione a sua versão do sua placa Arduino (UNO, Duemilanove, etc) em "Tools/Board" e selecione a porta (COMx, ttyUSBx, ttyACMx) em "Tools/Serial Port". Clique em UPLOAD. Pronto! Seu tacômetro está pronto para ser usado!

E é isso! Esperamos que tenha gostado Caso tenha dúvidas, poste aqui neste post! Para sugestões de tutoriais, clique aqui! Para ver outros tutoriais e projetos desenvolvidos pela equipe LdG e por outros garagistas, clique aqui e aqui, respectivamente! Até a próxima!

Referências:

http://arduino.cc/playground/Learning/Tachometer

http://www.pyroelectro.com/tutorials/tachometer_rpm_arduino/index.html

http://www.electronics-lab.com/blog/?p=19705

http://labdegaragem.com/profiles/blogs/tutorial-emissor-e-receptor-...

Exibições: 46280

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Fabiano Bertuche em 6 agosto 2021 às 16:42

Boa tarde alguém saberia falar qual a velocidade máxima por segundo eu conseguiria medir?

Será que eu conseguiria medir algo na casa dos 100kHz com Arduino ou Esp32?

Comentário de José Gustavo Abreu Murta em 19 agosto 2016 às 21:09

Estou montando um tacometro para motor de passo e estou penando. 

Esse tipo de tacometro citado nesse tópico, varia a precisão na medição de acordo com o RPM ...

Estou estudando sobre os Timers e Counters do ATmega328. E são os circuitos mais complexos desse microcontrolador. Tá russo.

Comentário de Paulo em 2 maio 2016 às 9:24

Bom dia Henrique o sensor para simular o projeto sera um magnético.

Abraço

Comentário de Robson Ferreira de Arruda em 29 abril 2016 às 11:28

Bom dia !
Por favor, você poderia esplicar essa parte do código ?
rpm = 10*1000/(millis() - timeold)*rpmcount;

E por quê não tem nada ligado no pino 13 apesar de o código começar dizendo que o IR está ligado ao pino 13 ?

Comentário de Paulo em 15 novembro 2015 às 22:48

Boa noite Pessoal!

Fiz um pedido a dois dias atrás para um membro do lab e resolvi renovar o pedido para quem puder me ajudar com o código para o Arduíno uno,

Para que eu possa finalizar meu curso de eletrônica.

O que eu vou apresentar:

Uma sinaleira atuada pelo trafico de veículos funciona assim:

Temos as botoeiras como toda sinaleira para pedestre quando pressionada reduz o tempo do sinal verde dos veículos, na pratica não funciona assim pelo menos aqui no sul nunca eu vi esta redução....kkkkk.

Pretendo usar o projeto do tacômetro aqui do lab para implementação do meu TCC. Como ela conta voltas (RPM) minha ideia é usar uma esteira para simular uma avenida em movimento girando a 20 voltas por minuto = ( 20 carros por minuto) o tempo fica normal para pedestre (ex 60s), 50 voltas por minuto o tempo do sinal verde que era 60s passa para 90s aumentando o tempo de sinal verde dos carros pára melhor fluxo na via.

Abraço.

 

Comentário de Henrique em 22 maio 2013 às 19:59

gostaria de saber qual o modelo do sensor receptor?

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço