Arduino Mikrocontroller Tutorials - Module

GPS Sensor (Bsp. NEO-6M)

GPS Sensor NEO-6M

Der NE0-6M der Fa. u-blox ist ein Modul zum empfangen von GPS Positionsdaten. Im Netz wird der Chip meist als Breakout Board angeboten. Diese Boards muss man nur noch mit Strom versorgen und schon wird über eine UART Schnittstelle die Positionsdaten übertragen. Damit sinnvolle und verwertbare Daten übertragen werden dauert es nach der Inbetriebnahme z.T. mehrere Minuten. Bei der Erstinbetriebnahme kann dies sogar mehr als 10 Minuten dauern. Neustarts in der gleichen geografischen Region sind dann meist wesentlich schneller. Wie auch immer: Sobald der NEO-6M seine Position bestimmen hat blinkt auf dem Breakout Board eine LED im Sekundentakt.

Pinbelegung

GND Spannungsversorgung -
VCC Spannungsversorgung +5V
Rx Recieve Eingang der UART Schnittstelle
Tx Transmit Ausgang der UART Schnittstelle

Programmcode

Komplette Übertragung des GPS-Sensors lesen und ausgeben

Mit diesem einfachen Programm wir die UART Schnittstelle des Sensors ständig abgefragt. Sobald Daten im EIngangspuffer sind, werden diese auf dem seriellen Monitor ausgegeben.

Übertragen werden sogenannte NMEA Sentences. Ein festgelegtes Format für GPS Informationen der National Marine Electronics Association. Alle Sentences beginnen mit "$GP" und enden mit einem Zeilenumbruch "\n". Mit dem Suchbegriff "NMEA Sentences" könnt ihr im Netz die jeweiligen Bedeutungen herausfinden.

#include SoftwareSerial gps(7,6); // RX, TX void setup() { Serial.begin(115200); gps.begin(9600); } void loop() { while (gps.available() > 0) { char c = gps.read(); Serial.write(c); } }

Spezifische Information aus den GPS Daten extrahieren

Mit dem folgenden Programm wird versucht die Flut an NMEA Daten zu triggern. Als Beispiel dient der Sentence "$GPGLL" welcher den Längengrad, der Breitengrad und die UTC-Uhrzeit enthält.

Zunächst werden mit gps.readStringUntil('\n') alle Zeilen einzeln gelesen und gespeichert. Beginnt der NMEA Sentence mit $GPGLL werden die benötigten Informationen mit gpsInfo.substring() ausgeschnitten. Möchte man die Daten als Zahlen speichern, müssten die Strings anschließend noch mit toInt() umgewandelt werden.

#include SoftwareSerial gps(7, 6); // Rx, Tx void setup() { Serial.begin(115200); gps.begin(9600); } void loop() { String gpsInfo; // String Variable zum speichern der nacheinander empfangenen NMEA Sentences if (gps.available() > 0) { gpsInfo = gps.readStringUntil('\n'); // gespeichert wird jeweils ein NMEA Senstence (Trigger = Zeilenumbruch) // Serial.println(gpsInfo); // Kommentierung entfernen um alle empfangenen NMEA Sentences ausgegeben } if (gpsInfo.startsWith("$GPGLL")) { // in diesem NMEA Sentence ist der Längen- , Breitengrad und die UTC Uhrzeit enthalten // Serial.println(gpsInfo); // Kommentierung entfernen um den vollständigen NMEA Sentence auszugeben String breitengrad = gpsInfo.substring(7, 17); String laengengrad = gpsInfo.substring(21, 31); String uhrzeit = gpsInfo.substring(34, 40); Serial.println("Breitengrad:\t" + breitengrad + " Nord"); Serial.println("Längengrad:\t" + laengengrad + " Ost"); Serial.println("UTC Uhrzeit:\t" + uhrzeit + " Uhr"); Serial.println(); } }