Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Construire un Notificateur de Destination GPS avec Arduino UNO et Module NEO‑6M

Composants et fournitures

ComposantQuantité
Arduino UNO1
Module GPS NEO-6M1
LED (générique)1
Pilote de moteur double pont en H L293D (Texas Instruments)1
Moteur vibrant disque (Solar Cockroach)1
Plaque d'essai modulable (SparkFun Snappable Protoboard)1
Batterie 9V1
Connecteur 9V vers Jack Barrel1
Boîtier de projet1
Fils de connexion (jumper wires)1 jeu

Outils et machines nécessaires

Applications et services en ligne

À propos du projet

Introduction : Le problème et la solution

Les embouteillages représentent une perte de temps considérable. Il est impossible de prédire avec exactitude la durée d'un trajet. Confronté à ce problème lors de mon installation en ville il y a deux mois, je passais plus de deux heures par jour bloqué dans les bouchons. J'ai alors cherché à exploiter ce temps de manière productive.

En utilisant les transports en commun, j'ai imaginé un dispositif qui m'alerterait à l'approche de ma destination, me permettant de vaquer à d'autres occupations (lecture, formation en ligne, planification) sans risquer de rater mon arrêt.

J'ai donc conçu un notificateur de destination basé sur Arduino et un module GPS. Le principe est simple : lorsque l'on se trouve à proximité d'une destination programmée (définie par ses coordonnées GPS), le dispositif déclenche une alerte visuelle (LED) ou tactile (moteur vibrant).

La logique repose sur le calcul de la distance entre la position actuelle et la destination cible. Si cette distance tombe en dessous d'un seuil défini, la notification s'active.

Composants principaux et câblage

Module GPS NEO-6M

Ce module dispose d'une antenne externe et d'une EEPROM intégrée. Caractéristiques :

Câblage NEO-6M vers Arduino UNO :

Pin NEO-6MPin Arduino
VCCVIN (5V)
RXTX logiciel (pin 3 dans l'exemple)
TXRX logiciel (pin 4 dans l'exemple)
GNDGND

Pilote moteur L293D

Le L293D est un circuit intégré 16 broches capable de piloter deux moteurs DC simultanément dans les deux sens. Il convertit un signal de commande faible (sortie Arduino) en signal de puissance pour le moteur.

Bibliothèque TinyGPS++

Cette bibliothèque simplifie l'extraction des données GPS (position, date, heure, vitesse, cap, altitude, nombre de satellites, HDOP) à partir des trames NMEA.

Étape 1 : Capturer la latitude et la longitude de la destination

Avant de programmer le notificateur, il faut relever les coordonnées exactes de la destination. Utilisez le code ci-dessous pour afficher les coordonnées GPS sur le moniteur série.

Code de capture des coordonnées (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(F("Latitude= "));
      Serial.print(gps.location.lat(), 6);
      Serial.print(F(" Longitude= "));
      Serial.println(gps.location.lng(), 6);
    }
  }
}

Note : Installez la bibliothèque TinyGPS++ via le gestionnaire de bibliothèques de l'IDE Arduino. Laissez le module GPS acquérir les satellites (la LED du module clignote dès la fixation).

Étape 2 : Notificateur par LED

Ce prototype allume une LED (broche 13) lorsque la distance à la destination est inférieure à 50 mètres (seuil modifiable).

Code notificateur LED (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;

// Coordonnées de destination (à remplacer par les vôtres)
static const double Dest_LAT = 18.786254;
static const double Dest_LON = 73.880798;

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) {
    if (gps.location.isValid()) {
      double distanceToDest = TinyGPSPlus::distanceBetween(
        gps.location.lat(), gps.location.lng(),
        Dest_LAT, Dest_LON
      );
      Serial.print(F("Distance à destination = "));
      Serial.print(distanceToDest / 1000.0, 6);
      Serial.println(F(" km"));

      // Seuil : 0.050 km = 50 mètres
      if (distanceToDest / 1000.0 < 0.050) {
        digitalWrite(ledPin, HIGH);
      } else {
        digitalWrite(ledPin, LOW);
      }
    }
    if (gps.charsProcessed() < 10)
      Serial.println(F("ATTENTION : Pas de données GPS. Vérifiez le câblage."));
    last = millis();
  }
}

Étape 3 : Version finale avec moteur vibrant

Pour une alerte discrète (idéal dans les transports), le moteur vibrant remplace la LED. Le L293D pilote le moteur via deux broches de commande (6 et 7).

Câblage du L293D pour le moteur vibrant

Code notificateur moteur (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;

static const double Dest_LAT = 18.786254;
static const double Dest_LON = 73.880798;

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) {
    if (gps.location.isValid()) {
      double distanceToDest = TinyGPSPlus::distanceBetween(
        gps.location.lat(), gps.location.lng(),
        Dest_LAT, Dest_LON
      );
      Serial.print(F("Distance à destination = "));
      Serial.print(distanceToDest / 1000.0, 6);
      Serial.println(F(" km"));

      if (distanceToDest / 1000.0 < 0.050) {
        // Activation moteur (sens unique)
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, HIGH);
      } else {
        // Arrêt moteur
        digitalWrite(motorPin1, HIGH);
        digitalWrite(motorPin2, HIGH);
      }
    }
    if (gps.charsProcessed() < 10)
      Serial.println(F("ATTENTION : Pas de données GPS. Vérifiez le câblage."));
    last = millis();
  }
}

Schémas Fritzing

Trois fichiers Fritzing sont fournis pour le câblage :

Bon bricolage !

Processus de fabrication

  1. Dé numérique Arduino sur écran LCD 16x2 – Générateur aléatoire à bouton poussoir
  2. JX Wave Generator – Générateur DDS compatible Arduino avec affichage OLED
  3. Construire un Iron Man animé avec Arduino : capteurs, sons et relais
  4. Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth
  5. Construire un bras robotique 3D fonctionnel piloté par Arduino – Guide pas à pas
  6. Connecter un module GPS NEO‑6M à l'Arduino Mega : Guide pas à pas
  7. Contrôleur d'humidificateur DIY avec Arduino et relais – Installation haute tension sécurisée
  8. Module GPS u-blox LEA‑6H 02 : guide d'intégration Arduino et Python
  9. Jeu Pong sur Matrice NeoPixel avec Arduino Nano