GPS-Zielanzeiger mit Arduino UNO & NEO-6M Modul bauen
Komponenten und Zubehör
| Arduino UNO | 1 |
| GPS-Modul (NEO-6M) | 1 |
| LED (beliebig) | 1 |
| L293D Dual-H-Brücke Motortreiber | 1 |
| Vibrationsmotor (z. B. Brown Dog Gadgets Solar Cockroach) | 1 |
| Steckplatine (Snappable Protoboard) | 1 |
| 9V-Batterie | 1 |
| 9V-auf-Hohlstecker-Adapter | 1 |
| Gehäuse (Box) | 1 |
| Jumper-Kabel | 1 |
Benötigte Werkzeuge
- Lötkolben
- Abisolierzange
Apps und Online-Dienste
- Arduino IDE
Über dieses Projekt
Einführung: Das Problem und die Lösung
Staus sind ein großer Zeitfresser – und die Fahrtdauer lässt sich kaum vorhersagen. Als ich vor zwei Monaten in eine Stadt zog, verbrachte ich täglich über zwei Stunden im Stau. Da ich öffentliche Verkehrsmittel nutze, wollte ich diese Zeit sinnvoll nutzen: zum Nachdenken, Planen oder Lernen (z. B. Online-Kurse). Doch das Basteln von Elektronik inspiriert mich am meisten. Deshalb baute ich einen Zielanzeiger mit Arduino und GPS-Modul. Er warnt per LED oder Vibration, sobald man sich dem Ziel nähert. Beide Varianten (LED und Vibrationsmotor) sind unten beschrieben.
Das Prinzip ist simpel: Zunächst ermittelt man Breiten- und Längengrad des Ziels. Anschließend berechnet der Arduino kontinuierlich die Distanz zur aktuellen Position. Unterschreitet diese einen definierten Schwellwert, wird der Alarm ausgelöst.
Teile und Werkzeuge im Detail
Arduino UNO
Das Herzstück der Steuerung.
NEO-6M GPS-Modul
Das Modul bestimmt Position, Zeit und Geschwindigkeit. Wichtige Spezifikationen:
- Externe Antenne, integriertes EEPROM
- Schnittstelle: RS232 TTL
- Versorgung: 3–5 V
- Standard-Baudrate: 9600 bps
- NMEA-Sätze werden unterstützt
Das Modul hat vier Pins: VCC, RX, TX, GND. Die serielle Kommunikation erfolgt über SoftwareSerial (Pins 4 und 3 am Arduino).
Verdrahtung:
- VCC → Arduino VIN (5 V)
- RX → Arduino TX (SoftwareSerial, Pin 3)
- TX → Arduino RX (SoftwareSerial, Pin 4)
- GND → GND
L293D Motortreiber
Der L293D steuert bis zu zwei DC-Motoren. Er wandelt das schwache Arduino-Signal in einen hohen Strom für den Motor um. Notwendig für den Vibrationsmotor.
TinyGPS++ Bibliothek
Vereinfacht das Parsen von GPS-Daten. Liefert neben Koordinaten auch Datum, Uhrzeit, Geschwindigkeit, Kurs, Höhe, Satellitenanzahl und HDOP.
Breiten- und Längengrad ermitteln
Laden Sie den untenstehenden Sketch hoch, öffnen Sie den Serial Monitor (9600 Baud) und notieren Sie die angezeigten Koordinaten Ihres Zielorts. Die LED auf dem GPS-Modul blinkt, sobald Satelliten empfangen werden.
Arduino-Code zur Koordinaten-Ermittlung (Read_Lat_Lng.ino)
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;
TinyGPSPlus gps;
SoftwareSerial ss(RXPin, TXPin);
void setup() {
Serial.begin(9600);
ss.begin(GPSBaud);
}
void loop() {
while (ss.available() > 0) {
gps.encode(ss.read());
if (gps.location.isUpdated()) {
Serial.print("Latitude= ");
Serial.print(gps.location.lat(), 6);
Serial.print(" Longitude= ");
Serial.println(gps.location.lng(), 6);
}
}
}
Zielanzeige per LED
Der folgende Sketch vergleicht die aktuelle Position mit den Zielkoordinaten (hier als Beispielwerte eingetragen). Wird die Distanz kleiner als 50 Meter (0,05 km), leuchtet die LED an Pin 13.
Code (Destination_notifier_LED.ino)
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;
TinyGPSPlus gps;
SoftwareSerial ss(RXPin, TXPin);
unsigned long last = 0UL;
const int ledPin = 13;
void setup() {
Serial.begin(115200);
ss.begin(GPSBaud);
pinMode(ledPin, OUTPUT);
}
void loop() {
while (ss.available() > 0)
gps.encode(ss.read());
if (gps.location.isUpdated()) {
Serial.print(F(" Lat="));
Serial.print(gps.location.lat(), 6);
Serial.print(F(" Long="));
Serial.println(gps.location.lng(), 6);
}
else if (millis() - last > 5000) {
Serial.println();
if (gps.location.isValid()) {
// HIER ZIELKOORDINATEN EINTRAGEN (aus Read_Lat_Lng.ino)
static const double Dest_LAT = 18.786254, Dest_LON = 73.880798;
double distanceToDest = TinyGPSPlus::distanceBetween(
gps.location.lat(), gps.location.lng(), Dest_LAT, Dest_LON);
Serial.print(F("Distance to Destination ="));
Serial.print(distanceToDest / 1000, 6); // km
if (distanceToDest / 1000 < 0.050000) { // 50 m Schwelle
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}
if (gps.charsProcessed() < 10)
Serial.println(F("WARNING: No GPS data. Check wiring."));
last = millis();
Serial.println();
}
}
Die finale Version: Vibrationsmotor im Gehäuse
Für den mobilen Einsatz wird alles in eine Box verbaut: Arduino, GPS-Modul, L293D, Vibrationsmotor, 9V-Batterie. Der Motor wird über den L293D an den Pins 6 und 7 angesteuert.
L293D-Verdrahtung
- 5 V → Enable 1, Vs, Vss
- Arduino Pin 6 → Input 1, Pin 7 → Input 2
- Arduino GND → beide GND-Pins derselben Seite
- Output 1 & 2 → Motoranschlüsse
Code für Vibrationsmotor (Destination_notifier_motor.ino)
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;
TinyGPSPlus gps;
SoftwareSerial ss(RXPin, TXPin);
unsigned long last = 0UL;
const int motorPin1 = 6;
const int motorPin2 = 7;
void setup() {
Serial.begin(115200);
ss.begin(GPSBaud);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
}
void loop() {
while (ss.available() > 0)
gps.encode(ss.read());
if (gps.location.isUpdated()) {
Serial.print(F(" Lat="));
Serial.print(gps.location.lat(), 6);
Serial.print(F(" Long="));
Serial.println(gps.location.lng(), 6);
}
else if (millis() - last > 5000) {
Serial.println();
if (gps.location.isValid()) {
static const double Dest_LAT = 18.786254, Dest_LON = 73.880798;
double distanceToDest = TinyGPSPlus::distanceBetween(
gps.location.lat(), gps.location.lng(), Dest_LAT, Dest_LON);
Serial.print(F("Distance to Destination ="));
Serial.print(distanceToDest / 1000, 6);
if (distanceToDest / 1000 < 0.050000) {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH); // Motor an
} else {
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, HIGH); // Motor aus (Bremsen)
}
}
if (gps.charsProcessed() < 10)
Serial.println(F("WARNING: No GPS data. Check wiring."));
last = millis();
Serial.println();
}
}
Viel Spaß beim Nachbauen!
Code-Dateien
- Read_Lat_Lng.ino
- Destination_notifier_LED.ino
- Destination_notifier_motor.ino
Schaltpläne (Fritzing-Dateien)
- read_lat_lng.fzz
- destination_notifier_led.fzz
- destination_notifier_motor.fzz
Herstellungsprozess
- Arduino Digitaler Würfel: LCD-Würfel mit Zufallszahlen (1–6)
- JX Wave Generator – Arduino-kompatibler DDS-Oszillator mit OLED-Display
- Arduino Iron Man bauen: Komponenten, Sensoren & Schritt-für-Schritt-Anleitung
- Find Me: Smarter Gegenstands-Finder mit Arduino und Bluetooth
- Funktionaler 3D-gedruckter Roboterarm mit Arduino – Schritt-für-Schritt-Anleitung
- Arduino Mega mit NEO‑6M GPS-Modul verbinden: Schritt-für-Schritt-Anleitung
- DIY Arduino Luftbefeuchter-Steuerung mit Relais – Sichere Hochspannungs-Installation
- u-blox LEA-6H 02 GPS-Modul: Arduino & Python Integrationsanleitung
- NeoPixel-Matrix Pong auf Arduino Nano: Neon-Pong selbst bauen
- DIY Arduino Lenkrad / Joystick für Rennspiele – USB-HID-Umbau