Modellbahn Geschwindigkeit messen!

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Ah, @six1 hat in seinem Pfadfinderhandbuch nachgeschaut. Das kann ich natürlich nicht, ich hab' keins.
      Also km/h=lls*3600/1000/zls, jetzt ,it lls in mm und zls in mS
      km/h=l/1000*3600/1000*1000/zeit und das Ganze jetzt mal dem Spurfaktor
      faktor_h0=l*3600/1000*87=31320
      na, ob das stimmt?
      Probe
      31320/391=80.10230179, ok, das sind die 80km/h aus dem oberen Beispiel. a_15_a5ddcf85
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Hallo,

      ja wo iss er denn hin der "Neue"? ^^ :D

      tscoeatsch, ich werd das Prog mal in den Tiny schieben, vorher allerdings die Berichtigungen vornehmen! Was die Masstabs-Schalter anbelangt, so hatte ich die Zwei durch nur Einen ersetzt (High-Low Auswertung mit Pullup), funktioniert ganz gut. Man könnte den Masstabswert dann auch noch ins EEProm speichern direkt nach dem Einschalten, dann wäre man auf der sicheren Seite gegen unbeabsichtigtes Umschalten.
      Den Fred werd ich mir wohl teilweise zumindest ausdrucken. Stefans Buch hab ich ja hier liegen, da werd ich mich im Krankenhaus mit befassen (1Woche stationär) um die Seite 236 zu studieren!

      Gruß
      Klaus
    • Hm, nur ein Umschalter für den Massstab, dann klappt es mit dem debounce nicht. Das bitwait stoppt ja den Programmablauf. Das Programm ist jetzt so ausgelegt, dass mit der Variablen 'Zustand' die passenden bitwaits scharf geschaltet werden. Wenn die Lock durchgefahren ist, muss sie ja auch wieder zurück. Da werden ja auch die Schalter betätigt. Da darf dann die Stoppuhr nicht vorzeitig los laufen. Daher mein Gedanke, mit dem Masstabschaltern die Messung scharf zu stellen. Man kann es natürlich auch anders programmieren, dass nach der Messung die Schalterfolge 'Ende-Startmessung' durchlaufen werden muss, um wieder scharf zu schalten. Dann spart man sich einen Taster, bräuchte aber ein Schalter anstelle des anderen Tasters. Diese Programmversion ist dann auch etwas eleganter, weil man nur hin und her fahren muss und man muss nicht jedesmal den Taster drücken.
      Oder, wie von @six1 schon erwähnt die Hin- und Rückfahrt vermessen, das kann man ja im display vermerken.
      Und gute Besserung natürlich!
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Hallo,
      als erstes, das Progi läuft! Das mit dem Masstabsumschalter kannste vergessen, die Lösung in dem Prog ist schon ok.. Übrigens, die Lok muss nicht unbedingt zurück, sie kann auch im Kreis fahren! Das ist fürs Programmieren der Decoder sowieso besser, braucht ja nur ein kleines Oval sein. Ich muss mir jetzt mal überlegen wie ich die Lichtschranke so bauen kann, dass man sie auch auf eine andere MoBa Anlage plazieren kann. Den Abstand der Sensoren wird ich bei Spur N wahrscheinlich auf 10 cm festlegen und bei H0 auf 50 cm.
      Ich hab gestern abend mal versucht die Schaltung an die MoBa anzubringen und kam zu der Erkenntnis, 1m ist entschieden zu lang! Irgendwie kommt mir vor, dass die Berechnungsformel einen Fehler hat, die Zeiten bzw. die errechneten Geschwindigkeiten erscheinen mir irgendwie unpassend! ?( Dazu werde ich aber den Kreis aufbauen und die Lichtschranken plazieren, dann kann ich genaueres Sagen! Kann allerdings etwas dauern, heute morgen hat das Krankenhaus angerufen!

      Gruß
      Klaus
    • Alles Gute Klaus!



      Nach den Vorgangsweise aus Modellbahn Geschwindigkeit messen! sollte das schon klappen, wenn due die richtigen Variablen und Einheiten einsetzt.
      10cm halte ich für beide Spuren, N und H0, für völlig ausreichend.
      Den Maßstab kann man doch leicht umschalten, indem man den "SpurFaktor" nach Schalterstellung belegt.

      Prinzip:
      Definitionen:
      H0 = 1 / 87
      N = 1 / 160


      Main Loop Berechnung:

      if Spurumschalter = 0 then
      SpurFaktor = N
      else
      SpurFaktor = N
      end if

      ...weiter in der Berechnung
      Code first, think later - Natural programmer :D
    • veryoldman schrieb:

      Den Abstand der Sensoren wird ich bei Spur N wahrscheinlich auf 10 cm festlegen
      Jetzt mal was zum Thema :) : Vielleicht baust Du trotzdem die Lichtschranken in ein kleines, wenige cm großes Gehäuse. Der Controller braucht nur einen minimalen Abstand der Lichtschranken zueinander. Das Kästchen könntest Du dann an beliebige Stelle auf die Anlage stellen, um die Geschwindigkeit zu messen. So auch beispielsweise an Steigungen und Gefällstrecken. Nach dem Messen einfach wieder von der Anlage nehen. Mit einem kleinen LCD- Display (wie das ehemalige 2x8 von Pollin) ginge sogar Batterie- oder Akkubetrieb ohne störende Kabel.

      Kleinert Tip: So einen Krankenhausaufenthalt muss man nicht nutzlos hinnehmen. Im Nachtschrank ist genug Platz, Steckdosen gibt es am Bett und der Tisch ist optimal einstellbar :D

      Gute Besserung
      Christian
      Wenn das die Lösung ist, möchte ich mein Problem wieder haben.
    • Hallo tschoaetsch,

      ich bin ganz kurzfristig für 2-3 Tage zu Hause und hab mir das Programm vorgenommen. Nachdem ich etwas geändert hatte und die Sensoren aufgebaut habe, bin ich eigentlich ziemlich zufrieden mit dem Ergebnis. Für die Spur H0 hab ich leider keine Möglichkeit (im Augenblick) um auszuprobieren aber das kommt wohl noch wenn ich zu meiner Tochter nach Hessen fahre! Erst mal kann ich nun meine Loks auf eine für MoBa in Spur N vernünftige Geschwindigkeit programmieren, das ist die Hauptsache! Ich hänge das Progi hier mal an, vielleicht fällt ja jemandem noch etwas dazu ein!

      Quellcode

      1. '--------------------------------------------------------------
      2. '- Modellbahn Geschwindigkeits Messgerät für H0 und Spur N
      3. '- ATTiny2313 mit 8MHz int. Fuses: Low=0xE4, High=0xDF
      4. '-
      5. '- Const Faktor_h0 = 8000000 * L / 3600 * 1000 * H0 '=319284,8
      6. '- Const Faktor_n = 8000000 * L / 3600 * 1000 * N '=173611,1
      7. '-
      8. '- Berechnungsformel = V = L * M * 3600 / t / 1000
      9. '- V = berechnete Geschwindigkeit
      10. '- L = Abstand Sensoren
      11. '- M = Masstab (H0=87 oder N=160)
      12. '- t = Gemessene Zeit in ms
      13. '-
      14. '- Die Messung erfolgt über 2 IR Reflexsensoren "IS741", die
      15. '- ich per Umschalter umschalte um in beiden Richtungen messen
      16. '- zu können! PD0=Start, PD1=Stop
      17. '- Mit Hilfe des Bascom Forums, insbesondere des Users "tschoeatsch"!
      18. '--------------------------------------------------------------
      19. $regfile = "attiny2313.dat"
      20. $crystal = 8000000 ' 8MHz int. Fuses = Low=0xE4, High=0xDF
      21. $hwstack = 32
      22. $swstack = 10
      23. $framesize = 24
      24. '---- LC Display 20 * 4 ---------------------------------------
      25. Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.4 , Db6 = Portd.3 , Db7 = Portd.2 , E = Portd.6 , Rs = Portb.0 'Pins (Port B) für LCD-Modul definieren
      26. Config Lcd = 20 * 4
      27. Cursor Off Noblink
      28. Cls
      29. Deflcdchar 0 , 7 , 8 , 16 , 16 , 21 , 21 , 21 , 23 ' Character entsprechen der
      30. Deflcdchar 1 , 21 , 21 , 21 , 21 , 21 , 16 , 8 , 7 ' Taste "H0"
      31. Deflcdchar 2 , 28 , 2 , 1 , 1 , 9 , 21 , 21 , 21 '
      32. Deflcdchar 3 , 21 , 21 , 21 , 21 , 9 , 1 , 2 , 28 '
      33. Deflcdchar 4 , 7 , 8 , 16 , 16 , 20 , 22 , 21 , 20 ' Character entsprechen der
      34. Deflcdchar 5 , 20 , 20 , 20 , 16 , 16 , 16 , 8 , 7 ' Taste "N"
      35. Deflcdchar 6 , 28 , 2 , 1 , 1 , 5 , 5 , 5 , 5 '
      36. Deflcdchar 7 , 21 , 13 , 5 , 1 , 1 , 1 , 2 , 28 '
      37. '---- Timer0 --------------------------------------------------
      38. Const Timer0reload = 125
      39. Config Timer0 = Timer , Prescale = 64
      40. Load Timer0 , Timer0reload
      41. On Ovf0 Timer0_isr
      42. Enable Ovf0
      43. Start Timer0
      44. Enable Interrupts
      45. 'Timerwert Erklärung
      46. 'Der Timer ist ein 8-Bit-Timer. Er läuft über, wenn der Timer 256 erreicht.
      47. 'Der AVR läuft mit 8MHz, der Vorteiler ist 64.
      48. 'Jeder Tick ist 0,008 ms - (1 / CPUSpeed ??in KHz) * Prescaler.
      49. 'Der Timer benötigt 125 Ticks, um die erforderliche Zeit zu erreichen (125 * 0,008 = 1 ms).
      50. 'Der Startwert für den Timer muss auf 131 gesetzt werden, damit er nach 125 Ticks bei 256 überläuft.
      51. 'HINWEIS: Der Ladebefehl führt die Inversion für Sie durch (256-Wert oder 65536-Wert).
      52. '---- Messensoren ---------------------------------------------
      53. Config Pind.0 = Input
      54. Startmessung Alias Pind.0 ' Startsensor
      55. Portd.0 = 1 ' pullup gesetzt
      56. Config Pind.1 = Input
      57. Ende Alias Pind.1 ' Endsensor
      58. Portd.1 = 1 ' pullup gesetzt
      59. '---- Masstabs Umschalter -------------------------------------
      60. Config Pinb.1 = Input
      61. H0_s Alias Pinb.1 ' Maßstabs-Schalter H0 = 87
      62. Portb.1 = 1 ' pullup gesetzt
      63. Config Pinb.2 = Input
      64. N_s Alias Pinb.2 ' Maßstabs-Schalter Spur N = 160
      65. Portb.2 = 1 ' pullup gesetzt
      66. '---- Variable ------------------------------------------------
      67. Dim M As String * 2 ' Maßstab der Modellbahn
      68. Dim V As Word ' errechnete Zeit in ms
      69. Dim Zeit As Word ' Zeit in ms
      70. Dim Km As Word ' errechnete Geschwindigkeit
      71. Dim Zustand As Byte
      72. Dim 1msec_zaehler As Word
      73. Dim Faktor As Dword
      74. '---- Constante -----------------------------------------------
      75. Const L = 10 ' Abstand der Sensoren in cm
      76. Const H0 = 87 ' H0 = 1 : 87
      77. Const N = 160 ' N = 1 : 160
      78. Const Faktor_h0 = 8000000 * L / 3600 * 1000 * H0 ' =319284,8
      79. Const Faktor_n = 8000000 * L / 3600 * 1000 * N ' =173611,1
      80. Waitms 100
      81. Locate 2 , 5
      82. Lcd " Modellbahn "
      83. Locate 3 , 7
      84. Lcd " Tacho "
      85. Waitms 750
      86. Cls
      87. Zustand = 2
      88. '---- Hauptprogramm -------------------------------------------
      89. Do
      90. 'Auf Messbereitschaft warten
      91. If Zustand = 2 Then
      92. Locate 1 , 1
      93. Lcd " Messung=" ; Km ; "km/h " ' letzte Messung
      94. Locate 2 , 1
      95. Lcd " Taste druecken" ; " " ' Taste H0 oder N
      96. Locate 3 , 1
      97. Lcd " " ; Chr(0) ; Chr(2) ; " " ; Chr(4) ; Chr(6) ; " " ' Darstellung der Tasten
      98. Locate 4 , 1 ' für "H0" und "N" auf
      99. Lcd " " ; Chr(1) ; Chr(3) ; " " ; Chr(5) ; Chr(7) ; " " ' dem Display
      100. Do
      101. Debounce H0_s , 0 , Start_h0 , Sub
      102. Debounce N_s , 0 , Start_n , Sub
      103. Loop Until Zustand = 0 ' Warten auf Tastendruck
      104. Cls
      105. End If
      106. If Zustand = 0 Then ' Starttaste aktiv "IS741" IR Reflexsensor
      107. Bitwait Startmessung , Reset
      108. 1msec_zaehler = 0 ' Stoppuhr auf 0 setzen
      109. Zustand = 1 ' Stoppschalter aktivieren
      110. End If
      111. If Zustand = 1 Then ' Stopptaster aktiv "IS741" IR Reflexsensor
      112. Bitwait Ende , Reset
      113. Zeit = 1msec_zaehler ' vergangene Zeit ablesen
      114. 'Berechnen
      115. V = Zeit
      116. Km = Faktor / Zeit
      117. Locate 1 , 1
      118. Lcd "Messtrecke = " ; L ; " cm " ' Messtrecke
      119. Locate 2 , 1
      120. Lcd " Spur = " ; M ; " " ' Spurgröße der Modelle
      121. Locate 3 , 1
      122. Lcd " Zeit = " ; V ; " ms " ' gefahrene Zeit in ms
      123. Locate 4 , 1
      124. Lcd " Tacho = " ; Km ; " Km/h " ' tatsächliche Geschwindigkeit
      125. Wait 5
      126. Zustand = 2 ' Neustart ermöglichen
      127. End If
      128. Loop
      129. End
      130. '---- Unterprogramme ------------------------------------------
      131. Timer0_isr:
      132. Load Timer0 , Timer0reload ' Lade den timer0 vor, damit immer zur gleichen Zeit diese interruptroutine angesprungen wird
      133. Incr 1msec_zaehler ' hier wird mitgezählt
      134. Return
      135. Start_h0: ' Grundlagen der Berechnung einstellen
      136. M = "H0"
      137. Faktor = Faktor_h0
      138. Zustand = 0
      139. Return
      140. Start_n:
      141. M = "N"
      142. Faktor = Faktor_n
      143. Zustand = 0
      144. Return
      Alles anzeigen
      Gruß :)
      Klaus

      PS: In 2 Tagen muss ich wieder ins Krankenhaus zurück, wird wohl noch ne gute Woche oder 2 dauern, bis ich dann wieder zu Hause bin! Mein Notebook lass ich besser daheim, ist mir sicherer. In dem riesen Kasten wird mir einfach zu viel geklaut!
    • @veryoldman bist du dir bei dem Faktor sicher? Im Kommentar steht was von 319283. Du gibst den Abstand in cm ein, das passt zu meinem Wert faktor_h0=l*3600/1000*87=31320 grob, weil ich im mm rechnete. Aber du berechnest ja den Faktor mit
      Const Faktor_h0 = 8000000 * L / 3600 * 1000 * H0 ' =319284,8
      Der Rechnung kann ich nicht folgen. Das schaut nach der Taktfrequenz aus, die brauchst du doch nicht, weil die Zeit doch fertige ms sind und nicht irgendwelche timertakte.

      Geschwindigkeit ist Weg/Zeit, wenn ich das in km/h haben möchte, muss ich nur in diesen Einheiten rechnen. Also meine 10cm Lichtschrankenabstand in km ausdrücken und die gemessene Zeit (ms) in Stunden.
      10cm sind 0,0001 km, 1ms=1/3600000 Stunden. Jetzt noch die tatsächliche Länge mit dem Maßstab multiplizieren und die Zeit mal der Anzahl der ms multiplizieren.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von tschoeatsch ()

    • Hallo tschoeatsch,

      nee, bin ich mir nicht sicher! Zumindest aber sieht es auf der MoBa "Spur N" annähernd so aus als würde es passen! Bei Spur H0 weis ich es nicht, weil ich das im Augenblick mangels H0 Anlage nicht vergleichen kann! Meine letzte Messung betrug 485ms und angezeigt wurden 63km/h! Da hab ich aber noch eine Frage, wie hast Du die Zahl: Const Faktor-n = 1000000 * L / 3600 * *1000 '" = 173611,1" berechnet? Wenn ich laut dieser Formel eine Berechnung anstelle, bekomme ich einen ganz anderen Wert heraus = 444444444,4! ?(

      Gruß
      Klaus
    • Hm, hab' ich mich vertippt? Es sollte einfach von 1 km/h auf mm/ms umgerechnet werden. Dann wird mm mit der Meßstrecke und dem Maßstab multipliziert. Das bleibt ja fix und wäre dann die Konstante. Wenn die jetzt durch die gemessenen ms geteilt wird, hat man die Geschwindigkeit, die die Lok in echt fahren würde, und zwar mit der Einheit km/h.
      Du hast jezt 100mm Abstand und misst 485ms, gibt eine Geschwindigkeit von 100/485 mm/ms. Jetzt halt auf km/h bringen und du hast die reale Geschwindigkeit des Modells, mal Maßstab die Geschwindigkeit in echt.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ich wurde unterbrochen und rechne jetzt weiter:
      100mm sind 10cm=0,1m=0,0001km
      485ms=0,485s=0,0080833min=0,0001347h
      0,0001/0,0001347km/h=0,742268km/h real, mit dem Maßstab von 87 verrechnet fährt die Lok in echt 64,57732km/h

      Jetzt ändert sich bei den Messungen nur die Zeit, also kann man die Transformation der Strecke und der Zeiteinheit als Konstante anlegen
      Strecke 0,0001x87(H0)=0,0087
      Zeit (1000(s)x60(min)x60(h))=3600000
      die Konstante wäre 0,0087x3600000=31320
      31320/485=64,58km/h
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von tschoeatsch ()

    • Hallo tschoeatsch,

      ich werd irre, irgendwie passt es hinten und vorne nicht! Ich hab jetzt 789ms und angezeigt wird mir 56km/h aber es sieht nicht wirklich aus wie
      knapp 60Km! Nun ist aber auch möglich, dass, wenn man so direkt davor sitzt, man einen falschen Eindruck erhält. Ich kann mich des Eindrucks nicht verwehren, dass an der Formel was nicht passt (Berechnungsmäßig)! Ich hab aber bis jetzt noch keine Formel für Spur N außer der, die ich angegeben habe: Berechnungsformel = V = L * M * 3600 / t / 1000

      '- V = berechnete Geschwindigkeit
      '- L = Abstand Sensoren
      '- M = Maßstab (H0=87 oder N=160)
      '- t = Gemessene Zeit in MS

      Neue Messung:
      Wenn ich die Anzeige auf dem Display nehme, dann habe ich jetzt 7 Km/h und 5665 ms. Die Umrechnung wäre bei meiner Messtrecke von 10 cm also folgende: V = 100mm / 5665 ms *1000, in diesem Fall also 17,6 Km/h

      Gruß
      Klaus

      PS: ich brauche nicht mehr ins Krankenhaus zurück! a_22_9ac28a82 a_22_9ac28a82 a_22_9ac28a82 a_22_9ac28a82 a_22_9ac28a82 a_22_9ac28a82 a_22_9ac28a82

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von veryoldman ()

    • Die Formel ist doch die gleiche, stelle mal um V=L/1000*M/t*3600. Wenn du jetzt L in Meter nimmst, sind L/1000 die km. Wenn du die Zeit in Sekunden nimmst und im Zähler des Bruches verwendest, dann rechnest du die so in Stunden um /t*3600. 1Sekunde/3600 ergibt die Stunden, da das in Zähler steht eben verdreht, weißt schon, oder?

      veryoldman schrieb:

      '- t = Gemessene Zeit in MS
      das passt nicht zur Formel. t=gemessene Zeit in Sekunden.

      Bei H0 wären 789ms eine Geschwindigkeit von 39,7km/h
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Naja, dann schreib doch die richtige Berechnung in dein Programm rein. Die Formel, die jetzt drin ausgerechnet wird, ist falsch.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------