Olá Garagistas! No tutorial de hoje mostraremos como utilizar o GPS Shield. Faremos uma demonstração de como você pode montar um dispositivo de anti-evasão com ele, determinando uma área, e que se o GPS ultrapassar o limite desta área, o Arduino pode fazer um acionamento ou tocar uma sirene.
Material Utilizado:
Adquira estes componentes na Loja do Lab de Garagem
1. GPS Shield
Imagem 1 - Arduino com GPS Shield
Todos os passos para a montagem do seu GPS Shield, podem ser encontrado neste link.
A biblioteca utilizada neste tutorial foi a TinyGPS, a versão utilizada desta biblioteca foi a versão 13, e essa versão pode ser encontrada neste link. Lembre-se que é necessário retirar a versão no nome da pasta do TinyGPS, quando você fizer o download da versão 13 por exemplo o arquivo virá com o nome TinyGPS-13, retire o -13 do nome da pasta e a cole-a dentro da pasta libraries. Essa biblioteca trata os dados recebidos pelo módulo GPS e lhe devolve informações como, longitude, latitude, hora, data, altitude e etc.
Também utilizamos neste tutorial a biblioteca SoftwareSerial (já nativa do Arduino, você não precisará baixar) para se comunicar através dos pinos D2 - RX e D3 - TX com o módulo GPS. Para a visualização dos dados recebidos utilizamos a serial (Hardware, pinos D0 - RX e D1 - TX) para através do Serial Monitor lermos os valores recebidos pelo GPS.
Sketch Exemplo: O sketch exemplo para teste de recebimento de dados do seu GPS Shield pode ser encontrado, neste link.
Para informações mais detalhadas sobre o GPS Shield, clique aqui.
2. Demonstração
Na demonstração deste tutorial, determinamos uma área (Q.G .do Lab), conforme a figura baixo:
Caso o módulo ultrapasse um desses limites, o alto-falante no circuito começará a apitar. Esse tipo de aplicação é semelhante as tornozeleiras de infratores em prisão domiciliar.
Os dados da área para essa demonstração são:
Latitude Máxima = -23.59500;
Latitude Mínima = -23.59530;
Longitude Máxima = -46.63585;
Longitude Mínima = -46.63615;
3. Circuito/Montagem
Figura 1 - Circuito da demonstração
Imagem 2 - Montagem do circuito da demonstração
4. Sketch
#include <SoftwareSerial.h>
#include <TinyGPS.h>
TinyGPS gps;
SoftwareSerial serialgps(2,3);
int ano;
byte mes, dia, meshora, minuto, segundos, milesimos;
unsigned long chars;
unsigned short sentences, failed_checksum;
void setup()
{
Serial.begin(4800);
serialgps.begin(4800);
Serial.println("");
Serial.println(" Laboratorio de Garagem");
Serial.println(" ...Procurando Satelites... ");
Serial.println("");
}
void loop()
{
while(serialgps.available())
{
int c = serialgps.read();
if(gps.encode(c))
{
delay(1000);
float latitude, longitude;
gps.f_get_position(&latitude, &longitude);
Serial.print("Lat/Long: ");
Serial.print(latitude,5);
Serial.print(", ");
Serial.println(longitude,5);
gps.crack_datetime(&ano,&mes,&dia,&meshora,&minuto,&segundos,&milesimos);
Serial.print("Data: ");
Serial.print(mes, DEC);
Serial.print("/");
Serial.print(dia, DEC);
Serial.print("/");
Serial.print(ano);
Serial.print(" Hora: ");
Serial.print(meshora, DEC);
Serial.print(":");
Serial.print(minuto, DEC);
Serial.print(":");
Serial.print(segundos, DEC);
Serial.print(".");
Serial.println(milesimos, DEC);
Serial.print("Altitude (metros): ");
Serial.println(gps.f_altitude());
Serial.print("Direcao (grau): ");
Serial.println(gps.f_course());
Serial.print("Velocidade(km/h): ");
Serial.println(gps.f_speed_kmph());
Serial.print("Satelites: ");
Serial.println(gps.satellites());
Serial.println();
gps.stats(&chars, &sentences, &failed_checksum);
}
}
}
Referências:
http://labdegaragem.com/profiles/blogs/tutorial-como-utilizar-o-gps-shield-com-arduino
Comentar
Boa Noite,
gostaria de saber como posso programar um programa para um GPS Shield com Arduino, para de dar a latitude e a longitude, mas só os pontos que eu quiser como por exemplo, ponto 1, ponto 2, num ponto 1 clico e dá-me as coordenadas daquele ponto que eu cliquei, depois clico noutro ponto 2 e dá-me as coordenadas desse ponto que eu cliquei e por aí a diante.....
espero que tenham percebido o meu pedido de ajuda.
Obrigados pela ajuda,
Clenilson,
Leia o título novamente: Usando o GPS Shield como dispositivo anti-evasão.
É anti-evasão: saída e não anti-invasão: entrada.
Não entendi a aplicação deste projeto, na minha opinião ele funciona para evitar que o produto sai da área delimitada pelas latitudes e longitudes máximas e mínimas respectivas, diferente do que explica o tutorial que o produto é para proteger de invasão a área delimitada, Favor esclarecer melhor.
olá amigo, vc pode me ajudar estou com o seguinte Sketch
#include <SoftwareSerial.h> //Biblioteca para utilização dos pinos D2 e D3 como RX e TX
#include <TinyGPS.h> //Biblioteca que faz a leitura e tratamento dos dados recebidos pelo GPS Shield
TinyGPS gps; //Cria a instância gps para ser utilizada pelo programa
SoftwareSerial serialgps(2,3); //Configura os pinos 2 e 3 para serem utilizados pela SoftwareSerial
int sats; //Variáveis para armazenamento de ano e quantidade de satélites
float latitude, longitude; //Variáveis para o armazenamento de latitude e longitude
float latmax = -4.51780; //Variável para a latitude máxima
float latmin = -4.51520; //Variável para a latitude mínima
float longmax = -44.46190; //Variável para a longitude máxima
float longmin = -44.46110; //Variável para a longitude mínima
void setup()
{
serialgps.begin(9600); //Inicializa a serial(software) com baud rate de 4800 para a comunicação com o GPS
}
void loop()
{
GPS(); //Executa a função para a leitura dos dados do GPS
//Se o GPS ultrapassar os limites determinados
if(sats > 3)
{
if( (latitude < latmin) || (latitude > latmax) || (longitude < longmin) || (longitude > longmax) )
{
tone(8, 450, 500); //Toca sirene
}
}
else
{
tone(8, 0, 500); //Não toca a sirene
}
}
void GPS() //Função para a leitura dos dados do GPS
{
while(serialgps.available())
{
int c = serialgps.read();
if(gps.encode(c))
{
gps.f_get_position(&latitude, &longitude); //Leitura da latitude e longitude
sats = gps.satellites(); //Armazena na variável sats a quantidade de satélites
}
}
}
tudo funciona legal..mas meu fone nao para de tocar o alarme , estou com dentro do limite das coordenadas.
fico em latutude mini = -4.51696
latitude maxi=-4.51715
longtude mini=-44.46139
longtude maxi=-44.46150
eu fico dentro das coordenadas ,era pra meu fone parar de dar o alarme ,porem ele continua tocando . vc pode me ajudar ??
Muito bacana, parabéns pelo excelente tutorial. Ficou muito didático.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2023 Criado por Marcelo Rodrigues.
Ativado por
Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!
Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)