Bei klassischen Fahrradcomputern erfolgt die Geschwindigkeitsmessung mittels eines Sensors am Rahmen und einem Magnet an einer Speiche. Jedes Mal wenn der Magnet den Sensor passiert, misst der Fahrradcomputer die Zeit und rechnet mit Hilfe des Radumfangs (den man im Fahrradcomputer einstellen muss) die Geschwindigkeit.
Bei diesem Calliope-Projekt simulieren wir den Sensor durch den Taster A.
Zunächst setzen wir den Radumfang beim Programmstart auf 2200mm, was ungefähr dem Umfang eines typischen Fahrrades entspricht:
Wenn der Taster A gedrückt wird, wollen wir die Geschwindigkeit ausrechnen. Hierzu merken wir uns die aktuelle Laufzeit im Platzhalter "new_time". Die Laufzeit sind die Anzahl der Millisekunden die seit dem Programmstart vergangen sind.
Wenn Taster A zum ersten Mal gedrückt wurde, ist "last_time" noch 0, da wir diesen Platzhalter nach der Berechnung auf die gerade gemessene Zeit setzen. Wir können die Berechnung also nur ausführen wenn "last_time" größer als 0 ist:
Um die Geschwindigkeit ausrechnen zu können, benötigen wir nun noch die Vergangene Zeit, dafür ziehen wir einfach die beim letzten drücken von A gemessene Zeit von der gerade eben gemessenen Zeit ab:
Nun haben wir den Zeitabstand in Millisekunden zwischen der aktuellen und der letzten Messung im Platzhalter "time_diff". Die Geschwindigkeit erhalten wir, wenn wir den zurückgelegten Weg durch die vergangene Zeit dividieren (umfang/time_diff). Da die Einheit mm/ms unüblich ist, wandeln wir sie durch Multiplizieren mit 3,6 in km/h um. Da Dezimalzahlen nicht unterstützt werden, und damit wir die bestmögliche Genauigkeit erhalten, Multiplizieren wir mit 36 und teilen am Ende durch 10.
Nun haben wir die Geschwindigkeit in km/h im Platzhalter "speed" gespeichert. Diese wollen wir auf der LED-Matrix ausgeben. Da das direkte Ausgeben von Zahlen nicht funktioniert, wenden wir einen alten JavaScript-Trick an und wandeln die Zahl in eine Zeichenfolge um, indem wir sie mit einer Leeren Zeichenfolge "addieren".
Update: Scheinbar habe ich den "zeige Nummer" - Block einfach übersehen, mit dem kann man sich diesen coolen Trick natürlich sparen:
Da uns auffällt, dass nun für immer die zuletzt gemessene Geschwindigkeit angezeigt wird, obwohl wir den Taster nicht mehr drücken, bauen wir noch eine Erkennung für die Geschwindigkeit "0" ein. Wir prüfen ob seit der letzten Messung mehr als 2 Sekunden vergangen sind. Wenn das so ist, setzen wir speed auf 0.
Comments