Como vimos no post Rastreador Arduino SIM900 + GPS I, aprendemos a fazer a leitura dos dados de latitude e longitude, concatenar tudo em uma String so, e enviar os dados pelo serial monitor do Arduino.
Hoje vamos mostrar como criar um rastreador, que envia esses dados via SMS para um aparelho celular, assim podendo rastrear qualquer objeto.
As modificações são as seguintes, antes a leitura dos dados e processamento era feito, e logo depois mostrado no serial monitor, dessa vez vamos enviar esses dados por SMS, para isso temos antes que configurar nosso modem GSM de acordo com suas características baud rate e pinos de configuração TX/RX que podem variar de modulo para modulo.
O código funciona da seguinte maneira, ao receber a SMS >Local< o programa faz a leitura da latitude e longitude, concatena com o link do google maps, e logo depois envia por SMS para o numero de celular cadastrado.
A SMS chega da seguinte forma no seu celular:
(suprimi alguns dados por segurança)
Então revisando o código, recebe SMS >Local<, dispara leitura do GPS, processa dados e envia por SMS para numero de celular cadastrado.
Código:
- #include <TinyGPS++.h> // Biblioteca do GPS
- #include <SoftwareSerial.h> // inclui biblioteca
- TinyGPSPlus gps; // Inicia GPS
- SoftwareSerial GpS(2,3); // inicia portas soft serial GPS
- SoftwareSerial GsM(4,5); // inicia portas soft serial GPS
- char server[] = "http://maps.google.com.br/maps?q=";
- String data;
- float dado_lat;
- char lat_aux[10];
- String latParaString;
- float dado_lng;
- char lng_aux[10];
- String lngParaString;
- // AUX GSM
- String linhaAtual = "";
- String sms = "";
- String smsAnterior = "";
- boolean lendoSMS = false;
- void setup()
- {
- // Serial PC <-> Arduino
- Serial.begin(9600);
- // GsM Arduino <-> GSM
- GsM.begin(4800);
- // GpS Arduino <-> GPS
- GpS.begin(9600);
- // Chama função que faz start up do modulo GSM
- configGSM();
- }
- void loop()
- {
- // Verifica SMS de controle
- leituraSMS();
- }// end loop
- // Funções Gerais
- // Envia SMS com link google maps de localização e avisa a tentativa de furto
- void envia_sms_gps()
- {
- // Faz leitura do GPS
- while (GpS.available() > 0)
- if (gps.encode(GpS.read()))
- displayGPSInfo();
- // Envia SMS https://maps.google.com.br/maps?q=(LAT),(LON)
- delay(300);
- GsM.print("AT+CMGF=1\r"); //mandando SMS em modo texto
- delay(1000);
- GsM.print("AT+CMGS=\"+NUMERO CELULAR\"\r"); // numero que vamos mandar o SMS
- delay(1000);
- GsM.println(data);
- Serial.println(data);
- delay(1000);
- GsM.write(0x1A);
- data="";
- delay(300);
- }
- // Faz leitura do GPS e pega as coordenadas lat e long, converte os valores float para string e concatena com link do google maps
- void displayGPSInfo()
- {
- if(gps.location.isValid())
- {
- dado_lat=gps.location.lat();
- dado_lng=gps.location.lng();
- dtostrf(dado_lat,4,4,lat_aux);
- latParaString = String(lat_aux);
- dtostrf(dado_lng,4,4,lng_aux);
- lngParaString = String(lng_aux);
- data+=(server);
- data+=(latParaString);
- data+=",";
- data+=(lngParaString);
- }
- delay(300);
- }
- // Faz leitura do 1 campo de SMS, os comandos tem que ser enviados assim >COMANDO<
- void leituraSMS()
- {
- GsM.print("AT+CMGR=1");
- delay(1000);
- while(GsM.available()>0)
- {
- char inChar = GsM.read();
- linhaAtual += inChar;
- if (inChar == '\n')
- {
- linhaAtual = "";
- }
- if (linhaAtual.endsWith(">"))
- {
- lendoSMS = true;
- sms = "";
- }
- if (lendoSMS)
- {
- if (inChar != '<')
- {
- sms += inChar;
- }
- else
- {
- lendoSMS = false;
- if(sms==">Local" && smsAnterior!=sms)
- {
- Serial.println("Enviando localizacao atual");
- envia_sms_gps();
- }
- if(sms == smsAnterior)
- {
- Serial.println(sms);
- GsM.print("AT+CMGD=1,4");
- delay(300);
- sms="";
- }
- smsAnterior=sms;
- }
- }
- }
- }
- void configGSM()
- {
- // Configura modem GSM modo texto, e apaga todas SMS
- delay(3000);
- Serial.println("Configurando SMS modo texto");
- GsM.print("AT+CMGF=1");
- delay(800);
- Serial.println("Apagando todas SMS posteriores");
- GsM.print("AT+CMGD=1,4");
- delay(800);
- Serial.println("");
- }
Espero que tenha ficado de fácil compreensão, no próximo post vamos fazer modificações de forma enviar SMS regularmente de 2 em 2 minutos.
Até!
Nenhum comentário:
Postar um comentário