- Componentes necessários:
- Módulo GPS e seu funcionamento:
- Módulo GSM:
- Acelerômetro:
- Explicação do circuito:
- Explicação de trabalho:
- Explicação de programação:
Em nossos tutoriais anteriores, aprendemos como fazer a interface do módulo GPS com o computador, como construir um relógio Arduino GPS e como rastrear veículos usando GSM e GPS. Aqui neste projeto, vamos construir um sistema de alerta de acidentes com veículos baseado em Arduino usando GPS, GSM e acelerômetro. O acelerômetro detecta a mudança repentina nos eixos do veículo e o módulo GSM envia a mensagem de alerta no seu Celular com a localização do acidente. A localização do acidente é enviada em forma de link Google Map, derivada da latitude e longitude do módulo GPS. A Mensagem também contém a velocidade do veículo em nós. Veja o vídeo de demonstraçãono fim. Este projeto de alerta de Acidente com Veículo também pode ser usado como um Sistema de Rastreamento e muito mais, apenas fazendo algumas alterações no hardware e software.
Componentes necessários:
- Arduino Uno
- Módulo GSM (SIM900A)
- Módulo GPS (SIM28ML)
- Acelerômetro (ADXL335)
- LCD 16x2
- Fonte de energia
- Fios de conexão
- 10 K-POT
- Placa de ensaio ou PCB
- Fonte de alimentação 12v 1amp
Antes de entrar no projeto, discutiremos sobre GPS, GSM e acelerômetro.
Módulo GPS e seu funcionamento:
GPS significa Global Positioning System e é usado para detectar a latitude e longitude de qualquer local da Terra, com a hora UTC exata (Universal Time Coordinated). O módulo GPS é usado para rastrear a localização do acidente em nosso projeto. Este dispositivo recebe as coordenadas do satélite a cada segundo, com hora e data. Anteriormente, extraímos a string $ GPGGA no Vehicle Tracking System para encontrar as coordenadas de latitude e longitude.
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
Comando 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
(Para saber mais sobre o módulo GSM, verifique nossos vários projetos GSM com vários microcontroladores aqui)
Acelerômetro:
Descrição do pino do acelerômetro:
- A alimentação Vcc de 5 volts deve ser conectada neste pino.
- X-OUT Este pino fornece uma saída analógica na direção x
- Y-OUT Este pino fornece uma saída analógica na direção y
- Z-OUT Este pino fornece uma saída analógica na direção z
- GND Ground
- ST Este pino usado para definir a sensibilidade do sensor
Verifique também nossos outros projetos usando Acelerômetro: Jogo de Ping Pong usando Arduino e Robô Controlado por Gestos de Mão Baseado em Acelerômetro.
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 10 do Arduino. Usando a Biblioteca serial do software aqui, permitimos a comunicação serial nos pinos 10 e 11, e os tornamos Rx e Tx respectivamente e deixamos o pino Rx do Módulo GPS aberto. Por padrão, os pinos 0 e 1 do Arduino são usados para comunicação serial, mas usando a biblioteca SoftwareSerial, podemos permitir a comunicação serial em outros pinos digitais do Arduino. A alimentação de 12 volts é usada para alimentar o Módulo GPS.
Os pinos Tx e Rx do módulo GSM estão diretamente conectados aos pinos D2 e D3 do Arduino. Para interface GSM, aqui também usamos a biblioteca serial do software. O módulo GSM também é alimentado por 12v. Os pinos de dados D4, D5, D6 e D7 de um LCD opcional são conectados ao pino número 6, 7, 8 e 9 do Arduino. Os pinos de comando RS e EN do LCD são conectados aos pinos número 4 e 5 do Arduino e o pino RW é conectado diretamente ao aterramento. Um potenciômetro também é usado para definir o contraste ou brilho do LCD.
Um acelerômetro é adicionado a este sistema para detectar um acidente e seus pinos de saída ADC dos eixos x, y e z são conectados diretamente aos pinos A1, A2 e A3 do ADC do Arduino.
Explicação de trabalho:
Neste projeto, o Arduino é utilizado para controlar todo o processo com um receptor GPS e módulo GSM. O receptor GPS é utilizado para detectar as coordenadas do veículo, o módulo GSM é utilizado para enviar o SMS de alerta com as coordenadas e o link para o Google Map. O acelerômetro ADXL335 é usado para detectar acidentes ou mudanças repentinas em qualquer eixo. E um LCD 16x2 opcional também é usado para exibir mensagens de status ou coordenadas. Usamos o Módulo GPS SIM28ML e o Módulo GSM SIM900A.
Quando estivermos prontos com nosso hardware após a programação, podemos instalá-lo em nosso veículo e ligá-lo. Agora, sempre que ocorre um acidente, o carro se inclina e o acelerômetro muda os valores do eixo. Esses valores são lidos pelo Arduino e verifica se alguma alteração ocorre em algum eixo. Se ocorrer alguma mudança, o Arduino lê as coordenadas extraindo $ GPGGA String dos dados do módulo GPS (GPS funcionando explicado acima) e envia SMS para o número predefinido para a polícia ou ambulância ou membro da família com as coordenadas de localização do local do acidente. A mensagem também contém um link do Google Map para o local do acidente, para que esse local possa ser facilmente rastreado. Quando recebermos a mensagem, basta clicar no link e redirecionar para o mapa do Google e ver a localização exata do veículo. Velocidade do veículo, em nós(1,852 KPH), também é enviado na SMS e exibido no painel LCD. Confira o Vídeo Demo completo abaixo do Projeto.
Aqui neste projeto, podemos definir a sensibilidade do acelerômetro colocando o valor mínimo e máximo no código.
Aqui na demonstração usamos os valores indicados:
#define minVal -50 #define MaxVal 50
Mas, para obter melhores resultados, você pode usar 200 em vez de 50 ou pode definir de acordo com sua necessidade.
Explicação de programação:
O Programa Completo foi fornecido abaixo na seção Código; aqui estamos explicando brevemente suas várias funções.
Primeiro, incluímos todas as bibliotecas ou arquivos de cabeçalhos necessários e declaramos várias variáveis para cálculos e armazenamento de dados temporários.
Depois disso, criamos uma função void initModule (String cmd, char * res, int t) para inicializar o módulo GSM e verificar sua resposta usando comandos AT.
void initModule (String cmd, char * res, int t) {while (1) {Serial.println (cmd); Serial1.println (cmd); atraso (100); while (Serial1.available ()> 0) {if (Serial1.find (res)) {Serial.println (res); atraso (t); Retorna; } else {Serial.println ("Erro"); }} atraso (t); }}
Depois disso, na função void setup () , inicializamos a comunicação serial de hardware e software, LCD, GPS, módulo GSM e acelerômetro.
void setup () {Serial1.begin (9600); Serial.begin (9600); lcd.begin (16,2); lcd.print ("Alerta de acidente"); lcd.setCursor (0,1); lcd.print ("Sistema"); atraso (2000); lcd.clear ();…………………
O processo de calibração do acelerômetro também é feito no loop de configuração . Nele, pegamos algumas amostras e, em seguida, encontramos os valores médios para os eixos x, y e z. E armazene-os em uma variável. Em seguida, usamos esses valores de amostra para ler as alterações no eixo do acelerômetro quando o veículo se inclina (acidente).
lcd.print ("Calibrando"); lcd.setCursor (0,1); lcd.print ("Aceleromitro"); para (int i = 0; i
Depois disso, na função void loop () , lemos os valores do eixo do acelerômetro e fizemos um cálculo para extrair as alterações com a ajuda de amostras que são tiradas na calibração. Agora, se qualquer mudança for mais ou menos do que o nível definido, o Arduino enviará uma mensagem para o número predefinido.
void loop () {int valor1 = analogRead (x); valor int2 = analogRead (y); valor int3 = analogRead (z); int xValue = xsample-value1; int yValue = ysample-value2; int zValue = zsample-value3; Serial.print ("x ="); Serial.println (xValue); Serial.print ("y ="); Serial.println (yValue); Serial.print ("z ="); Serial.println (zValue);…………………
Aqui também criamos alguma outra função para vários fins, como void gpsEvent () para obter coordenadas GPS, void coordinate2dec () para extrair coordenadas da sequência de GPS e convertê-las em valores decimais, void show_coordinate () para exibir valores no monitor serial e LCD e, finalmente, o vazio Enviar () para enviar SMS de alerta para o número predefinido.
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.