Viva.
Estou a querer ler a velocidade de uma roda.
Com um sensor óptico ja consigo ler correctamente as rotações por minuto, agora estou falhando na conversão dos RPM em km/h.
Encontrei uns calculadores online que calculam a velocidade, dado os RPMs e o raio de leitura.
A formula que encontrei é a seguinte:
The RPM to Linear Velocity formular is :
v = r × RPM × 0.10472
v: Linear velocity, in m/s
r: Radius, in meter
RPM: Angular velocity, in RPM (Rounds per Minute)
Agora o codigo:
volatile byte revolutions;
unsigned int rpm;
unsigned long timeold;
unsigned long velo;
void setup() {
Serial.begin(9600);
attachInterrupt(0, rev_counter, RISING);
revolutions = 0;
rpm = 0;
timeold = 0;
}
void loop() {
if (revolutions >= 1) { //Calculates rpm after every 1 revs.
//rpm=(revolutions/20)/(((millis() - timeold)/60)/1000); //there are 20 holes on the encoder wheel
rpm = 60000 / (millis() - timeold);
timeold = millis();
revolutions = 0;
Serial.print("RPM =\t");
Serial.print(rpm, DEC);
//Serial.print('\n');
// v = r × RPM × 0.10472
Serial.print("\t speed=\t");
/*
The RPM to Linear Velocity formular is :
v = r × RPM × 0.10472
v: Linear velocity, in m/s
r: Radius, in meter
RPM: Angular velocity, in RPM (Rounds per Minute)
*/
velo = (0.015 * rpm * 0.10472);
Serial.print(velo, DEC);
Serial.print("km/h");
Serial.print('\n');
}
if (millis() > (timeold + 2500)) {
rpm = 0;
Serial.print("RPM =\t");
Serial.print(rpm, DEC);
Serial.print('\n');
}
}
void rev_counter() {
revolutions++;
}
O problema é que no calculador online, que supostamente aplica a formula, obtenho resultados muito diferentes dos apresentados no serial monitor.
Pergunta onde estou a falhar, formula ou no codigo ?
Outra questão ( esta é mais por me ter baldado nas aulas de matemática-geometria ), conhecida a velocidade a X cms do eixo duma roda, qual é a velocidade a Y cms ?
Obrigado.