zurück zur Übersicht...

GPS-Empfänger mit Arduino

ublox® NEO-6M-0-001 GPS-Empfänger-Modul mit Keramik-Antenne
Abb.: ublox® NEO-6M-0-001 GPS-Empfänger-Modul mit Keramik-Antenne

Technische Daten

Betriebsspannung: 3,3V - 5V (Gleichspannung)
Stromstärke: 45mA
Baudrate(n): zwischen 4800 to 115200 (default: 9600)
Betriebstemperatur: -40°C bis +85°C
Betriebsaufnahmezeit: Kaltstart: min. 27s; Warmstart: 1s
Interface: RS232 TTL

Das ublox® NEO-6M GPS-Modul besitzt einen EEPROM zum Zwischenspeichern von Konfigurationsdaten und wird mit einer keramischen Antenne ausgeliefert. Weiterhin besitzt es eine kleine wiederaufladbare Batterie als USV. Eine Mikro-USB-Buchse bietet den Anschluss an den PC. Das Modul arbeitet mit stardardisierten NMEA-Nachrichten.
Detaillierte Informationen über GPS von ublox®.
Receiver Description & Protocol Specification von ublox®.

Anschlüsse am GPS-Modul

Anschlüsse am NEO-6M GPS-Empfänger-Modul

Die (grüne) LED-Anzeige hat zwei Zustände:
- leuchtet durchgehend = GPS-Modul such nach Satelliten.
- LED blinkt: Position erkannt (Modul hat genug Satelliten erkannt)

NEO-6M Beschreibung Arduino
VCC Stromversorgung (3,3V-5V) 5V
GND Masseanschluss GND
TXD Senden von Daten 3
RXD Datenempfang 4
PPS "pulse per second" (wird hier nicht verwendet)

Verwendete Bauteile

Aufbau der Schaltung

Aufbau der Schaltung

Auslesen der GPS-Daten

Mit der SoftwareSerial-Library können die Rohdaten des GPS-Moduls ausgelesen und auf der seriellen Konsole des Arduino ausgegeben werden.

#include <SoftwareSerial.h>

#define PIN_RXD 3
#define PIN_TXD 4

#define GPS_BAUD 9600

// serial connection to the GPS device
SoftwareSerial gpsSerial(PIN_RXD, PIN_TXD);

void setup()
{
    Serial.begin(9600);
    gpsSerial.begin(GPS_BAUD);
}

void loop()
{
    // Output raw GPS data to the serial monitor
    while (gpsSerial.available() > 0) {
        Serial.write(gpsSerial.read());
    }
}
Ausgabe auf der seriellen Konsole
Abb.: Ausgabe auf der seriellen Konsole

Im obigen Bild sieht man die Rohdaten des GPS. Da ich das Modul innerhalb des Hauses betrieben habe, gab es noch keine richtigen GPS-Daten. Diese sehen dann folgendermaßen aus:

Ausgabe auf der seriellen Konsole mit GPS-Daten
Abb.: Ausgabe auf der seriellen Konsole mit GPS-Daten

Die hierbei ausgegebenen NMEA-Nachrichten sind jedoch schwer für Menschen lesbar. Daher gibt es Libraries, die das Auslesen der GPS-Daten vereinfachen.

Aufbau der NMEA-Nachrichten

Jede NMEA-Nachricht beginnt mit einem "$"-Zeichen und dannach folgen komma-separierte Datenfelder, z.B.
$GPGGA,110617.00,41XX.XXXXX,N,00831.54761,W,1,05,2.68,129.0,M,50.1,M,,*42
$GPGSA,A,3,06,09,30,07,23,,,,,,,,4.43,2.68,3.53*02
$GPGSV,3,1,11,02,48,298,24,03,05,101,24,05,17,292,20,06,71,227,30*7C
$GPGSV,3,2,11,07,47,138,33,09,64,044,28,17,01,199,,19,13,214,*7C
$GPGSV,3,3,11,23,29,054,29,29,01,335,,30,29,167,33*4E
$GPGLL,41XX.XXXXX,N,00831.54761,W,110617.00,A,A*70
$GPRMC,110618.00,A,41XX.XXXXX,N,00831.54753,W,0.078,,030118,,,A*6A
$GPVTG,,T,,M,0.043,N,0.080,K,A*2C

Da es verschiedene Nachrichten-Arten gibt, wird der Typ immer vor dem ersten Komma angegeben.
Aufbau derunterstütztenGPS-Datensätze

TinyGPS++ Library

Die TinyGPS++-Library kann die NMEA-Nachrichten parsen und in ein gut lesbares bzw. weiterverabeitbares Format transferieren.
Als Experiment läd man die Library von der angegeben Seite und legt den entpackten Ordner in den "libraries"-Ordner im Arduino-Basisordner. Nun öffnet man die Arduino-IDE und kann unter Beispiele nun das "FullExample" öffnen. Nach dem Kompilieren und Hochladen auf den Arduino sollte in etwa die folgende Ausgabe in der seriellen Konsole zu sehen sein:

Ausgabe auf der seriellen Konsole mit der TinyGPS++ Library
Abb.: Ausgabe auf der seriellen Konsole mit der TinyGPS++ Library

Der folgende Sketch ist eine Vereinfachung eines der Beispiele der Library:

#include <TinyGPS++.h>
#include <SoftwareSerial.h>

#define PIN_RXD 3
#define PIN_TXD 4

#define GPS_BAUD 9600

SoftwareSerial gpsSerial(PIN_RXD, PIN_TXD);
TinyGPSPlus tinyGps;

void setup()
{
    Serial.begin(9600);
    gpsSerial.begin(GPS_BAUD);
}

void loop()
{
    while (gpsSerial.available() > 0){
        tinyGps.encode(gpsSerial.read());
        if (tinyGps.location.isUpdated()){
            Serial.print("Latitude = ");
            Serial.println(tinyGps.location.lat(), 6);
            Serial.print("Longitude = ");
            Serial.println(tinyGps.location.lng(), 6);
            Serial.println("");
        }
    }
}

GPS-neo-6m Library

Ich habe noch folgende Library gefunden, aber bisher nicht getestet:
https://cristiansteib.github.io/Gps-neo-6m bzw.
https://github.com/cristiansteib/Gps-neo-6m/


Verwendung der Mikro-USB-Buchse

Man kann das GPS-Modul auch direkt über den Mikro-USB-Anschluss mit dem PC verbinden und die Daten dann über ein Terminal-Programm wie z.B. PuTTY (unter Windows) auslesen. Da mein Laptop jedoch Debian-Linux als Betriebssystem installiert hat kann man unter Linux auch die GPS-Daten folgendermaßen in einem Terminal auslesen lassen:
cat /dev/ttyACM0
Es sollte dann in etwa folgende Ausgabe erfolgen:
$GPTXT,01,01,02,u-blox ag - www.u-blox.com*50
$GPTXT,01,01,02,HW UBX-G70xx 00070000 *77
$GPTXT,01,01,02,ROM CORE 1.00 (59842) Jun 27 2012 17:43:52*59
$GPTXT,01,01,02,PROTVER 14.00*1E
$GPTXT,01,01,02,ANTSUPERV=AC SD PDoS SR*20
$GPTXT,01,01,02,ANTSTATUS=OK*3B
$GPTXT,01,01,02,LLC FFFFFFFF-FFFFFFED-FFFFFFFF-FFFFFFFF-FFFFFFF9*50
$GPRMC,,V,,,,,,,,,,N*53
$GPVTG,,,,,,,,,N*30
$GPGGA,,,,,,0,00,99.99,,,,,,*48
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
...
..
.

u-Center

Unter Windows kann auch u-center verwendet werden, eine GNSS-Evaluierungsssoftware des Herstellers ublox®, die in grafischer Ansicht etliche GPS-Daten des Moduls auswerten und anzeigen kann.

Screenshot der GNSS-Evaluierungsssoftware u-center
Abb.: Screenshot der GNSS-Evaluierungsssoftware u-center