ESTUDANDO O MUNDO ARDUINO:E ANTECIPANDO O FUTURO:

GPS

acessar com  www.ebanataw.com.br/arduino/expgps.htm

Este módulo GPS é baseado no u-blox NEO-6M, possui antena cerâmica e EEPROM integradas, apresenta ótima precisão e sua utilização é muito simples.
A comunicação do módulo é feita por meio de uma porta serial, possui 4 pinos, VCC, RX, TX e GND.
Devido ao seu tamanho reduzido e por possuir uma antena integrada, o módulo se aplica perfeitamente em aplicações embarcadas e produtos finais para o mercado.

Especificações:
Modelo : GY-GPS6MV2
Tensão de alimentação: 3~5V
Antena cerâmica integrada
EEPROM para registro dos dados
Bateria de backup
Modo economia de energia
LED indicador de sinal
Tamanho da antena : 25*25mm
Tamanho do módulo : 25*35mm
Possui 5 furos de 3mm para fácil fixação
Taxa de transmissão padrão : 9600bps
Compatível com diversos controladores de vôo

Documentação:
Datasheet
Manual de integração de hardware
Descrição do receiver e especificação do protocolo
Software u-center para Windows
Biblioca Arduino TinyGPS

 

http://blog.eletrogate.com/gps-neo-6m-com-arduino-aprenda-usar/

 

O Neo-6M é simples e fácil de ser integrado em projetos com Arduino pois ó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.

Nesta montagem o módulo GPS Ne0-6M com um Arduino UNO apresenta as coordenadas da 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.

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

A sigla GPS é abreviação de Global Positioning System, e pode receber o sinal de dezenas de satélites de posicionamento que ficam orbitando a terra. Conseguindo receber os sinais de pelo menos 4 satélites já suficiente para o módulo calcular a posição onde se encontra.

 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.

A interface serial do módulo GPS aceita voltagens de até 3,3Volts, 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:

 

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:

#define GPS_RX  4
#define GPS_TX  3
#define GPS_Serial_Baund 9600
#include <SoftwareSerial.h>

 
// The serial connection to the GPS device
SoftwareSerial gpsSerial(GPS_RX, GPS_TX);
 
void setup()
{
  Serial.begin(115200); // Beginning the serial monitor at Baudrate 115200 and make sure you select same in serial monitor
  gpsSerial.begin(GPS_Serial_Baund);
}
 
void loop()
{
  //Mostra os dados crus do GPS
  while (gpsSerial.available() > 0)
  {
    Serial.write(gpsSerial.read());
  }
}

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:

#define GPS_RX  4
#define GPS_TX  3
#define GPS_Serial_Baund 9600

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

TinyGPS gps;
SoftwareSerial gpsSerial(GPS_RX, GPS_TX);

void setup()
{
  Serial.begin(GPS_Serial_Baund);
  gpsSerial.begin(GPS_Serial_Baund);
}

void loop()
{
  bool newData = false;
  unsigned long chars;

  // For one second we parse GPS data and report some key values
  for (unsigned long start = millis(); millis() - start < 1000;)
  {
    while (gpsSerial.available())
    {
      char c = gpsSerial.read();
      // Serial.write(c); //apague o comentario para mostrar os dados crus
      if (gps.encode(c)) // Atribui true para newData caso novos dados sejam recebidos
        newData = true;
    }
  }

  if (newData)
  {
    float flat, flon;
    unsigned long age;
    gps.f_get_position(&flat, &flon, &age);
    Serial.print("LAT=");
    Serial.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
    Serial.print(" LON=");
    Serial.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6);
    Serial.print(" SAT=");
    Serial.print(gps.satellites() == TinyGPS::GPS_INVALID_SATELLITES ? 0 : gps.satellites());
    Serial.print(" PREC=");
    Serial.print(gps.hdop() == TinyGPS::GPS_INVALID_HDOP ? 0 : gps.hdop());
    Serial.println();
    Serial.println();
  }

}

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!

 

 

 

NOTA: Este site é mantido pela equipe do engenheiro Roberto Massaru Watanabe e se destina principalmente para adolecentes e estudantes. Pelo caráter pedagógico do site, seu conteúdo pode ser livremente copiado, impresso e distribuido. Só não pode piratear, isto é, copiar e depois divulgar como se fosse de sua autoria.


ET-18\RMW\arduino\expgps.htm em 27/02/2018, atualizado em 28/02/2018 .