Arduino Nano - GPS
Este tutorial ensina como usar o Arduino Nano com um módulo GPS NEO-6M. Em detalhes, vamos aprender:
- Como conectar o Arduino Nano a um módulo GPS NEO-6M
- Como programar o Arduino Nano para ler coordenadas GPS (longitude, latitude e altitude) de um módulo GPS NEO-6M
- Como programar o Arduino Nano para calcular a distância entre a posição GPS atual e uma coordenada GPS predefinida (por exemplo, as coordenadas de Londres).
Além de longitude, latitude e altitude, o Arduino Nano também consegue ler a velocidade GPS (km/h) e a data e hora de um módulo GPS NEO-6M.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.
Sobre o módulo GPS NEO-6M
O módulo GPS NEO-6M é um módulo GPS que pode fornecer as seguintes informações:
- Longitude
- Latitude
- Altitude
- Velocidade GPS (km/h)
- Data e hora
Pinagem do Módulo GPS NEO-6M
O módulo GPS NEO-6M tem quatro pinos:
- O pino VCC: deve ser conectado ao VCC (5V)
- O pino GND: deve ser conectado ao GND (0V)
- O pino TX: é usado para comunicação serial e deve ser conectado ao pino RX do Serial (ou SoftwareSerial) do Arduino Nano.
- O pino RX: é usado para comunicação serial e deve ser conectado ao pino TX do Serial (ou SoftwareSerial) do Arduino Nano.

Diagrama de Ligação

This image is created using Fritzing. Click to enlarge image
Veja A melhor forma de alimentar o Arduino Nano e outros componentes.
Código Arduino Nano
Lendo coordenadas GPS, velocidade (km/h) e data e hora
/*
* Este código de Arduino Nano foi desenvolvido por pt.newbiely.com
* Este código de Arduino Nano é disponibilizado ao público sem nenhuma restrição.
* Para tutoriais completos e diagramas de ligação, visite:
* https://pt.newbiely.com/tutorials/arduino-nano/arduino-nano-gps
*/
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
const int RX_PIN = 6, TX_PIN = 5;
const uint32_t GPS_BAUD = 9600; //Default baud of NEO-6M is 9600
TinyGPSPlus gps; // The TinyGPS++ object
SoftwareSerial gpsSerial(RX_PIN, TX_PIN); // The serial interface to the GPS device
void setup() {
Serial.begin(9600);
gpsSerial.begin(GPS_BAUD);
Serial.println(F("Arduino - GPS module"));
}
void loop() {
if (gpsSerial.available() > 0) {
if (gps.encode(gpsSerial.read())) {
if (gps.location.isValid()) {
Serial.print(F("- latitude: "));
Serial.println(gps.location.lat());
Serial.print(F("- longitude: "));
Serial.println(gps.location.lng());
Serial.print(F("- altitude: "));
if (gps.altitude.isValid())
Serial.println(gps.altitude.meters());
else
Serial.println(F("INVALID"));
} else {
Serial.println(F("- location: INVALID"));
}
Serial.print(F("- speed: "));
if (gps.speed.isValid()) {
Serial.print(gps.speed.kmph());
Serial.println(F(" km/h"));
} else {
Serial.println(F("INVALID"));
}
Serial.print(F("- GPS date&time: "));
if (gps.date.isValid() && gps.time.isValid()) {
Serial.print(gps.date.year());
Serial.print(F("-"));
Serial.print(gps.date.month());
Serial.print(F("-"));
Serial.print(gps.date.day());
Serial.print(F(" "));
Serial.print(gps.time.hour());
Serial.print(F(":"));
Serial.print(gps.time.minute());
Serial.print(F(":"));
Serial.println(gps.time.second());
} else {
Serial.println(F("INVALID"));
}
Serial.println();
}
}
if (millis() > 5000 && gps.charsProcessed() < 10)
Serial.println(F("No GPS data received: check wiring"));
}
Passos Rápidos
- Clique no ícone Libraries na barra esquerda do Arduino IDE.
- Pesquise “TinyGPSPlus” e encontre a biblioteca TinyGPSPlus de Mikal Hart
- Clique no botão Install para instalar a biblioteca TinyGPSPlus.

- Copie o código mencionado acima e abra-o no Arduino IDE.
- Clique no botão Upload no Arduino IDE para enviar o código ao Arduino Nano.
- Verifique o Serial Monitor para observar o resultado.
8
Serial.println("Hello World!");
Message (Enter to send message to 'Arduino Nano' on 'COM15')
New Line
9600 baud
Calculando a distância entre a localização atual e uma localização predefinida
O código abaixo calcula a distância entre a localização atual e Londres (lat:51.508131 , long: -0.128002).
/*
* Este código de Arduino Nano foi desenvolvido por pt.newbiely.com
* Este código de Arduino Nano é disponibilizado ao público sem nenhuma restrição.
* Para tutoriais completos e diagramas de ligação, visite:
* https://pt.newbiely.com/tutorials/arduino-nano/arduino-nano-gps
*/
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
const int RX_PIN = 6, TX_PIN = 5;
const uint32_t GPS_BAUD = 9600; //Default baud of NEO-6M is 9600
TinyGPSPlus gps; // The TinyGPS++ object
SoftwareSerial gpsSerial(RX_PIN, TX_PIN); // The serial interface to the GPS device
const double LONDON_LAT = 51.508131;
const double LONDON_LON = -0.128002;
void setup() {
Serial.begin(9600);
gpsSerial.begin(GPS_BAUD);
Serial.println(F("Arduino - GPS module"));
}
void loop() {
if (gpsSerial.available() > 0) {
if (gps.encode(gpsSerial.read())) {
if (gps.location.isValid()) {
double latitude = gps.location.lat();
double longitude = gps.location.lng();
unsigned long distanceKm = TinyGPSPlus::distanceBetween(latitude, longitude, LONDON_LAT, LONDON_LON) / 1000;
Serial.print(F("- latitude: "));
Serial.println(latitude);
Serial.print(F("- longitude: "));
Serial.println(longitude);
Serial.print(F("- distance to London: "));
Serial.println(distanceKm);
} else {
Serial.println(F("- location: INVALID"));
}
Serial.println();
}
}
if (millis() > 5000 && gps.charsProcessed() < 10)
Serial.println(F("No GPS data received: check wiring"));
}
Passos Rápidos
- Copie o código e abra-o com o Arduino IDE.
- Clique no botão Upload no Arduino IDE para compilar e fazer upload do código para o Arduino Nano.
- Veja o resultado no Serial Monitor.
8
Serial.println("Hello World!");
Message (Enter to send message to 'Arduino Nano' on 'COM15')
New Line
9600 baud