# [exemplo] módulo GPS

#### Objetivo:

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

#### Lista de material:

<table border="1" id="bkmrk-%28a%29-%28b%29-fig.1" style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 50.0494%;">[![board_overview.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/board-overview.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/board-overview.png)</td><td style="width: 50.0494%;">[![board_drawing.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/board-drawing.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/board-drawing.png)</td></tr><tr><td colspan="2" style="width: 100.099%;">Fig.1 - Placa Arduino compatível UNO.</td></tr></tbody></table>

<table border="1" id="bkmrk-%28a%29-%28b%29-fig.2" style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 50.0494%;">[![gps_mod.jpg](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/gps-mod.jpg)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/gps-mod.jpg)</td><td style="width: 50.0494%;">[![R53TQnH.png](https://i.imgur.com/R53TQnH.png)](https://i.imgur.com/R53TQnH.png)</td></tr><tr><td colspan="2" style="width: 100.099%;">Fig.2 - Módulo GPS com interface UART/TTL.</td></tr></tbody></table>

#### 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.

<table border="1" id="bkmrk-fig.3---apontamentos" style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 36.0%;">[![GPS24goldenSMALL.gif](https://upload.wikimedia.org/wikipedia/commons/e/e5/GPS24goldenSMALL.gif)](https://upload.wikimedia.org/wikipedia/commons/e/e5/GPS24goldenSMALL.gif)</td><td style="width: 36.0%;">[![Hyperbolic_Navigation.svg](https://upload.wikimedia.org/wikipedia/commons/9/91/Hyperbolic_Navigation.svg)](https://upload.wikimedia.org/wikipedia/commons/9/91/Hyperbolic_Navigation.svg)</td><td style="width: 26.5%;">[![Comparison_satellite_navigation_orbits.svg](https://upload.wikimedia.org/wikipedia/commons/b/b4/Comparison_satellite_navigation_orbits.svg)](https://upload.wikimedia.org/wikipedia/commons/b/b4/Comparison_satellite_navigation_orbits.svg)</td></tr><tr><td colspan="3" style="width: 100.082%;">Fig.3 - Apontamentos sobre GPS retirados de \[2\].</td></tr></tbody></table>

##### Set-up

<table border="1" id="bkmrk-placa-arduino-compat" style="border-collapse: collapse; width: 100%;"><tbody><tr><td colspan="3" style="width: 100.082%;">[![70uITOr.png](https://i.imgur.com/70uITOr.png)](https://i.imgur.com/70uITOr.png)</td></tr><tr><td class="align-center" style="width: 33.3608%;">placa Arduino compatível UNO</td><td style="width: 33.3608%;"><span style="color: #e03e2d;">  
</span></td><td class="align-center" style="width: 33.3608%; height: 29.4583px;">módulo GPS com interface UART/TTL</td></tr><tr><td class="align-right" style="width: 33.3608%; height: 29.4583px;">3.3V</td><td class="align-center" style="width: 33.3608%; height: 29.4583px;"><span style="color: #e03e2d;">----------------------</span></td><td style="width: 33.3608%; height: 29.4583px;">V</td></tr><tr style="height: 29.4583px;"><td class="align-right" style="width: 33.3608%; height: 29.4583px;">GND</td><td class="align-center" style="width: 33.3608%; height: 29.4583px;"><span style="color: #000000;">----------------------</span></td><td style="width: 33.3608%; height: 29.4583px;">G</td></tr><tr style="height: 29.4583px;"><td class="align-right" style="width: 33.3608%; height: 29.4583px;">2</td><td class="align-center" style="width: 33.3608%; height: 29.4583px;"><span style="color: #f1c40f;">----------------------</span></td><td style="width: 33.3608%; height: 29.4583px;">R</td></tr><tr style="height: 29.4583px;"><td class="align-right" style="width: 33.3608%; height: 29.4583px;">3</td><td class="align-center" style="width: 33.3608%; height: 29.4583px;"><span style="color: #843fa1;">----------------------</span></td><td style="width: 33.3608%; height: 29.4583px;">T</td></tr><tr style="height: 29.4583px;"><td colspan="3" style="width: 100.082%; height: 29.4583px;">Fig.3 - Montagem ilustrativa das ligações a estabelecer entre placa de desenvolvimento e módulo GPS com interface UART/TTL.</td></tr></tbody></table>

##### 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.

<table border="1" id="bkmrk-%28a%29-%28b%29-fig.4" style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 50.0494%;">[![oHv2Eft.png](https://i.imgur.com/oHv2Eft.png)](https://i.imgur.com/oHv2Eft.png)</td><td style="width: 50.0494%;">[![X2LQZxM.png](https://i.imgur.com/X2LQZxM.png)](https://i.imgur.com/X2LQZxM.png)</td></tr><tr><td class="align-center" style="width: 50.0618%;">(a)</td><td class="align-center" style="width: 50.0618%;">(b)</td></tr><tr><td colspan="2" style="width: 100.124%;">Fig.4 - Exemplo de utilização do gestor de bibliotecas do IDE Arduino para instalação da Biblioteca *TinyGPSPlus*.</td></tr></tbody></table>

##### Programa

<table border="1" id="bkmrk-%23include-%3Csoftwarese" style="border-collapse: collapse; width: 100%; height: 1069.46px;"><tbody><tr style="height: 1040px;"><td style="width: 99.9588%; height: 1040px;">```C
#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();
}
```

</td></tr><tr style="height: 29.4583px;"><td style="width: 99.9588%;">Código.1 - Programa exemplo de utilização de módulo GPS e biblioteca *TinyGPSPlus* com placa Arduino compatível UNO.</td></tr></tbody></table>

<span style="color: #222222; font-size: 1.4em; font-weight: 400;">\[exemplo\] módulo GPS</span>

<table border="1" id="bkmrk-%28a%29-%28b%29-fig.5" style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 50.0494%;">[![9JSllQV.png](https://i.imgur.com/9JSllQV.png)](https://i.imgur.com/9JSllQV.png)</td><td style="width: 50.0494%;">[![45GQYAe.png](https://i.imgur.com/45GQYAe.png)](https://i.imgur.com/45GQYAe.png)</td></tr><tr><td colspan="2" style="width: 100.124%;">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.</td></tr></tbody></table>

#### Outros exemplos

<table border="1" id="bkmrk-%5Ba%5D-%5Bb%5D-%5Bc%5D" style="border-collapse: collapse; width: 100%;"><tbody><tr><td class="align-center" style="width: 33.3051%;">*[![MMnvvKD.png](https://i.imgur.com/MMnvvKD.png)](https://kb.deec.uc.pt/books/deec/page/instalacao-irK)*</td><td style="width: 33.3051%;">*[![h8eDfvF.png](https://i.imgur.com/h8eDfvF.png)](https://kb.deec.uc.pt/books/deec/page/exemplo-i2c-oled)*</td><td style="width: 33.3051%;">*[![orKSYyb.png](https://i.imgur.com/orKSYyb.png)](https://kb.deec.uc.pt/books/deec/page/exemplo-rumo-ao-deec)*</td></tr><tr><td class="align-center" style="width: 33.3051%;">[\[a\]](https://kb.deec.uc.pt/books/deec/page/instalacao-irK)</td><td class="align-center" style="width: 33.3051%;">[\[b\]](https://kb.deec.uc.pt/books/deec/page/exemplo-i2c-oled)</td><td class="align-center" style="width: 33.3077%;">[\[c\]](https://kb.deec.uc.pt/books/deec/page/exemplo-rumo-ao-deec)</td></tr></tbody></table>

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

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

\[c\] DEEC - FCTUC. Kit Arduino Uno &gt; \[exemplo\] rumo ao DEEC. url: [https://kb.deec.uc.pt/books/deec/page/exemplo-rumo-ao-deec](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](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](https://pt.wikipedia.org/wiki/Sistema_de_posicionamento_global) (acedido em 11/04/2024).