Tutorial Arduino: Modulo GPS GPS6MV2

Tutorial Arduino: Modulo GPS GPS6MV2

Tutorial Arduino: Módulo GPS GPS6MV2



Hola amigos tecnólogos; En nuestra entrada de hoy estudiaremos el módulo GPS GPS6MV2. 
Aprendiendo el manejo de este dispositivo se nos abrirá las puertas de muchos e interesantes proyectos donde la localización, altura, velocidad o dirección de nuestro proyecto sea algo crucial para el funcionamiento del mismo.

Materiales necesarios



Arduino UNO
Modulo GPS6MV2
Cables de conexión.

Conozcamos un poco más el módulo GPS6MV2



Este módulo GPS ideal para controlarlo con Arduino o con cualquier otro microcontrolador esta basado en el chip receptor NEO 6M de la marca UBLOX.
El GPSMV2 incluye una antena Cerámica lista para ser instalada directamente en la PCB. 
La PCB viene provista de conectores para la alimentación y la trasnmisión de datos (Vcc, Tx, Rx y Gnd).

Características técnicas



-Receptor: Ublox NEO 6M
-Voltaje de alimentación: 3V a 5V
-Interfaz: UART, comunicación asíncrona
-Modelo: GY-GPSMV2


Esquema de conexión



En el siguiente esquema se representa la forma de conectar nuestro GPS a Arduino.
La conexión la hacemos en los pines 3 y 4, ya que estos son los pines que usaremos para la comunicación serie en lugar de los que Arduino tiene por defecto que son el pin 0 y 1.
Esto lo hacemos para evitar tener que desconectar el módulo GPS de Arduino cada vez que necesitamos programar Arduino.

Para usar otros pines como puerto serie tenemos usar la librería software serial. Esta librería esta instalada por defecto en el IDE de Arduino.


gps6mv2


Código



En esta ocasión tenemos dos formas de recoger los datos que el GPS genera. 

1.Código para la obtención datos puros.

Con este código podemos leer constantemente el módulo GPS6MV2 y representar estos datos por el monitor serial.
Hay que tener en cuenta que la comunicación con el GPS se hace a 9600 baudios, pero la de Arduino con el monitor serial se hace a 115200 baudios, por lo que tenemos que cuando abramos el monitor serial tenemos que cambiar de 9600 a 115200 baudios.

#include <SoftwareSerial.h>
SoftwareSerial gps(4,3);

char dato=' ';

void setup()
{
 Serial.begin(115200);            
 gps.begin(9600); 
}

void loop()
{
  if(gps.available())
  {
    dato=gps.read();
    Serial.print(dato);
    delay (50);
  }
}


Con el código de más arriba se reciben los datos ''puros'' es decir datos que siguen el protocolo NMEA (National Marine electronics Asociation). Este es un protocolo standar para la recepcion de datos GPS.

En la siguiente imagen podemos ver los datos del GPS.

gps arduino leantec


Nosotros nos quedaremos con la linea marcada de rojo en la imagen de más ariba, la que empieza por GPRMC y descifraremos los datos que en ella aparecen de lasiguiente forma:

120121.00: Nos indica la hora GMT ()
A: Nos indica que el dato de posición es correcto. (Si aparece una V es que no es correcto)
3718.51170: Nos indica la longitud ()
N: Nos indica al Norte.
00614.55235: Nos indica la latitud ()
W: Nos indica al Oeste
1.114: Nos indica la velocidad en nudos.
210416: Nos indica la fecha ()



2.Codigo para la obtencio de datos con libraria

Con este código obtenemos los datos con más orden. Para poder hacer esto necesitamos tener instalada la libreria TinyGPS.

Descargar librería TinyGPS

#include <SoftwareSerial.h>//incluimos SoftwareSerial
#include <TinyGPS.h>//incluimos TinyGPS

TinyGPS gps;//Declaramos el objeto gps
SoftwareSerial serialgps(4,3);//Declaramos el pin 4 Tx y 3 Rx
//Declaramos la 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
//Imprimimos:
Serial.println("");
Serial.println("GPS GY-GPS6MV2 Leantec");
Serial.println(" ---Buscando senal--- ");
Serial.println("");
}

void loop()
{
while(serialgps.available()) 
{
int c = serialgps.read(); 
if(gps.encode(c)) 
{
float latitude, longitude;
gps.f_get_position(&latitude, &longitude);
Serial.print("Latitud/Longitud: "); 
Serial.print(latitude,5); 
Serial.print(", "); 
Serial.println(longitude,5);
gps.crack_datetime(&year,&month,&day,&hour,&minute,&second,&hundredths);
Serial.print("Fecha: "); Serial.print(day, DEC); Serial.print("/"); 
Serial.print(month, DEC); Serial.print("/"); Serial.print(year);
Serial.print(" Hora: "); Serial.print(hour, DEC); Serial.print(":"); 
Serial.print(minute, DEC); Serial.print(":"); Serial.print(second, DEC); 
Serial.print("."); Serial.println(hundredths, DEC);
Serial.print("Altitud (metros): "); Serial.println(gps.f_altitude()); 
Serial.print("Rumbo (grados): "); Serial.println(gps.f_course()); 
Serial.print("Velocidad(kmph): "); Serial.println(gps.f_speed_kmph());
Serial.print("Satelites: "); Serial.println(gps.satellites());
Serial.println();
gps.stats(&chars, &sentences, &failed_checksum);
}
}
}
En la siguiente imagen vemos como se verán los datos recogidos por el GPS.

Datos gps arduinoPor último y para comprobar que la información recopilada por el módulo GPS6MV2 introducimos la latitud y la longitud en google maps.

gps maps arduino

25 Comments

    • Avatar
      Nicolás
      ene 9, 2017

      Hola buenas, tengo un problema con el GPS, he probado con dos modelos distintos de GPS, actualmente estoy probando con el GY-GPS6MV2 con una placa arduino Leonardo. Al compilar el código de ejemplo de la librería TinyGPS simple_test en el moditor serie solo me saca CHARS=0 SENTENCES=0 CSUM ERR=0 ** No characters received from GPS: check wiring ** He revisado que las conexiones esten bien e incluso he probado variar la velocidad del GPS desde 4800 hasta 115200 baudios y nada, ¿que podría ser?. Un saludo, gracias.

      • Avatar
        Sebasthian
        feb 19, 2017

        Deberías probar intercambiando los pines TX y RX. Saludos!

    • Avatar
      Blanca López
      feb 25, 2017

      Buenos días, quería saber si sería muy complicado recibir esos datos en una tablet (qué cambiaría en el código) a través de un bluetooth hc-06 que ya estaría conectado a los pines Rx y Tx de Arduino. Muchas gracias.

      • Avatar
        Sergio López
        feb 8, 2018

        Buenas. Yo hice algo similar para recibir datos en el teléfono móvil mediante el módulo bluetooth y tuve que diseñar una aplicación android para recibir los datos y mostrarlos en pantalla

        • Avatar
          erick
          mar 29, 2018

          me gustaria saber si viste un tutorial o ya sabias como hacer la aplicacion para el gps

    • Avatar
      Carlos
      mar 23, 2017

      Yo he conseguido hacerlo funcionar... Ahora, en la hora me muestra 1 hora me la y en la altura se sube casi 100m más o menos.... Esto como se podría calibrar??

      • Avatar
        Sergio López
        feb 8, 2018

        Podríamos hacer una escapada a la playa y situarte a una altura de nivel de mar o calibrarlo desde una zona donde conozcas exactamente la altura. Para calibrarlo deberías añadir o reducir un error

    • Avatar
      javier
      mar 30, 2017

      hola buenas, he utilizado el segundo programa y la librería, no me funciona, lo estoy utilizando con un arduino mega, ¿puede ser esa la causa? muchas gracias

      • Avatar
        Jorge Andrés Romero
        sep 18, 2017

        Me gustaría saber cómo di pudiste solucionarlo con el arduino mega o lo tuviste que hacer con el arduino uno. Gracias

    • Avatar
      Mauricio
      abr 22, 2017

      Hola, He adquirido el GpS6MV2 y ha sido imposible recibir datos utilizando arduino YUN, Solo obtengo asteriscos y ceros. Sin embargo utilizando el mismo programa y el arduino UNO funciona perfectamente. Que debo hacer para que funcione en el YUN, necesito recibir datos y subirlos a la web via wifi. Por favor responder. Muchas Gracias..

      • Avatar
        Jaime
        jul 12, 2017

        Hola, tengo el mismo problema, me da ceros y asteriscos pero para arduino uno. Conseguiste solucionarlo? sabes a qué se debe? yo tengo un shield que incorpora el ublox. Saludos

    • Avatar
      Jose Alejandro
      jul 7, 2017

      Hola buenas tardes, Tu sabes como puedo hacer la implementacion con Labview...?? Infinitas gracias...saludos...

    • Avatar
      Jorge Andrés Romero
      sep 18, 2017

      Hola buenas tardes, primero que todo gracias por tan excelente tutorial. Soy nuevo en esto del arduino. Tengo una pregunta. Primero tengo un arduino MEGA en vez del UNO (no creó que tenga problema) siguiendo el pasó a pasó cada una de las indicaciones, en el monitor serial pueden pasar horas y no me arroja ningun tipo de dato, el gps enciende el link, quiere decir que funciona así como el arduino funciona también, no se que pueda estar haciendo mal o que pueda estar fallando, me podrian ayudar x favor. De ante mano muchas gracias.

    • Avatar
      rey salcedo
      nov 6, 2017

      Excelente, gracias, todo funcionó con el arduino nano, mil gracias

    • Avatar
      Gustavo
      dic 9, 2017

      Cuando corro el programa solo obtengo "⸮⸮⸮" Alguien sabe como puedo solucionar esto? estoy usando un arduino uno. Ya he intentado varios ejemplos y en todos obtengo caracteres raros.

      • Avatar
        Kronosaqp
        dic 25, 2017

        Cambia los baudios de monitor serial a 115200 en la parte inferior derecha

    • Avatar
      Sergio
      feb 10, 2018

      Hola. Estoy teniendo cierto problema con lo siguiente: compilo el programa y lo subo al arduino y siempre que lo ejecuto, recibo señal, bien. Pero en ocasiones, recibo los datos correctos pero en otras obtengo una altura de 1000000m y 255 satélites, lo cual es imposible. Entonces, no sé por qué es ni cómo solucionarlo. Podrían ayudarme?

      • Avatar
        Adrián
        mar 27, 2018

        Tengo exactactamente el mismo problema que tu

    • Avatar
      Juan
      abr 20, 2018

      Hola a todos, alguien sabrá como calcular desplazamiento con este modulo, necesito marcar un punto, desplazarme una distancia x (que previamente fue seteada) y me de aviso cuando llegue a esta.Desde ya muchas gracias

    • Avatar
      Luis Salazar
      jul 23, 2018

      hola buenas tardes. hice todo lo que dice en este tutorial. y no me capta la ubicacion el GPS, me sale la V que significa que no es correcta la ubicación. en un principio si me salio, pero ahora ya no me sale. entonces quisiera saber si esto tiene solucion, o es que mi gps se me malogró. gracias

    • Avatar
      Alejandro
      ago 16, 2018

      Hola Sabes como guadar en memoria no volatil los parametros ? solo utilizo el $GPRMC (para no saturar el buffer) . ya logre que me diera solo ese comando, pero al apagarlo y volverlo a prender, me manda todos otra vez... gracias !!

    • Avatar
      JOSÉ
      sep 30, 2018

      Hola mi estimado amigo muy buen aporte gracias Quisiera me puedas ayudar en un problema que tengo ya con varios códigos 1.- La hora no es la misma ¿Coge la hora del satélite o de dónde? 2.- Me sale la S de Sur y estoy posesionado en el norte 3.- Los grados en 0. Espero me puedas ayudar, en espera de una favorable respuesta, deseándote éxitos!!!

    • Avatar
      wabbit
      oct 28, 2018

      ese modulo necesita conexion a internet?

    • Avatar
      gato
      feb 21, 2019

      Hola Mr Leantec : He conseguido con wemos d1 r2 hacer la transmision por wifi red local(192.168.1.129 en mi red) , sin embargo es muy lenta y a veces se cuelga . Es posible que sea por la velocidad de transmision de serialgps. ¿Alguna idea? #include #include #include TinyGPS gps; SoftwareSerial serialgps(4,3); int year; byte month, day, hour, minute, second, hundredths; unsigned long chars; unsigned short sentences, failed_checksum; const char* ssid = "*********"; const char* password = "*********"; WiFiServer server(80); void setup() { Serial.begin(115200); serialgps.begin(9600); WiFi.begin(ssid, password); server.begin(); Serial.println(""); Serial.println("GPS GY-GPS6MV2 Leantec"); Serial.println(" ---Buscando senal--- "); Serial.println(""); } void loop() { while(serialgps.available()) { int c = serialgps.read(); if(gps.encode(c)) { float latitude, longitude; gps.f_get_position(&latitude, &longitude); Serial.print("Latitud/Longitud: "); Serial.print(latitude,5); Serial.print(", "); Serial.println(longitude,5); gps.crack_datetime(&year,&month,&day,&hour,&minute,&second,&hundredths); Serial.print("Fecha: "); Serial.print(day, DEC); Serial.print("/"); Serial.print(month, DEC); Serial.print("/"); Serial.println(year); Serial.print("Hora: "); Serial.print(hour, DEC); Serial.print(":"); Serial.print(minute, DEC); Serial.print(":"); Serial.print(second, DEC); Serial.print("."); Serial.println(hundredths, DEC); Serial.print("Altitud (metros): "); Serial.println(gps.f_altitude()); Serial.print("Rumbo (grados): "); Serial.println(gps.f_course()); Serial.print("Velocidad(kmph): "); Serial.println(gps.f_speed_kmph()); Serial.print("Satelites: "); Serial.println(gps.satellites()); Serial.println(); gps.stats(&chars, &sentences, &failed_checksum); WiFiClient client = server.available(); // if (!client) { // return; // } delay(100); client.println("HTTP/1.1 200 OK"); client.println(""); client.print("

      Latitud/Longitud: "); client.print(latitude,4); client.print(", "); client.println(longitude,4); client.print("

      "); client.println("

      Fecha: "); client.print(day, DEC);client.print("/"); client.print(month, DEC); client.print("/"); client.print(year); client.print("

      "); client.println("

      Hora(Z): ");client.print(hour, DEC); client.print(":"); client.print(minute, DEC); client.print(":"); client.print(second, DEC); client.print("."); client.print(hundredths, DEC); client.print("

      "); client.println(""); delay(1000); } } }

Leave a Reply

* Name:
* E-mail: (Not Published)
   Website: (Site url withhttp://)
* Comment:
Type Code

Blog Search

Recent Articles

Latest Comments

Accept Este sitio web hace uso de cookies