Variable für Fahrradcomputer

  • Hat jemand eine Idee wie ich von eine Durchschnittsvariable bekomme?

    Ich wollte mir einen Fahradcomputer bauen (einfach zum Spaß) und bin soweit, das mein Skript alle fünf sekunden aus den Umdrehungen pro Minute und dem Radumfang die Geschwindigkeit zu errechnen. Und die Variable der Umdrehungen pro Minute ändert sich ja immer wieder. Wie bekomme ich es per python hin das diese Variable immer stimmt?
    Danke Im Vorraus, MfG Oli.

  • Bitte zeig dein Script und schildere dazu passend dann dein Problem bzw dein genaues Vorhaben.

    Zusätzlich wo die Reise hingehen soll - also ob du zB planst das auch irgendwie visuell darzustellen, zB über eine Tachografik?



    und bin soweit, das mein Skript alle fünf sekunden aus den Umdrehungen pro Minute und dem Radumfang die Geschwindigkeit zu errechnen.

    Die Geschwindigkeitsberechnung ist nicht auf "Umdrehungen pro Minute" beschränkt. Der Zeitraum kann auch im Sekundenbereich liegen, oder man könnte auch nach ein paar Impulsen eine Ausgabe erzeugen. Evtl. hast du da noch einen Denkfehler

  • Hallo Oli,

    ich würde das Ganze eh ansers machen.

    So als Ansatz.
    Jede volle Radumdrehung liefert einen Impuls. Jeder Impuls findet zu eine messbaren Zeitpunkt statt. Du speicherst z.B. 10 solcher Zeitpunkte. Dann kennst Du die Zeit zwischen Impuls #1 und Impuls #10. Du kennst die Anzahl der Umdrehungen, Du kennst die in dieser Zeit zurückgelegte Wegstrecke und kannst die Geschwindigkeit berechnen. Dies hätte auch den Charme, dass die Geschwindigkeit sich nicht extrem kurzfristig ändert.
    Oder willst Du, dass die Anzeige während einer Radumdrehung von 35 bis 45 km/h hin- und her-schwingt?

    Bleibt es bei 10 Messwerten, wird der älteste Zeitpunkt gelöscht und ein aktueller neuer 10. Wert genommen. So wird jederzeit die Durchschnittsgeschwindigkeit der letzten 10 Umdrehungen in ruhiger Weise angezeigt. Bei einer längeren Fährt durchaus sinnvoll. Bei ständigem Tempowechsel allerdings träge.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (9. Mai 2017 um 16:10)


  • Hallo Oli,

    ich würde das Ganze eh ansers machen.

    So als Ansatz.
    Jede volle Radumdrehung liefert einen Impuls. Jeder Impuls findet zu einer definierten Zeit statt. Du speicherst z.B. 10 solcher Zeitpunkte. Dann kennst Du die Zeit zwischen Impuls #1 und Impuls #10. Du kennst die Anzahl der Umdrehungen, Du kennst die in dieser Zeit zurückgelegte Wegstrecke und kannst die Geschwindigkeit berechnen. Dies hätte auch den Charme, dass die Geschwindigkeit sich nicht extrem kurzfristig ändert.
    Oder wilst Du, dass die Anzeige während einer Radummdrehung von 35 bis 45 km/h hin- und her-schwingt?

    Beste Grüße

    Andreas

    Danke für den Ansatz, werde ich auf jedenfall versuchen.
    Aber deinen letzen Satz verstehe ich nicht so ganz, also was ist damit gemeint?
    Automatisch zusammengefügt:


    Bitte zeig dein Script und schildere dazu passend dann dein Problem bzw dein genaues Vorhaben.

    Zusätzlich wo die Reise hingehen soll - also ob du zB planst das auch irgendwie visuell darzustellen, zB über eine Tachografik?


    Die Geschwindigkeitsberechnung ist nicht auf "Umdrehungen pro Minute" beschränkt. Der Zeitraum kann auch im Sekundenbereich liegen, oder man könnte auch nach ein paar Impulsen eine Ausgabe erzeugen. Evtl. hast du da noch einen Denkfehler

    Also es soll Richtung Fenster (mit Pygame oder ähnlichem gemacht (gibts da eigentlich noch alternativen?) mit der Anzeige in Km/H und später wenn alles funktioniert auch noch mit der Durchschnittsgeschwindigkeit gehen. Mein Problem dabei ist das die Variable die die Umdrehungen des Rades pro minute zeigt ja nicht konstant sein kann, weil man ja mal langsamer und mal schneller fährt. D.h. brauche ich irgendein skriptteil der das übernimmt, da liegt halt mein Problem. Ich habe leider wenig erfahrung mit Python (bis jetzt beschränkte es sich auf GPIO ein und ausschalten etc.) sodass ich halt eine Idee hatte aber zur Umsetzung ein Teil fehlt.

    Zu deinem zweiten Punkt: Wahrscheinlich habe ich einen Denkfehler.
    Im Moment habe ich die variable für die Umdrehungen pro minute auf 200 festgesetzt und mit einem 28" Rad gerechnet (später soll dies evtl. einstellbar sein, daher habe ich eine Umrechnung von Zoll in Cm eingebaut.
    Nun rechnet Python anhand des Radumfangs und der Umdrehungen pro Minute die Geschwindigkeit aus (ist im Skript zu sehen), das ganze wird alle fünf sekunden aktualisiert. Hoffe das Skript ist nicht zu verwirrend und ich hoffe auch das wenigsten meine Idee richtig ist, wenn nicht dann belehre mich bitte eines besseren :D

    Hier das Skript:

    Hoffe das Skript ist nicht allzu verkehr für einen Anfänger :D

    Danke und Gruß Oli

    Einmal editiert, zuletzt von selter_wasser (13. Januar 2017 um 20:04)

  • Hallo Oli,


    Aber deinen letzen Satz verstehe ich nicht so ganz, also was ist damit gemeint?


    Eine Radumdrehung ist nicht immer auf die Millisekunde identisch. Entsprechend schwankt dann die dezimale Anzeige. Mich würde das nerven, wenn innerhalb einer Pedalumdrehung (ca. eine Sekunde) und bei einer normalen Übersetzung rund 8 m zurückgelegt werden und dabei pro Pedalumdrehung mehrmals der angezeigte Wert wechselt.
    Deswegen der Ansatz mit der Anzeige der Durchschnittstgeschwindigkeit der z.B. letzten 10 Radumdrehungen. Dieser Wert wird dann bei jeder Pedalumdrehung leicht geändert (weil der Beitrag der neuen Radumdrehung gegenüber den 9 davor nicht viel wird herausreißen können. Auf diese Weise hast Du stetige leichte Änderungen in der Anzeige, wodurch das Ganze ruhiger wirkt. Denn ganz sicher interessiert Dich nicht die Nachkommastelle bei einer Angabe in km/h.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (13. Januar 2017 um 20:31)

  • Wie ich bereits in deinem Ursprungsthread erwähnte wäre es weit aus besser mit Interrupts zu arbeiten. Das von dir gezeigte Script machts nichts bezüglich GPIO oder Interrupt. So wie es da steht ist es eigentlich nutzlos: alle 5 Sekunden wird nur eine statische Berechnung durchgeführt, nichts weiter.

    Gewöhne dir lieber auch sofort an den Variablen vernünftige Namen zu geben, ihrem Sinn und Zweck entsprechend. Sowas wie ze zee zeee solltest du dir lieber gar nicht erst angewöhnen!


    Wenn du ein echten Tacho nach bauen willst, ist die ganze Sache sowieso komplexer - aber man muss nicht direkt mit 100% durchstarten => Schritt für Schritt weiterentwickeln.
    Eine art "timeout" brauchst du zum Beispiel auch, sonst bleibst du mit dem Fahrrad stehen aber der Tacho zeigt weiterhin die letzte Geschwindigkeit als aktuellen Wert an :fies:

    Umrechnungen von Zoll und Umfang etc kannst du später noch implementieren, kümmer dich lieber erst mal ums wesentliche => Erfassung der Reed-Switch Auslöser und Erfassung der Zeiten
    Wichtig für die Erfassung der Messwerte: im Interrupt Callback solltest du zB nur das absolut nötigste stehen haben sonst wird die Callback Funktion derbe ausgebremst und das ganze Konstrukt wird ungenau. Die Interrupt Callback läuft (automatisch) abgekoppelt vom restlichen Script und kann daher äußerst schnell nacheinander ausgelöst / verarbeitet werden. Steht da aber sowas wie ein "print" drin wird die Funktion ausgebremst und verpasst möglicherweise ein Impulse, was wiederum zu Ungenauigkeit führt.

    Ich hab für solch ein Vorhaben bereits Scripte auch mit Visualisierungen - aber wenn ich dir diese fix und fertig vor die Füße klatsche wäre der Lerneffekt gleich null

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!