Simplificate 2.0

Si algo parece muy complicado, es que esta mal explicado.

Librería completa de GPS para Arduino / GPS extended library.

with 19 comments


Constelación de satélites GPS.

Buenas, llevo una semana trabajando en lo que finalmente sera mi proyecto para el Ciclo Superior de Electrónica que estoy terminando, para ello tengo que hacer un vehículo autónomo que  basándose en la posición GPS se dirija con total seguridad hacia una localización que le hayamos dado. Hello all, i passed all the last week working on a project for the superior school, this project consist on a vehicle with a GPS that must go to other location based only in the GPS coordenates, the vehicle must do all the track alone and with the only help of a Compass module and a cheaper sonar.

El estandar NMEA 0183

The NMEA 0183 standar.

Para empezar con el proyecto lo primero que necesito es saber donde esta el vehículo en cuestión, esto lo logramos descifrando las sentencias NMEA que nos envía el GPS al Arduino, las sentencias NMEA son bien conocidas por todos aunque el estándar NMEA no es publico, para tener acceso al protocolo NMEA se debe pagar un “abono” para ser socio del estándar NMEA, la verdad desde aquí me gustaría decir que me parece una vergüenza que un estándar sea de pago, si es estándar debe ser libre, como son todos o casi todos los estándares que no sean propios de un fabricante. To start with this project, the first i need to know is where the vehicle are?, This can be achieved decoding the NMEA data that the GPS send to the Arduino. NMEA sentences are well know all over the internet, you can found a lot of webpages with information about NMEA sentences. But NMEA protocol are not free, this protocol is property of the NMEA  asociation, this asociation sell the protocol in his website for about 300 US Dollar, this is so much and i want to say that for me this is not asumible because one protocol must be free for all the people. Todas las sentencias del protocolo NMEA comienzan con el carácter ‘$’ y despues si es una sentencia estándar del protocolo NMEA con GP por lo que una sentencia NMEA estándar siempre comenzara con un “$GPxxx,” donde XXX es una combinación de diferentes caracteres que nos informa del tipo de sentencia que es, para ver algo más del protocolo podéis descargar este fichero:  NMEA0183 ( Solo en ingles ) All the NMEA related sentences start with the ‘$’ character and after if the sentence is a NMEA standar sentence it must continue with “GPxxx” where XXX are a combination of different characters that inform us about the kind of sentence that it is. If you want to know more only download this file: NMEA0183 Aunque el protocolo en si mismo tiene muchísimas sentencias diferentes, realmente son muy pocos los que nos interesan para localización de un vehículo en el espacio, principalmente son las siguiente:  Although the NMEA standard has a lot of sentences for us, to know where a vehicle is on the space, we only need a few sentences, these sentences are:

Sentencias NMEA de localización.

NMEA location sentences.

La primera sentencia es: The first is:

$GPGGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x1,xx2,x.x3,x.x4,M,x.x5,M,x.x6,xxxx7*hh

Cada termino de la frase se encuentra separado del anterior y del siguiente por el carácter ‘,’ hasta que encontramos el carácter ‘*’ que indica el final de la cadena y la suma de corrección de errores. All the terms are separated using the ‘,’ character , at the end of the sentence we can found the ‘*’ character that indicates the end and the checksum. Los campos son los siguientes:

  • hhmmss.ss: Hora, minutos y segundos the la ultima vez que se fijo la posición en hora UTC / Hours, minutes and seconds after the last fix position in UTC time.
  • llll.ll: Latitud en grados decimales. /  Latitude in decimal degrees. 
  • a: Carácter que toma el valor ‘N’ o ‘S’, indicando norte o sur. / Character that can be ‘N’ or ‘S’ that indicates North or South.
  • yyyy.yy: Longitud en grados decimales. / Longitude in decimal degrees.
  • a: Carácter que toma el valor ‘E’ o ‘W’, indicando el Este o el Oeste. / Character that can be ‘E’ or ‘W’ that indicates East or West.
  • x1: Calidad de la recepción GPS, ‘O’ No puede fijar posición, ‘1’ Posición fijada con GPS, ‘2’ Posición fijada con GPS y DGPS / GPS quality, ‘O’ measn no fix, ‘1’ fix with GPS, ‘2’ Fix with GPS and DGPS.
  • xx2: Satélites a la vista ( que no tienen por que ser lo usados para fijar la posición ) / Satellites in view ( this can be or not the same that are used to fix the position ) 
  • x.x3: Resolución relativa de la posición horizontal.  /  Horizontal dilution. http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
  • x.x4: Altitud relativa al mar ( no tiene por que ser precisa ) / Altitude relative to the sea ( this can not be precise )
  • M: Unidades de la medida de la altura / Altitude Unit of measure.
  • x.x5 : Altura del Geoide ( su padre sabe quien es ) / Altitude of Geoid ( His father must know himhttp://es.wikipedia.org/wiki/Geoide
  • M: Unidades de la medida del Geoide / Geoid units of measure.
  • x.x6 : Antigüedad de los datos DGPS ( de existir ) en segundos / Time lapse of the DGPS last  correction ( if exist).
  • xxxx7 : Numero de identificación de la estación DGPS ( si existe ) / Data Id of the DGPS station ( If exist ).
Todos los datos son lo suficientemente claros como para entenderlos, de hecho, si viéramos la sentencia en una pantalla tal cual escrita seriamos capaces de descifrarla tan solo conociendo la posición de los términos en la pantalla.
All the data are clear enough, in fact, if we see a sentence in a screen we can understand it without any problem, only knowing where the digits are located into the sentence.
A parte de esta sentencia vamos a procesar 2 sentencias más, muchos campos son repetidos por lo que no los comentare, solo comentare los campos nuevos:
A part of this sentence, we are going to process two more, because the two new sentences contains data that is common for all. I will only comment the new data in this new sentences:

GPRMC,081836,A,3751.65,S,14507.36,E,000.0,360.0,130998,011.3,E*62

  • O81836: Tiempo / Time.
  • 3751.65: Latitud / Latitude.
  • S: Sur o Norte / South or North.
  • 14507.36: Longitd / Longitude.
  • E: Este o Oeste / East or West.
  • 000.0: Velocidad sobre el suelo en nudos. / Speed over ground in knots.
  • 360.0: Curso relativo al norte real / Course relative to real North.
  • 130998: Fecha de hoy / Today date.
  • 011.3: Desviación magnética con respecto al norte real / Magnetic deviation in reference to real North. 
  • E: La desviación magnética es al este / Magnetic deviation is relative to the East.
En esta sentencia NMEA introducimos datos diferentes a la anterior, vemos que tenemos más datos sobre navegación, rumbo, velocidad y la desviación magnética, que se usa para sincronizar las brújulas con el norte real.
In this sentence we found new data relative to the navigation, speed, course and magnetic deviation that is used to sync the compass with the real north.

$GPGSA,A,3,,,,,,16,18,,22,24,,,3.6,2.1,2.2*3C

  • A: Configuración del receptor GPS ‘A’ Auto ‘M’ manual / Configuration of the receiver, ‘A’ Auto, ‘M’ manual.
  • 3 : Precisión GPS ‘1’, Sin posición, ‘2’ Posición con precisión 2D, ‘3’ Posición con precisión 3D / Precisión, ‘1’ not fix data, ‘2’ 2D fixed data, ‘3’ 3D fixed data.
El resto son datos de los satélites que no nos interesan para absolutamente nada.
The rest are info about satellite and for us this information is not interesting.
Con estos tres términos podemos determinar la posición en el espacio de forma completa y ademas el curso, la velocidad y otros datos de interes, aunque el protocolo NMEA tiene muchísimas sentencias más.
With this three sentences we can locate ourself in the space and adquire more data about navigation, like speed, course and more, in fact the NMEA standar use more sentences but for us with this is ok.

La librería para Arduino.

The library for Arduino.

La verdad que soy un maníaco a la hora de programar, me gusta tenerlo todo claro, no tener múltiples variable y funciones dando paseos por todo el código, por eso cada vez que necesito controlar algo hago uso de C++ y creo un objeto, que me incluya todo el código necesario para lo que sea que tenga que hacer y solo unas funciones mínimas para el exterior. To be honest i am a maniac when programming, i dislike to have a lot of functions and pieces of code around all the sketch, because that i make a library everytime i can to simplify the use of the hardware, C++ give us the power to make classes, with this we can make all the “hard to look” code into the class and offer a few simple functions to the outside world.

La librería que he creado se puede usar con cualquier GPS que use el estándar NMEA para entregar sus datos y un puerto serial, en mi caso yo tengo disponible un GPS de Parallax que nos provee de 4 frases, entre ellas estas 3 que he descrito arriba y una más que no nos es útil.
The library that i have created can be used with any GPS receiver that uses standard NMEA sentences. The GPS receiver i have is a Parallax, this GPS send us four different senteces, the three that are explained above and one more without any interest for us.

Libreria para Arduino / Library for Arduino

Written by cuningan

8 octubre, 2011 a 20:44

19 comentarios

Subscribe to comments with RSS.

  1. hola de casualidad sabes si se puede programar cualquier tipo de GPS con un mismo código y librería?

    kaname

    30 marzo, 2017 at 16:11

  2. Hola, te queria consultar si sabes como hacer para enviarle al GPS los datos de los satelites ultimos que leyo asi puede adquirir mas rápido los valores, en algunos casos tarda hasta 3 minutos el empezar a tomar valores

    Hola, te queria consultar si sabes como hacer para enviarle al GPS los datos de los satelites ultimos que leyo asi puede adquirir mas rápido los valores, en algunos casos tarda hasta 3 minutos el empezar a tomar valores

    8 junio, 2016 at 15:15

  3. Hola, me interesa mucho la librería pero no se como usarla, aparte trato de grabar el ejemplo que viene en el .rar y me sale un error, diciendo

    In file included from GPSReading.pde:12:
    C:\Program Files\Arduino\libraries\GPS/gps.h:3:23: error: WProgram.h: No such file or directory

    no se como solucionarlo, tengo la version de arduino 1.0.5

    saludos y muchas gracias por tu aporte.

    Fabio Sierra

    8 agosto, 2013 at 20:53

    • Es tu versión de arruino

      cuningan

      8 agosto, 2013 at 21:07

    • Es un fallo muy común en muchas librerías, al cambiar de la versión 023 a la 1.0 en ese cambio de versión cambiaron el nombre de la librería principal del entorno, para solucionarlo o usas la versión 023 o entras en el fichero que te dice y cambias “Wprogram.h” por “Arduino.h” y después ya que estamos me cuentas 🙂

      cuningan

      8 agosto, 2013 at 23:17

  4. es posible conectar a arduino un gps rastreador y que detecte las personas que hay a mi alrededor a largo alcance y que esquive obstaculos?

    gogy

    29 abril, 2013 at 17:04

  5. Hola!! Estoy interesada en testear la librería, ya la descargué y dí compilar en el IDE del Arduino (1.0.1), y me lanza este error:
    “En el fichero incluído de GPSReading.cpp:12:
    /home/breslopez/Descargas/ARDUINO/arduino-1.0.1/libraries/GPS/gps.h:3:23: error: WProgram.h: No existe el archivo o el directorio

    Busqué algún WPrograms.h que estuviese definido…pero no encuentro tal función…si me ayudas, sería genial!! Muchas gracias de antemano!!

    Brenda Solís López

    1 septiembre, 2012 at 1:56

  6. quisiera saber cuales son las funciones que trae la libreria y como es que funcionan, baje la libreria pero no encuentro por ningun lado una descripcion de las funciones

    Gustavo Navarro

    14 abril, 2012 at 6:35

    • Esta dentro del archivo gps.h, estan las funciones y todos los datos necesarios.

      cuningan

      27 abril, 2012 at 15:48

  7. Ya se ha cambiado la librería, se ha alojado en otro servicio en la nube y se ha modificado para funcionar correctamente, también tiene un ejemplo nuevo que si funciona para usarlo en vuestros programas.

    cuningan

    7 marzo, 2012 at 10:44

  8. Incluyo la libreria en el software de arduino pero no la pesca

    Tomás

    13 enero, 2012 at 17:11

    • elimine los .bak y me agarro, pero escribo el codigo que sale en la foto y el software no encuentra la funcion llamada GPS al verificar el codigo 😦

      Tomás

      13 enero, 2012 at 18:00

      • Seguramente es que tienes la version 1 de Arduino, esta version cambia muchas cosas entre ellas la forma de escribir librerias, cuando pueda y me de tiempo la volvere a escribir, perdona hombre.

        cuningan

        22 enero, 2012 at 20:38

  9. Estimado:

    Estoy trabajando en un proyecto con arduino, uso un gps y un modem gsm/gprs, me interesaron tus ejemplos pero no los puedo descargar, no aparecen, te agadeceria si me los pudieces hacer llegar por mail: jeque333@hotmail.com, desde ya muchas gracias!!!!

    Marcelo

    Marcelo

    21 octubre, 2011 at 16:25

    • Marcelo debes descargarlo al ordenador y cambiar la extensión a .zip, los tengo que subir como .pdf por que WordPress no me permite subirlo con .zip, si lo haces como te digo funcionara sin problemas, si te vuelve a fallar me avisas.

      cuningan

      22 octubre, 2011 at 21:09


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: