Rastreamento GPS Instantâneo para Arduino MKR GSM 1400 via SMS
Componentes e Materiais
| Arduino MKR GSM 1400 | 1 |
Sobre o Projeto
Nota: Este tutorial pode estar desatualizado. Por favor, acesse aqui para uma versão mais atual.
O objetivo deste projeto é mostrar como usar a localização celular do Arduino MKR GSM 1400. Implementamos uma aplicação simples que permite obter a latitude e longitude do MKR GSM quando um SMS com uma letra de verificação de segurança é recebido. O número do remetente é recuperado do SMS recebido e uma resposta é criada com o link apropriado do Google Maps completado pelas coordenadas dadas pelos serviços de localização fornecidos pelo módulo u-blox.
O que você precisa
O projeto é baseado em um Arduino MKR GSM 1400, uma antena, um pacote de bateria LiPo, um smartphone e um cartão SIM de dados.
- O Arduino MKR GSM 1400 executa o sketch e suporta a conectividade GSM que permite as funções de localização requeridas pelo nosso projeto;
- Antena e bateria são usadas respectivamente para permitir a conexão à rede de dados celular com bom sinal e para alimentar o dispositivo quando outras fontes de energia não estão disponíveis;
- O smartphone é necessário para enviar o SMS ao MKR GSM 1400 e solicitar a localização GPRS;
- O cartão SIM é necessário para acessar a rede de dados e permitir a operação na rede;
- PIN, APN e credenciais de acesso são necessários para conectar à rede de dados.
Configuração do Hardware
Este projeto não requer nada especial. Conecte a antena à placa, insira o cartão SIM e conecte a bateria LiPo ao conector JST.
A bateria LiPo é opcional, mas permite lidar com picos de corrente que o módulo GSM pode exigir em condições particulares de cobertura ruim.

Como Funciona
Este projeto usa a biblioteca MKRGSM para gerenciar mensagens SMS e a georreferenciação baseada em células.
Quando um SMS é recebido, o conteúdo é verificado para saber se contém a letra "L". Somente se for o caso, o sketch prossegue com a localização e transmissão SMS. Com esta solução, qualquer número pode solicitar a localização do sistema, mas apenas quem conhece a senha (a "letra secreta") receberá uma resposta. Esta é a linha que faz a verificação: if (c != 76) e 76 é o código ASCII de "L". Você pode alterar o valor para mudar a letra reconhecida.
O módulo GSM não tem receptor GPS, mas o fabricante tem um banco de dados da localização de cada célula da rede GSM e portanto fornece coordenadas para cada ID de célula fornecido. Este sistema é bastante preciso em áreas urbanas, onde cada célula cobre uma área pequena. Em áreas rurais, a cobertura de cada célula é muito maior e a localização fornecida tem aproximação mais grosseira.
Para criar o link para o Google Maps, usamos uma URL padrão onde apenas concatenamos os valores Long e Lat apropriados no final. Esta URL parece com "https://www.google.com/maps/place/
O Sketch
Descrição detalhada do Sketch: a primeira seção de código inclui as bibliotecas necessárias pela aplicação.
MKRGSM inclui todas as funcionalidades de conexão GSM, localização e gerenciamento SMS, disponíveis através dos objetos GSMClient, GPRS, GSM e GSMLocation. As APIs de gerenciamento SMS estão disponíveis através do objeto GSM_SMS. O header ArduinoLowPower importa as APIs que permitem gerenciamento de baixa potência dos módulos da placa.
Se você baixar o código do Web Editor, encontrará um arquivo arduino_secrets.h que inclui dados sensíveis como PIN, APN, usuário e senha. No web editor, você deve preencher os dados sensíveis na aba Secrets.
// inclui a biblioteca GSM
#include
#include "ArduinoLowPower.h"
char PINNUMBER[] = SECRET_PINNUMBER;
char GPRS_APN[] = SECRET_GPRS_APN;
char GPRS_LOGIN[] = SECRET_GPRS_LOGIN;
char GPRS_PASSWORD[] = SECRET_GPRS_PASSWORD;
// inicializa as instâncias das bibliotecas
GPRS gprs;
GSM gsmAccess;
GSM_SMS sms;
GSMLocation location;
A função measureLocation() consulta o módulo para obter as coordenadas pela rede celular. Se novas coordenadas estiverem disponíveis, atribui à variável global; caso contrário, pergunta novamente por 45 segundos. Se nenhuma medição disponível respeitar as restrições de precisão, retorna as últimas boas.
// variáveis globais para gerenciamento de localização
String GSMlatitude = "0.000000";
String GSMlongitude = "0.000000";
// Esta função usa as APIs de localização para obter as coordenadas do dispositivo
// e atualiza a variável global se todos os requisitos forem satisfeitos
void measureLocation() {
unsigned long timeout = millis();
while (millis() - timeout < 45000) {
if (location.available() && location.accuracy() < 300 && location.accuracy() != 0) {
GSMlatitude = String(location.latitude(), 6);
GSMlongitude = String(location.longitude(), 6);
break;
}
}
}
A função connectNetwork() usa as APIs gsmAccess.begin e gprs.attachGPRS para conectar a placa à rede de dados; são usados os dados de credenciais pin, apn, user e pass atribuídos pelas declarações em arduino_secrets.h.
// A função connectNetwork() é usada para a conexão de dados da placa
void connectNetwork() {
bool status = false;
// define timeout global de comando AT para permitir recuperação de
// congelamento de comunicação UART entre módulo samd e u-blox
gprs.setTimeout(100000);
gsmAccess.setTimeout(100000);
// Inicia conexão GSM
while (status == false) {
if ((gsmAccess.begin(PINNUMBER) == GSM_READY) &
(gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD) == GPRS_READY)) {
status = true;
} else {
delay(1000);
}
}
}
A seção setup permite inicializar todos os objetos usados pelo sketch. Chama a função connectionNetwork() para estabelecer a conexão de dados e iniciar a estrutura de localização.
// seção de código para inicializar conexão de dados e objeto de localização
void setup() {
connectNetwork();
location.begin();
}
A última seção de código é a função loop onde são implementados o gerenciamento SMS e a medição de localização. Cada vez que um novo SMS está disponível, a placa responde ao remetente com um SMS com as coordenadas da placa. Para reduzir o consumo, a placa desliga o módulo e entra em deep sleep por 60 segundos.
void loop() {
int c;
String response;
String messager = "";
measureLocation();
unsigned long timeout = millis();
while (millis() - timeout < 5000) {
if (sms.available()) {
// verifica SMS disponível
char senderNumber[20] = {"0"};
sms.remoteNumber(senderNumber, 20); // Obtém número remoto
int c = sms.read();
if (c != 76) {
sms.flush();
break;
}
// concatena a string da mensagem a ser enviada ao número remoto
String txtMsg = "https://www.google.com/maps/place/" + GSMlatitude + "," + GSMlongitude;
// envia a mensagem
sms.beginSMS(senderNumber);
sms.print(txtMsg);
sms.endSMS();
break;
}
}
// Desliga o módulo GSM para obter o menor consumo de energia enquanto dorme
gsmAccess.shutdown();
LowPower.sleep(60000); // habilita baixa potência por 60 segundos e depois tenta novamente
connectNetwork(); // liga o módulo e reconecta à rede de dados
}
Como Usar
Configure o hardware como explicado acima, personalize o sketch com suas credenciais de acesso, carregue o sketch na placa e aguarde a conexão ser estabelecida com a rede GSM. Isso pode levar 30 segundos.
Após a conexão ser estabelecida, envie um SMS para o número do SIM do MKR GSM com um "L" como texto: isso iniciará o processo de localização e a placa responderá com um SMS contendo o link do Google Maps com a posição solicitada.
Código
Arduino
O código completo está disponível no Arduino Web Editor ou no repositório do projeto.
Processo de manufatura
- Por que um Design Ligeiramente Maior Pode Acelerar Inovação e Reduzir Risco
- Integre sua Estação Meteorológica ao CWOP: Guia Prático
- Dominando a Placa PSoC 6 Pioneer com Shield IoT Add-On: Guia do Desenvolvedor
- Como Implementar Códigos QR no Seu CMMS: Guia Passo a Passo
- Por Que Conjuntos de Malas de Fibra de Carbono São o Upgrade Definitivo para Viajantes
- Maximize o ROI em Seus Investimentos em IoT: Um Guia Prático
- Descubra Como a Techman Robot Automatiza Produção: Webinar sobre Cobots Avançados e Sistemas de Visão
- 7 Estratégias Comprovadas para Reduzir Custos de Produção de PCI
- Impulsione Operações Agrícolas com Manutenção Proativa
- Maximize o Valor: Estratégias para Vender ou Reaproveitar Equipamentos Pesados Usados