Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

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

Apps und Online-Dienste

Ü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:

Das Modul hat vier Pins: VCC, RX, TX, GND. Die serielle Kommunikation erfolgt über SoftwareSerial (Pins 4 und 3 am Arduino).

Verdrahtung:

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

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

Schaltpläne (Fritzing-Dateien)

Herstellungsprozess

  1. Arduino Digitaler Würfel: LCD-Würfel mit Zufallszahlen (1–6)
  2. JX Wave Generator – Arduino-kompatibler DDS-Oszillator mit OLED-Display
  3. Arduino Iron Man bauen: Komponenten, Sensoren & Schritt-für-Schritt-Anleitung
  4. Find Me: Smarter Gegenstands-Finder mit Arduino und Bluetooth
  5. Funktionaler 3D-gedruckter Roboterarm mit Arduino – Schritt-für-Schritt-Anleitung
  6. Arduino Mega mit NEO‑6M GPS-Modul verbinden: Schritt-für-Schritt-Anleitung
  7. DIY Arduino Luftbefeuchter-Steuerung mit Relais – Sichere Hochspannungs-Installation
  8. u-blox LEA-6H 02 GPS-Modul: Arduino & Python Integrationsanleitung
  9. NeoPixel-Matrix Pong auf Arduino Nano: Neon-Pong selbst bauen
  10. DIY Arduino Lenkrad / Joystick für Rennspiele – USB-HID-Umbau