Na área da robótica e rastreamento é de grande importância saber a localização de um determinado veículo ou drone, e para isso, vamos utilizar um sistema de datalogger de percurso, conseguindo determinar sua trajetória real e fazermos determinadas análises e conclusões, por meio do Projeto Arduino GPS 6M.
Baseado nisto, desenvolveremos um sistema de registro de posição, a fim de determinar os locais pelos quais um veículo ou dispositivo se locomoveu ao longo de uma trajetória.
Para isto, utilizaremos um datalogger de percurso para receber as posições de um GPS e gravá-las em um cartão de memória, para posterior análise dos pontos no Google My Maps.
Portanto, através desse projeto, você será capaz de:
- Criar um datalogger de percurso com GPS;
- Utilizar o GPS NEO-6M para monitorar a trajetória percorrida pelo objeto;
- Plotar e analisar os dados de posicionamento no Google My Maps.
Desenvolvimento do Projeto Arduino GPS 6M Datalogger de Percurso
O projeto consiste em gravar as posições de locomoção de um dispositivo ou automóvel de uma localidade para outra. Assim, o sistema possuirá dois botões. Um será utilizado para iniciar a gravação das posições e o segundo, será utilizado para finalizar as gravações. Além disso, teremos um LED para sinalizar o funcionamento e gravação dos dados do GPS em tempo real.
Logo, a partir do princípio de funcionamento apresentado, foi construído o seguinte circuito, que é apresentado na Figura 1.
Para a construção do circuito, utilizamos a lista de componentes eletrônicos a seguir. Todos os ítens podem ser encontrados na Loja UsinaInfo.
Componentes Necessários para o Datalogger de Percurso
- Arduino Nano
- Módulo GPS NEO-6M
- Módulo Leitor de Cartão SD
- Push Buttons 6x6x5 mm
- Resistores de 10kR
- LED Vermelho
- Resistor de 330R
De acordo com os componentes e o circuito, discutiremos a seguir, construção da lógica desenvolvida para armazenar as posições do GPS.
Desenvolvimento da Lógica de Programação
O GPS é um dispositivo que necessita, inicialmente, se conectar aos satélites a fim de determinar sua posição em sua área de atuação.
Inicialmente, realizamos a inclusão de todas as bibliotecas para o Projeto Arduino GPS 6M. Primeiramente, declaramos as bibliotecas SD.h e SPI.h para o módulo leitor de cartão SD. Em seguida, declaramos as bibliotecas SoftwareSerial.h e TinyGPS para o módulo GPS NEO-6M, conforme apresentado a seguir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
#include <SD.h> #include <SPI.h> #include <SoftwareSerial.h> #include <TinyGPS.h> SoftwareSerial SerialGPS(4,3); TinyGPS GPS; File myFile; bool controle = 0; float lat, lon, vel; unsigned long data, hora; unsigned short sat; byte pinoCS = 10; //Pin 10 para Nano/UNO #define INICIA 9 #define TERMINA 5 #define LEDVERMELHO 2 void setup() { SerialGPS.begin(9600); Serial.begin(9600); Serial.println("Buscando satelites..."); pinMode(pinoCS, OUTPUT); //Define o pinoSS como saida pinMode(LEDVERMELHO, OUTPUT); if (SD.begin())//Inicializa o SD Card { Serial.println("SD Card pronto para uso."); //Imprime na tela } else { Serial.println("Falha na inicialização do SD Card."); return; } } void loop() { bool BotaoInicia = digitalRead(INICIA); bool BotaoTermina = digitalRead(TERMINA); if(BotaoInicia == 1) { controle = 1; myFile = SD.open("GPS.txt", FILE_WRITE); //Cria e abre o arquivo delay(1000); myFile.print("Latitude"); myFile.println(" Longitude"); } if(BotaoTermina == 1) { controle = 0; myFile.close(); digitalWrite(LEDVERMELHO, LOW); } if(controle == 1) { while (SerialGPS.available()) { if (GPS.encode(SerialGPS.read())) { digitalWrite(LEDVERMELHO, HIGH); //latitude e longitude GPS.f_get_position(&lat, &lon); myFile.print(lat , 6); myFile.println(lon, 6); delay(60000); } } } } |
Utilizou-se a biblioteca Software Serial para criar duas portas de comunicação serial, conforme definidas na linha 6. O 4 e 0 3 representam, respectivamente, os pinos Rx e Tx.
6 |
SoftwareSerial SerialGPS(4,3); |
Em seguida, foram definidos os objetos GPS e myFile para os módulos. Posteriormente, declaramos as variáveis e definimos nomes para os pinos de conexão dos Botões e LED, conforme apresentado na Figura 2.
Essas configurações são apresentadas no trecho de código a seguir.
8 9 10 11 12 13 14 15 16 17 18 19 |
TinyGPS GPS; File myFile; bool controle = 0; float lat, lon, vel; unsigned long data, hora; unsigned short sat; byte pinoCS = 10; //Pin 10 para Nano/UNO #define INICIA 9 #define TERMINA 5 #define LEDVERMELHO 2 |
Logo após as definições de nomes, o fluxo de execução entrará na função setup e realizará as configurações iniciais.
Configurações de Inicialização dos Módulos na Função Setup
Primeiramente, o GPS 6M e a comunicação serial serão inicializados. Em seguida, será realizada a inicialização de comunicação do SD Card, conforme apresentado a seguir.
Caso ocorra alguma falha de comunicação com o Módulo SD Card, o sistema apresentará uma mensagem de erro no monitor serial.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
SerialGPS.begin(9600); Serial.begin(9600); Serial.println("Buscando satelites..."); pinMode(pinoCS, OUTPUT); //Define o pinoSS como saida pinMode(LEDVERMELHO, OUTPUT);//Define o pino do LEDVERMELHO como saida if (SD.begin())//Inicializa o SD Card { Serial.println("SD Card pronto para uso."); //Imprime na tela } else { Serial.println("Falha na inicialização do SD Card."); return; } |
Por fim, na função loop, iniciaremos a apresentação da lógica de funcionamento dos dispositivos e controle completo do sistema.
Execução da Lógica Principal do Datalogger de Percurso
Inicialmente, o sistema irá realizar a leitura dos botões de Início e Término, conforme apresentado no código abaixo.
45 46 |
bool BotaoInicia = digitalRead(INICIA); bool BotaoTermina = digitalRead(TERMINA); |
Quando o usuário pressionar o Botão Iniciar, o fluxo de código entrará na condição a seguir e executará as seguintes linhas de código.
48 49 50 51 52 53 54 55 56 |
if(BotaoInicia == 1) { controle = 1; myFile = SD.open("GPS.txt", FILE_WRITE); //Cria e abre o arquivo delay(1000); myFile.print("Latitude"); myFile.println(" Longitude"); } |
Primeiramente, será atribuído 1 à variável controle. Essa variável será utilizada para liberar a gravação dos dados no Módulo SD Card. Em seguida, o arquivo GPS.txt será criado e aberto para escrita.
Posteriormente, escrevemos os nomes Latitude e Longitude a fim de formar as duas colunas dos dados de posição do GPS.
Gravação de dados no Cartão de Memória
Agora, de acordo com o código abaixo, o fluxo entrará na condição de gravação dos dados do GPS no módulo.
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
if(controle == 1) { while (SerialGPS.available()) { if (GPS.encode(SerialGPS.read())) { digitalWrite(LEDVERMELHO, HIGH); //latitude e longitude GPS.f_get_position(&lat, &lon); myFile.print(lat , 6); myFile.println(lon, 6); delay(60000); } } } |
Após o GPS receber os dados, o sistema irá ligar o LED Vermelho, conforme apresentado na Figura 3. O LED irá sinalizar a coleta e gravação de dados no módulo SD Card.
Posteriormente, é realizada a aquisição das posições de latitude e longitude conforme apresentado no código abaixo.
73 74 |
//latitude e longitude GPS.f_get_position(&lat, &lon); |
Por fim, de acordo com as linhas de código a seguir, os dados serão escritos no arquivo de texto.
76 77 78 |
myFile.print(lat , 6); myFile.println(lon, 6); delay(1000); |
Conforme é possível observar, foi realizada uma leitura e gravação a cada 1 segundo.
Finalmente, após chegar ao local desejado, o usuário deverá apertar o botão de término, para finalizar a gravação dos dados no datalogger de percurso. O código é apresentado a seguir.
58 59 60 61 62 63 |
if(BotaoTermina == 1) { controle = 0; myFile.close(); digitalWrite(LEDVERMELHO, LOW); } |
Primeiramente, a variável controle será colocada para 0. Desse modo, o sistema irá parar de gravar dados no cartão de memória. Em seguida, o arquivo será fechado e o LED Vermelho será desligado, a fim de informar que o sistema parou de capturar dados do módulo GPS.
Portanto, após esta ação, necessitamos coletar os dados do cartão de memória e apresentá-los em um mapa, para visualizar o percurso realizado.
Visualização do Percurso do Usuário no Google My Maps
Após a retirada do cartão e abertura do bloco de texto, encontramos diversos dados de posição de latitude e longitude. Para que não apresentassem diversos pontos ao longo do mapa, realizamos a seleção dos principais pontos com o objetivo de nos auxiliar na apresentação do percurso.
Os pontos são apresentados na Figura 4.
Com os dados em mãos, o usuário deverá colocá-los em colunas no Excel, conforme apresentado na Figura 5.
Em seguida, salve o arquivo em .csv e importe o arquivo no Google My Maps. Para isto, acesse o site do Google My Maps e realize os seguintes passos.
Criando um Mapa de Pontos do Datalogger de Percurso no Google My Maps
Primeiramente, crie um novo mapa, conforme apresentado na Figura 6.
Logo após, clique na opção Importar e selecione o arquivo do Excel com as coordenadas salvas.
Em seguida, selecione todas as coordenadas e clique no botão para criação de rotas, conforme sinalizado pelo quadrado vermelho na Figura 8.
Desse modo, será criada uma rota através dos pontos selecionados. Portanto, a partir do mapa poderemos avaliar todo o percurso realizado pelo objeto.
Conclusão do Datalogger de Percurso
O Projeto Arduino GPS 6M apresentado permite-nos avaliar o percurso de qualquer objeto de interesse que esteja em movimento. Através desse sistema, podemos aplicá-los na área de segurança e determinar com precisão, os locais que um veículo se movimentou em um intervalo de tempo.
Além de fornecer as coordenadas, o datalogger de percurso poderá oferecer diversas grandezas. Entre elas, destacamos a velocidade. Através dela, você poderá implementar uma nova funcionalidade e monitorar a velocidade do dispositivo em cada ponto do mapa.
Portanto, desafiamos você a criar esta nova funcionalidade. Em caso de dúvidas, escreva nos comentários.
Conheça toda Linha Arduino no Site da UsinaInfo.
Boa noite, preciso fazer o mesmo projeto mas, sem usar o cartão de memoria tem uma ideia como proceder?
Bom Dia Christian! Normalmente utiliza-se o cartão SD para ter-se um registro em tempo real para visualizações posteriores, porém caso queira eliminar este dispositivo, vale observar qual o outro método irá desenvolver para a obtenção dos dados. Caso esteja sempre conectado a um computador existe a possibilidade de utilizar um Arduino Leonardo, por exemplo, que funciona como um teclado quando em documentos de texto, caso queira independência ao projeto porém pode agregar ao mesmo um módulo GSM que envia através de um chip mensagens SMS ou pode também conectar-se a rede 3G para envio dos dados.
Olá pessoal da Usinainfo!
Obrigado pelos anos de informação e oportunidade de compras para nós makers.
Quanto a este artigo, show demais. Diego é um fera no assunto!
Grande conhecimento e grande altruísmo no que se refere a compartilhar e ensinar aos novatos.
Parabéns Diego! Parabéns Usinainfo!!!
Excelente Projeto
Como resolver a questão de ser portátil e funcione por 12, 15 horas?
Boa Tarde Sandro! A questão de tornar portátil, pode ser solucionada integrado ao seu projeto um sistema de alimentação via baterias recarregáveis como a 18650, por exemplo, porém o tempo de uso e demais detalhes vão depender da quantia de baterias ou até mesmo o modelo da bateria utilizada e suas especificações.
Eu só vou poder consultar esses dados quando eu estiver de posse do sistema? Um ex: Se caso meu veiculo for roubado algo do tipo vou poder saber onde ele está?
Bom Dia Fabricio! O projeto não possui nenhuma conexão com a rede de internet ou outro sistema que possa enviar a localização em tempo real, porém caso este seja o que deseja, uma opção é realizar a inclusão de um Módulo GSM, por exemplo, porém vale ressaltar que ele precisará do sinal da operadora para funcionar.
Bom Dia! Projeto muito bom! Preciso coletar dados de posição a cada 30cm (para fazer a medição de pontos numa sala) saberia dizer se este módulo de gps consegue gravar neste nível de precisão? Mesmo que não faça um desenho no googleMaps, mas consigo fazer um gráfico em 2d do local. Poderia me ajudar?
Obrigado,
Rafael
Boa Tarde Rafael! Infelizmente acredito que este módulo não possua tal precisão para ambientes menores, assim como necessita.
Oi! Estou desenvolvendo um projeto do qual o objetivo é monitorar e rastrear a localização de pessoas e que os dados sejam enviados para o celular num aplicativo próprio desenvolvido posteriormente. Com algumas pesquisas, vi que pra isso é preciso de conexão regular com a internet e um chip de operadora implantado. Saberia me dizer qual módulo seria melhor para fazer isso funcionar? E se tiver mais algumas dicas, sou nova neste meio de programação… Agradeço!
Bom Dia Luísa! Realmente será necessário uma conexão contínua com internet para verificar em tempo real a localização, para isto indica-se normalmente os dispositivos GSM, assim como o utilizado no seguinte link: https://www.usinainfo.com.br/blog/projeto-sensor-de-umidade-do-solo-arduino-com-alerta-por-sms/
Oi! É possível modificar essa programação para uma ESP32? Como a programação ficaria?
Bom Dia! É possível sim, caso opte por utilizar apenas o ESP32 sem comunicação WiFi, é possível utilizar o mesmo código verificando apenas as pinagens e a conexão, além das configurações necessárias na IDE, porém caso opte por utilizar a comunicação WiFi, recomendo verificar a artigo a seguir: https://www.usinainfo.com.br/blog/esp32-wifi-comunicacao-com-a-internet/ neste você encontra os comandos para comunicação sem fio e também maiores detalhes sobre a mesma.
Olá,
Este módulo permite observar a altitude no local onde estou? Como poderia ser o código?
Olá Flávio! Normalmente, o que indicamos para verificação de altura é o https://www.usinainfo.com.br/blog/estacao-meteorologica-simples-com-bme280-e-esp32-com-ip-fixo/ uma vez que o mesmo possui um sensor que verifica a pressão do local e com esta indica a altura em relação ao nível do mar.
Então,
Meu interesse, na verdade, seria explorar mais as possibilidades dos módulos de GPS. Ir além da coordenada simples e utilizar outras informações, como velocidade e/ou altitude. Existe alguma linha de comando que possa ser utilizada para fornecer estas e outras informações?
Parabéns pelo projeto! É incrível o que a tecnologia pode fazer hoje dia. As aplicações de localização são sem dúvida o futuro.
Muito obrigado pela resposta, ficamos felizes em ajudar!