Índice:

Encontrando seu caminho com GPS: 9 etapas
Encontrando seu caminho com GPS: 9 etapas

Vídeo: Encontrando seu caminho com GPS: 9 etapas

Vídeo: Encontrando seu caminho com GPS: 9 etapas
Vídeo: COMO USAR O GPS DO CELULAR? ENTENDA AS INSTRUÇÕES | ENTENDA O MAPA (ATUALIZADO) - NA PRÁTICA 2024, Julho
Anonim
Encontrando seu caminho com GPS
Encontrando seu caminho com GPS

Um rápido exercício de compreensão e aplicação de dados GPS

  • Tempo necessário: 2 horas
  • Custo: $ 75– $ 150

Para os fabricantes, ficou muito barato incorporar dados geoespaciais de alta qualidade em projetos eletrônicos. E nos últimos anos, os módulos do receptor GPS (Sistema de Posicionamento Global) se tornaram muito mais diversificados, poderosos e fáceis de integrar com placas de desenvolvimento como Arduino, PIC, Teensy e Raspberry Pi. Se você está pensando em construir com base no GPS, escolheu um bom momento para começar.

Etapa 1: como funciona

Um módulo GPS é um minúsculo receptor de rádio que processa sinais transmitidos em frequências conhecidas por uma frota de satélites. Esses satélites giram em torno da Terra em órbitas aproximadamente circulares, transmitindo posição extremamente precisa e dados de relógio para o solo abaixo. Se o receptor terrestre puder “ver” o suficiente desses satélites, ele poderá usá-los para calcular sua própria localização e altitude.

Quando uma mensagem GPS chega, o receptor primeiro inspeciona seu carimbo de data / hora de transmissão para ver quando foi enviada. Como a velocidade de uma onda de rádio no espaço é uma constante conhecida (c), o receptor pode comparar os tempos de transmissão e recepção para determinar a distância que o sinal percorreu. Depois de estabelecer sua distância de quatro ou mais satélites conhecidos, calcular sua própria posição é um problema bastante simples de triangulação 3D. Mas para fazer isso com rapidez e precisão, o receptor deve ser capaz de processar agilmente números de até 20 fluxos de dados de uma vez. Como o sistema GPS tem uma meta publicada de ser utilizável em qualquer lugar da Terra, o sistema deve garantir que pelo menos quatro satélites - de preferência mais - são visíveis o tempo todo de todos os pontos do globo. Existem atualmente 32 satélites GPS realizando uma dança meticulosamente coreografada em uma nuvem esparsa de 20.000 quilômetros de altura.

Etapa 2: Fato sobre o fã

O GPS não poderia funcionar sem a teoria da relatividade de Einstein, pois a compensação deve ser feita para os 38 microssegundos que os relógios atômicos em órbita ganham a cada dia com a dilatação do tempo no campo gravitacional da Terra.

Etapa 3: primeiros passos

Começando
Começando

Seja qual for o seu projeto, o GPS é simples de integrar. A maioria dos módulos receptores se comunica com um protocolo serial direto, portanto, se você puder encontrar uma porta serial sobressalente na placa do controlador, deve levar apenas alguns fios para fazer a conexão física. E mesmo se não, a maioria dos controladores suporta um modo serial de “software” emulado que você pode usar para conectar-se a pinos arbitrários.

Para iniciantes, o módulo Ultimate GPS Breakout da Adafruit é uma boa escolha. Existem muitos produtos concorrentes no mercado, mas o Ultimate tem um desempenho sólido a um preço razoável, com grandes orifícios que são fáceis de soldar ou conectar a uma placa de ensaio.

Primeiro, conecte o aterramento e a alimentação. Em termos do Arduino, isso significa conectar um dos pinos GND do microcontrolador ao GND do módulo e o pino + 5V ao VIN do módulo. Para gerenciar a transferência de dados, você também precisa conectar os pinos TX e RX do módulo ao Arduino. Vou selecionar arbitrariamente os pinos 2 (TX) e 3 (RX) do Arduino para essa finalidade, embora os pinos 0 e 1 sejam especificamente projetados para uso como uma “porta serial de hardware” ou UART. Por quê? Porque eu não quero desperdiçar o único UART que esses processadores AVR de baixo custo têm. O UART do Arduino é conectado ao conector USB integrado e gosto de mantê-lo conectado ao meu computador para depuração.

Etapa 4: um dedo do pé no datastream

Um dedo do pé no Datastream
Um dedo do pé no Datastream

No instante em que você aplica energia, um módulo GPS começa a enviar pedaços de dados de texto em sua linha TX. Ele pode ainda não ver um único satélite, muito menos ter uma "correção", mas a torneira de dados é aberta imediatamente e é interessante ver o que sai. Nosso primeiro esboço simples (abaixo) não faz nada além de exibir esses dados não processados.

#include #define RXPin 2

# define TXPin 3 # define GPSBaud 4800

#define ConsoleBaud 115200

// A conexão serial com o dispositivo GPSSoftwareSerial ss (RXPin, TXPin);

void setup () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("Exemplo 1 de GPS");

Serial.println ("Exibindo os dados NMEA brutos transmitidos pelo módulo GPS.");

Serial.println ("por Mikal Hart"); Serial.println ();

}

void loop ()

{if (ss.available ()> 0) // À medida que cada personagem chega …

Serial.write (ss.read ()); //… escreva no console

}

NOTA: O esboço define o pino de recepção (RXPin) como 2, embora tenhamos dito anteriormente que o pino de transmissão (TX) seria conectado ao pino 2. Esta é uma fonte comum de confusão. RXPin é o pino de recepção (RX) do ponto de vista do Arduino. Naturalmente, ele deve ser conectado ao pino de transmissão (TX) do módulo e vice-versa.

Carregue este esboço e abra o Serial Monitor em 115, 200 baud. Se tudo estiver funcionando, você deverá ver um fluxo denso e infinito de strings de texto separadas por vírgulas. Cada uma se parecerá com a segunda imagem no início do parágrafo.

Essas strings distintas são conhecidas como sentenças NMEA, assim chamadas porque o formato foi inventado pela National Maritime Electronics Association. NMEA define várias dessas sentenças para dados de navegação que vão desde o essencial (localização e hora) até o esotérico (relação sinal / ruído de satélite, variação magnética, etc.). Os fabricantes são inconsistentes sobre quais tipos de frases seus receptores usam, mas o GPRMC é essencial. Assim que seu módulo for corrigido, você deverá ver um bom número dessas sentenças GPRMC.

Etapa 5: Encontrando-se

Não é trivial converter a saída do módulo bruto em informações que seu programa pode realmente usar. Felizmente, já existem algumas ótimas bibliotecas disponíveis para fazer isso por você. A popular biblioteca Adafruit GPS de Limor Fried é uma escolha conveniente se você estiver usando o breakout Ultimate. Ele foi escrito para habilitar recursos exclusivos do Ultimate (como registro de dados interno) e adiciona alguns sinos e assobios snazzy próprios. Minha biblioteca de análise favorita, entretanto - e aqui estou eu, é claro, completamente imparcial - é a que escrevi chamada TinyGPS ++. Eu o projetei para ser abrangente, poderoso, conciso e fácil de usar. Vamos dar uma volta.

Etapa 6: codificação com TinyGPS ++

Do ponto de vista do programador, usar TinyGPS ++ é muito simples:

1) Crie um objeto gps.

2) Roteie cada caractere que chega do módulo ao objeto usando gps.encode ().

3) Quando você precisar saber sua posição ou altitude ou hora ou data, basta consultar o objeto GPS.

#include #include

# define RXPin 2

# define TXPin 3

#define GPSBaud 4800

#define ConsoleBaud 115200

// A conexão serial com o dispositivo GPSSoftwareSerial ss (RXPin, TXPin);

// O objeto TinyGPS ++

TinyGPSPlus gps;

void setup () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("Exemplo de GPS 2");

Serial.println ("Um rastreador simples usando TinyGPS ++.");

Serial.println ("por Mikal Hart");

Serial.println ();

}

void loop () {

// Se algum caractere chegou do GPS, /

/ envie-os para o objeto TinyGPS ++

enquanto (ss.available ()> 0)

gps.encode (ss.read ());

// Vamos mostrar a nova localização e altitude

// sempre que um deles for atualizado

if (gps.location.isUpdated () || gps.altitude.isUpdated ())

{

Serial.print ("Local:");

Serial.print (gps.location.lat (), 6);

Serial.print (",");

Serial.print (gps.location.lng (), 6);

Serial.print ("Altitude:");

Serial.println (gps.altitude.meters ());

}

}

Nosso segundo aplicativo exibe continuamente a localização e altitude do receptor, usando TinyGPS ++ para ajudar na análise. Em um dispositivo real, você pode registrar esses dados em um cartão SD ou exibi-los em um LCD. Pegue a biblioteca e esboce FindingYourself.ino (acima). Instale a biblioteca, como de costume, na pasta de bibliotecas do Arduino. Faça upload do esboço para o seu Arduino e abra o Serial Monitor em 115, 200 baud. Você deverá ver sua localização e altitude atualizadas em tempo real. Para ver exatamente onde você está, cole algumas das coordenadas de latitude / longitude resultantes no Google Maps. Agora, conecte seu laptop e dê um passeio ou um passeio de carro. (Mas lembre-se de manter os olhos na estrada!)

Etapa 7: A "QUARTA DIMENSÃO"

Embora associemos GPS com localização no espaço, não se esqueça de que os satélites estão transmitindo data e hora também. O relógio GPS médio tem precisão de um décimo milionésimo de segundo, e o limite teórico é ainda maior. Mesmo que você precise apenas de seu projeto para controlar o tempo, um módulo GPS ainda pode ser a solução mais barata e fácil.

Para transformar FindingYourself.ino em um relógio superpreciso, basta alterar as últimas linhas assim:

if (gps.time.isUpdated ()) {

char buf [80];

sprintf (buf, "O tempo é% 02d:% 02d:% 02d", gps.time.hour (), gps.time.minute (), gps.time.second ()); Serial.println (buf);

}

Etapa 8: Encontrando seu caminho

Encontrando seu caminho
Encontrando seu caminho

Nosso terceiro e último aplicativo é o resultado de um desafio pessoal para escrever um esboço legível do TinyGPS ++, em menos de 100 linhas de código, que guiaria um usuário a um destino usando instruções de texto simples como "manter a linha" ou "virar à esquerda".

#include #include

# define RXPin 2

#define TXPin 3

#define GPSBaud 4800

#define ConsoleBaud 115200

// A conexão serial com o dispositivo GPSSoftwareSerial ss (RXPin, TXPin);

// O objeto TinyGPS ++ TinyGPSPlus gps;

não assinado long lastUpdateTime = 0;

# define EIFFEL_LAT 48.85823 # define EIFFEL_LNG 2.29438

/ * Este exemplo mostra uma estrutura básica de como você pode usar o curso e a distância para guiar uma pessoa (ou um drone) até um destino. Este destino é a Torre Eiffel. Altere conforme necessário

A maneira mais fácil de obter as coordenadas lat / long é clicar com o botão direito do mouse no destino no Google Maps (maps.google.com) e escolher "O que há aqui?". Isso coloca os valores exatos na caixa de pesquisa

*/

void setup () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("Exemplo de GPS 3");

Serial.println ("Um sistema de orientação não tão abrangente");

Serial.println ("por Mikal Hart");

Serial.println ();

}

void loop () {

// Se algum caractere chegou do GPS, // envie-o para o objeto TinyGPS ++ while (ss.available ()> 0) gps.encode (ss.read ());

// A cada 5 segundos, faça uma atualização

if (millis () - lastUpdateTime> = 5000)

{

lastUpdateTime = millis ();

Serial.println ();

// Estabelece nosso status atual

double distanceToDestination = TinyGPSPlus:: distanceBetween

gps.location.lat (), gps.location.lng (), EIFFEL_LAT, EIFFEL_LNG);

double courseToDestination = TinyGPSPlus:: courseTo

gps.location.lat (), gps.location.lng (), EIFFEL_LAT, EIFFEL_LNG);

const char * directionToDestination = TinyGPSPlus:: cardinal (courseToDestination);

int courseChangeNeeded = (int) (360 + courseToDestination - gps.course.deg ())% 360;

// depurar Serial.print ("DEBUG: Course2Dest:");

Serial.print (courseToDestination);

Serial.print ("CurCourse:");

Serial.print (gps.course.deg ());

Serial.print ("Dir2Dest:");

Serial.print (directionToDestination);

Serial.print ("RelCourse:");

Serial.print (courseChangeNeeded);

Serial.print ("CurSpd:");

Serial.println (gps.speed.kmph ());

// Dentro de 20 metros do destino? Estava aqui

if (distanceToDestination <= 20.0)

{Serial.println ("PARABÉNS: Você chegou!");

saída (1);

}

Serial.print ("DISTÂNCIA:"); Serial.print (distanceToDestination);

Serial.println ("faltam metros.");

Serial.print ("INSTRUÇÃO:");

// Ficar parado? Apenas indique a direção a seguir

if (gps.speed.kmph () <2.0)

{

Serial.print ("Cabeça");

Serial.print (directionToDestination);

Serial.println (".");

Retorna;

}

if (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println ("Continue sempre em frente!");

else if (courseChangeNeeded> = 315 && courseChangeNeeded <345)

Serial.println ("Virar ligeiramente para a esquerda.");

else if (courseChangeNeeded> = 15 && courseChangeNeeded <45)

Serial.println ("Virar ligeiramente para a direita.");

else if (courseChangeNeeded> = 255 && courseChangeNeeded <315)

Serial.println ("Vire para a esquerda.");

else if (courseChangeNeeded> = 45 && courseChangeNeeded <105)

Serial.println ("Vire à direita.");

outro

Serial.println ("Vire completamente.");

}

}

A cada 5 segundos, o código captura a localização e o curso do usuário (direção da viagem) e calcula o rumo (direção para o destino), usando o método TinyGPS ++ courseTo (). A comparação dos dois vetores gera uma sugestão para seguir em frente ou virar, conforme mostrado a seguir.

Copie o esboço FindingYourWay.ino (acima) e cole-o no IDE do Arduino. Defina um destino a 1 km ou 2 km de distância, carregue o esboço em seu Arduino, execute-o em seu laptop e veja se ele o guiará até lá. Mas o mais importante, estude o código e entenda como ele funciona.

Etapa 9: indo além

O potencial criativo do GPS é vasto. Uma das coisas mais satisfatórias que já fiz foi uma caixa de quebra-cabeça com GPS que abre apenas em um local pré-programado. Se sua vítima quiser trancar o tesouro lá dentro, ela precisa descobrir onde está o local secreto e fisicamente trazer a caixa para lá. Uma primeira ideia de projeto popular é algum tipo de dispositivo de registro que registra minuto a minuto a posição e a altitude de, digamos, um caminhante caminhando pela Trilha Trans-Pennine. Ou que tal um daqueles rastreadores magnéticos furtivos que os agentes da DEA em Breaking Bad colocam nos carros dos bandidos? Ambos são totalmente viáveis e provavelmente seriam divertidos de construir, mas eu o encorajo a pensar de forma mais ampla, além das coisas que você já pode comprar na Amazon. É um grande mundo lá fora. Percorra o mais longe que puder.

Recomendado: