Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Bouw een GPS-bestemmingsnotificator met Arduino UNO en NEO‑6M-module

Onderdelen en benodigdheden

  • Arduino UNO
  • NEO-6M GPS-module
  • LED (standaard)
  • L293D Dual H-brug motordriver (Texas Instruments)
  • Mini trilmotor (bijv. Brown Dog Gadgets Solar Cockroach)
  • Experimenteerprint (bijv. SparkFun Snappable Protoboard)
  • 9V-batterij
  • 9V naar DC-jack connector
  • Behuizing (doos)
  • Draadjes (jumper wires)

Benodigde tools

  • Soldeerbout
  • Kabelschiller

Apps en online diensten

  • Arduino IDE

Over dit project

Inleiding: Het probleem en de oplossing

Iedereen weet dat bestand een enorme tijdverspilling kan zijn. Het is onmogelijk om precies te voorspellen hoe lang een rit van vertrek naar bestemming duurt.

Ik werd zelf geconfronteerd met dit probleem toen ik twee maanden geleden in een stad kwam wonen. Elke dag spendeerde ik meer dan twee uur vast in de file. Ik dacht: waarom kan ik die tijd niet nuttig besteden?

Opmerking: ik gebruik het openbaar vervoer. :-)

Er zijn genoeg dingen die je kunt doen terwijl je in de file staat:

  • Gebruik de tijd om na te denken en te plannen, voor huidige en toekomstige projecten.
  • Investeer in jezelf: kijk instructievideo's of volg een e-learningcursus op platforms als Udemy of Coursera.

En natuurlijk maken van elektronica-projecten inspireert me altijd. Daarom bouwde ik een bestemmingsnotificator met Arduino en een GPS-module. Wat doet hij? Wanneer je in de buurt komt van je bestemming, geeft hij een seintje: een LED gaat branden of een mini trilmotor gaat trillen. Ik heb schema's voor beide varianten.

Allereerst moet je de breedte- en lengtegraad van je bestemming bepalen. Met die coördinaten bereken je de afstand tot je huidige locatie. Binnen een ingestelde range activeer je de notificator. De logica is simpel, toch? Laten we beginnen!

Onderdelen en tools

Hier is wat je nodig hebt:

  • Arduino UNO
Bouw een GPS-bestemmingsnotificator met Arduino UNO en NEO‑6M-module
  • NEO-6M GPS-module

GPS staat voor Global Positioning System en kan je positie, tijd en snelheid bepalen tijdens het reizen.

Bouw een GPS-bestemmingsnotificator met Arduino UNO en NEO‑6M-module
  • Deze module heeft een externe antenna en ingebouwde EEPROM.
  • Interface: RS232 TTL
  • Voeding: 3V tot 5V
  • Standaard baudrate: 9600 bps
  • Werkt met standaard NMEA-zinnen

De NEO-6M heeft vier pinnen: VCC, RX, TX en GND. De communicatie met de Arduino verloopt via seriële communicatie (TX/RX), dus de wiring is eenvoudig:

NEO-6MArduino UNO
VCCVIN (5V)
RXTX-pin (software serial)
TXRX-pin (software serial)
GNDGND

L293D IC

Bouw een GPS-bestemmingsnotificator met Arduino UNO en NEO‑6M-module

De L293D is een 16-pins motordriver IC die twee DC-motoren tegelijk kan aansturen in beide richtingen.

Waarom de L293D? De ingang van een motordriver is een laagstroomsignaal. De IC zet dit om in een hoogstroomsignaal dat de motor kan aansturen.

TinyGPS++-bibliotheek

Deze bibliotheek maakt het eenvoudig om locatiegegevens in een bruikbaar formaat op te halen. Behalve locatie kun je ook verkrijgen:

  • Datum
  • Tijd
  • Snelheid
  • Koers
  • Hoogte
  • Aantal satellieten
  • HDOP (Horizontal Dilution of Precision)

Breedte- en lengtegraad vastleggen

Bouw een GPS-bestemmingsnotificator met Arduino UNO en NEO‑6M-module

Raadpleeg de Fritzing-bestanden aan het einde van het project voor een duidelijke schakeling. Bij vragen: laat een reactie achter.

Arduino-code voor locatie-opname

#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);
    }
  }
}

Let op: Installeer de TinyGPS++-bibliotheek via de bibliotheekbeheerder in de Arduino IDE.

Sluit de module aan volgens het schema, upload de code en open de seriële monitor op 9600 baud. Je ziet de coördinaten verschijnen.

Opmerking: Het kan even duren voordat de GPS-module satellieten vindt. Zodra het signaal wordt ontvangen, knippert de LED op de module.

Bouw een GPS-bestemmingsnotificator met Arduino UNO en NEO‑6M-module

Bestemmingsnotificator met LED

Om het concept te testen bouwde ik een prototype met een LED. Ik gebruikte de coördinaten uit de vorige stap, berekende de afstand tot de bestemming en stelde een drempelwaarde in waarop de LED aan gaat.

Bouw een GPS-bestemmingsnotificator met Arduino UNO en NEO‑6M-module
Bouw een GPS-bestemmingsnotificator met Arduino UNO en NEO‑6M-module

Code voor LED-notificatie

#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;
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()) {
      // Vervang door jouw bestemmingscoördinaten
      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 meter
        digitalWrite(ledPin, HIGH);
      } else {
        digitalWrite(ledPin, LOW);
      }
    }
    if (gps.charsProcessed() < 10)
      Serial.println(F("WAARSCHUWING: Geen GPS-data. Controleer wiring."));
    last = millis();
    Serial.println();
  }
}

Upload de code en bekijk de seriële monitor. De afstand tot de bestemming wordt elke 5 seconden bijgewerkt. Pas de drempelwaarde (0.050000 = 50 m) aan naar wens.

Bouw een GPS-bestemmingsnotificator met Arduino UNO en NEO‑6M-module

De definitieve versie: trilmotor in een behuizing

Het prototype werkte. Nu wilde ik alles in een doos onderbrengen: Arduino, GPS-module, trilmotor met driver IC en 9V-voeding.

Bouw een GPS-bestemmingsnotificator met Arduino UNO en NEO‑6M-module
Bouw een GPS-bestemmingsnotificator met Arduino UNO en NEO‑6M-module

Aansluiting L293D voor trilmotor

Bouw een GPS-bestemmingsnotificator met Arduino UNO en NEO‑6M-module
  • Verbinden 5V met Enable 1, Vs en Vss op de L293D.
  • Digitale uitgangspinnen (6 en 7) naar Input 1 en Input 2.
  • Arduino GND naar beide GND-pinnen aan dezelfde kant van de L293D.
  • Output 1 en Output 2 van de L293D naar de motorpinnen.
Bouw een GPS-bestemmingsnotificator met Arduino UNO en NEO‑6M-module

Code voor trilmotor-notificatie

#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;
int motorpin1 = 6;
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 draait/trilt
      } else {
        digitalWrite(motorpin1, HIGH);
        digitalWrite(motorpin2, HIGH); // Motor stil
      }
    }
    if (gps.charsProcessed() < 10)
      Serial.println(F("WAARSCHUWING: Geen GPS-data. Controleer wiring."));
    last = millis();
    Serial.println();
  }
}

Veel plezier met maken!

Code-bestanden

  • Read_Lat_Lng.ino – leest coördinaten uit
  • Destination_notifier_LED.ino – LED-versie
  • Destination_notifier_motor.ino – Trilmotor-versie

Schema's (Fritzing)

  • read_lat_lng_l3VSL54w0k.fzz
  • destination_notifier_led_c7qaqTImXg.fzz
  • destination_notifier_motor_fGc8OV6Y0w.fzz

Productieproces

  1. Arduino Digitale Dobbelsteen: Bouw Je Eigen LCD-willekeurige Getalgenerator
  2. JX Wave Generator – Arduino-compatibele DDS-oscillator met OLED-display
  3. Een Arduino Iron Man bouwen: onderdelen, sensoren en stapsgewijze handleiding
  4. Find Me: Slimme Item Locator met Arduino en Bluetooth
  5. Bouw een Functionele, Arduino-aangedreven 3D-geprinte Robotarm – Stap-voor-Stap Handleiding
  6. Arduino Mega koppelen aan een NEO‑6M GPS-module: stapsgewijze handleiding
  7. DIY Arduino Luchtbevochtiger Controller met Relais – Veilige Hoogspanningsopstelling
  8. u-blox LEA‑6H GPS Module: Arduino & Python Integratie Handleiding
  9. NeoPixel Matrix Pong op Arduino Nano: Bouw je eigen neon Pong-spel
  10. Bouw een Aangepaste Arduino Joystick Stuurwiel voor Gaming
  11. Bouw een krachtige FM-radio ontvanger met Arduino en TEA5767 module