Projektvorstellung: Zeitmessung mit Mikrocontroller, V.R.S. und L&T

  • Hallo Community,

    seit L&T 1.80 (veröffentlicht am 07.10.2015) kann man im Einstellungsmenü ein neues Feature finden, bei dem sich aktuell möglicherweise manche von euch fragen, wozu es gut sein soll:

    Zitat von Joe GO!!!

    UART Unterstützung für eigenprogrammierte µController zur Zeitmessung (für John)

    Daher möchte ich euch mein Projekt vorstellen, welches mit der neuen Schnittstelle funktioniert. Meine Zeitmessungs-Hardware basiert auf den Sensoren und dem Gehäuse des Carrera Virtureal Racing System (kurz V.R.S.) und innerlich auf einem Arduino Nano. Die Funktionen sind sehr simpel gehalten: Es gibt jeweils eine Zieldurchfahrtserfassung für 2 Spuren und eine vereinfachte Ampel, die nur ein rotes und ein grünes Licht ausweist. Die Kommunikation mit dem PC und die Energieversorgung wurden über die USB-Schnittstelle realisiert, sodass nur ein einzelnes Kabel nötig ist. Um die Konstruktion simpel und einfach zu halten und das Gehäuse so wenig wie möglich (letztendlich überhaupt nicht) verändern zu müssen, habe ich auf weitere Funktionen verzichtet. Prinzipiell wäre es aber mit der neuen Schnittstelle möglich, alle Funktionen zu nutzen, die L&T bietet. Dabei ist es egal, welche Hardware man verwendet.

    So sieht meine fertige Hardware aus:

    (zum Vergrößern klicken)

    Ich bin grob wie folgt vorgegangen: (Wer sich nicht dafür interessiert kann diesen Absatz überspringen.)
    Zuerst habe ich die V.R.S.-Schiene auseinandergenommen und alle Kabel, die zu den Slots gingen, von der Platine abgelötet. Dadurch erhält man 4 Leiter für den Bahnstrom, welche in diesem Projekt keine Verwendung finden, sowie 3 Leiter von den Durchfahrts-Sensoren. Das Ergebnis kann man auf Bild 2 sehen.
    Dann habe ich eine Lochraster-Platine entsprechend den Maßen des verbliebenen V.R.S.-Gehäuses zugeschnitten und Löcher für die Schrauben gebohrt. Jeder hat mit Sicherheit schon Platinen mit besserem Aussehen gesehen, aber das war mir aufgrund von fehlendem Werkzeug nicht möglich und auch nicht mein primäres Ziel. Die neue Platine muss etwas keiner sein als die originale, weil die originale Einbuchtungen für den Anschluss eines Netzteils und von Reglern vorsieht. Daran hatte ich jedoch nicht genug Interesse, um diesen Aufwand in Kauf zu nehmen. Auf den verlinkten Bildern 3 und 4 kann man die Löt- und die Bestückungsseite der Platine sehen.
    Die Schaltung ist denkbar simpel: Masse, D2 und D3 (die beiden Interrupt-fähigen Pins) sind mit den Schraubterminals verbunden und die LEDs wurden mit Masse und jeweils einem PWM-fähigen Pin verbunden. Es ist nicht einmal ein Vorwiederstand nötig, weil die verwendeten LEDs bereits passende Vorwiderstände für 5V im Gehäuse besitzen.
    Die LEDs habe ich mit Abstandhaltern ausgestattet, damit diese bis an die schon original vorhandenen Löcher heranreichen und man nicht so offensichtlich ins Innere sehen kann. Auf die Buchsenleisten ist später der Mikrocontroller aufgesteckt. An die Schraubterminals sind später die Kabel der Sensoren angeschlossen. Auf Bild 5 ist das bereits geschehen. Die Lüsterklemmen waren zur Isolation des Bahnstroms vorgesehen, wurden aber später durch PVC-Klebeband ersetzt, weil sie geklappert hatten.
    Dann war es an der Zeit, die Hardware zu testen. Dazu bin ich zuerst wenige Runden gefahren und habe mehr oder wenige kleine Anpassungen an der Software vorgenommen. Als ich der Meinung war, dass alles in Ordnung sei, habe ich einen Testlauf über 5000 Runden durchgeführt. Dabei hat ein mechanischer Rundenzähler als Referenz hergehalten, den ich alle paar hundert Runden kontrolliert habe. Das Ergebnis lag bei keiner einzigen Fehlmessung, also weder False Negatives noch False Positives.
    Zuletzt habe ich die Hardware zusammengebaut. Wie das Ergebnis aussieht kann man weiter oben auf dem ersten Bild sehen.

    Die vom Mikrocontroller verwendete Software kann unter diesem Beitrag heruntergeladen werden. Bei einer Weiterverwendung ist die Lizenz (GPLv3) zu beachten.

    An dieser Stelle möchte ich noch einmal Joe danken, der aufgrund meiner Bitte die Unterstützung für UART in L&T implementiert hat. Ohne diese Hilfsbereitschaft wäre es vermutlich nie zur Realisierung dieses Projektes gekommen.

  • Mich würde eure Meinung interessieren. Was gefällt euch? Was hättet ihr anders gemacht? Könntet ihr euch diese Hardware als Teil eurer Bahn vorstellen?

    --John

  • Hallo Zusammen,

    erstmal ein großes Lob an euch. Die Arduino Lösung ist genau das was ich im
    Moment suche, da ich mein altes Notebook mit LPT Port mittlerweile entsorgt
    habe.

    Ich hätte allerdings noch ein paar Fragen:

    Zuerst mal auf PC Seite:

    Im L+T steht, dass ich die zms_UART.ini an meine Bedürfnisse anpassen soll.
    Leider ist in meiner L+T Version keine zms_UART.ini vorhanden und ich habe auch
    nirgends ein Hinweis auf den Syntax dieser Datei finden können. Wie muss ich
    denn meine Befehle in der Datei definieren?

    Nun auf Arduino Seite:

    Wieso wird den bei der Übermittlung des Zeitstempels der
    jeweiligen Spurt zweimal ein alt/neu vergleich durchgeführt? Hätte nicht ein:

    if (x > xp) {
    TransmitTc("S1",x);
    x = xp;
    }

    genügt?

    Vielen Dank nochmal, sobald ich meine UART.ini zusammengebastelt habe werde ich von meinen Erfolgen/Misserfolgen hier berichten.

    Gruß Andreas

  • Hi Andreas,

    im Release scheint diese Datei zu fehlen. Ich habe die Standard-Version angehangen. Der Syntax ist mit Kommentaren in der Datei beschrieben.

    Diese Überprüfung ist nicht doppelt, weil zuerst x mit xp verglichen und danach die Variable xs ausgewertet wird. Die Variable xs sorgt somit dafür, dass die Runde zweimal übertragen wird, für den Fall das ein Fehler auftritt. Beim erneuten anschauen fällt mir auf, dass das nicht korrekt gelöst wurde. Jeder andere Befehl sollte ebenfalls doppelt übertragen werden, was aber nicht passiert. Ich habe eine neue Version (JOHN-160113 JOHN-160113.zip) erstellt, in der das verbessert wurde. Man könnte dieses doppelte Senden auch entfernen, aber Fehler können auftreten. In der neuen Version kann man die Konstante TRANSMITCOUNT definieren, die die Anzahl der Übertragungen für alle Befehle definiert.

    Kein Problem. Ich bin an den Berichten interessiert.

Jetzt mitmachen!

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