Em tutoriais anteriores, aprendemos como fazer a interface do módulo GPS com o computador e como rastrear veículos usando GSM e GPS. Também construímos um sistema de alerta de acidentes com veículos usando Arduino e acelerômetro. Aqui estamos novamente construindo o mesmo projeto, mas desta vez uma plataforma de lançamento MSP430 e um sensor de vibração serão usados para detectar acidentes com veículos. Portanto, este projeto também falará sobre a interface de um sensor de vibração com o launchpad MSP430. Você pode encontrar mais projetos MSP430 aqui.
Aqui, o módulo do sensor de vibração detecta a vibração do veículo e envia um sinal para o Launchpad MSP430. Em seguida, o MSP430 busca os dados do módulo GPS e os envia ao telefone móvel do usuário via SMS usando o módulo GSM. Um LED também acenderá como sinal de Alerta de Acidente, este LED pode ser substituído por algum alarme. A localização do acidente é enviada em forma de link Google Map, derivada da latitude e longitude do módulo GPS. Veja o vídeo de demonstração no final.
O módulo GPS envia os dados relacionados ao rastreamento da posição em tempo real, e envia muitos dados no formato NMEA (veja a imagem abaixo). O formato NMEA consiste em várias frases, nas quais precisamos apenas de uma frase. Esta frase começa em $ GPGGA e contém as coordenadas, hora e outras informações úteis. Este GPGGA é conhecido como Dados de correção do sistema de posicionamento global. Saiba mais sobre frases NMEA e como ler dados de GPS aqui.
Podemos extrair coordenadas da string $ GPGGA contando as vírgulas na string. Suponha que você encontre a string $ GPGGA e a armazene em um array, então a Latitude pode ser encontrada após duas vírgulas e a Longitude pode ser encontrada após quatro vírgulas. Agora, essa latitude e longitude podem ser colocadas em outras matrizes.
Abaixo está a string $ GPGGA, junto com sua descrição:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510,4, M, 43,9, M,, * 47 $ GPGGA, HHMMSS.SSS, latitude, N, longitude, E, FQ, NOS, HDP, altitude, M, altura, M,, dados de soma de verificação
Identificador |
Descrição |
$ GPGGA |
Dados de correção do sistema de posicionamento global |
HHMMSS.SSS |
Tempo em hora, minuto, segundo e formato milissegundos. |
Latitude |
Latitude (coordenada) |
N |
Direção N = Norte, S = Sul |
Longitude |
Longitude (Coordenada) |
E |
Direção E = Leste, W = Oeste |
FQ |
Dados de qualidade fixos |
NOS |
Nº de satélites em uso |
HDP |
Diluição Horizontal de Precisão |
Altitude |
Altitude (metros acima do nível do mar) |
M |
Metro |
Altura |
Altura |
Checksum |
Dados de soma de verificação |
Módulo GSM
O SIM900 é um Módulo Quad-band GSM / GPRS completo que pode ser incorporado facilmente usado pelo cliente ou amador. O módulo SIM900 GSM fornece uma interface padrão da indústria. SIM900 oferece desempenho GSM / GPRS 850/900/1800/1900 MHz para voz, SMS, dados com baixo consumo de energia. Está facilmente disponível no mercado.
- SIM900 projetado usando processador de chip único integrando núcleo AMR926EJ-S
- Módulo Quad-band GSM / GPRS em tamanho pequeno.
- GPRS ativado
Comandos AT
AT significa ATENÇÃO. Este comando é usado para controlar o módulo GSM. Existem alguns comandos para chamadas e mensagens que usamos em muitos de nossos projetos GSM anteriores com o Arduino. Para testar o Módulo GSM, usamos o comando AT. Depois de receber o módulo AT Command GSM, responda com OK. Isso significa que o módulo GSM está funcionando bem. Abaixo estão alguns comandos AT que usamos aqui neste projeto:
ATE0 Para eco desligado
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = ”Número de celular”
>> Agora podemos escrever nossa mensagem
>> Depois de escrever uma mensagem
Ctrl + Z envia comando de mensagem (26 em decimal).
ENTER = 0x0d em HEX
(Para saber mais sobre o módulo GSM, verifique nossos vários projetos GSM com vários microcontroladores aqui)
Módulo Sensor de Vibração
Neste projeto do Sistema de Alerta de Acidentes MSP430, usamos um módulo sensor de vibração que detecta vibrações ou modulações repentinas. O módulo do sensor de vibração fornece uma lógica HIGH / LOW de saída digital dependendo do módulo. Em nosso caso, usamos um módulo de sensor de vibração lógico HIGH ativo. Isso significa que sempre que o sensor de vibração detectar vibração, ele fornecerá lógica ALTA para o microcontrolador.
Explicação do circuito
As conexões de circuito deste projeto de sistema de alerta de acidentes com veículos são simples. Aqui, o pino Tx do módulo GPS é conectado diretamente ao pino digital número P1_1 do Launchpad MSP430 (hardware serial) e 5v é usado para alimentar o módulo GPS. Usando a Biblioteca serial do software aqui, permitimos a comunicação serial nos pinos P_6 e P1_7, e os tornamos Rx e Tx respectivamente e conectados ao módulo GSM. Fonte de 12 volts é usada para alimentar o Módulo GSM. O sensor de vibração está conectado em P1_3. Um LED também é usado para indicar a detecção de acidentes. O restante das conexões é mostrado no diagrama do circuito.
Explicação de programação
A programação para este projeto é fácil, exceto a parte do GPS. O código completo é fornecido no final do projeto. Para escrever ou compilar o código no MSP430, usamos Energia IDE que é compatível com Arduino. A maior parte da função do Arduino IDE pode ser usada diretamente neste Energia IDE.
Portanto, primeiro incluímos as bibliotecas necessárias e declaramos o pino e as variáveis.
#incluir
A função dada é usada para ler o sinal do sensor de vibração. Esta função também filtrará vibrações pequenas ou falsas.
# define count_max 25 char SensorRead (int pin) // lê sw com debounce { char count_low = 0, count_high = 0; faça { demora (1); if (digitalRead (pin) == HIGH) { count_high ++; count_low = 0; } else { count_high = 0; count_low ++; } } while (count_low <count_max && count_high <count_max); if (count_low> = count_max) return LOW; senão retorne ALTO; }
A função abaixo detecta vibração e chama a função gpsEvent () para obter as coordenadas do GPS e, finalmente, chama a função Send () para enviar SMS.
void loop () { if (SensorRead (vibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Enviar(); digitalWrite (led, LOW); atraso (2000); } }
A função dada é responsável por obter as sequências de GPS do módulo GPS, extrair as coordenadas delas e convertê-las no formato decimal em graus.
void gpsEvent () { char gpsString; teste de char = "RMC"; i = 0; while (1) { while (Serial.available ()) // Dados de entrada em série do GPS { char inChar = (char) Serial.read (); gpsString = inChar; // armazena os dados de entrada do GPS em uma string temporária str i ++; if (i <4) { if (gpsString! = teste) // verificar a string certa i = 0; }
grau int = 0; grau = gpsString-48; grau * = 10; grau + = gpsString-48; int minut_int = 0; minut_int = gpsString-48; minut_int * = 10; minut_int + = gpsString-48; int minut_dec = 0; minut_dec + = (gpsString-48) * 10000; minut_dec + = (gpsString-48) * 1000; minut_dec + = (gpsString-48) * 100; minut_dec + = (gpsString-48) * 10; minut_dec + = (gpsString-48); float minut = ((float) minut_int + ((float) minut_dec / 100000.0)) / 60.0; latitude = ((flutuante) grau + minuto);
E por último, a função Send () é utilizada para enviar o SMS ao número do usuário que está inserido nesta parte do código.
enviar vazio () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // insira seu número de celular GSM.println ('"'); atraso (500); // GSM.print ("Latitude:"); // GSM.println (latitude); GSM.println ("Acidente ocorrido"); atraso (500); // GSM.print ("longitude:"); // GSM.println (logitude); GSM.println ("Clique no link para ver a localização"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (latitude, 6); GSM.print ("+"); GSM.print (logitude, 6); GSM.write (26); atraso (4000); }
O código completo e o vídeo de demonstração são fornecidos abaixo, você pode verificar todas as funções no código.