Aprenda a utilizar o módulo GPS com Arduino
Olá amantes da tecnologia, tudo bem?
Nesta publicação iremos utilizar um módulo muito importante presente em todos os Smartphones, o GPS, que é muito utilizado para saber em quais coordenadas geográfico o nosso dispositivo está.
Através do Módulo GPS GY-NEO6MV2 iremos conseguir muitas informações legais, além da localização, através dele é possível obter a hora e data, para onde o gps está se locomovendo e até a altitude do local, olha quanta coisa só um módulo consegue, então se ainda não tem tá esperando o que? Passa lá na Loja AutoCore Robótica e garante o seu.
Agora vamos conhecer melhor esse sensor tão poderoso!
Conhecendo o Módulo GPS GY-NEO6MV2
Este módulo pode até parecer simples, pois só tem 4 pinos, mas não se engane, ele já contem um microcontrolador interno, o NEO-6, que já realiza todos os processamentos necessários e disponibiliza os dados obtidos por dois pinos, o TX e o RX, através desses poderemos repassar esses dados para diversos microcontroladores ou sistemas embarcados como Raspiberry Pi, ESP e o Arduino, que iremos utilizar nesse tutorial.
Módulo GPS GY-NEO6MV2
Fonte: AutoCore Robótica
Esse módulo é composto por duas partas, a antena, responsável por capitar as informações provindas dos satélites e o sistema de controle, responsável pelo processamento dos dados obtidos, como já dito anteriormente.
Especificações:
– Tensão de alimentação: 3V~5V
– Modelo: GY-GPS6MV2
– Tipo de antena: Cerâmica
– Velocidade padrão: 9600 baudrate
– Número de canais: 50
– Sensibilidade: -146dBm/-160dBm
– Faixa de atualização de navegação: 5Hz
– Altitude limite: 50000m
– Velocidade limite: 500m/s
– Possui EEPROM interna para armazenar as configurações
– Possui bateria de backup
– Possui LED para indicar o sinal
Documentação
– Datasheet do Módulo GPS GY-NEO6MV2
Agora já conhecemos bastante o nosso módulo, então vamos para a prática!
Montagem do circuito
A montagem do circuito para utilizar o nosso módulo é muito simples, não é necessário de nenhum resistor se quer.
Materiais Utilizados:
Montagem:
O circuito do projeto ficará conforme o da imagem:
Módulo GPS GY-NEO6MV2
Fonte: Autocore Robotica
Conexão:
Esses são os pinos do sensor que são conectados com o Arduino
VCC | 5V |
GND | GND |
TX | RX – Digital 10 |
RX | TX – Digital 11 |
Agora que já montamos o circuito está na hora de programar!
Código Comentado:
Nesse projeto serão utilizadas duas bibliotecas, a SoftwareSerial necessária para emulação dos pinos TX e RX, que já vem junto com a IDE arduino , e a TinyGPS, que é necessária a instalação dela, então, baixe-a quanto antes.
O código é bastante simples, olha só como ele ficou:
#include <SoftwareSerial.h> //biblioteca para emular o TX e o RX #include <TinyGPS.h> //biblioteca do GPS SoftwareSerial serial1(10, 11); // RX, TX TinyGPS gps1; //Criando o GPS void setup() { serial1.begin(9600); //valeocidade do GPS, não é possivel modificar Serial.begin(9600); // Velocidade do serial Serial.println("Aguardando a concecção com os satelites"); } void loop() { bool recebido = false; // indicará quando o GPS conseguiu se conectar aos satélites while (serial1.available()) { //realiza diversas leituras até conseguir se conectar char cIn = serial1.read(); recebido = gps1.encode(cIn); } // quando conseguir se conectar aos satélites ele irá realizar as leituras if (recebido) { Serial.println("----------------------------------------"); //Latitude e Longitude long latitude, longitude; unsigned long idadeInfo; gps1.get_position(&latitude, &longitude, &idadeInfo); // obtem a latitude, longitude e a idade da informação // se a latitude for algo valido ela será impressa if (latitude != TinyGPS::GPS_INVALID_F_ANGLE) { Serial.print("Latitude: "); Serial.println(float(latitude) / 100000, 6); } // se a longitude for algo valido ela será impressa if (longitude != TinyGPS::GPS_INVALID_F_ANGLE) { Serial.print("Longitude: "); Serial.println(float(longitude) / 100000, 6); } // se a data da informação for algo valido ela será impressa if (idadeInfo != TinyGPS::GPS_INVALID_AGE) { Serial.print("Idade da Informacao (ms): "); Serial.println(idadeInfo); } //Obtem o Dia e Hora no GMT, ou seja, há 3 horas de diferença com o horário do Brasil int ano; byte mes, dia, hora, minuto, segundo, centesimo; gps1.crack_datetime(&ano, &mes, &dia, &hora, &minuto, &segundo, ¢esimo, &idadeInfo); //obtendo a data, horário e a idade da informação // imprimindo os dados Serial.print("Data (GMT): "); Serial.print(dia); Serial.print("/"); Serial.print(mes); Serial.print("/"); Serial.println(ano); Serial.print("Horario (GMT): "); Serial.print(hora); Serial.print(":"); Serial.print(minuto); Serial.print(":"); Serial.print(segundo); Serial.print(":"); Serial.println(centesimo); //Obtendo a altitude float altitudeGPS; altitudeGPS = gps1.f_altitude(); // se a altitude for algo valido e diferente de 1000000Cm ela será impressa if ((altitudeGPS != TinyGPS::GPS_INVALID_ALTITUDE) && (altitudeGPS != 1000000)) { Serial.print("Altitude (cm): "); Serial.println(altitudeGPS); } //obtem a velocidade de locomoção do gps em km/h float velocidade; velocidade = gps1.f_speed_kmph(); Serial.print("Velocidade (km/h): "); Serial.println(velocidade, 2); //Conversão de Nós para Km/h //obtem o sentito do movimento em centesima de graus unsigned long sentido; sentido = gps1.course(); Serial.print("Sentido (grau): "); Serial.println(float(sentido) / 100, 2); //obtem a quantidade de satelites e a precisão unsigned short satelites; unsigned long precisao; satelites = gps1.satellites(); precisao = gps1.hdop(); if (satelites != TinyGPS::GPS_INVALID_SATELLITES) { Serial.print("Satelites: "); Serial.println(satelites); } if (precisao != TinyGPS::GPS_INVALID_HDOP) { Serial.print("Precisao (centesimos de segundo): "); Serial.println(precisao); } } }
Depois que o código foi enviado para o arduino basta esperar alguns segundos, cerca de 60, o que pode variar de acordo com a sua localização ou interferência eletromagnética.
Passado esse tempo o módulo conseguirá estabelecer contato com os satélites e pronto para o uso
Conclusão:
Entenderam o funcionamento simples do Módulo GPS GY-NEO6MV2? é bem simples não?
Testamos o código e olha só o resultado:
Testes do Módulo GPS GY-NEO6MV2
Fonte: Autocore Robotica
Se você quiser testar a veracidade dessas coordenadas obtidas pelo módulo, mas ta colocar-las no Google Maps do seguinte formato : Latitude”S Longitude”W
Caso você esteja em estados acima do equador como Amapá ou Roraima basta trocar o S por N
Fazendo isso conseguiremos ver a nossa localização ;D
Testes do Módulo GPS GY-NEO6MV2
Fonte: Autocore Robotica
Esperamos que esse tutorial tenha ajudado vocês na utilização desse pequeno, mais poderoso módulo, a quantidade de aplicações dele é enorme.
Se tiver dúvidas, observações ou quiser mandar um abraço para nós, coloca ai nos comentários, iremos adorar te responder. ;D
Confira mais conteúdos em nosso blog. Conteúdos explicativos e exclusivos para você.
bom dia. Ótimo tutorial. Excelente. Gostaria de saber a possibilidade de usar esse dispositivo para guiar uma pessoa ate o destino desejado
Olá, Barroso. Boa tarde!
Obrigada pelo seu feedback.
Excelente exemplo e explicação do funcionamento do módulo GPS, muito útil, parabéns.
Obrigada pelo seu feedback, Augusto! Estamos à disposição.
Para o modulo funcionar é necessario estar conectado à internet? Numa aplicação sem conexão com a internet, ele funcionaria?
Olá Kevin, tudo bem?
Obrigada por sua pergunta, segundo o fabricante do NEO-6M é possível através do modo autônomo, esse modo permite que o GPS opere sem a necessidade de um host ou conexão de rede externa.
Como o código utiliza a portal serial1.begin (9600), se o arduino UNO não possui portal serial1 ? Poderiam explicar por favor ?
Olá, a serial1 do código não é uma serial física e sim de software implementada pela biblioteca.