Arduino - GPS

En este tutorial, vamos a aprender cómo obtener las coordenadas GPS (longitud, latitud, altitud), la velocidad GPS (km/h) y la fecha y la hora desde el módulo GPS NEO-6M. También aprenderemos a calcular la distancia desde la posición GPS actual hasta unas coordenadas GPS predefinidas (p. ej. las coordenadas de Londres).

Hardware Requerido

1×Arduino Uno R3
1×Cable USB 2.0 tipo A/B (para PC USB-A)
1×Cable USB 2.0 tipo C/B (para PC USB-C)
1×NEO-6M GPS module
1×Cables Puente
1×(Recomendado) Shield de Bloque de Terminales de Tornillo para Arduino Uno
1×(Recomendado) Shield de Protoboard para Arduino Uno
1×(Recomendado) Carcasa para Arduino Uno
1×(Recomendado) Placa Base de Prototipado y Kit de Protoboard para Arduino Uno

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

Acerca del módulo GPS NEO-6M

Diagrama de pines

El módulo GPS NEO-6M incluye 4 pines:

  • Pin VCC: debe estar conectado a VCC (5V)
  • Pin GND: debe estar conectado a GND (0V)
  • Pin TX: se utiliza para la comunicación serie; debe conectarse al pin RX de Serial (o SoftwareSerial) en Arduino.
  • Pin RX: se utiliza para la comunicación serie; debe conectarse al pin TX de Serial (o SoftwareSerial) en Arduino.
Pinout del módulo GPS NEO-6M

Diagrama de Cableado

Diagrama de cableado del módulo GPS de Arduino

This image is created using Fritzing. Click to enlarge image

Por favor, tenga en cuenta que, aunque el diagrama de cableado proporcionado arriba podría funcionar, no es recomendable. El pin TX del Arduino emite 5V, pero el pin RX del módulo GPS solo puede aceptar 3.3V. Para garantizar la seguridad, se recomienda usar un divisor de voltaje entre el pin TX del Arduino y el pin RX del módulo GPS, como se muestra en el diagrama a continuación.

Diagrama de cableado del divisor de voltaje para el módulo GPS de Arduino

This image is created using Fritzing. Click to enlarge image

Código de Arduino

Lectura de coordenadas GPS, velocidad (km/h) y fecha y hora

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-gps */ #include <TinyGPS++.h> #include <SoftwareSerial.h> #define RX_PIN 4 // Arduino Pin connected to the TX of the GPS module #define TX_PIN 3 // Arduino Pin connected to the RX of the GPS module TinyGPSPlus gps; // the TinyGPS++ object SoftwareSerial gpsSerial(RX_PIN, TX_PIN); // the serial interface to the GPS module void setup() { Serial.begin(9600); gpsSerial.begin(9600); // Default baud of NEO-6M GPS module is 9600 Serial.println(F("Arduino - GPS module")); } void loop() { if (gpsSerial.available() > 0) { if (gps.encode(gpsSerial.read())) { if (gps.location.isValid()) { Serial.print(F("- latitude: ")); Serial.println(gps.location.lat()); Serial.print(F("- longitude: ")); Serial.println(gps.location.lng()); Serial.print(F("- altitude: ")); if (gps.altitude.isValid()) Serial.println(gps.altitude.meters()); else Serial.println(F("INVALID")); } else { Serial.println(F("- location: INVALID")); } Serial.print(F("- speed: ")); if (gps.speed.isValid()) { Serial.print(gps.speed.kmph()); Serial.println(F(" km/h")); } else { Serial.println(F("INVALID")); } Serial.print(F("- GPS date&time: ")); if (gps.date.isValid() && gps.time.isValid()) { Serial.print(gps.date.year()); Serial.print(F("-")); Serial.print(gps.date.month()); Serial.print(F("-")); Serial.print(gps.date.day()); Serial.print(F(" ")); Serial.print(gps.time.hour()); Serial.print(F(":")); Serial.print(gps.time.minute()); Serial.print(F(":")); Serial.println(gps.time.second()); } else { Serial.println(F("INVALID")); } Serial.println(); } } if (millis() > 5000 && gps.charsProcessed() < 10) Serial.println(F("No GPS data received: check wiring")); }

Pasos R\u00e1pidos

  • Abre el IDE de Arduino
  • Navega al icono de Bibliotecas en la barra izquierda del IDE de Arduino.
  • Busca “TinyGPSPlus”, luego encuentra la biblioteca TinyGPSPlus de Mikal Hart
  • Haz clic en el Instalar botón para instalar la biblioteca TinyGPSPlus.
Biblioteca TinyGPS++ para Arduino
  • Copia el código anterior y ábrelo con Arduino IDE
  • Haz clic en el botón Subir en el IDE de Arduino para subir el código al Arduino
  • Ver el resultado en el Monitor Serial:
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Calcular la distancia entre la ubicación actual y una ubicación predefinida

El código siguiente calcula la distancia entre la ubicación actual y Londres (lat: 51.508131, long: -0.128002)

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-gps */ #include <TinyGPS++.h> #include <SoftwareSerial.h> #define RX_PIN 4 // Arduino Pin connected to the TX of the GPS module #define TX_PIN 3 // Arduino Pin connected to the RX of the GPS module TinyGPSPlus gps; // the TinyGPS++ object SoftwareSerial gpsSerial(RX_PIN, TX_PIN); // the serial interface to the GPS module const double LONDON_LAT = 51.508131; const double LONDON_LON = -0.128002; void setup() { Serial.begin(9600); gpsSerial.begin(9600); // Default baud of NEO-6M GPS module is 9600 Serial.println(F("Arduino - GPS module")); } void loop() { if (gpsSerial.available() > 0) { if (gps.encode(gpsSerial.read())) { if (gps.location.isValid()) { double latitude = gps.location.lat(); double longitude = gps.location.lng(); unsigned long distanceKm = TinyGPSPlus::distanceBetween(latitude, longitude, LONDON_LAT, LONDON_LON) / 1000; Serial.print(F("- latitude: ")); Serial.println(latitude); Serial.print(F("- longitude: ")); Serial.println(longitude); Serial.print(F("- distance to London: ")); Serial.println(distanceKm); } else { Serial.println(F("- location: INVALID")); } Serial.println(); } } if (millis() > 5000 && gps.charsProcessed() < 10) Serial.println(F("No GPS data received: check wiring")); }

Pasos R\u00e1pidos

  • Copia el código anterior y ábrelo con Arduino IDE
  • Haz clic en el botón Subir en Arduino IDE para subir el código al Arduino
  • Ver el resultado en Serial Monitor:
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

WARNING

Tenga en cuenta que este tutorial está incompleto. Publicaremos en nuestra página de Facebook cuando el tutorial esté completo. Déle like para mantenerse actualizado.

Tutoriales Relacionados

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!