Reloj con GPS

Proyecto GPS mostrando en un display la latitud, longitud, día, mes, año, hora, minutos y segundos.

...
Posteado por Huchim el 30-05-2024 a las 22:46
Categoria: Arduino
Realizado por: Huchim Rivas Miguel Alberto - Segura Canul Issac Erubiel.

Presentación.

Este proyecto tiene el propósito de mostrar los valores de latitud, longitud, día, mes, año, hora, min y segundos en un LCD utilizando Arduino Nano junto al dispositivo GPS de forma clara y entendible.

Funcionamiento.

Al encender el arduino nano debe tomar los valores del GPS y mostrar esos valores en un display LCD.

Realización.

Materiales necesarios para el desarrollo del proyecto:

  • 1 Arduino Nano.
  • 1 Módulo GPS
  • Cables Jumpers
  • Panel LCD I2C

El resultado de las conexiones quedara de la siguiente manera:

 

Programación.

Se debe instalar las librerías del LCD I2C, del modulo GPS y Software Serial

El código utilizado para el Arduino Nano fue el siguiente:

#include // Incluimos la librería Wire para la comunicación I2C
#include // Incluimos la librería LiquidCrystal_I2C
#include // Incluimos SoftwareSerial
#include // Incluimos TinyGPS
 
TinyGPS gps; // Declaramos el objeto gps
SoftwareSerial serialgps(4, 3); // Declaramos el pin 4 Tx y 3 Rx
 
LiquidCrystal_I2C lcd(0x3F, 16, 2); // Inicializamos el LCD I2C, dirección 0x3F, 16 columnas y 2 filas
 
// Declaramos las variables para la obtención de datos
int year;
byte month, day, hour, minute, second, hundredths;
unsigned long chars;
unsigned short sentences, failed_checksum;
 
void setup()
{
  Serial.begin(115200); // Iniciamos el puerto serie
  serialgps.begin(9600); // Iniciamos el puerto serie del gps
  lcd.init(); // Inicializamos el LCD
  lcd.backlight(); // Encendemos la luz de fondo del LCD
 
  // Imprimimos en el LCD:
  lcd.setCursor(0, 0);
  lcd.print("GPS GY-GPS6MV2");
  lcd.setCursor(0, 1);
  lcd.print("Buscando senal");
  delay(5000); // Esperamos 5 segundos para leer el mensaje en el LCD
  lcd.clear(); // Limpiamos la pantalla del LCD
}
 
void loop()
{
  while (serialgps.available())
  {
    int c = serialgps.read();
 
    if (gps.encode(c))
    {
      float latitude, longitude;
      gps.f_get_position(&latitude, &longitude);
 
      lcd.setCursor(0, 0);
      lcd.print("Lat: ");
      lcd.print(latitude, 5);
      lcd.setCursor(0, 1);
      lcd.print("Lon: ");
      lcd.print(longitude, 5);
      delay(5000); // Esperamos 5 segundos para leer los datos de latitud y longitud en el LCD
 
      gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths);
 
      unsigned long startMillis = millis();
      while (millis() - startMillis < 5000) // Esperamos 5 segundos
      {
        // Ajustar la hora a la hora local
        int localHour = hour - 6; // Ajuste de horas para la zona horaria
|
        // Ajustar si la hora local es negativa
        if (localHour < 0) {
          localHour += 24;
          day -= 1; // Ir al día anterior
          // Ajustar la fecha correctamente
          if (day < 1) {
            month -= 1;
            if (month < 1) {
              month = 12;
              year -= 1;
            }
            // Asumimos meses con 30 días para simplificar,
            // en una implementación real se debería ajustar los días por mes y años bisiestos.
            day = 30;
          }
        }
 
        // Mostrar fecha y hora en el LCD
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Fecha: ");
        lcd.print(day, DEC); lcd.print("/");
        lcd.print(month, DEC); lcd.print("/");
        lcd.print(year);
 
        lcd.setCursor(0, 1);
        lcd.print("Hora: ");
        lcd.print(localHour, DEC); lcd.print(":");
        lcd.print(minute, DEC); lcd.print(":");
        lcd.print(second, DEC);
 
        // Espera de 1 segundo antes de actualizar los segundos
        delay(1000);
        second++;
        if (second >= 60) {
          second = 0;
          minute++;
          if (minute >= 60) {
            minute = 0;
            localHour++;
            if (localHour >= 24) {
              localHour = 0;
              day++;
              // Aquí deberías ajustar el día del mes correctamente
              // considerando los meses y años bisiestos.
            }
          }
        }
      }
 
      gps.stats(&chars, &sentences, &failed_checksum);
    }
  }
}

Utilización.

Al encender el arduino nano en el display primero mostrara que esta buscando la señal GPS indicando que se esta conectando a los satélites tomara un par de minutos cuando se haya conectado en el display primero mostrara los valores de la latitud y longitud luego mostrara el del día, mes, año, hora, minutos y segundos.

Se puede verificar la informacion de la altitud y longitud poniendo esos valores en Google Maps.

Conclusiones.

Miguel Huchim: Para concluir, el proyecto demostró la facilidad con la que se puede obtener información precisa sin tener que tener conexión a Internet o alguna aplicación.

Isaac Segura: Este proyecto representa una solución tecnológica que proporciona datos precisos de ubicación y tiempo de manera accesible y útil.

Referencias.

Campo, M. del. (1970). Geolocalización con módulo GPS GY-NEO6MV2 y LCD 1602. Retrieved from https://miarduinounotieneunblog.blogspot.com/2016/02/geolocalizacion-con-modulo-gps-gy.html

Leantec.ES, W. by leantec. E. E. de, leantec.ES, W. by, Leantec.ES, E. de, dice:, J. C., dice:, J., dice:, G., … Nombre. (2019). Tutorial Arduino: Modulo GPS GPS6MV2. Retrieved from https://leantec.es/tutorial-arduino-modulo-gps-gps6mv2/

Para comentar debes acceder Acceder

Comentarios


No hay comentarios en este post