Usando Arduino GPS Shield com Google My Maps 43

O sistema GPS se mostra essencial nos dias de hoje. Ele está presente em drones, aviões comerciais, robôs terrestres e carros elétricos autônomos. Embora o sistema GPS esteja presente em diversas tecnologias de ponta, ele também está acessível a você que quer desenvolver seus projetos utilizando este recurso. Existem diversas maneiras de implementar um sistema de geolocalização usando GPS. Neste post iremos mostrar como gravar as coordenadas de GPS em um cartão SD e fazer a exibição desses dados no Google My Maps, usando o Arduino GPS Shield Duinopeak para Arduino.

SHIELD_ANTENA

Material Utilizado

Funcionamento do Shield GPS Duinopeak

O Arduino GPS Shield Duinopeak é composto das seguintes partes:

Ele se comunica com o Arduino através da interface UART com uma velocidade de transmissão padrão de 9600bps. É possível usar tanto a interface serial nativa do Arduino (Pinos D0 e D1) como uma interface serial via Software (Software Serial).

A interface serial de comunicação é selecionada entre os pinos D2 e D7 através de jumpers. Para este post deixaremos livre a porta Hardware Serial do Arduino para facilitar a programação do mesmo e usaremos os pinos 2 e 3 para comunicação via Software Serial com o shield GPS. Os jumpers devem ficar da seguinte maneira:

Pinagem seleção porta serial

O Arduino GPS Shield conta também com um leitor de cartão SD que utiliza a interface SPI do Arduino para comunicação. Com isso existe a possibilidade de gravar os dados de GPS em um cartão SD funcionando como um datalogger. Mostraremos a utilização do cartão SD mais adiante. Lembrando que o cartão deve estar formatado em FAT.

O Shield possui dois LEDs de indicação. O LED PWR deve acender sólido indicando que o Shield está energizado e o LED TP deve piscar indicando que o Shield realizou a localização dos satélites de GPS.

Programa Arduino GPS Datalogger

Antes de compilar o programa exemplo, precisamos baixar e instalar a biblioteca TinyGPS. Com essa biblioteca é possível “parsear” os dados NMEA produzidos pelo GPS e extrair informações importantes como latitude, longitude, velocidade, número de satélites e etc.

Então esses dados são gravados em um arquivo no formato CSV dentro do cartão SD. Esse arquivo gerado terá nome GPSLOGxx.CSV e será incrementado um número cada vez que o Arduino reiniciar.

Para fazer o download da biblioteca TinyGPS acesse aqui e baixe o arquivo .zip da última versão da biblioteca. Então, na IDE do Arduino clique em Sketch -> Incluir Biblioteca -> Adicionar biblioteca .ZIP.

Menu adicionar biblioteca ZIP

Copie o programa a seguir dentro da IDE Arduino e grave no Arduino.

Ao ligar o Arduino, dê uma caminhada na rua e logo você deverá ver o LED GPS fix piscar. Continue caminhando, ou ande de preferência de carro, para coletar uma boa quantidade de coordenadas.

Desligue o Arduino, retire o cartão e insira em algum computador. Você deverá ver o arquivo gerado. Abra o arquivo no excel e o arquivo deverá conter mais ou menos o seguinte conteúdo:

Arquivo de dados CSV

Visualizando as coordenadas no Google My Maps

Para melhor visualizar os dados coletados no arduino GPS Shield, você poderá carregá-los no Google My Maps.

Acesse o My Maps e clique em “Create a New Map”.

Tela My Maps criar um novo mapa

Para carregar o arquivo .CSV clique em “Import”.

Tela My Maps importar um arquivo CSV

Então busque e abra o arquivo .CSV gravado no cartão SD.

Tela My Maps exibição das coordenadas

É possível fazer várias customizações no mapa, por exemplo, criar um traçado entre os pontos.

Tela My Maps traçado das coordenadas

Veja neste link como criar e customizar mapas no My Maps.

Veja a seguir um mapa interativo com as coordenadas de GPS:

Gostou do Arduino GPS Shield Duinopeak? Deixe seu comentário logo abaixo. Em caso de dúvidas, caso queira trocar uma ideia, ou até mesmo dividir seu projeto, acesse nosso Fórum!

Posts Relacionados

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

43 Comentários

  1. Ele salva a altitude também?
    Para ser utilizado em um Drone por exemplo.

    1. Olá Maurício, obrigado pela leitura!

      Salva altitude também. Veja no exemplo acima no seguinte trecho de código, todas as variáveis que são salvas inclusive altitude:

      char * log_col_names[LOG_COLUMN_COUNT] = {
      "longitude", "latitude", "altitude", "speed", "course", "date", "time", "satellites"
      }; // log_col_names is printed at the top of the file.

      Mas para medir altitude de um drone o melhor seria usar o GPS em conjunto com um Barômetro como os seguintes:
      https://www.filipeflop.com/pd-123084-sensor-gy-80-10-dof-acelerometro-giroscopio-magnetometro-barometro.html?ct=&p=1&s=1
      https://www.filipeflop.com/pd-6b919-sensor-de-pressao-e-temperatura-bmp280.html?ct=&p=1&s=1

      Giovanni Bauermeister
  2. Muito bacana!!! Show de bola!
    Obrigado!

    1. Obrigado pela leitura Rodrigo!

      Giovanni Bauermeister
  3. Boa tarde pessoal!!!
    Aprendo muito com esse site, e agradeço a todos por compartilhar vossas sabedoria….de coração, valeu galera.
    E claro brigadasssso Giovanni Bauermeister,,,,

    1. Olá Nilsom!
      Nós que agradecemos a leitura.
      Cometários como o seu nos motivam a produzir conteúdo cada vez melhor para vocês.

      Giovanni Bauermeister
  4. Eu nao poderia deixar de fazer meus sinceros agradecimentos, muito obrigado pelo compartilhamento desses projetos é de muito valor para os iniciantes.

  5. funciona com qualquer módulo gps, certo?

    1. Olá Alceu,

      Creio que sim.
      Contanto que o módulo gere dados no padrão NMEA.

      Se o GPS fornece os dados NMEA via serial, o Arduino irá ler esses dados e a biblioteca TinyGPS se encarrega de gerar o arquivo .csv

      Giovanni Bauermeister
  6. Bom dia Giovanni!
    Aprecio muito seus ensinamentos. Estou trabalhando com o módulo GPS L80 da Quectel. Eu sei que o baund rate e outras características destes módulos podem ser alteradas, via serial, com o protocolo NMEA, porém tenho tentado e nada muda. Estou usando o mesmo baund rate que recebo os dados (9600). Você já reconfigurou algum destes módulos? Tem alguma dica?
    abs.

    1. Olá Paulo,

      Muito obrigado pela leitura!

      Nunca tentei reconfigurar um módulo GPS,

      Eu sei que os módulos u-blox tem um software para isso. O U-center.
      Pelo software você consegue trocar o baudrate e fazer outras customizações.

      Pesquisei rapidamente o modelo que está usando. GPS L80 da Quectel.
      Para configurar ele parece que precisa enviar comandos usando protocolo PMTK.
      Encontrei um PDF com especificação de protocolo para esse GPS

      http://docs-europe.electrocomponents.com/webdocs/147d/0900766b8147dbed.pdf

      No capítulo 3 tem uma introdução:
      “This chapter introduces the MTK NMEA packet protocol, which is a set of extension messages of the
      standard NMEA packet protocol. These messages are used to control and configure L80 GPS module.”

      Na seção 3.16 pág 25 mostra qual o comando a ser utilizado para mudar o baudrate
      3.16. Packet Type: 251 PMTK_SET_NMEA_BAUDRATE

      No datasheet também devem ter outras informações sobre isso:
      http://www.quectel.com/uploadimage/downlad/l80_hardware_design_v1.1.pdf

      Espero ter ajudado. Abraço!

      Giovanni Bauermeister
  7. Olá, preciso de uma solução como esta com apenas um “agravante”, preciso enviar em tempo real as coordenadas para algum serviço na nuvem. Para isso preciso de um shield GPRS/3G certo? Ou há alguma outra forma?

    1. Olá Adriano!

      Creio que o mais fácil seria isso mesmo. Usar rede celular.
      Ou dependendo do projeto daria pra usar alguma coisa com rádio, tipo LoRa
      https://www.ibm.com/developerworks/community/blogs/tlcbr/entry/mp274?lang=en

  8. Boa noite. Estou com dificuldades para corrigir a data e hora, pois ele traz sempre com 3 horas a mais que o horário local. Pensei em apenas subtrair 3 horas, porém, se tiver passado da meia noite, a data também mudou, e, se for duas horas da manha, vai dar um número negativo. Como eu poderia montar uma função para tratar isso? Desde já obrigado.

    1. oi. usa a biblioteca time.
      com ela você consegue arrumar o tempo através de um offset.

      da uma olhada aqui:
      https://www.arduinoecia.com.br/2017/06/como-usar-modulo-gps-gy-neo6mv2.html

  9. Bem legal
    vc pode descrever a precisão do gps e as alternativas disponiveis em direção a uma precisão maior?
    obrigado

    1. Olá Jose!
      Você pode encontrar essa e muitas outras informações no datasheet do GPS
      https://www.u-blox.com/sites/default/files/products/documents/NEO-6_DataSheet_(GPS.G6-HW-09005).pdf

      No caso de precisão esse módulo tem 2,5m de precisão.

  10. Seria bacana enviar logo para um servidor MySql

    1. to tentando achar como faço isso.
      queria utilizar meu gprs shield.

  11. Muito bom seu post Giovanni!!

    Eu consigo gravar uma localização no cartão SD e fazer com que o arduino ligue uma saida digital quando chegar naquela posição?

    1. Obrigado pela leitura Isaac!
      Creio que seria possível sim. No caso do tutorial as posições já são gravadas no cartão SD.

  12. Olá,

    comprei esse shield e estou testando esse código que vc colocou no exemplo, o único resultado que recebo é “gps no data” e no número de satélites 0. Já tentei sair para um local ao ar livre e com quase nenhum nuvem no céu, mas não funciona. Inclusive recebo a mensagem ao compilar “deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]”. Alguma dica do que poderia ser?

    abs

    1. oi. aqui deu esse problema e era porque não precisava de conversor de nível. liguei direto e deu certo.

    2. Estou tendo este mesmo problema “GPS No Data” e 0 satélites.
      No meu caso, percebi que LED TP fica desligado. O que poderia ser o problema? (não encontro muita documentação sobre esse shield na internet e o site oficial está fora do ar).

      1. De acordo com o software é porque não tem satélites suficientes disponíveis para obter a localização:

        else // If GPS data isn’t valid
        {
        // Print a debug message. Maybe we don’t have enough satellites yet.
        SerialMonitor.print(“No GPS data. Sats: “);
        SerialMonitor.println(tinyGPS.satellites.value());
        }

  13. É possivel salvar a potência recebida por cada satélite?

  14. Excelente tutorial!!! Muito bom mesmo!!!

  15. É possível com uma plaquinha WiFi instalado nesse projeto, as informações do GPS serem enviadas atualizadas para um PC que o recebe, e o caminho pelo qual o Arduino está percorrendo ser informado on line no MAPA?

    1. O que eu preciso é parecido com um jogo de futebol, onde cada jogador tem 1 pulseira com o arduino dentro dela, e eu tenho um monitor, onde eu sei qual arduino está ligado, e onde ele está no exato momento do jogo… Nem preciso de informações de onde o jogador estava e pra onde ele foi, preciso mais é de informações de onde ele está em tempo real… É possível com um Wifi criar um sistema assim?
      Curto demais o site de vcs… Abração.

      1. Já conhece nosso fórum Fabrício?
        Bem legal sua ideia! Quem sabe você não posta sua ideia de projeto lá no fórum. Tem um pessoal maker bem bacana que pode te ajudar com ideias e melhorias para seu projeto.
        Link para o fórum: https://www.filipeflop.com/forum/

  16. Bom dia, quero saber si me pode informar o comsumo da placa gps.
    Obrigado.

  17. Giovanni, gostei bastante do GPS mas porque ele tem acesso somente pelo cartão SD não pela internet
    Hoje estamos com tanto acesso e ponto pela estrada com wifi ou internet via celular
    o cartão poderia ficar como download para incrementar novas rotas ou novos dados

    caso seja possível gostaria de seu retorno
    se abaixo meu contato

    1. Olá Rogério! Só salva os dados no cartão SD pois esse shield é apenas GPS e não tem internet.

      Mas é bem possível adicionar internet.

      Já ouviu falar dos módulos e shield SIM800? Vai cair como uma luva em seu projeto!

      Segue os links:
      https://www.filipeflop.com/produto/modulo-gsm-gprs-sim800l-antena-sma/
      https://www.filipeflop.com/produto/modulo-gsm-gprs-sim800l-antena/
      https://www.filipeflop.com/produto/gsm-gprs-shield-para-arduino-efcom-sim900-antena/

  18. Bom dia.

    Estou fazendo um trabalho de um Rover orientado por GPS e para fins de teste, quero saber se é possível gravar os dados direto no pc ao invés do cartão SD?

    1. Olá Leonardo! É possível. Tem várias maneiras pra fazer isso.
      Vou te passar algumas maneiras que imagino:
      1 – enviar os dados via cabo USB
      pesquise na internet por comunicação USB serial Arduino computador
      exemplo: https://pplware.sapo.pt/tutoriais/comunicacao-entre-pc-e-arduino/
      2 – enviar os dados via WiFi
      pesquise por ESP8266
      exemplo: https://circuitdigest.com/microcontroller-projects/arduino-vehicle-tracker-on-google-maps-using-esp8266
      3 – enviar os dados via bluetooth
      pesquise por HC-05 ou ESP32
      exemplo:
      https://www.filipeflop.com/blog/tutorial-modulo-bluetooth-com-arduino/
      https://www.robocore.net/tutoriais/bluetooth-hc-05-com-arduino-comunicando-com-pc.html

  19. Boa tarde,

    estou com um projetinho de um robo e preciso fazer com que ele que siga tais coordenadas, seria possível? como faço com que ele receba estas coordenadas? há possibilidade da utilização de um chip de celular como forma de rastreio?

    1. Olá Roney!

      Creio que seja possível sim.
      Para receber as coordenadas basta utilizar esse mesmo shield GPS que mostramos no tutorial.

      Também creio que você possa utilizar um shield GPRS celular para incrementar o projeto. https://www.filipeflop.com/produto/gsm-gprs-shield-para-arduino-efcom-sim900-antena/

      Abraço!

  20. Giovanni boa tarde!

    Estou tentando desnvolver um prototipo, que auxilie deficientes visuais. A ideia inicial seria identificar os pontos da minha cidade que possuem semaforo/faixa de pedestres, gravar estes pontos. Qual a sua opniao de melhor escolha para fazer a interação do deficiente com o ponto, e se tem como informar o tempo restante para travessia.

    grato

    1. Olá William! Muito legal a ideia.

      Creio que você possa tirar ideias de projetos como o seu já implementados e em uso.

      Por exemplo veja como funciona um semáforo para deficientes visuais em Belo Horizonte;
      https://g1.globo.com/minas-gerais/noticia/mais-um-semaforo-com-dispositivo-sonoro-ajuda-na-travessia-de-deficientes-visuais-em-belo-horizonte.ghtml

      E veja também a padronização desse tipo de semáforo: http://www.brasil.gov.br/cidadania-e-justica/2017/10/semaforos-sonoros-terao-novas-padronizacoes

      Abraço!

  21. Bom dia, ótimo projeto.
    Fiquei com uma duvida: no projeto é citado para eu fazer uma caminhada com ele, correto?

    1. Olá Diego!

      Sim. Para gravar um trajeto com várias coordenadas é necessário andar com o módulo.

      No caso do tutorial eu liguei o módulo no ônibus no meu trajeto para o trabalho.

      Abraço!