Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Relógio GPS Preciso: Exatidão Acessível e Confiável

Componentes e Materiais

ComponenteQtdNota
Arduino UNO1
Display LCD 16×2 ou 20×4 com adaptador I2C1Endereço 0x27 ou 0x3F
Protoboard1
Jumpers1
Receptor GPS (GY-GPS6MV2 com u-blox NEO-6M)13,3/5V tolerante

Aplicativos

Sobre o Projeto

Já usei RTCs e NTP para relógios. Aqui apresento fonte alternativa: parsing de strings NMEA de satélites GPS.

Receptores GPS são baratos (ex.: GY-GPS6MV2).

Testes Iniciais

  1. PC com u-center (u-blox): Use adaptador FTDI → porta COM → fix em ~1 min (LED pisca). F8 → Text Console mostra strings NMEA.
  2. Decodificador online: rl.se/gprmc

Circuito

Código Principal (baseado em exemplo Adafruit GPS)

Bibliotecas: Wire.h, LiquidCrystal_I2C.h, Adafruit_GPS.h, SoftwareSerial.h.

Configuração GPS: saída RMC+GGA (altitude), taxa 1 Hz.

Fuso Horário

int timezone = +1; // Europa/Berlim (UTC+1)

Ajuste para seu fuso. Hora local = GPS.hour + timezone.

Velocidade do Vento (nós → km/h + escala Beaufort)


float speed = GPS.speed * 1.852; // 1 nó = 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 if (speed > 102) lcd.print(" Orkan");
else lcd.print(" ohne Bewertung");

Saída no LCD (20×4)

Atualização a cada 2 s. Funciona bem até em display 16×2 (omitir segundos/altitude).

Observações

Na Europa também existe sinal DCF77 (rádio), mas é mais caro e sensível.

Divirta-se explorando opções GPS!

Código Completo


// Test code for Adafruit GPS modules using MTK3329/MTK3339 driver
// Parsing via interrupção para liberdade no loop principal
// Modificado 01.02.2020 - Ingo Lohs
// GPRMC & GPGGA decoder: https://rl.se/gprmc

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

#include 
#include 

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

#define GPSECHO true
int timezone = +1; // UTC+1

void setup() {
  lcd.init(); lcd.backlight();
  Serial.begin(115200); delay(5000);
  Serial.println("Adafruit GPS library basic test!");

  GPS.begin(9600); // UBLOX 6M usa 9600
  GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); // RMC + GGA
  GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);    // 1 Hz
  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();

    // Serial debug
    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);
      // Beaufort (mesmo if-else acima)
      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 if (speed > 102) lcd.print(" Orkan");
      else lcd.print(" ohne Bewertung");

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

Processo de manufatura

  1. Controlador de Luva DIY de Baixo Custo e Carro a Hélice – Construa Seu Próprio Controlador de Mão Arduino
  2. Projeto DHT11: Sensor Temperatura/Umidade com LEDs Indicadores e Buzzer
  3. Construa um Datalogger GPS com Análise Espacial no Azure IoT Hub
  4. Registrador de Temperatura e Umidade com Arduino, DHT11 e Ethernet Shield
  5. Monitor de Temperatura e Relógio Tempo Real com Arduino Due e Display TFT 3.2"
  6. Relógio Analógico Estilo POV com LEDs – Projeto DIY Arduino Nano
  7. Celebre com Luz e Som: Projeto Arduino DIY de Aniversário
  8. Módulo GPS u-blox LEA‑6H 02: Guia de Integração com Arduino e Python
  9. Autômatos Celulares em Tempo Real no Arduino com Display OLED 128x64
  10. Palheta Motorizada e Pedal Stomp para Guitarra – DIY com Impressão 3D e Arduino