GPS Neo-6M com Arduino – Aprenda a usar

O artigo de hoje é sobre o módulo GPS Neo-6M. Esse módulo GPS é simples e fácil de ser integrado em projetos com Arduino. Ótimas bibliotecas já estão disponíveis online e facilitam bastante as tarefas de conversão e tratamento da string de dados que o módulo fornece ao Arduino.

Nesse texto vamos ligar o módulo GPS Ne0-6M com um Arduino UNO e apresentar dados de localização e velocidade na tela serial do computador. Uma aplicação bacana é mostrar os dados na tela de um LCD 16×2, ou mesmo gravá-los em um datalogger para fazer análises posteriores. Também vamos dar algumas dicas nessas direções.

** Revisão em andamento – atualizações em breve**

Introdução – Como funciona o módulo GPS?

Com certeza você sabe o que é o sistema GPS, ou pelo menos já ouviu falar dele. Embora o sistema seja usado diariamente por quase todo mundo, poucas pessoas sabem a infraestrutura que está por trás dos equipamentos GPS. A sigla é abreviação de Global Positioning System, e do ponto de vista físico, o sistema em si consiste em uma constelação de satélites, com um número mínimo de 24 satélites para manter o sistema operacional e um número alvo de 33.

O sistema GPS é mantido e administrado pela 50th Space Wing, uma das alas aéreas da Força Aérea dos EUA. Foi lançado originalmente em 1978 com objetivos militares, e acabou se tornando o backbone de toda uma indústria de equipamentos e serviços de posicionamento global.

Além da constelação de satélites, há também a rede de controle baseada em terra e os equipamentos de usuários em si. A constelação é constituída de satélites na órbit MEO (Medium Earth Orbit), a uma altitudade de aproximadamente 20200 km. Cada satélite dá a volta na Terra duas vezes por dia. O arranjo dos satélites é feito de forma que exista 6 planos orbitais igualmente espaçados circulando a Terra. Cada plano contém quatro “slots” ocupados por um satélite. Ou seja, o arranjo total compreende 24 slots, de forma que um usuário pode sempre ver(receber o sinal) de pelo menos 4 satélites de qualquer lugar do planeta.( Fonte: www.gps.gov). A imagem abaixo ilustra a constelação e seus 24 “slots”.

Constelação GPS

Constelação GPS. Fonte: www.gps.gov

Como o módulo GPS calcula a posição e velocidade?

Com pelo menos 4 satélites sendo percebidos por um módulo GPS, é possível saber a posição e velocidade global. Como isso é feito? Da seguinte forma: Primeiro, os dados enviados para a terra pelos satélites GPS possuem várias informações, dentre elas, as mais importantes é o tempo do momento exato em que o sinal foi enviado(cada satélite possui um preciso relógio atômico integrado para gerar essa informação). Além do tempo medido pelo relógio atômico do satélite, também é enviada a posição orbital do satélite e os tempos de chegada em diferentes pontos da órbita.

Em resumo, o seu módulo GPS(independente de modelo e fabricante) recebe de cada satélite um “timestamp” de quando o sinal foi enviado, e também a informação de onde cada satélite está posicionado(e várias outras informações). Assim, o receptor GPS sabe a distância para cada satélite. Com esses dados, o módulo calcula internamento, via triangulação de dados, a posição, velocidade e tempo exatos.

Para saber os detalhes do cálcula, acesse as seguintes referências:

É sempre bom lembrar que além do GPS, que é operado pela USAF, existem outras constelações de satélites usadas para os mesmos propósitos, como o sistema Galileu(Europa), o GLONASS(Russo) e o BeiDou(Chinês).

O módulo GPS Neo-6M

Para mostrar como integrar GPS ao seu projeto, vamos usar o módulo GPS Neo-6M. Esse módulo é capaz de informar a localização exata , enviando dados referentes a latitude e longitude, data, hora e velocidade de deslocamento.

Uma informação importante do Módulo GPS é sua interface serial de 3,3V, não tolerando 5V. Portanto, não aplica sinais de 5V ao módulo, lembre-se de utilizar um conversor de sinais lógicos, como faremos em nosso exemplo.

As especificações são:

  • Modelo: GY-GPS6MV1;
  • Tensão de trabalho: 3,3 a 5V DC;
  • Interface serial de 3,3V;
  • Taxa de transmissão padrão: 9600;
  • Dimensões do módulo (CxLxA): 30x23x4mm;
  • Dimensões da antena (CxLxA): 25x25x8mm;

Para usar o módulo, existe uma conhecida biblioteca chamada TinyGPS. Na verdade, essa biblioteca apenas faz a manipulação dos dados do GPS, evitando que você tenha que manipular as strings enormes que o módulo enviar. Outra boa biblioteca disponível é a GPSneo, que é bem semelhante à anterior.

Aspectos de Hardware

A montagem em si é bem simples posi o módulo GPS Neo-6M se comunica com Arduino via interface serial. Vamos usar um divisor de tensão simples para converter os sinais TX do Arduino(5V) para 3.3V correspondentes do RX do GPS Neo-6M. A montagem fica conforme abaixo:

Editado por Gustavo Murta

Várias montagens disponíveis na internet fazem a ligação direta dos pinos RX/TX, sem a conversão de nível de lógico. Em nossos testes, a conexão direta(sem conversão dos níveis lógicos da serial) também funcionou bem, mas recomendamos usar os níveis indicados pelo fornecedor do módulo. Qualquer teste ligando TX direto em RX é por sua conta e risco.

Aspectos de Software

Podemos fazer o software de duas formas. A mais simples de todas é simplesmente ler as strings originais do módulo GPS e mostrá-las na tela serial. A segunda forma é usar uma biblioteca para tratar os dados e usar funções pré-definidas para obter apenas as informações que você pŕecisa.

O código mais simples é mostrado abaixo:

 

Para esse primeiro código, você vai observar mais ou menos o seguinte na sua saída serial.

Essas strings são os dados “crus” tal como GPS envia para o Arduino. Para tratar as Strings vamos usar a biblioteca TinyGPS. Fazendo as devidas adaptações nos códigos de exemplo, uma bom código de referência é o que se segue abaixo:

 

Com o segundo código, você obterá como saída o seguinte conjunto de mensagens:

 

Oberseve que com as funções gps.f_get_position e gps.satelites nós obtivemos os dados de latitude e longitude e também quantos satélites foram identificados pelo módulo. Outras funções estão disponíveis para acessar as demais informações que o módulo fornece.

Sugerimos que você explore os exemplos da biblioteca TinyGPS para conhecer as demais funções que ela disponibiliza. Para entender o significa das strings originais do módulo(lidar com os dados crus pode dar flexibilidade para implementar a sua própria biblioteca ou funções) recomendamos o site gpsinformation(em inglês).

Por fim, imagina como ficaria legal integrar um LCD e um datalogger a esse projeto!  Aqui no blog também ensinamos a usar esses componentes em qualquer projeto com arduino. Confira os seguintes posts e incorpore um cartão SD e um LCD para visualizar os dados do seu módulo GPS:

Considerações finais

Lembre-se de verificar as recomendações de seu fornecedor sobre a tensão de ligação do módulo. Se você olhar de perto, verá que os pinos RX e TX estão conectados diretamente ao módulo uBlox, que é o chip GPS em si do módulo Neo 6m. O datasheet é uma ótima referência para conhecer mais dos módulos da uBlox, uma das principais fabricantes de chips GPS do mercado. De acordo com o datasheet o Neo 6M possui tensão de alimentação de 2,7 a 3,3V.

O que permite que alguns projetos na internet liguem diretamente em 5V é o fato de o pequeno shield ao qual o módulo uBlox vem integrado possuir um adaptador de tensão. Mas o mesmo não acontece com a interface serial, que se liga direta aos ṕinos do chip uBlox, portanto, cuidado!

Qualquer dúvida adicional, entre em contato conosco por meio dos comentários!

Referências

Avaliações: 5.0. de 1 voto.
Por favor, aguarde...
Vitor Vidal
Vitor Vidal
Engenheiro eletricista, mestrando em eng. elétrica e apaixonado por eletrônica, literatura, tecnologia e ciência. Divide o tempo entre pesquisas na área de sistemas de controle, desenvolvimento de projetos eletrônicos e sua estante de livros.