const int sensor1Pin = 2;
const int sensor2Pin = 4;
const float pi = 3.14159265358979;
unsigned int diametroDaRodaEmMm = 785; // mm
unsigned int quantidadeDeFuros = 108; // Qtde. em cada carreira: 54
unsigned int tempoEntreLeituras = 100; // Tempo em millisegundos
float perimetroDaRodaEmMm = pi * diametroDaRodaEmMm;
float perimetroDaRodaEmKm = perimetroDaRodaEmMm / 1000000.0;
unsigned long tempoAnterior = 0;
volatile int contadorDePulsos = 0;
void incrementarContador() {
contadorDePulsos++;
}
void setup() {
Serial.begin(115200);
pinMode(sensor1Pin, INPUT_PULLUP);
pinMode(sensor2Pin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(sensor1Pin), incrementarContador, CHANGE);
attachInterrupt(digitalPinToInterrupt(sensor2Pin), incrementarContador, CHANGE);
}
void loop() {
unsigned long tempoAtual = millis();
if (tempoAtual - tempoAnterior >= 100) {
calcularVelocidade();
tempoAnterior = tempoAtual;
}
}
void calcularVelocidade() {
// Calcular a velocidade com base no número de pulsos e no tempo entre as leituras
float velocidade = (float)contadorDePulsos / 2.0; // Dividir por 2, pois há dois sensores
// Diferença de tempo em segundos
float tempoEmSegundos = (millis() - tempoAnterior) / 1000.0;
// Considerando o perímetro da roda e a quantidade de furos no disco
velocidade = (velocidade * perimetroDaRodaEmKm) / (quantidadeDeFuros * tempoEmSegundos) * 3600.0;
Serial.printf("%.2f KM/h\n", velocidade);
contadorDePulsos = 0; // Reseta o contador de pulsos
}