Ik probeer een snelheidsmeter te maken voor een motorfiets. Op het wiel (remschijf) komt een magneetje dat wordt gedetecteerd door een hall sensor.
Het idee is dat de totale km stand en dagteller op een 16x2 lcd komt te staan en de snelheid op een 3 digit 7 segmenten display (gedeelde kathode en dan multiplexen mbv 3 transistors).
Als proefopstelling heb ik een casefan met 4 magneetjes op de rotor geplakt en de hallsensor erboven. Nu weet ik niet goed hoe ik de snelheid detecteren. Ik heb het nu gedaan met een interrupt functie waarin de snelheid wordt berekend:
//hall sensor interrupt function
void hallfunction(){
vspeed=tyrec/(millis()-deltat);
timea=millis(); //start to count since last signal
deltat=millis(); //reset last input
}
waarin de variabele timea later wordt gebruikt om te kijken of het te lang duurt voor de magneet langs komt, in dat geval wordt de snelheid 0. De snelheid wordt dus elke magneet passage opnieuw berekend, de waarde op het display wordt echter elke 500ms ververst.
Op zich werkt het maar de snelheid is onregelmatig. Filmpje:
YouTube: speedometer v1.2
Vanuit stilstand naar 50-60km/h en weer naar 0. De snelheid fluctueert dus met ongeveer 10km/h.
Iemand een idee of er een betere methode is of hoe ik dit kan verbeteren?