Hallo Forum, ich baue gerade einen Geschwindigkeitsmesser für Modellbahnen. Jetzt kommt die Krugs: Das ganze ist nicht die Wegstrecke, das heißt man misst die Zeit von einem Sensor zum nächsten im definierten Abstand - das wäre ja simpel. Sondern ich habe einen Rollenprüfstand. An diesem ist ein Hallsensor und Magnet. 1 Impuls Pro Umdrehung. Wie kann ich (insb. rechnerisch) hier die Geschwindigkeit messen. Meine PRobleme sind hier etwas das Verständis: Jede Lok hat einen anderen Raddurchmesser, nur der Durchmesser wo der Magnet dran klebt, also vom Rollprüfstand ist immer gleich. Die Lok und dessen Raddurchmesser ist variabel. Ich habe aktuell ein Intervall von 5 sek. Das ist aber auch sehr semi, wenn ich seeeehr langsam fahre, brauch ich für eine Umdrehung länger als 5 sek. => Fehelr. Andere Idee war die Zeit zwischen 2 Impulsen zu nehmen. Allerdings wenn die Lok nicht fährt, müsste man dann wieder eine Art timeout haben das man dann sagt Gesch = 0. Wie kann man das rechnerisch gut und sinnvoll lösen. Das weitere ist noch der Maßstab, Ich Kann ich dann die ermittelte Geschwindigkeit einfach * 87 nehmen für H0 bspw.?
Tuffi schrieb: > ich baue gerade einen Geschwindigkeitsmesser für Modellbahnen. Jetzt > kommt die Krugs: Crux bzw. Krux heißt die. Hat nix mit Krügen zu tun. > Das ganze ist nicht die Wegstrecke, das heißt man misst die Zeit von einem > Sensor zum nächsten im definierten Abstand - das wäre ja simpel. Sondern ich > habe einen Rollenprüfstand. An diesem ist ein Hallsensor und Magnet. 1 > Impuls Pro Umdrehung. Wie kann ich (insb. rechnerisch) hier die > Geschwindigkeit messen. Umfang * Impulsrate = Geschwindigkeit. Umfang ist π * Durchmesser. > Meine PRobleme sind hier etwas das Verständis: > > Jede Lok hat einen anderen Raddurchmesser, nur der Durchmesser wo der > Magnet dran klebt, also vom Rollprüfstand ist immer gleich. Der ist ja auch entscheidend. > Die Lok und dessen Raddurchmesser ist variabel. Ich habe aktuell ein > Intervall von 5 sek. Das ist aber auch sehr semi, wenn ich seeeehr langsam > fahre, brauch ich für eine Umdrehung länger als 5 sek. => Fehelr. Was heißt "sehr semi"? > Andere Idee war die Zeit zwischen 2 Impulsen zu nehmen. Das ist bei so geringen Drehzahlen wesentlich sinnvoller. > Allerdings wenn die Lok nicht fährt, müsste man dann wieder eine Art timeout > haben das man dann sagt Gesch = 0. Ja, das müsstest du. Ansonsten halt mehrere Magnete an der Rolle anbringen. > Wie kann man das rechnerisch gut und sinnvoll lösen. Das weitere ist > noch der Maßstab, Ich Kann ich dann die ermittelte Geschwindigkeit > einfach * 87 nehmen für H0 bspw.? Damit errechnest du die Geschwindigkeit, die eine echte Lok hätte bei gleichem "Geschwindigkeits-Eindruck".
Rolf M. schrieb: > Tuffi schrieb: >> Impuls Pro Umdrehung. Wie kann ich (insb. rechnerisch) hier die >> Geschwindigkeit messen. > > Umfang * Impulsrate = Geschwindigkeit. Umfang ist π * Durchmesser. > Vielen Dank für die Antwort. Ich habe es jetzt mal so gemacht, das ich die Zeit zwischen 2 Impulsen messe, bei 25 sek. ohne Impuls = Speed 0. Diese "Todzeit" passe ich dann noch exakt an, was die kleinste Geschwindigkeit ist. Eine Auflösung von 409,6 us kann ich max. auflösen. Das ist mein Timerintervall. Wenn ich jetzt einen Wert von 10 erhalte, bedeutet das 10 * 409,6us = 4096 us zwischen dem Impulsen. Meine Berechnung wäre jetzt: Wert 1mio 60 = Impuls/Minute Richtig?
Tuffi schrieb: > Rolf M. schrieb: >> Tuffi schrieb: > Wert 1mio 60 = Impuls/Minute > > Richtig? Wert : 1mio : 60 das slash wurde entfernt.
Meine Rechnung würde jetzt so aussehen, stimmt das?
1 | Dim mySpeedInt As Double = CInt((HI * 256) + LO) |
2 | mySpeedInt = (mySpeedInt * 409.6) 'convert to us base |
3 | mySpeedInt = (mySpeedInt / 1000000) 'convert to second |
4 | mySpeedInt = (mySpeedInt * 60) 'convert to minute |
5 | mySpeedInt = (mySpeedInt * 2 * 3.1415926535 * 8) '2pi r, r = 8 (diameter is 16mm from ball bearing) |
6 | mySpeedInt = (mySpeedInt / 1000000) 'convert from mm/min to km/min |
7 | mySpeedInt = (mySpeedInt * 60) 'convert from km/min to km/h |
8 | mySpeedInt = (mySpeedInt * getScaleFacor()) 'convert to model scale factor |
Tuffi schrieb: > Jede Lok hat einen anderen Raddurchmesser, nur der Durchmesser wo der > Magnet dran klebt, also vom Rollprüfstand ist immer gleich. Die Lok und > dessen Raddurchmesser ist variabel. Für die Geschwindigkeitsmessung kommt es drauf an, wer auf wem abrollt und wie die Abmessungen (Durchmesser) sind. Vielleicht machst du mal eine Skizze, aus der ersichtlich ist, wie alles zusammenhängt. Normalerweise ist ein Rollenprüfstand so aufgebaut, dass die Abrollfläche die Straße/Schiene ersetzt, auf der das Fahrzeug normalerweise fährt. Warum soll sich der Raddurchmesser am Rollenprüfstand anders auswirken, als wenn die Lok auf der Schiene fährt.
Wolfgang schrieb: > Tuffi schrieb: >> Jede Lok hat einen anderen Raddurchmesser, nur der Durchmesser wo der >> Magnet dran klebt, also vom Rollprüfstand ist immer gleich. Die Lok und >> dessen Raddurchmesser ist variabel. > > Für die Geschwindigkeitsmessung kommt es drauf an, wer auf wem abrollt > und wie die Abmessungen (Durchmesser) sind. Vielleicht machst du mal > eine Skizze, aus der ersichtlich ist, wie alles zusammenhängt. > > Normalerweise ist ein Rollenprüfstand so aufgebaut, dass die > Abrollfläche die Straße/Schiene ersetzt, auf der das Fahrzeug > normalerweise fährt. Warum soll sich der Raddurchmesser am > Rollenprüfstand anders auswirken, als wenn die Lok auf der Schiene > fährt. Das ist einfach nur ein Prüfstand, wo die Lok drauf steht und dessen Räder auf 16mm (außendruchmesser) großen Kugellagern sind, an diesem Kugellager ist ein Magnet, darunter ein Sensor.
Ich habe hier irgendwie noch ein Denkfehler, könnte mir jmd. mit der Berechnung helfen. Nach dem aktuellen Schema ist es so, je schneller sich das Rad dreht, desto kleiner wird die Geschwindigkeit. Klar macht auch Sinn, da die Impulsbreite kleiner wird, also die Zeit zwischen 2 Impulsen und damit nach meiner Rechnung auch die Geschwindigkeit. Wie muss das richtig aussehen?
Tuffi schrieb: > Wie muss das richtig aussehen? Dann zeig mal die Formel deines "aktuellen Schemas". Irgend etwas mit 1/t sollte drin stehen.
:
Bearbeitet durch User
Tuffi schrieb: > Nach dem aktuellen Schema ist es so, je schneller sich das Rad dreht, > desto kleiner wird die Geschwindigkeit. Die Momentangeschwindigkeit wird aus dem Quotienten einer Wegdifferenz und einem Zeitintervall berechnet. Je kleiner die Zeit, um so größer die Geschwindigkeit. Das ist in der Schule normalerweise Thema in der 9. Klasse (Kinematik und Dynamik linearer Bewegungen). Du solltest deine Rechnung darauf nochmal überprüfen.
Dim mySpeedInt As Double = CInt((HI * 256) + LO) > mySpeedInt = (mySpeedInt * 409.6) > 'convert to us base > mySpeedInt = (mySpeedInt / 1000000) > 'convert to second > mySpeedInt = (mySpeedInt * 60) > 'convert to minute > mySpeedInt = (mySpeedInt 2 3.1415926535 * 8) '2pi > r, r = 8 (diameter is 16mm from ball bearing) > mySpeedInt = (mySpeedInt / 1000000) > 'convert from mm/min to km/min > mySpeedInt = (mySpeedInt * 60) > 'convert from km/min to km/h > mySpeedInt = (mySpeedInt * getScaleFacor()) > 'convert to model scale factor Das ist meine aktuelle Berechnung
Wie sieht deine Formel zur Berechnung der Geschwindigkeit aus? Falls in deinem Code mySpeedInt die Zeit zwischen zwei Impulsen sein soll, denke noch mal über eine sinnvolle Bennenung der Variablen nach und lies dir folgendes durch: https://www.lernhelfer.de/schuelerlexikon/physik-abitur/artikel/gleichfoermige-geradlinige-bewegungen#
Tuffi schrieb: > Dim mySpeedInt As Double Warum nennt man eine Double Variable ..Int? Das führt doch nur zu Verwirrungen. Und vielleicht könnte man mehr Hilfvariablen wie Umfang = 2 * 3.1415926535 * 8 einführen. Dann könnte es klarer sein als alles nur in einer Variablen zu berechnen. Der Compiler optimiert nachher sowieso das unbenutzte wieder weg.
> Wenn ich jetzt einen Wert von 10 erhalte, bedeutet das >10 * 409,6us = 4096 us zwischen dem Impulsen. Meine Berechnung wäre >jetzt: >16mm (außendruchmesser) großen Kugellagern sind, PI*16mm/4096µs = 12'272mm/s Hier musst Du aber noch bedenken, die gemessenen 10 auch eigentlich 10,9 sein könnten. Für die 11 hats quasi knapp nicht mehr gereicht. Der nächste Impuls kam knapp zu spät. 11 -> 11'156mm/s Du hast also in dieser Messung 1'116mm/s Toleranz (9%) drin. Wirst Du schneller, wird es schlimmer.
Tuffi schrieb: > Sondern ich habe einen Rollenprüfstand. An diesem ist ein > Hallsensor und Magnet. 1 Impuls Pro Umdrehung. Wie kann ich (insb. > rechnerisch) hier die Geschwindigkeit messen. Umfang (Strecke) = Pi mal Durchmesser. > Allerdings wenn die Lok nicht fährt, müsste man dann wieder > eine Art timeout haben das man dann sagt Gesch = 0. Das ist bei jedem digitalen Tacho so - kennst du bestimmt vom Fahrrad. > Ich Kann ich dann die ermittelte Geschwindigkeit > einfach * 87 nehmen für H0 bspw.? Wenn es denn der Maßstab 1:87 ist, dann ja.
Hi Nur noch ein kleiner Tip. Immer, wenn ich Verständnisprobleme habe, dann skizziere ich kurz mein Problem. So bekomme ich ein Bild und ich finde (meist) schnell die Lösung. Gruß oldmax
> PI*16mm/4096µs = 12'272mm/s
Formal richtig, allerdings könnte man hier auf den Gedanken kommen, dass
eine Geschwindigkeit von zwölf Meter pro Sekunde = mehr als 40 km/h für
eine Modelleisenbahn ja völlig unrealistisch ist und die Sache deshalb
irgendwo noch einen massiven Bug haben muss.
Dass du immer die selbe Variable für unterschiedliche Größen verwendest, macht es etwas unübersichtlich. Tuffi schrieb: > Dim mySpeedInt As Double = CInt((HI * 256) + LO) Also, hier steht in mySpeedInt offenbar dein gemessener Wert in Zähler-Zyklen drin. > mySpeedInt = (mySpeedInt * 409.6) 'convert to us base Hier wird es dann eine Zeit in Mikrosekunden, die eine Umdrehung braucht - wohlgemerkt keine Geschwindigkeit oder Drehzahl, sondern eine Zeit. Die Einheit ist also Mikrosekunden pro Umdrehung. > mySpeedInt = (mySpeedInt / 1000000) 'convert to second > mySpeedInt = (mySpeedInt * 60) 'convert to minute Immer noch eine Zeit, nur in Minuten pro Umdrehung statt in Mikrosekunden. > mySpeedInt = (mySpeedInt 2 3.1415926535 * 8) '2pi r, r = 8 > (diameter is 16mm from ball bearing) Hier multiplizierst du diese Zeit mit dem Umfang. Dein Ergebnis ist also in der Einheit Minuten mal Millimeter. Eigentlich müsstest du den Umfang durch die Zeit teilen. Dann hättest du Millimeter pro Minute. Es ist immer gut, bei solchen Rechnungen einen Einheiten-Check zu machen. Übrigens: Warum teilst du erst den Durchmesser durch 2 und multiplizierst dann wieder mit 2? > mySpeedInt = (mySpeedInt / 1000000) 'convert from mm/min to km/min > mySpeedInt = (mySpeedInt * 60) 'convert from km/min to km/h Tatsächlich hast du hier nicht km/h, sondern km*s. > mySpeedInt = (mySpeedInt * getScaleFacor()) 'convert to model scale factor
:
Bearbeitet durch User
Rolf M. schrieb: >> mySpeedInt = (mySpeedInt / 1000000) 'convert to second >> mySpeedInt = (mySpeedInt * 60) 'convert to minute > > Immer noch eine Zeit, nur in Minuten pro Umdrehung statt in > Mikrosekunden. Bestimmt nicht. Für die Umrechnung von Sekunden in Minuten müsste man den Zahlenwert durch 60 teilen.
1 | 1 s = 1/60 min |
Wolfgang schrieb: > Bestimmt nicht. Da hast du natürlich recht. Das hatte ich wohl übersehen, weil in der ersten Zeile noch korrekt dividiert wurde.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.