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

Horloge GPS précise : Précision et fiabilité abordables

Composants et fournitures

Composant Quantité
Arduino UNO 1
Écran LCD RGB 16×2 (ou LCD 20×4 avec adaptateur I2C) 1
Breadboard 1
Fils de connexion 1
Récepteur GPS (GY-GPS6MV2 avec u-blox NEO-6M) 1

Applications et services en ligne

À propos du projet

J'ai utilisé jusqu'ici des modules RTC ou l'heure NTP pour mes projets d'horloge. Ici, une nouvelle source : l'analyse des trames NMEA des satellites GPS.

Surprise : les récepteurs GPS sont très bon marché aujourd'hui (ex: GY-GPS6MV2).

Tests préliminaires

  1. Test PC (optionnel) : Installez « u-center » (u-blox). Avec un adaptateur FTDI, le GPS se connecte au port COM. Fix (connexion satellites) en ~1 minute (LED rouge clignote). Menu View → F8 Text Console pour voir les trames NMEA.
  2. Test décodage en ligne : rl.se/gprmc – collez une trame NMEA pour la décoder.

Une fois le GPS fonctionnel (vue du ciel nécessaire), extrayons les infos souhaitées.

Câblage

Le récepteur GPS tolère 3,3V/5V.


#include 
#include 
LiquidCrystal_I2C lcd(0x3F, 20, 4); // adresse souvent 0x27 ou 0x3F

#include 
#include 
SoftwareSerial mySerial(8, 7); // RX, TX
Adafruit_GPS GPS(&mySerial);

Fonctionnalités de l'horloge

Affichage : Heure, Date, Indication vitesse du vent (convertie depuis nœuds), Altitude. Pas de position (montre fixe à la fenêtre).

Fuseau horaire

Les trames NMEA donnent l'heure UTC. Conversion locale :


int timezone = +1; // Europe/Berlin (UTC+0100)
int hour = GPS.hour + timezone;

Adaptez timezone à votre localisation.

Vitesse du vent (conversion nœuds → km/h + échelle Beaufort simplifiée)


float speed = GPS.speed * 1.852; // 1 nœud = 1,852 km/h

if (speed <= 1)         lcd.print(" Windstille");
else if (speed <= 9)    lcd.print(" leiser Zug");
else if (speed <= 46)   lcd.print(" Brise");
else if (speed <= 56)   lcd.print(" starker Wind");
else if (speed <= 74)   lcd.print(" stuerm. Wind");
else if (speed <= 83)   lcd.print(" Sturm");
else if (speed <= 102)  lcd.print(" schwerer Sturm");
else                    lcd.print(" Orkan");

Résultat sur l'écran

Ligne 1 : Heure (HH:MM:SS)
Ligne 2 : Date (JJ.MM.AA)
Ligne 3 : Vitesse + qualification vent
Ligne 4 : Altitude

Fréquence de mise à jour : 2 secondes (réglable). On peut supprimer secondes et altitude pour un écran 16×2.

Alternative européenne : signal radio DCF77, mais plus cher et sensible.

Amusez-vous à explorer les possibilités du GPS !

Code complet


// Test code for Adafruit GPS modules using MTK3329/MTK3339 driver
// Modified 01.02.2020 - Ingo Lohs
// GPRMC & GPGGA decoder: https://rl.se/gprmc

#include 
#include 
LiquidCrystal_I2C lcd(0x3F,20,4);

#include 
#include 

SoftwareSerial mySerial(8, 7);
Adafruit_GPS GPS(&mySerial);

#define GPSECHO true
int timezone = +1; // Europe/Berlin (UTC +0100)

void setup() {
  lcd.init(); lcd.backlight();
  Serial.begin(115200);
  delay(5000);
  Serial.println("Adafruit GPS library basic test!");
  GPS.begin(9600);
  GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); // RMC + GGA (altitude)
  GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);    // 1 Hz update
  GPS.sendCommand(PGCMD_ANTENNA);
  delay(1000);
  mySerial.println(PMTK_Q_RELEASE);
}

uint32_t timer = millis();

void loop() {
  char c = GPS.read();
  if (c && GPSECHO) Serial.write(c);

  if (GPS.newNMEAreceived()) {
    if (!GPS.parse(GPS.lastNMEA())) return;
  }

  if (timer > millis()) timer = millis();
  if (millis() - timer > 2000) {
    timer = millis();

    // Série
    Serial.print("\nTime: ");
    if (GPS.hour < 10) Serial.print('0');
    Serial.print(GPS.hour, DEC); Serial.print(':');
    if (GPS.minute < 10) Serial.print('0');
    Serial.print(GPS.minute, DEC); Serial.print(':');
    if (GPS.seconds < 10) Serial.print('0');
    Serial.print(GPS.seconds, DEC); Serial.print('.');
    if (GPS.milliseconds < 10) Serial.print("00");
    else if (GPS.milliseconds < 100) Serial.print("0");
    Serial.println(GPS.milliseconds);

    Serial.print("Date: ");
    Serial.print(GPS.day, DEC); Serial.print('/');
    Serial.print(GPS.month, DEC); Serial.print("/20");
    Serial.println(GPS.year, DEC);

    Serial.print("Fix: "); Serial.print((int)GPS.fix);
    Serial.print(" quality: "); Serial.println((int)GPS.fixquality);

    // LCD
    lcd.setCursor(5,0);
    int hour = GPS.hour + timezone;
    if (hour < 10) lcd.print('0');
    lcd.print(hour, DEC); lcd.print(':');
    if (GPS.minute < 10) lcd.print('0');
    lcd.print(GPS.minute, DEC); lcd.print(':');
    if (GPS.seconds < 10) lcd.print('0');
    lcd.print(GPS.seconds, DEC);

    lcd.setCursor(5,1);
    if (GPS.day < 10) lcd.print('0');
    lcd.print(GPS.day, DEC); lcd.print('.');
    if (GPS.month < 10) lcd.print('0');
    lcd.print(GPS.month, DEC); lcd.print('.');
    lcd.print(GPS.year, DEC);

    if (GPS.fix) {
      Serial.print("Location: ");
      Serial.print(GPS.latitude, 4); Serial.print(GPS.lat);
      Serial.print(", "); Serial.print(GPS.longitude, 4); Serial.println(GPS.lon);
      Serial.print("Speed (knots): "); Serial.println(GPS.speed);
      Serial.print("Angle: "); Serial.println(GPS.angle);
      Serial.print("Altitude: "); Serial.println(GPS.altitude);
      Serial.print("Satellites: "); Serial.println((int)GPS.satellites);

      lcd.setCursor(0,2);
      float speed = GPS.speed * 1.852;
      lcd.print(speed);
      if (speed <= 1) lcd.print(" Windstille");
      else if (speed <= 9) lcd.print(" leiser Zug");
      else if (speed <= 46) lcd.print(" Brise");
      else if (speed <= 56) lcd.print(" starker Wind");
      else if (speed <= 74) lcd.print(" stuerm. Wind");
      else if (speed <= 83) lcd.print(" Sturm");
      else if (speed <= 102) lcd.print(" schwerer Sturm");
      else lcd.print(" Orkan");

      lcd.setCursor(0,3);
      lcd.print("Hoehe: "); lcd.print(GPS.altitude);
    }
  }
}

Processus de fabrication

  1. Contrôleur gant DIY low‑cost & voiture à hélice – Construisez votre propre contrôleur main Arduino
  2. Projet capteur DHT11 température/humidité avec indicateurs LED et buzzer piézo
  3. Enregistreur GPS avec Analyse Spatiale sur Azure IoT Hub
  4. Enregistreur de Température et Humidité Arduino avec DHT11 et Shield Ethernet
  5. Moniteur de Température et Horloge Temps Réel Arduino avec Écran TFT 3.2"
  6. Horloge à persistance rétinienne (POV) style analogique — Arduino Nano 17 LEDs
  7. Célébrez avec Lumière et Son : Projet Arduino Anniversaire DIY
  8. Automates Cellulaires Temps Réel sur Arduino avec Écran OLED 128x64
  9. Médiator Motorisé et Pédale d'Effet DIY – Impression 3D et Arduino