Skip to main content

[exemplo] módulo GPS

Objetivo:

Demonstrar o uso de módulo GPS (Global Positioning System) com Arduino para obter dados GPS.

Lista de material:

board_overview.png board_drawing.png
Fig.1 - Placa Arduino compatível UNO.
gps_mod.jpg R53TQnH.png
Fig.2 - Módulo GPS com interface UART/TTL.

Contextualização:

Sistema de posicionamento global

O sistema de posicionamento global, mais conhecido pela sigla GPS (em inglês Global Positioning System), é um sistema de navegação por satélite que fornece a um aparelho receptor móvel a sua posição, assim como o horário.

GPS24goldenSMALL.gif Hyperbolic_Navigation.svg Comparison_satellite_navigation_orbits.svg
Fig.3 - Apontamentos sobre GPS retirados de [2].
Set-up
70uITOr.png
placa Arduino compatível UNO
módulo GPS com interface UART/TTL
3.3V ---------------------- V
GND ---------------------- G
2 ---------------------- R
3 ---------------------- T
Fig.3 - Montagem ilustrativa das ligações a estabelecer entre placa de desenvolvimento e módulo GPS com interface UART/TTL.
Bibliotecas

Bibliotecas são coleções de código que perimitem ampliar a capacidade da placa de desenvolvimento facilitando a sua utilização. O IDE Arduino integra um gestor de Bibliotecas cujo uso se exemplifica na Fig.4.

A placa Arduino compatível UNO possui suporte integrado para comunicação série nos pinos 0 e 1. A Biblioteca SoftwareSerial permite estabelecer comunicação série nos restantes pinos digitais da placa. Neste exemplo sugere-se a utilização desta abordagem para proporcionar que o módulo GPS e a placa possam comunicar.

No exemplo abaixo, os pinos digitais 2 e 3 da placa Arduino compatível UNO são usados como linhas série RX e TX virtuais. 

Desta forma estabelece-se a ligação que permite que a placa escute a porta série do GPS e, quando os dados são recebidos do módulo, eles são enviados para placa. Sendo os dados comunicados pelo módulo GPS tipicamente numa linguagem padrão do GPS é comum o uso de Bibliotecas como a TinyGPSPlus para facilitar o uso da informação disponibilizada pelo módulo GPS num formato legível e útil.

oHv2Eft.png X2LQZxM.png
(a) (b)
Fig.4 - Exemplo de utilização do gestor de bibliotecas do IDE Arduino para instalação da Biblioteca TinyGPSPlus.
Programa
#include <SoftwareSerial.h>
#include <TinyGPSPlus.h>

SoftwareSerial gpsSerial(2, 3);  // RX, TX
TinyGPSPlus gps;

void setup() {
  gpsSerial.begin(9600);
  Serial.begin(115200);
}

void loop() {

  while (gpsSerial.available() > 0){
    if (gps.encode(gpsSerial.read()))
      displayInfo();
  }

  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println(F("No GPS detected: check wiring."));
    while(true);
  }
}

void displayInfo() {
  Serial.print(F("Location: "));

  if (gps.location.isValid()) {
    Serial.print(gps.location.lat(), 12);
    Serial.print(F(","));
    Serial.print(gps.location.lng(), 12);

  } else {
    Serial.print(F("INVALID"));
  }

  Serial.print(F("  Date/Time: "));
  
  if (gps.date.isValid()) {
    Serial.print(gps.date.month());
    Serial.print(F("/"));
    Serial.print(gps.date.day());
    Serial.print(F("/"));
    Serial.print(gps.date.year());
  } 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());
    Serial.print(F(":"));
    if (gps.time.minute() < 10) Serial.print(F("0"));
    Serial.print(gps.time.minute());
    Serial.print(F(":"));
    if (gps.time.second() < 10) Serial.print(F("0"));
    Serial.print(gps.time.second());
    Serial.print(F("."));
    if (gps.time.centisecond() < 10) Serial.print(F("0"));
    Serial.print(gps.time.centisecond());
  } else {
    Serial.print(F("INVALID"));
  }

  Serial.println();
}


Código.1 - Programa exemplo de utilização de módulo GPS e biblioteca TinyGPSPlus com placa Arduino compatível UNO.

[exemplo] módulo GPS

9JSllQV.png 45GQYAe.png
Fig.5 - Exemplo de utilização de módulo GPS com placa Arduino compatível UNO programada para processar os dados disponibilizados pelo módulo GPS e exibi-los através de comunicação série.

Outros exemplos

MMnvvKD.png h8eDfvF.png orKSYyb.png
[a] [b] [c]

[a] DEEC - FCTUC. Kit Arduino Uno > Instalação.  url: https://kb.deec.uc.pt/books/deec/page/instalacao-irK (acedido em 10/04/2024).

[b] DEEC - FCTUC. Kit Arduino Uno > [exemplo] I2C OLED.  url: https://kb.deec.uc.pt/books/deec/page/exemplo-i2c-oled (acedido em 10/04/2024).

[c] DEEC - FCTUC. Kit Arduino Uno > [exemplo] rumo ao DEEC.  url: https://kb.deec.uc.pt/books/deec/page/exemplo-rumo-ao-deec (acedido em 10/04/2024).

Referências

[1] Arduino. Software Serial Example. url: https://wiki-content.arduino.cc/en/Tutorial/LibraryExamples/SoftwareSerialExample (acedido em 11/04/2024).

[2] Wikipedia. Sistema de posicionamento global. url: https://pt.wikipedia.org/wiki/Sistema_de_posicionamento_global (acedido em 11/04/2024).