Arduino Tripmeter mit GPS

Mancher wird sich denken – was soll denn das nun schon wieder. Er hat doch gerade einen Roadbookhalter mit Tripmeter gebaut – und das war schon die zweite Version.

Die ist ja auch ganz schön – aber die LED Anzeige läßt sich bei voller Sonneneinstrahlung trotz extra heller Anzeigen und Kontrastfilterscheibe nur schwer ablesen – und die manuelle Verstellung des Roadbooks ist auch suboptimal – man muß dafür eine Hand vom Lenker nehmen. Also für die Tuareg Rally nächstes Jahr nicht optimal geeigent. Und da mir günstig ein gebrauchter, elektrisch angetriebener Roadbookhalter zugelaufen ist, gibt es jetzt als Zubehör dazu die dritte Version eines Tripmeters.

Der existiert jetzt schonmal als Prototyp – mit Kabelbindern auf Pappe befestigt:

DSC_3394

Links der Prozessor Arduino nano auf einem Breakout-Board – daran kann man die bunten Kabelchen mit kleinen Steckern direkt anstecken. Oben das Display – 2×16 Zeichen inverses LCD – das gibt weiße Schrift auf blauem Hintergrund. Bei voller Sonneneinstrahlung nimmt zwar der Kontrast ab, es bleibt aber weiter lesbar. Darunter – und auf dem Foto nicht sichtbar – ein I2C nach Parallel Interface für das Display.

Unten mittig der GPS-Empfänger, der hier schon vorgestellt wurde, ganz rechts unten am Rand die keramische GPSAntenne. Es ist schon erstaunlich, wie weit das alles miniaturisiert ist.

Rechts einige Tasten zur Bedienung, oben sind noch eine Leuchtdiode (Zeigt Sensoratktivität an) und ein Poti festgestrapst. Dieses wird noch durch einen Temperatursensor TMP36 ersetzt – der ist aber noch nicht da.

Und wozu hat der Tripmeter GPS? Die Streckenmessung erfolgt doch über die Ermittlung der Umdrehungen des Vorderrades?

Völlig richtig – und dafür kommt weiterhin der magnetoresistive Sensor zum Einsatz, wie er auch schon beim ersten Prototypen verwendet wurde. Aber der Sensor und das Kabel zum Sensor sind hochbelastete Teile, da sie an ungefederten Fahrzeugteilen sitzen und ständig mechanisch beansprucht werden. Das ist wohl die mit Abstand häufigste Störungsursache bei Tripmetern – und daher haben bessere kommerzielle Ausführungen ein GPS Backup eingebaut, so daß man zumindest bei guter Empfangslage weiter navigieren kann. Unter dichtem Blattwerk, in Häuserschluchten oder schmalen Tälern läßt dann die Meßgenauigkeit nach.

Und was die kommerziellen Hersteller können, kann ich schon lange 🙂 . Das ist heutzutage ja auch einfach, weil man z.B. einen GPS-Empfänger nicht von Grund auf entwickeln muß – sondern für billiges Geld ein fertiges Modul kaufen kann, daß einem im Klartext interessante Informationen die Ortskoordinaten, Geschwindigkeit, Höhe, Datum, Uhrzeit etc. serviert.

Und das zeigt das Tripmeter normalerweise an:

DSC_3395

Oben links die aktuelle Geschwindigkeit wie sie über GPS ermittelt wird. Das dient auch gleich als Anzeige ob GPS-Empfang besteht, denn wenn der länger als 2 Sekunden ausfällt (z.B. im Tunnel) stehen da nur drei Sterne ***.

Oben rechts die Temperatur – ich dachte mir wenn es nächstes Jahr in die Wüste geht will man vielleicht wissen, wie warm es ist. Und eine Temperaturmessung noch mit einzubauen ist nun eine der leichtesten Übungen…

Unten links wird die Teilstrecke angezeigt. Diese kann durch einfachen Druck auf die Taste „Null“ wieder auf 0 gesetzt werden.

Unten rechts wird die Gesamtstrecke angezeigt. Da es immer Unterschiede zwischen der eigenen Streckenmessung und der im Roadbook gibt, kann man die Gesamtstrecke mit den Tasten „Plus“ und „Minus“ jeweils um die im Menu „Delta“ einstellbare Strecke korrigieren.

Jetzt wisen wir auch schon, daß es zur Bedienung am Lenker drei Tasten gibt:

  • „Null“ – setzt den Teilstreckenzähler zurück
  • „Plus“ – erhöht den Gesamtstreckenzähler
  • „Minus“ – verringert den Gesamtstreckenzähler

Für weitergehende Einstellungen ruft man das Menu auf, indem man „Plus“ und „Minus“ gleichzeitig drückt. Man gelangt dann in die Menuauswahl, wo die Tasten folgende Bedeutung haben:

  • „Null“ – Auswahl bestätigen oder weiterschalten
  • „Plus“ – Wert in positive Richtung ändern
  • „Minus“ – Wert in negative Richtung ändern.

Ausgegend vom Normalmodus gibt es folgende Menupunkte, aus denen man mit „Plus“ und „Minus“ auswählt und die Auswahl dann mit „Null“ bestätigt:

  • Normalmodus (Anzeige wie oben)
  • Reset Total (Gesamt- und Teilstreckenzähler auf 0 setzten)
  • GPS Info (Anzeige von GPS Informationen)
  • Select Source (Auswahl ob die Streckenmessung vom Radsensor oder vom GPS erfolgen soll)
  • Automatic Cal (Automatische Kalibration des Radumfanges)
  • Delta (Eingabe der Strecke um die  die Gesamtstrecke bei Betätigung von „Plus“ oder „Minus“ korrigiert werden soll)
  • WheelSize (Eingabe des Radumfanges)
  • Destination (Eingabe Zielkoordinaten)
  • Info (Anzeige allgemeiner Informationen)

Reset Total: Gesamt- und Teilstreckenzähler auf 0 setzten

DSC_3397

Voreingestellt ist YES, so daß man den Gesatmstreckenzähler durch gleichzeitiges betätigen von „Plus“ und „Minus“ und anschließendes zweimaliges Drücken von „Null“ schnell zurücksetzten kann, auch ohne aufs Display zu schauen. Falls man versehentlich in das Menu gerutscht ist, einmal „Plus“ oder „Minus“ betätigen um das YES durch NO zu erstzen und „Null“ drücken – man landet dann wieder im Normalmodus ohne die Streckenzähler zu löschen.

GPS Info (Anzeige von GPS Informationen)

DSC_3398

Hier werden insgesamt 4 Seiten GPS-Informationen dargestellt, die mit der Taste „Null“ weitergeschaltet werden. Nach der vierten Seite landet man wieder im Normalmodus. Falls leere Masken angezeigt werden, so liegen keine aktuellen GPS Daten vor – der Empfang ist gestört. Die angezeigten Daten sind höchstens 5 Sekunden alt.

DSC_3399

Aktuelle Poition, LAT = Breitengrad (positive Werte Nord, negative Werte Süd), LON = Längengrad (positive Werte Ost, negative Werte West), Angabe in Dezimalgrad.

DSC_3400

Alt: Aktuelle Höhe – die ist, da das GPS auf Verwendung eins 2-D Modells eingestellt ist eher ungenau. Mit einigen 10m Schwankung muß man da immer rechnen.
SAT: Anzahl der für die Positionsbestimmung verwendeten Satelliten – umso mehr, umso genauer ist tendenziell die Position.
HDOP: Horizontal Dilution of Precision – ein Maß für die Genauigkeit der Position. Umso kleiner der HDOP Wert, desto besser. Anzeige in hundertstel – zum Vergleich mit dem HDOP-Wert anderer Empfänger durch 100 teilen.

DSC_3401

Datum und Uhrzeit, so wie sie vom Satelliten empfangen werden, die Uhrzeit ist also UTC. Es erfolgt keine Umrechnung auf Ortszeit oder Sommer/Winterzeit.

DSC_3402

Entfernung und Himmelsrichtung zu Zielkoordinaten, die man im Menupunkt „Destination“ eingeben kann. Ich hab da meine Heimatkoordianten drin – und man seht, ich hab die Fotos zu Hause gemacht…

Select Source (Auswahl ob die Streckenmessung vom Radsensor oder vom GPS erfolgen soll)

DSC_3403

DSC_3404

Auswahl zwischen Radsensor (Wheel) und GPS als Quelle für die Streckenzählung. Mit „Plus“ oder „Minus“ Taste zwischen Wheel und GPS hin- und her schalten und mit Taste „Null“ auswählen.

Automatic Cal (Automatische Kalibration des Radumfanges)

DSC_3405

Default Option ist „Abort“ – falls man versehentlich in das Menu gerutscht ist kommt man so direkt wieder in den Normalmodus durch einmaliges Drücken von „Null“. Also einnal „Plus“ oder „Minus“ betätigen um Start zu wählen und mit Taste „Null“ auswählen.

DSC_3406

Es erfolgt die Auswahl der Meßstrecke – entweder 1km oder 10km – 10km ergeben genauere Werte. Mit „Plus“ oder „Minus“ die Strecke einstellen und mit Taste „Null“ auswählen. Die Meßstrecke sollte möglichst kurvenarm sein und guten GPS Empfang bieten – also nicht gerade Innenstadt, dichter Wald oder gar Tunnel.

DSC_3408

Es wird jetzt auf ein gültiges GPS Signal gewartet – weiter ist da nichts zu tun. Bei einwandfreiem Empfang schaltet es nach wenigen Sekunden weiter zu:

DSC_3409

Jetzt heißt es losfahren – es wird jeweils die noch zurück zu legende Strecke angezeigt.

Wenn die Strecke komplett abgefahren ist wird der Radumfang berechnet und angezeigt. Den Wert kann man dann nur mit Taste „Null“ bestätigen und man landet dann wieder im Normalmodus.

Während die Kalibration läuft erfolgt keine Aktualisierung der Teil- und Gesamtstrecke! Die Kalibration also nicht während eine Rally durchführen – sondern davor.

Delta (Eingabe der Strecke um die  die Gesamtstrecke bei Betätigung von „Plus“ oder „Minus“ korrigiert werden soll)

DSC_3410

Hier erfolgt die Eingabe der Strecke um die die Gesamtstrcke durch betätigen von „Plus“ oder „Minus“ im Normalmodus korrigiert wird.

Der Cursor blinkt an erster Stelle, über „Plus“ wird der Wert erhöht, über „Minus“ verringert. Die Taste „Null“ schaltet zur nächsten Stelle weiter, der Cursor blinkt jetzt dort, die Stelle wird dann wieder mit „Plus“ bzw. „Minus“ verändert usw…

WheelSize (Eingabe des Radumfanges)

DSC_3411

Hier kann man den Radumfang manuell eingeben. Normalerweise wird man den über die Automatische Kalibration bestimmen – aber falls es einen systematischen Fehler zwischen eigener Streckenmessung und der im Roadbook geben sollte, so kann man den hier durch Veränderung des Radumfanges ausgleichen. Das funktioniert natürlich nur, wenn der Radsensor als Quelle für die Streckenmessung eingestellt ist. Wenn man die Strecke über GPS ermittelt, ist diese Einstellung wirkungslos.

Die Eingabe erfolgt wie bei „WheelSize“ über die Tasten „Plus“, „Minus“ und „Null“.

Destination (Eingabe Zielkoordinaten)

Hier werden die Zielkoordinaten eingegeben, die für die Kursberechnung auf der vierten Seite von „GPS-Info“ zu Grunde gelegt werden.

DSC_3412

Voreingestellt ist „Abort“, damit man nicht versehentlich in das Menu rutscht. Also einmal „Plus“ oder „Minus“ betätigen, bis Enter erscheint, dann mit Taste „Null“ auswählen.

Zuerst erfolgt die Eingabe des Breitengrades (positive Werte Nord, negative Werte Süd)

DSC_3413

und dann des Längengrades (positive Werte Ost, negative Werte West)

DSC_3414

Die Eingabe erfolgt wie bei „WheelSize“ über die Tasten „Plus“, „Minus“ und „Null“. Eingabe in Dezimalgrad.

Die Cursorposition zur Kennzeichnung der mit „Plus“ und „Minus“ zu ändernden Stellen ist nur bei positiven Werten mit zwei Vorkommastellen korrekt – sonst um bis zu eine Stelle verschoben. Um das zu korrigieren müßten diverse Fallunterscheidungen in der Software eingebaut werden – und das war mir zu aufwändig, vor allem da diese Funktion vermutlich so gut wie nie benutzt werden wird. Schließlich hat man zur Kusbestimmung noch ein richtiges Navigationsgerät am Lenker…

Info (Anzeige allgemeiner Informationen)

DSC_3415

Auswahl dieses Menupunktes durch Taste „Null“, es folgen dann zwei Seiten mit allgemeinen Informationen zum Gerät, Weiterschaltung mit Taste „Null“

Version:

DSC_3416

und Modellnummer unter der ich die Dokumentation gespeichert habe

DSC_3417

Zeit bis zum erten GPS-Fix

Das GPS-Modul benötigt zur Positionsbestimmung die Bahndaten der Satelliten. Diese empfängt es von den Satteliten selbst. Daher kann die erste Positionsbestimmung mehr als 15 Minuten bei gutem Empfang dauern. Die Bahndaten der nächsten 30 Tage werden vom GPS Modul gespeichert, so daß sich die Zeiten bis zur ersten Positionsbestimmung wenn das GPS Gerät nur wenige Tage ausgeschaltet war auf unter eine Minute verkürzen. Falls es auch in solchen Fällen lange dauert, ist vermutlich die Pufferbatterie auf der Leiterplatte des GPS-Modules leer…

Messgenauigkeit

Zum Test der Meßgenauigkeit wurden drei Teststrecken gefahren.

Es traten gegeneinander an:

  • GPS Gerät Garmin Montana
  • Odometer (der zweite Prototyp), auf das Garmin Montana kalibriert
  • der Tripmeter Prototyp.

Garmin          Odometer         Tripmeter
33,29km        33,18km            33,16km
65,83km        65,81km            65,52km
32,74km        32,63km            32,63km

Das finde ich erstaunlich gut übereinstimmende Ergebnisse. Der Tripmeter mißt tendenziell eine Kleinigkeit weniger – das ist auch zu erwarten, da die Streckenmessung darauf beruht im Abstand von jeweils einer Sekunde eine Postition zu bestimmen und den Abstand zur vorherigen Position als zurückgelegte Strecke zu verwenden. Das stimmt aber exakt nur bei Geradeausfahrt – bei Kurvenfahrt wird der gefahrene Kreisbogen auf diese Art und Weise durch Geradenstücke angenähert – und die daraus ermittelte Strecke ist immer geringfügig kürzer als die tatsächliche Strecke.

Der dadurch entstehende Fehler ist aber so klein, daß er für den Anwendungszweck hier vernachlässigbar ist.

Nächster Schritt ist dann, daß ganze wasserdicht in ein robustes Gehäus zu bauen und dafür einen Platz am kleinen nervösen Motorrad zu finden. Das geht aber erst nach der Skandinavientour los…

5 Gedanken zu „Arduino Tripmeter mit GPS“

  1. Hallo Christoph,
    zufällig bin ich auf deine höchst interessante Seite gestoßen.
    Warum?
    Ich bin gerade dabei mir ein Elektroauto auf Basis eines Renault R4 zu bauen.
    Bei den Recherchen dazu ist mir aufgefallen, dass Restreichweiten, auch wenn es nur Schätzungen sind, nur bei fertigen Autos gibt. Also habe ich darüber nachgedacht so etwas selbst zu realisieren.
    Ist aber nicht so einfach. (Wie fast immer)
    Die Idee mit den 2 Messpunkten und den Abstand dazwischen auszurechnen und auf zu addieren hatte ich auch schon, aber es scheitert an der Mathematik. Auf der Suche nach einer Lösung bin ich auf deinen Blog gestoßen.
    Da du alles sehr ausführlich dokumentiert hast würde ich dich bitten mir evtl den Sourcecode (fange gerade an mit dem Arduino zu arbeiten) und die Doku zu überlassen.
    Ich würde das Projekt gern nachbauen. Nur privat natürlich.
    Viele Grüße
    Christoph

  2. Hello,

    First of all let me tell you how impress I am with this project.
    I’m a rally biker myself and I’ve been wanting to do this exact same thing to use in orientation rallies.
    However, my electronics and programming skills are not as developed as yours which means I’m taking too much time defining the inputs and output for what I need and gathering the parts.
    I now have an arduino Mega, a GPS module, a I2C 4×20 LCD display, 2 I2C LED 4 digit 7seg displays and an SD card datalogger (as well as some switches, pushbuttons, etc.)
    My idea is simple to have a odometer which i can start, pause, increase and decrease and a race clock which i can set to the race time, start and stop.
    Your system is far more complex and includes a wheel sensor for better precision. Congratullations again!
    Can you explain a little better your design (I don’t speak german and google’s translation is no the most clear).
    Do you thing you can share any wiring diagram or the arduino source code so tha I can try to replicate your system?

    Thanks in advance for you time and keep up the good work.

    Kind regards,
    Artur

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.