Módulo GPS com Antena para Arduino e Raspberry PI

Aplicação e funcionamento: Você algum dia já deve ter pensado: qual a latitude e longitude em que estou agora? Em que lugar do mundo eu estou? Será que consigo...

Aplicação e funcionamento:

Você algum dia já deve ter pensado: qual a latitude e longitude em que estou agora? Em que lugar do mundo eu estou? Será que consigo me ver acenando no Google Earth? OK, talvez a resposta seja não, mas seria incrível não seria?

Este Módulo GPS permite a você fazer boa parte disso a toda hora. Se o Módulo for adaptado em um carrinho ou qualquer outro projeto eletrônico será possível ver onde ele vai estar, a velocidade de deslocamento, etc.

O Módulo GPS é um dispositivo incrível com uma ampla área de aplicação, geralmente é utilizado em Drones (dispositivos que tem autonomia de vôo). Para funcionamento o Módulo trabalha com tensão de 3.3V, deve-se ter cuidado para não alimentá-lo com tensão superior.

O Módulo GPS é bastante preciso, sua antena intensifica a detecção de sinal, resultando em mais satélites detectados, tornando o dispositivo muito mais eficiente.

Dentre as informações fornecidas pelo Módulo GPS é possível destacar a altitude, latitude, longitude, data, hora e velocidade de deslocamento. Com estes dados podemos localizar esses locais pelo Google Earth, obtendo assim, o seu local atual, ou ainda fazer com que o protótipo realize tarefas em determinada localização e horário.

No teste abaixo realizaremos a localização do dispositivo, utilizando o Arduino Uno para decodificar os dados recebidos pelo Módulo GPS e, através dos dados recebidos e informados obteremos as coordenadas.

Teste Prático:

 

 

Produtos Utilizados:

modulo-gps

Módulo GPS com antena para Arduino

Arduino UNO

Display LCD com fundo azul 16×2

– Resistor 4,7kΩ

– Resistor 10kΩ

Jumpers

Protoboard

Padrões de comunicação:

O padrão de comunicação do Módulo GPS é a interface Serial RS-232, é um padrão de alta velocidade de transferência de dados que trabalha com a transferência de dados binários entre os dispositivos. Este padrão é o mesmo utilizado na comunicação do Arduino com o computador, o padrão utiliza somente 2 fios o TX (transceiver) e o RX (receiver), e é muito utilizado por impressoras, dispositivos USB, entre outros.

Montagem Física:

Para ligação basta conectar o Módulo GPS a saída 3.3V do Arduino e seguir as orientações conforme a imagem abaixo:
montagem-gps

 

Funcionamento do programa:

O código que estaremos utilizando fará a leitura dos dados recebidos pelo Módulo GPS, e enviará para a porta serial os valores de forma organizada. Estamos disponibilizando o código-fonte comentado para seu melhor entendimento.

Download do Programa Principal

#include <Adafruit_GPS.h>
#ifdef __AVR__
#include <SoftwareSerial.h>
#endif
#include <LiquidCrystal.h>
#define mySerial Serial
Adafruit_GPS GPS(&mySerial);
#define GPSECHO true
 
boolean usingInterrupt = false;
void useInterrupt(boolean);
 
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
 
void setup() 
{
 lcd.begin(16, 2);
 Serial.begin(115200);
 Serial.println("www.usinainfo.com.br");
 
 GPS.begin(9600);
 mySerial.begin(9600);
 
 GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
 
 GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); 
 
 GPS.sendCommand(PGCMD_ANTENNA);
 
#ifdef __arm__
 usingInterrupt = false; 
#else
 useInterrupt(true);
#endif
 
 mySerial.println(PMTK_Q_RELEASE);
 
 lcd.print("UsinaInfo");
 lcd.setCursor(0, 1);
 lcd.print("Aguardando GPS");
 
 delay(5000);
 lcd.clear();
 
}
 
#ifdef __AVR__
 
SIGNAL(TIMER0_COMPA_vect) {
 char c = GPS.read();
 
#ifdef UDR0
 if (GPSECHO)
 if (c) UDR0 = c; 
 
#endif
}
 
void useInterrupt(boolean v) {
 if (v) {
 
 OCR0A = 0xAF;
 TIMSK0 |= _BV(OCIE0A);
 usingInterrupt = true;
 } 
 else {
 
 TIMSK0 &= ~_BV(OCIE0A);
 usingInterrupt = false;
 }
}
#endif //#ifdef__AVR__
 
uint32_t timer = millis();
void loop() 
{
 
 for(int tst1=0; tst1<8; tst1++)
 {
 
 if (! usingInterrupt) {
 
 char c = GPS.read();
 
 if (GPSECHO)
 if (c) Serial.print(c);
 }
 
 if (GPS.newNMEAreceived()) {
 
 if (!GPS.parse(GPS.lastNMEA())) 
 return; 
 }
 
 if (timer > millis()) timer = millis();
 
 if (millis() - timer > 2000) { 
 timer = millis();
 
 float var = GPS.speed;
 var = var*1.852;
 
 Serial.print("nTime: ");
 Serial.print(GPS.hour, DEC); 
 Serial.print(':');
 Serial.print(GPS.minute, DEC); 
 Serial.print(':');
 Serial.print(GPS.seconds, DEC); 
 Serial.print('.');
 Serial.println(GPS.milliseconds);
 Serial.print("Date: ");
 Serial.print(GPS.day, DEC); 
 Serial.print('/');
 Serial.print(GPS.month, DEC); 
 Serial.print("/20");
 Serial.println(GPS.year, DEC);
 Serial.print("Fix: "); 
 Serial.print((int)GPS.fix);
 Serial.print(" quality: "); 
 Serial.println((int)GPS.fixquality); 
 Serial.print(GPS.longitude, 4); 
 Serial.print(GPS.lon);
 Serial.print("Speed (Km/H): "); 
 Serial.println(var);
 Serial.print("Altitude: "); 
 Serial.println(GPS.altitude);
 Serial.print("Sat: "); 
 Serial.println((int)GPS.satellites);
 
 // if (GPS.fix) 
 // {
 
 lcd.setCursor(0,0);
 lcd.print("-");
 lcd.print(GPS.latitude, 4);
 lcd.print(GPS.lat);
 lcd.setCursor(0,1);
 lcd.print("-");
 lcd.print(GPS.longitude, 4);
 lcd.print(GPS.lon);
 
 delay(2000);
 }
 
 lcd.clear();
 
 for(int tst=0; tst<8; tst++)
 { 
 float var = GPS.speed;
 var = var*1.852;
 
 lcd.print(var);
 lcd.println("Km/H");
 lcd.setCursor(0,1);
 lcd.print("Sat: "); 
 lcd.print((int)GPS.satellites);
 
 delay(1000); 
 lcd.clear();
 }
 }
}

 

Conclusões:

O Módulo GPS é de alta qualidade e de grande precisão, apresenta ótimo funcionamento, inexistindo a necessidade de adaptações. Com ele é possível criar é projetos autônomos, sem a necessidade de motorista ou piloto. Enfim, a criatividade é sua, faça bom uso!

Autor: Leonardo Dalla Porta

Categorias
Arduino
Sem Comentários

Enviar Resposta

*

*

Sobre nós

Hoje a Usinainfo é um dos maiores ecommerces de Ferramentas, Peças para Eletrônica, Componentes Eletrônicos, Sensores e Arduino do Brasil, contando com uma grande diversidade de produtos na linha de eletrônica.

Sugestões

Artigos Relacionados