In diesem kleinen Post möchte ich mein Wissen zum bau eines kleinen GPS Moduls weitergeben. Ich musste selbe etwas aufwendiger suchen, um alle Informationen zu finden, die es mir dann recht schnell ermöglicht haben den GPS Receiver “HOLUX GM-210”, mit dem NMEA 0183 Protokoll,
die für mich interessanten Daten zu entlocken.
Was für Materialien hab ich benutzt?
- GPS Receiver HOLUX GM-210
- LCD 1602 (Idealer Weise mit UT-LCDmenueSensor Board)Wir
- ARDUINO Nano
Wir verbinden also den PIN2 vom GM-210 5V VDC mit den 5V Ausgang und den PIN4 Ground mit dem GND (Ground) am ARDUINO.
Jetzt kommen wir zu der etwas größeren Aufgabe. Das Auslesen der Daten die uns das GPS sendet, und dann natürlich das Auswerten der Daten.
Denn wir wollen ja wissen wo wir sind, wie schnell wir sind und in welche Richtung wir uns bewegen.
Es stehen natürlich noch einige Daten mehr zu der Verfügung, aber die kann sich dann nach dem gleichen Prinzip jeder so anpassen wie er es gerne hätte.
Die Erklärung hab ich noch nicht ganz fertig, aber hier schon mal der Code:
*************************************************************
#include <string.h>
#include <ctype.h>
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#include <SoftwareSerial.h>
SoftwareSerial GPSserial(7, 6); // RX | TX
String inputString = “”; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
void setup()
{
// initialize serial:
Serial.begin(9600);
GPSserial.begin(4800);
// reserve 200 bytes for the inputString:
inputString.reserve(200);
lcd.begin(16, 2);
lcd.print(“GPS Modul”);
delay(2000);
}
void loop()
{
serialEvent(); // Zeile einlesen
// print the string when a newline arrives:
if (stringComplete)
{
Serial.println(inputString);
// you can also look for a substring in the middle of a string:
// Ausgabe auf dem LCD
if (inputString.substring(1,6) == “GPRMC”)
{
Serial.println(“Yes”);
String ausgabe = (inputString.substring(20, 29));
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(“L:”);
lcd.setCursor(0, 1);
lcd.print(“B:”);
lcd.setCursor(3, 0);
lcd.print(ausgabe);
ausgabe = “”;
ausgabe = (inputString.substring(30, 31));
lcd.setCursor(12, 0);
lcd.print(ausgabe);
ausgabe = “”;
ausgabe = (inputString.substring(32, 42));
lcd.setCursor(3, 1);
lcd.print(ausgabe);
ausgabe = “”;
ausgabe = (inputString.substring(43, 44));
lcd.setCursor(13, 1);
lcd.print(ausgabe);
ausgabe = “”;
delay(1000);
int kommaS = inputString.indexOf(‘,’, 46);
ausgabe = (inputString.substring(45, kommaS – 1));
float kmh = ausgabe.toFloat();
kmh = kmh*1.852;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(“S:”);
lcd.setCursor(0, 1);
lcd.print(“W:”);
lcd.setCursor(3, 0);
lcd.print(kmh, 6);
ausgabe = “”;
int kommaW = inputString.indexOf(‘,’, kommaS + 1);
ausgabe = (inputString.substring(kommaS + 1, kommaW));
lcd.setCursor(3, 1);
lcd.print(ausgabe);
ausgabe = “”;
delay(1000);
}
// clear the string:
inputString = “”;
stringComplete = false;
}
}
void serialEvent() {
while (GPSserial.available())
{
// get the new byte:
char inChar = (char)GPSserial.read();
// add it to the inputString:
inputString += inChar;
// if the incoming character is a newline, set a flag
// so the main loop can do something about it:
if (inChar == ‘n’)
{
stringComplete = true;
}
}
}