Einfacher
GPS-Decoder auf Arduino-Basis
7. April 2016
Mit der
Decodierung und Displaydarstellung von GPS-Navigationsdaten, so wie sie
z.B. von kleinen Empfangsmoduln bereitgestellt werden, hatte ich
mich auch früher schon mehrfach [1],[2] beschäftigt. Nachdem
einige Jahre inzwischen vergangen sind und sich durch mittlerweile neu
herausgekommene Bauteile
auch weitere interessante Möglichkeiten ergeben haben, lag es
nahe, sich mit
diesem Thema erneut zu beschäftigen.
Bestandteil einer kompletten Decodereinheit sind neben dem eigentlichen
GPS-Empfangsmodul eine
Mikrocontrollereinheit zur Signalaufbereitung und ein Display zur
Datenausgabe ( Abb.1 ).
Abb.1
Gesamtansicht einer GPS-Decodereinheit
( Musteraufbau )
Geeignete
GPS-Empfängerbausteine werden von verschiedensten
Firmen angeboten und können preiswert z.B. auch über die
bekannten Auktionsplatformen bezogen werden.
Üblicherweise basieren sie auf der Verwendung von
Chip-Bausätzen nur ganz weniger Hersteller, so dass sich ihre
technischen Parameter in der Regel auch nur wenig voneinander
unterscheiden.
Somit kann man an dieser Stelle durchaus auch zu preiswerten Produkten
greifen, wobei man allerdings darauf achten sollte, dass sie dem
aktuellen technologischen Stand entsprechen.
Typische Betriebsparameter sind dabei Versorgungsspannungen im Bereich
von etwa 3-5V und einem Strombedarf von ca. 25mA.
In der Regel erfolgt der Empfang von GPS-Navigationssatelliten
über kleine
integrierte Patchantennen. Nach Weiterverarbeitung der Signale in den
GPS-Empfängerbausteinen erfolgt die Bereitstellung der
Ausgangsdaten üblicherweise im sog. NMEA-Protokollformat über
einen seriellen Datenausgang mit
TTL-Pegel.
Die einzelnen Navigationsdaten
erscheinen dabei als durch Kommata getrennte Folgen von ASCII-Zeichen
mit Abschluss durch eine Prüfsumme. Besonders zu beachten sind
an dieser Stelle die Protokolltypen
"RMC"
und "GGA", nachdem zu ihrem Datenumfang u.a. auch
geographische Positionsdaten (
Werte vom jeweiligen Breiten- und Längengraden ) gehören.
Während RMC-Protokolle dabei zusätzlich auch noch Daten
von Bewegungsgeschwindigkeit und -richtung enthalten, zeichnet sich
"GGA" besonders auch durch die hierbei bereitgestellten Höhendaten
aus.
Standard-Datenrate ist jeweils 9600bps.
Alle Moduln besitzen darüberhinaus auch noch einen seriellen
Dateneingang. Bei Bedarf lassen sich hierüber Änderungen der
Konfigurationseinstellungen vornehmen. In den meisten Fällen
dürfte es allerdings ausreichend sein, sich
mit den im Lieferzustand ( defaultmäßig ) bereitgestellten
Einstellungen zu
begnügen. Zur Anschaltung von GPS-Moduln werden dann lediglich
drei
Verbindungsleitungen ( Masse, Versorgungsspannung und für den
Moduln ausgehenden
Daten ) benötigt.
Als Mikrocontrollerbaustein habe ich die ARDUINO "Pro
Mini's" in der
3.3V-Version verwendet. Sie nutzen den gleichen
Prozesssorbaustein ( ATMEL
328P ), wie wir ihn auch schon von den sehr weit verbreiteten Typen
"UNO" und "NANO" kennen. Mehr zu den "Pro
Minis" siehe auch weiter unten im Abschnitt "Programmierung".
Aus fernöstlichen Quellen gibt es diese Bausteine schon für
wenige Euros. Das Gleiche gilt auch für die 0.96"-OLED-Displays,
so wie sie von mir für die vorliegende Anwendung verwendet
wurden. Besonders einfach einsetzbar sind sie in der über
nur vier Pins anschliessbaren Version mit
I2C-Schnittstelle und Treiber "SSD1306". Ihr
Versorgungsspannungsbereich beträgt 3-5V.
Unter Verwendung einer frei verfügbaren Library erlauben sie eine
m.E. sehr ansprechende Zeichendarstellung. Die verwendeten
Displayvarianten zeichnen sich ausserdem noch dadurch aus, dass sich in
ihnen oberen Bereich eine gelbe und darunter eine hellblaue
Zeichendarstellung ergibt, wobei diese Festlegung m.W. vom Anwender
nicht verändert werden kann.
Abb.2 GPS-Decodereinheit
Schaltbild ( Anklicken für Grossdarstellung )
Abb.2 zeigt das
Schaltbild der realisierten Decodereinheit. Ihr Gesamtestrombedarf liegt bei
knapp 50mA. Dieser Wert setzt sich zusammen aus etwa 15mA für den
ARDUINO-Baustein, 8mA für das OLED-Display und 25mA für das
GPS-Modul.
Die vom GPS-Baustein mit
TTL-Pegelwerten bereitgestellten NMEA-Datenprotokolle gelangen an den
seriellen Eingang "RXI" des Boards ARDUINO "Pro Mini". Dabei muss die
Brücke "JP1" für die Zeit des Hochladens von
Ausführungsprogrammen allerdings jeweils geöffnet sein.
Die Funktionen der Schalter "S1" bis "S4" und des
Tasters "Ta1" sind dem Schaltbild zu entnehmen. Ansonsten sind mit der
gewählten Anordnung wenige Besonderheiten verbunden. Zu
erwähnen ist aber dennoch die Nutzung des Analogeingangs "#A7".
Hier wird die mithilfe einer 1:1-Widerstandskombination
heruntergeteilte
Gesamtversorgungsspannung zugeführt. Nach Betätigung der
Taste
"Ta1" oder des Schalters "S1" ist hierüber eine
Verarbeitung
und Anzeige der Spannungswerte angeschlossener Versorgungsquellen
möglich. Nachdem der "Pro Mini" an
seinem RAW-Eingang grundsätzlich auch Spannungswerte bis 12V
zulässt, die gewählte Anordnung aber nur für
Versorgungsspannungen bis etwa 6.6V geeignet ist, müsste in
Fällen einer gewünschten Versorgung mit höheren
Spannungswerten sowohl der Widerstandsteiler, als auch das
Ausführungsprogramm entsprechend geändert werden.
Abb.3a-d
Die Abb.3a-3d zeigen
die
unterschiedlichen Betriebszustände. Nach dem Einschalten und einer
kurzen Begrüssungsmessage erscheint eine Anzeige nach Abb.3a.
Schon ein minimaler GPS-Satellitenempfang bewirkt dabei eine
Zeitdarstellung. Werden gültige GPS-Daten empfangen ( GPS-FIX ),
so wechselt die Anzeige selbständig in eine Darstellung
entsprechend Abb.3b ( "S2" offen ) bzw. Abb.3c ( "S2" geschlossen ).
Durch Betätigung der "Taste "Ta1" oder des Schalters "S1" kann
danach auch auf eine Anzeige gem. Abb.3d umgeschaltet werden. Der
Statuswert "1" signalisiert dabei gültigen GPS-Datenempfang
und anstelle der Uhrzeit erfolgt eine Anzeige der Versorgungsspannung.
Die Schalter "S3" und "S4" ermöglichen eine Zeitanpassung an
mitteleuropäische Verhältnisse. Gegenüber der Weltzeit
"GMT" bewirken "S3" eine
Zeitverschiebung um eine ( MEZ ) und "S4" eine solche um zwei Stunden
( MESZ ).
Programmierung von Boards des Typs
"Pro Mini"
Der von mir favorisierte Arduino-Baustein
ist der schon erwähnte kleine "Pro Mini", den es in einer 3,3V und
einer 5V-Version gibt. Da
hierbei der gleiche Prozessor ( ATMEGA328P ) zum Einsatz kommt,
so wie wir ihn z.B. auch von den Boards "UNO" und "NANO" kennen, gibt
es
zwischen ihnen hinsichtlich lauffähiger Software auch nur
wenige Unterschiede. Wichtig ist allerdings zu wissen, dass die
3.3V-Versionen der "Pro Min's" im Gegensatz zur ansonsten
bei den meisten Boards einheitlich benutzten Taktfrequenz von 16 MHz
mit nur einem 8-MHz-Takt
arbeiten. Das hat zur Folge, dass im entsprechenden Menü der noch zu erwähnenden
ARDUINO-IDE auch beide Versionen separat aufgeführt sind und hier
eine entsprechende Anwahl zu erfolgen hat.
Das Hochladen von
ARDUINO-Programmen ( auch "Sketches" genannt ) in Richtung der
entsprechenden Boards erfolgt in der Regel durch Nutzung des (
kostenlos aus dem INTERNET herunterladbaren )
ARDUINO-Betriebsprogrammes, der sog. "IDE". PC und Prozessorboard
werden dazu über ein USB-Kabel miteinander verbunden. Nun besitzen
die"Pro Mini's" aber keine
eigene
USB-Schnittstelle und sind zum Hochladens von
Programmen somit auf Fremdhilfe angewiesen. Was im ersten Moment als
Nachteil
erscheint, kann sich in der Praxis aber auch als Vorteil
erweisen. Der Grund dafür ist, dass wir auf den entsprechenden
anderen ARDUINO Boards zunehmend auch "gefakte" USB-Chips aus
fernöstlicher Produktion finden und
diese ggf. nur nach erheblichen Klimmzügen oder überhaupt
nicht zur Zusammenarbeit mit ihrer Gegenseite zu bewegen sind. Probleme
mit Treiberprogrammen sind dabei an der Tagesordnung, so dass es bei
Boards mit
eigener USB-Schnittstelle sogar dazu führen kann, dass diese
völlig unbrauchbar werden. Nachdem wir zur Programmierung unserer
"Pro Mini's" aber immer einen gleichen separaten USB-Adapter mit
bekannter einwandfreier
Funktion verwenden können, gehen wir einer möglichen
USB-Chip-Problematik damit weitgehend aus dem Wege.
Abb.4 Zusammenschaltung von ARDUINO"Pro Mini" und ELV
"UM2102" zur Programmierung
( zur Grossdarstellung anklicken )
Obwohl
an dieser Stelle natürlich auch
andere Adaptertypen einsetzbar sind, bevorzuge ich als externen
USB-Adapter den
für weniger als 6 Euro erhältlichen "UM2102" von ELV [5].
Dabei sind
von der Seite dieser Firma auch die benötigten Treiber ( incl.
Versionen bis zu Windows 10 ) verfügbar. Abb.4 zeigt nun die
Zusammenschaltung des USB-Adapters mit den "Pro Mini's", so wie sie
zum Hochladen von Programmen vorzunehmen ist. Dabei ist auch
die Umschaltmöglichkeit für die beiden unterschiedlichen
Betriebsspannungsversionen
erkennbar.
Besonders erwähnt sei dabei auch
noch die Verbindung zwischen dem DTR-Ausgang des
USB-Adapters und dem mit "GRN" bezeichneten Pin des Arduino-Boards.
Automatisch wird hierüber bei
jedem
Programmstart ein notwendiger Prozessor-Reset
ausgelöst.
An dieser Stelle sei auch noch einmal
auf die Notwendigkeit zum Auftrennen der
Brücke "JP1" ( siehe Abb.2 ) während der
Hochladevorgänge hingewiesen.
Nachbau
Hier kann das
zugehörige ARDUINO-Sketch heruntergeladen werden
Linkliste
E-Mail
contact via: