GPS Logger

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche
GLogger Logo.png

von Martin 'Kaktus621' Matysiak

Wichtige Information

Mittlerweile gibt es diesen GPS-Logger in einer deutlich kleineren und verbesserten Version: GPS Logger Mini.

Einleitung

Der Sommer nähert sich und die Versuchung steigt, sich mal vom Arbeitstisch zu entfernen und etwas im Freien zu unternehmen. Wie schön wäre es, den Bekannten daheim oder den Freunden im Internet ganz leicht zu zeigen, wo man überall gewesen ist?

Dies war der Auslöser für mein erstes großes Projekt : Ein GPS-Logger!

Über ein GPS Modul empfängt das Gerät die aktuelle Position des Trägers und schreibt diese auf eine SD-Speicherkarte. Zu Hause angekommen kann man die aufgezeichneten Daten unter verschiedenen Gesichtspunkten analysieren, zum Beispiel die zurückgelegte Strecke (in Google Earth betrachtbar) oder die bewältigten Höhenmeter.

Der GPS-Logger besteht im Groben aus den folgenden 3 Komponenten:

  • Ein AVR Mikrocontroller (z. B. ATMega32)
  • Ein GPS Modul (z. B. Navilock NL507 TTL)
  • Eine SD Speicherkarte

Hardware

Planung

Neben den drei Hauptkomponenten gehören natürlich noch ein paar andere Teile zur Schaltung, damit die Kommunikation untereinander funktioniert. Im Folgenden der Schaltplan meines Aufbaus:

GLogger schalt v2.png

Versorgt wird es von einem LiPo-Handyakku, der im voll geladenen Zustand 4,1V liefert. Das Ganze wird auf einer einseitigen Platine (u.A. mit Verwendung von SMD Bauteilen) aufgebaut, hier das Board Layout:

GLogger board v2.png


Umsetzung

Und so sieht das Ganze fertig bestückt aus:

GLogger platine top.jpg GLogger platine bottom.jpg

Der TQFP AVR hat mir schon ein paar Schwierigkeiten beim Löten bereitet, aber es hat alles geklappt (konnte keine Kurzschlüsse feststellen), auch wenn es nicht ganz perfekt aussieht. Der verwendete MicroSD Kartenslot ist erhältlich bei CSD-Electronics unter der Artikelnummer SCHA2B0300.

Nachtrag 08.08.08: Der eingesetzte MosFET stellt sich als in diesem Fall unbrauchbar heraus, da er einen zu hohen Source-Drain Widerstand besitzt, was zur Folge hat, dass das GPS Modul mit seinen ca. 60mA Stromverbrauch zu wenig Spannung erhält (lediglich 2,4V anstatt der vollen 3,3V). Gelöst werden kann das Problem durch einen BSS138 als Ersatz, diesen gibt es allerdings nur im SOT23 Gehäuse, weshalb ich das Layout und den Schaltplan soeben aktualisiert habe. Ansonsten kann man den MosFET auch einfach entfernen, die Source-Drain-Strecke überbrücken und hat so immer volle 3,3V am GPS Modul (allerdings fehlt dann die Möglichkeit des Abschaltens bei schwachem Akku).


Außerdem habe ich das Gehäuse nun fertiggestellt, hier neue Fotos:

GLogger gehaeuse auf.jpg GLogger gehaeuse zu.jpg

Downloads

Software

AVR

Features

  • Aufnahme kann per Taster gestartet / gestoppt werden
  • Status LEDs zeigen den Status an
  • Speicherverbrauch : ca. 1,4 MB pro Stunde (bei GPS Fix und 7 NMEA Meldungen pro Sekunde), man kann natürlich 6 von den 7 Meldungen abschalten, wenn man NUR die Position haben möchte, dann sinkt der Speicherverbrauch auf ca. 200KB pro Stunde
  • Automatischer Stromsparmodus bei schwachem Akku (Aufnahme wird gestoppt, GPS Modul deaktiviert, der Mikrocontroller in einen Sleep-Modus versetzt)

Verwendete Libraries

Changelog

Version 1.02 (16.08.2008):

  • Akkuspannung wird über den ADC ausgelesen und bei einer Akkuspannung kleiner als ca. 3,6V die Aufnahme gestoppt, das GPS Modul abgeschaltet und der µC in einen Sleepmode versetzt (muss noch getestet werden)
  • Blinken während der Aufnahme überarbeitet (per Timer Interrupt)

Version 1.01 (17.07.2008):

  • GPS Library um den Befehl gps_get_nmea erweitert -> Wartet erst auf einen vollständigen NMEA Datensatz und schreibt diesen in den übergebenen Buffer
  • Die Ledcodes wurden überarbeitet. Überschreiben nicht mehr den ganzen Ports (wodurch z. B. Pull-Ups deaktiviert werden könnten) sondern verändern nur die jeweiligen Bits der Leuchtdioden

Version 1.00 (12.07.2008):

  • Erstes öffentliches Release
  • AVR empfängt im Aufzeichnungsmodus fortlaufend Zeichen vom GPS Modul und schreibt diese direkt auf die SD Karte

FAQ

Falls ihr Fragen oder Probleme habt, wendet euch per E-Mail an [mich] oder schreibt die Frage in die [Foren-Diskussion]. Wenn ihr damit einverstanden seid, werde ich die Fragen dann auch hier veröffentlichen.

Was hat es mit den LED-Codes auf sich?

eingesandt von Marcel

Es gibt drei Leuchtdioden, nämlich LED_STAT (Grün), LED_WARN (Gelb) und LED_BATT (Rot).

Erste Regel: Ein Blinken ist ein gutes Zeichen dafür, dass alles funktioniert.

Zweite Regel: Grün bedeutet alles OK, Gelb möchte vor etwas Warnen und Rot zeigt an, dass der Akku schwach ist.

  • Wenn alles in Ordnung ist, sollte nach dem Einschalten LED_WARN Blinken. Dies bedeutet, dass sich der Controller in der Hauptschleife befindet, aber keine Aufnahme läuft - Also kein Grund zur Sorge. Ist dies nicht der Fall (z. B. LED_WARN leuchtet dauerhaft), dann hat höchstwahrscheinlich die Initalisierung der SD Karte nicht funktioniert
  • Betätigt man nun die Aufnahmetaste, leuchtet zunächst LED_STAT als Feedback auf, nach ca. 2 Sekunden erlischen dann beide LED's und LED_STAT beginnt zu blinken, das bedeutet, dass die Aufnahme läuft
Wieso kann ich die Aufnahme nicht beenden ?

eingesandt von Marcel

Es kann der Fall auftreten, dass ihr die Aufnahme ganz normal starten konntet und LED_STAT auch blinkt, aber ein erneutet Druck auf die Taste bewirkt nichts.

Dies ist ein anzeichen dafür, dass der Controller beim Auslesen der NMEA Meldung stecken geblieben ist. Die LED blinkt weiter, da diese über einen Timer gesteuert wird, parallel zum Hauptprogramm.

Wieso bleibt der Controller denn einfach so stecken? Das hat entweder den Grund, dass das GPS-Modul überhaupt nicht angesteckt ist, oder aber, dass dieses keine NMEA-Konformen Meldungen ausgibt oder die falsche Baudrate eingestellt ist.

Download

Computer

Screenshot der NMEA Toolbox

Für den Computer habe ich derweilen eine Software entwickelt, die die aufgezeichneten GPS Daten verarbeiten kann und diese zum Beispiel in eine *.kml-Datei (Für Google Earth oder Google Maps) schreibt, oder aber Höhen- und Geschwindigkeitsdiagramme erstellen kann.

Die Funktion des Konvertierens zu *.kml funktioniert derzeit perfekt, die Optionen zum erstellen der Höhen- und Geschwindigkeitsdiagramme erzeugen bis jetzt lediglich Excel-Tabellen, wo man sich später leicht ein Diagramm anzeigen lassen kann, geplant ist allerdings, dass die "NMEA Toolbox" direkt Diagramme erstellt und anzeigt.

Die Toolbox wurde in Java entwickelt, der NetBeans-Projektordner in seiner aktuellen Version, sowie die kompilierte *.jar zum ausführen liegt hier als Download bereit.

Features

  • Eingabeformat : Jedes beliebige, solange NMEA-Datensätze der Dateiinhalt sind
  • Ausgabeformat :
    • Google Earth Pfad (*.kml)
    • Google Maps Pfad (*.kml)[1]
    • Geschwindigkeitsdiagramm (*.csv)[2]
    • Höhendiagramm (*.csv)[2]
    • GPX-Track (*.gpx)
  • Verschiedene konfigurierbare Filter, um Genauigkeitsverluste des GPS-Moduls möglichst zu entfernen

[1] : Das besondere am Maps Pfad ggü. Google Earth ist, dass hier die Anzahl der Pfadpunkte auf 350 reduziert wird, da Google Maps nicht mehr in einem Pfad akzeptiert, dadurch gibt es allerdings auch einen Verlust von Details in der Strecke

[2] : In Zukunft ist auch ein echtes Diagramm als Ausgabe geplant, dann als *.png oder ähnliches

Changelog

Version 1.3 (18.04.2010)

  • Verwendung von "Preferences" zum Sichern des zuletzt verwendeten Ordners (Implementiert von Jens Krause, vielen Dank!)

Version 1.2 (21.03.2009):

  • Javadoc angelegt
  • Kompletten Code umstrukturiert
    • Konvertierer in eigene Klassen gepackt
    • Konvertierer laufen nun als Threads
    • Insgesamt Code etwas aufgeräumt
  • Interface 'erfrischt'
    • Konvertier-Buttons durch Grafiken ersetzt (Text wird als Tooltip angezeigt)
    • Statusanzeige eingebaut
  • Weitere kleine Übersetzungen auf Deutsch
  • Im description-Tag der KML-Datei wird nun das Erstellungsdatum angezeigt
  • Einige Filter entfernt (werden nun autom. ausgeführt)
  • Google Maps Frage erscheint nur noch, wenn man eine KML Datei erstellen möchte und der Pfad mehr als 350 Punkte besitzt
  • Google Maps - Reduzieralgorithmus optimiert
  • GPX Format implementiert

Version 1.1 (03.01.2009):

  • Meldungen in Dialogfenstern auf Deutsch übersetzt
  • Fehler bei Google-Maps-Filter behoben

Version 1.0d (25.09.2008):

  • NMEA Toolbox auf Deutsch übersetzt

Version 1.00 (12.07.2008):

  • Erstes öffentliches Release

FAQ

Falls ihr Fragen oder Probleme habt, wendet euch per E-Mail an [mich] oder schreibt die Frage in die [Foren-Diskussion]. Wenn ihr damit einverstanden seid, werde ich die Fragen dann auch hier veröffentlichen.

Download

To-Do / Ideen für die Zukunft

  • Stromversorgung überdenken -> Geht es effizienter?
    • Ja, siehe aktuelle Schaltung
  • Das ganze auf einer richtigen Platine entwerfen, evtl. SMD-Bauteile verwenden, damit das Gerät noch kleiner wird
    • Erledigt; Layout siehe oben, 6 Drahtbrücken, Platinengröße 61mm x 72mm
  • Eine kompakte SMD-Platine entwerfen.
  • Erweiterung : Einfaches Navigationssystem -> Am Computer wird ein Pfad festgelegt und das Gerät leitet einen von Wegpunkt zu Wegpunkt, indem die Richtung über LEDs oder ein Display gezeigt wird
    • Idee wieder verworfen, Statusanzeige über Display wird aber möglicherweise noch realisiert
  • Besseren Algorithmus für das Reduzieren der Pfadpunkte in der NMEA Toolbox entwickeln (mit geringerem Genauigkeitsverlust)
    • Ist in Bearbeitung
  • NMEA-Toolbox : Export in das *.GPX-Format
    • Ist in Bearbeitung
  • Echte Diagramme in der NMEA Toolbox erstellen
    • Hierfür kann ich dir die JFreeChart Library empfehlen! (falls du die nicht schon kennst) Sehr einfach zu verwenden und macht sehr saubere Diagramme.
    • Folgt in der übernächsten Version!
  • Über das PC-Tool Parameter verändern (welche Werte sollen aufgezeichnet werden, welche Aufzeichnungsrate...)
    • Würde eine direkte Verbindung zw. PC und gLogger erfordern -> vorerst nicht geplant (außer jemand möchte sich da dran setzen? :))
  • Digitaleingänge hinzu und die zustände dieser im log hinzufügen
    • Folgt möglicherweise im Sommer (z. B. Temperaturüberwachung o.ä.)
  • Alle Anschlüsse zum AVR per Pads freilegen
  • Anschlussmöglichkeit für große Tastenmatrix (30-50 Tasten), um sehr schnell Geo-Attribute eingeben zu können. Die Idee ist, es für OpenStreetMap zu verwenden: dann kann man auf Knopfdruck "ab hier asphaltiert", "hier Foto gemacht", "hier steht eine Bank" usw. eingeben.
    • Eine gute Idee. An sich kann man die Tastatur an den freigelegten Port klemmen, man müsste dann nur noch die Software dementsprechend anpassen

Beispiele

Genauigkeitsvergleich Google Maps Pfad - Originalpfad (G. Earth)

Siehe Auch

Weblinks