Skip to content

Instantly share code, notes, and snippets.

@eijuito
Last active July 29, 2021 01:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eijuito/e4b7bbc4356cd87a9c8f59521f0b94e8 to your computer and use it in GitHub Desktop.
Save eijuito/e4b7bbc4356cd87a9c8f59521f0b94e8 to your computer and use it in GitHub Desktop.
Tacometro da Larissa
#include <AFMotor.h>
// em vez de "unsigned int pulsos_por_volta = 20;"
#define PULSOS_POR_VOLTA 20 // numero de pulsos em cada volta
#define INTERVALO_MEDICAO 1000 // tempo para medir os pulsos
AF_DCMotor motor(3); // inicializa o motor no M3
// definicao das variaveis
int pino_D0 = 2; // pino da interrupcao
int rpm = 0; // resultado do calculo do rpm
volatile byte pulsos = 0; // contador de pulsos
unsigned long tempo_passado = 0; // contador de tempo em millissegundos
// Funcao da interrupcao
void contador() {
pulsos++; // incrementa o contador
}
void setup() {
Serial.begin(9600); // inicializa a porta serial a 9600 bauds
motor.setSpeed(255); // velocidade maxima do motor
motor.run(FORWARD); // define sentido de rotacao do motor
pinMode(pino_D0, INPUT); // define o pino da interrupcao como entrada
//Aciona o contador a cada pulso
attachInterrupt (0, contador, FALLING);
// pulsos = 0; // ja foi resetado na declaracao
// rpm = 0; // ja foi resetado na declaracao
// tempo_passado = 0; // ja foi resetado na declaracao
}
void loop() {
// Atualiza o contador a cada segundo
if (millis() - tempo_passado >= INTERVALO_MEDICAO) {
// Desabilita a interrupção durante o cálculo
detachInterrupt(0);
// calculo
// ( pulsos * 60 / PULSOS_POR_VOLTA) converte pulsos por segundo para rotacoes por minuto
// ( INTERVALO_MEDICAO / (millis() - tempo_passado) ) refina o valor entre o tempo passado e o tempo de medicao
rpm = ( pulsos * 60 / PULSOS_POR_VOLTA) * ( INTERVALO_MEDICAO / (millis() - tempo_passado) );
// imprime resultado
Serial.print("RPM = ");
Serial.print(rpm, DEC);
Serial.print (" ");
Serial.print("TEMPO = ");
Serial.println(tempo_passado, DEC);
// reseta contadores
tempo_passado = millis();
pulsos = 0;
//Habilita interrupcao
attachInterrupt(0, contador, FALLING);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment