26 agosto 2018

Como usar o módulo GPS VK2828U7G5LF

Neste post vamos mostrar como usar o eficiente módulo GPS VK2828U7G5LF, um módulo muito simples de usar e de conectar, que utiliza a interface serial/ttl para comunicação com o microcontrolador.

Módulo GPS VK2828U7G5LF e Arduino

Na imagem acima mostramos o teste do módulo com um Arduino Uno e um display LCD 16x2 I2C.

O módulo GPS VK2828U7G5LF


O módulo GPS VK2828U7G5LF pesa apenas 14 gramas e se caracteriza por um baixo consumo de corrente (50mA/Hora) e tamanho reduzido, sendo indicado para utilização em projetos compactos.

Na imagem abaixo temos a pinagem do módulo,  que não vem com uma barra de pinos soldada. Ao invés disso, temos um conector com 6 fios, o que também facilita na hora de embutir este GPS no seu projeto:

Pinagem módulo GPS VK2828U7G5LF

Contando com antena na própria placa, a alimentação é feita com tensões entre 3.3 e 5VDC, mas atenção ao nível de sinal do módulo, que é de 3.3V. Em ligações com placas como Arduino Uno e Mega, por exemplo, isso vai exigir a utilização de um conversor de nível lógico, como o que vamos usar neste post.

A comunicação do módulo GPS VK2828U7G5LF com o microcontrolador é feita pela interface serial (pinos RX e TX). O pino ENABLE serve para habilitar ou desabilitar o GPS (nível alto e baixo, respectivamente), e o pino PPS (B) é o Pulse Per Second, utilizado para sincronização do sinal.

GPS - Posicionamento

No módulo temos ainda os leds Power (vermelho, no lado esquerdo) que indica que o mesmo está energizado, e o led PPS (verde) na parte da frente e também na parte posterior, que pisca quando o módulo realizou a comunicação com os satélites GPS e adquiriu posicionamento.

Conexão módulo GPS com Arduino


Na conexão do módulo com a placa Arduino, vamos conectar os pinos RX e TX nas portas 4 e 3 respectivamente para estabelecer a comunicação entre o GPS e o microcontrolador. Como mencionei anteriormente, vamos usar um conversor de nível lógico entre os componentes, para converter o sinal de 3.3V em 5V e vice-versa.

Circuito GPS Arduino e Display LCD 16x2 I2C

Os dados serão mostrados em um display LCD 16x2 com adaptador I2C e backligh azul, mas também serão enviados para o Serial Monitor, se você preferir esse método de visualização. No circuito não vamos usar os pinos Enable e PPS (B), que permanecem desconectados.

Programa


O programa abaixo usa a biblioteca TinyGPS++ (download), usada anteriormente no post Como usar o módulo GPS GY-NEO6MV2, que funciona de maneira semelhante a este módulo que estamos experimentando agora.

Você também vai precisar da biblioteca LiquidCrystal I2C, que você pode instalar a partir da IDE do Arduino, no menu Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas. Procure por liquidcrystal_i2c e clique em instalar, conforme a imagem abaixo:

Instalação biblioteca LiquidCrystal I2C IDE Arduino

Carregue o programa abaixo no Arduino, alterando o endereço na linha 19 (0x3B) para o endereço I2C do display I2C que você estiver utilizando. Se não souber, utilize o I2C scanner para descobrir o endereço do seu display:


  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
//Programa: Modulo GPS VK2828U7G5LF com Arduino
//Autor: Arduino e Cia

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

//Pinos utilizados para conexao do modulo GPS
static const int RXPin = 4, TXPin = 3;

//Objeto TinyGPS++
TinyGPSPlus gps;

//Conexao serial do modulo GPS
SoftwareSerial Serial_GPS(RXPin, TXPin);

//Inicializa o display no endereco 0x3B
//e define o numero de colunas e linhas do display
LiquidCrystal_I2C lcd(0x3B, 16, 2);

void setup()
{
  //Baud rate Arduino
  Serial.begin(115200);
  //Baud rate Modulo GPS
  Serial_GPS.begin(9600);

  //Mostra informacoes iniciais no serial monitor
  Serial.println(F("Modulo GPS VK2828U7G5LF "));
  Serial.print(F("Biblioteca TinyGPS++ v. "));
  Serial.println(TinyGPSPlus::libraryVersion());
  Serial.println();

  //Inicializa o display LCD I2C
  lcd.init();
  lcd.backlight();
  //Informacoes iniciais no display
  lcd.setCursor(0, 0);
  lcd.print("Lat: ");
  lcd.setCursor(0, 1);
  lcd.print("Lon: ");
}

void loop()
{
  //Conexao com modulo GPS
  while (Serial_GPS.available() > 0)
    if (gps.encode(Serial_GPS.read()))
    {
      displayInfo();
    }

  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println(F("GPS nao detectado! Verifique as conexoes..."));
    while (true);
  }
}

void displayInfo()
{
  //Mostra informacoes no Serial Monitor e no display LCD
  Serial.print(F("Coordenadas (lat/long): "));
  if (gps.location.isValid())
  {
    Serial.print(gps.location.lat(), 6); //latitude
    lcd.setCursor(5, 0);
    lcd.print(gps.location.lat(), 6);
    Serial.print(F(","));
    Serial.print(gps.location.lng(), 6); //longitude
    lcd.setCursor(5, 1);
    lcd.print(gps.location.lng(), 6);
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.print(F("  Data/Hora: "));
  if (gps.date.isValid())
  {
    Serial.print(gps.date.day()); //dia
    Serial.print(F("/"));
    Serial.print(gps.date.month()); //mes
    Serial.print(F("/"));
    Serial.print(gps.date.year()); //ano
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.print(F(" "));
  if (gps.time.isValid())
  {
    if (gps.time.hour() < 10) Serial.print(F("0"));
    Serial.print(gps.time.hour()); //hora
    Serial.print(F(":"));
    if (gps.time.minute() < 10) Serial.print(F("0"));
    Serial.print(gps.time.minute()); //minuto
    Serial.print(F(":"));
    if (gps.time.second() < 10) Serial.print(F("0"));
    Serial.print(gps.time.second()); //segundo
    Serial.print(F("."));
    if (gps.time.centisecond() < 10) Serial.print(F("0"));
    Serial.print(gps.time.centisecond());
  }
  else
  {
    Serial.print(F("INVALID"));
  }
  Serial.println();
}

O módulo GPS VK2828U7G5LF pode demorar alguns minutos para detectar os satélites de posicionamento. Depois disso, os dados serão mostrados no display LCD e também no serial monitor.

Nenhum comentário:

Postar um comentário