Sistema de rastreamento de veículos IoT baseado em ESP8266 e Arduino

Os sistemas de rastreamento de veículos são uma necessidade dos viajantes de hoje. Esses sistemas são essenciais para manter os veículos pessoais protegidos contra furtos e roubos. Os Sistemas de Rastreamento de Veículos só são possíveis de projetar capacitando-os com internet. Neste projeto, é projetado um sistema simples de rastreamento de veículos que irá atualizar continuamente a localização atual do veículo para uma página da web personalizada.
Os sistemas de rastreamento de veículos são projetados para rastrear o movimento de um veículo de um local a qualquer momento. Esse sistema é equipado com um receptor GPS que mantém a localização GPS do dispositivo. A localização GPS do dispositivo rastreada pelo sensor GPS é enviada para um servidor de nuvem ou serviço de nuvem com a ajuda de um controlador. Este projeto é uma implementação simples desse sistema em uma das placas de prototipagem mais populares – Arduino UNO.
Presume-se que o leitor tenha passado pelo projeto de como começar a usar o arduino e a interface LCD com o arduino. O dispositivo de rastreamento de veículos projetado aqui é um dispositivo IoT. Possui Arduino em interface com Neo-6M Módulo GPS, um LCD de caracteres e modem Wi-Fi ESP8266. O Arduino recebe a localização do dispositivo do receptor GPS e a exibe no LCD de caracteres. Conforme o dispositivo encontra uma conexão de dados por meio de Wi-Fi, como um hotspot Wi-Fi de um smartphone, ele envia a localização GPS atual para uma página da web personalizada. A página da web mostra a localização do dispositivo com a ajuda do Google Maps.
Este dispositivo simples de rastreamento de veículos é fácil de projetar, implementar e pode ser instalado em qualquer veículo. Ele rastreia o veículo no qual está instalado em tempo real. Os dados de GPS que este dispositivo exibe e envia para a página remota são as coordenadas geográficas (latitude e longitude) do dispositivo.
O Arduino Sketch gerencia as funcionalidades do dispositivo como obter localização GPS, exibi-la no módulo LCD, conectar-se a um ponto de acesso Wi-Fi e enviar os dados GPS para uma página gerada em tempo real. O esboço do Arduino é escrito, compilado e carregado com a ajuda do Arduino IDE.
Protótipo de dispositivo de rastreamento de veículos IoT baseado em Arduino e ESP8266
Figura 1: Protótipo de dispositivo de rastreamento de veículos IoT baseado em Arduino e ESP8266
Componentes necessários
Lista de componentes usados ​​no projeto de dispositivo de rastreamento de veículos IoT baseado em Arduino e ESP8266
Fig. 2: Lista de componentes usados ​​no projeto do dispositivo de rastreamento de veículos IoT baseado em Arduino e ESP8266
Diagrama de bloco –
Diagrama de blocos do dispositivo de rastreamento de veículos IoT baseado em Arduino e ESP8266
Fig. 3: Diagrama de blocos do dispositivo de rastreamento de veículos IoT baseado em Arduino e ESP8266
Conexões de Circuito –
O sistema de rastreamento de veículos baseado em Arduino projetado aqui é um dispositivo IoT. Ele foi projetado conectando o módulo GPS, LCD de caracteres e modem Wi-Fi ESP8266 ao Arduino UNO. O módulo GPS NEO-6M é usado para obter as coordenadas geográficas do local. O módulo ESP é usado para atualizar a localização do veículo para o servidor web que pode ser rastreado através do Google Maps, onde a posição exata do movimento do veículo pode ser rastreada.
Imagem mostrando conexões de circuito do dispositivo de rastreamento de veículos IoT baseado em Arduino e ESP8266
Fig. 4: Imagem mostrando conexões de circuito do dispositivo de rastreamento de veículos IoT baseado em Arduino e ESP8266
O dispositivo IoT de rastreamento de veículos baseado em Arduino possui os seguintes componentes e conexões de circuito –
Fonte de energia – O Arduino UNO pode ser alimentado por uma tomada USB. Há fontes USB disponíveis na maioria dos carros. Até mesmo bicicletas podem ser modificadas para ter fonte de alimentação USB da bateria do veículo. O módulo GPS e o LCD de caracteres no circuito consomem energia da fonte de 5 V DC do Arduino, enquanto o modem Wi-Fi ESP8266 consome energia da fonte de 3,3 V DC do Arduino.
Arduino UNO – O Arduino UNO é uma placa de microcontrolador baseada em ATmega328. A placa vem com um carregador de inicialização Arduino integrado. Ela tem 14 pinos GPIO, 6 pinos PWM, 6 entradas analógicas e interfaces UART, SPI e TWI integradas, um ressonador integrado, um botão de reset e furos para montagem de conectores de pinos. Durante a programação da placa, ela pode ser conectada ao PC usando a porta USB e a placa pode ser executada com energia USB. O Arduino UNO tem 32 Kb de memória Flash, 1 Kb de EEPROM e 2 Kb de SRAM. A placa pode ser conectada a diferentes Arduino Shields para conectividade com Ethernet, Bluetooth, Wi-Fi, Zigbee ou rede celular e pode ser conectada à maioria das plataformas IoT. O controlador ATmega328 tem a seguinte configuração de pinos –
Tabela de Listagem de Configuração de Pinos do Arduino Uno
Fig. 5: Tabela listando a configuração dos pinos do Arduino Uno
Tabela de Listagem de Configuração de Pinos do Arduino Uno
Fig. 6: Tabela listando a configuração dos pinos do Arduino Uno
Neste projeto, 6 pinos GPIO do Arduino são usados ​​para fazer a interface do LCD de caracteres, 2 pinos GPIO são usados ​​para fornecer comunicação serial com o modem ESP8266 usando serial de software e dois pinos GPIO são usados ​​para comunicação serial com o módulo GPS.
Modem Wi-Fi ESP8266 – O Módulo Wi-Fi ESP8266 é usado para conectar a placa Arduino a um ponto de acesso Wi-Fi, para que ela possa acessar o servidor em nuvem e atualizar os dados GPS para o servidor. É um SOC independente com pilha de protocolo TCP/IP integrada que pode acessar uma rede Wi-Fi. O ESP8266 é capaz de hospedar um aplicativo ou descarregar todas as funções de rede Wi-Fi de outro processador de aplicativo. Cada módulo ESP8266 vem pré-programado com um firmware de conjunto de comandos AT. O módulo está disponível em dois modelos – ESP-01 e ESP-12. O ESP-12 possui 16 pinos disponíveis para interface, enquanto o ESP-01 possui apenas 8 pinos disponíveis para uso. O ESP-12 possui a seguinte configuração de pinos –
Tabela de listagem de configuração de pinos do modem Wi-Fi ESP8266 ESP-12
Fig. 7: Tabela listando a configuração dos pinos do modem Wi-Fi ESP8266 ESP-12
O modelo ESP-01 é utilizado no projeto. O modelo ESP-01 possui a seguinte configuração de pinos –
Tabela de listagem de configuração de pinos do modem Wi-Fi ESP8266 ESP-12
Fig. 8: Tabela listando a configuração dos pinos do modem Wi-Fi ESP8266 ESP-01
Os pinos RESET e VCC do módulo são conectados aos 3,3 V DC do Arduino enquanto o pino Ground é conectado ao terra comum. Os pinos Tx e Rx do módulo são conectados aos pinos 10 e 11 do Arduino UNO respectivamente onde os pinos Arduino são configurados como receptor serial e transmissor respectivamente usando biblioteca serial de software.
LCD 16X2 – O display LCD 16X2 é conectado à placa Arduino conectando seus pinos de dados DB4 a DB7 com os pinos 8 a 5 da placa Arduino. Os pinos RS e E do LCD estão conectados aos pinos 13 e 12 da placa Arduino, respectivamente. O pino RW do LCD está aterrado.
Tabela listando as conexões do circuito entre o LCD e o Arduino Uno
Fig. 9: Tabela listando as conexões do circuito entre o LCD e o Arduino Uno
A biblioteca padrão de código aberto para interfacear LCD com placa Arduino é usada no projeto. A biblioteca funciona como esperado e não precisa de alterações ou modificações.
Módulo GPS – O módulo GPS usado neste projeto é o Neo 6M. É um módulo GPS autônomo com mecanismo de posicionamento u-blox 6 de 50 canais que ostenta um Time-To-First-Fix (TTFF) de menos de 1 segundo. O mecanismo de aquisição dedicado, com 2 milhões de correlatos, é capaz de buscas massivas de espaço de tempo/frequência paralelas, permitindo que ele encontre satélites instantaneamente. O design e a tecnologia inovadores suprimem fontes de interferência e atenuam os efeitos de multicaminho, dando aos receptores GPS NEO-6 excelente desempenho de navegação, mesmo nos ambientes mais desafiadores. Ele tem porta UART para transferência de dados. O SOC no módulo é um chip de 24 pinos com a seguinte configuração de pinos –
Tabela de listagem de configuração de pinos do chip GPS Neo 6M
Fig. 10: Tabela listando a configuração dos pinos do chip GPS Neo 6M
Tabela de listagem de configuração de pinos do chip GPS Neo 6M
Fig. 11: Tabela listando a configuração dos pinos do chip GPS Neo 6M
O módulo GPS é conectado ao Arduino UNO conforme tabela a seguir –
Tabela listando as conexões do circuito entre o módulo GPS e o Arduino Uno
Fig. 12: Tabela listando as conexões do circuito entre o módulo GPS e o Arduino Uno
Os pinos 2 e 3 do Arduino são configurados como receptor e transmissor serial de software, respectivamente, usando a biblioteca serial de software.
Como funciona o circuito –
Quando o dispositivo IoT baseado em Arduino é ligado, algumas mensagens iniciais são exibidas no LCD de caracteres e ele começa a ler os dados do GPS do módulo Neo-6M. Primeiro, o IP do servidor local deve ser carregado na página da web que será exibida inicialmente no monitor serial do Arduino ou no visor LCD. O GPS começa a obter as coordenadas geográficas do local, onde o módulo GPS obtém a atualização do local a cada 27 segundos e atualiza para o servidor da web com a ajuda do módulo ESP Wi-Fi. O dispositivo começa a procurar um ponto de acesso Wi-Fi. Se um ponto de acesso Wi-Fi estiver disponível, o Arduino obtém o endereço IP, se necessário, e se conecta ao ponto Wi-Fi. O nome e a senha do ponto de acesso Wi-Fi são codificados no esboço do Arduino. A inicialização da conexão Wi-Fi é feita dentro da função setup do esboço do Arduino que é executada assim que a placa é ligada.
A configuração da conexão Wi-Fi é executada passando comandos AT para o modem Wi-Fi ESP8266. O modem é conectado aos pinos GPIO do Arduino que são configurados como pinos transmissor e receptor UART usando a biblioteca serial de software. O Wi-Fi é inicializado passando os seguintes comandos AT para o módulo ESP –
AT: Este comando é passado para verificar se o modem está funcionando corretamente.
AT+CWMODE=3: Este comando é passado para definir o modo Wi-Fi tanto para o modo AP quanto para o modo Estação.
AT+CWQAP: Este comando é passado para desconectar de qualquer AP (Ponto de Acesso) se o modem estiver conectado.
AT+RST: Este comando é passado para reiniciar o modem.
Após a reinicialização, o modem verifica os endereços IP dos pontos de acesso disponíveis. O modem ESP pode se conectar ao ponto de acesso cujo SSID e senha são codificados no Arduino Sketch. O seguinte comando AT é passado para se conectar ao ponto de acesso –
AT+CWJAP
Assim que o modem estiver conectado a um ponto de acesso, ele obtém o endereço IP executando o seguinte comando –
AT+CIFSR: Este comando é usado para obter o endereço IP do módulo ESP como um cliente.
O endereço IP é armazenado em uma string e reconhecido para a placa Arduino. Agora, os seguintes comandos AT são passados ​​para o módulo ESP – AT+CIPMUX=1: Este comando é passado para habilitar múltiplas conexões.
AT+CIPSERVER=1,80: Este comando é passado para criar um servidor na porta 80.
O Arduino lê a latitude e longitude do módulo GPS. Os dados do GPS são encapsulados em strings formatadas apropriadamente e armazenados em variáveis. Eles são exibidos no LCD de caracteres e enviados para o servidor remoto (servidor local neste caso) quando a conexão Wi-Fi está disponível. Os dados são atualizados a cada 27 segundos e os dados armazenados atuais são atualizados para o servidor local conforme a conexão Wi-Fi é configurada. O servidor local é um PC ou laptop conectado ao mesmo ponto de acesso Wi-Fi e executando o host local. Uma página da web é criada pelo Arduino Sketch e enviada com os dados de GPS atualizados para o servidor local. No servidor da web, a localização do veículo em movimento pode ser visualizada pelo Google Maps. O dispositivo aqui se conecta ao host local. Para se conectar a um site ou página da web hospedada, o encaminhamento de porta deve ser feito no modem ESP8266.
Guia de programação –
O esboço do Arduino começa com a importação de bibliotecas padrão como SoftwareSerial.h e LiquidCrystal.h. O LiquidCrystal.h é usado para gerenciar a comunicação de dados entre o módulo LCD e o Arduino. O SoftwareSerial.h é usado para configurar os pinos do Arduino como transmissor e receptor serial para realizar comunicação serial com o módulo GPS e o modem ESP8266. Algumas variáveis ​​são declaradas para conter dados e mensagens de GPS, endereço IP do ponto de acesso Wi-Fi e conteúdo HTML da página web.
.
Captura de tela do código Arduino usado para inicialização do dispositivo IoT de rastreamento de veículos
Fig. 13: Captura de tela do código Arduino usado para inicialização do dispositivo IoT Vehicle Tracking
A função setup é chamada na qual a taxa de transmissão para a comunicação serial com o modem Wi-Fi é definida. O modo Wi-Fi e a conectividade de rede são estabelecidos usando os comandos AT com alguns atrasos. O atraso deve ser dado de acordo com o tempo que leva para se conectar à rede chamando a função wifi_init . O módulo GPS é inicializado e as coordenadas são lidas usando a função get_gps .
Captura de tela da função de configuração do código Arduino usado no dispositivo de rastreamento de veículos IoT
Fig. 14: Captura de tela da função de configuração do código Arduino usado no dispositivo IoT de rastreamento de veículos
A função loop é chamada e funciona infinitamente. Nesta função, a função get_gps é chamada para ler as coordenadas geográficas da localização. São chamadas as funções para criar conteúdo HTML para a página web com localização GPS atualizada e enviar a página web para o servidor web local.
Captura de tela do Mani Loop do código Arduino usado no dispositivo de rastreamento de veículos IoT
Fig. 15: Captura de tela do Mani Loop do código Arduino usado no dispositivo de rastreamento de veículos IoT
Confira o Arduino Sketch na seção de código para experimentá-lo. Este é um dispositivo GPS simples para rastreamento de veículos. O código do Arduino pode ser modificado para conectar-se a qualquer página da web ou site. É um projeto de IoT de baixo custo e fácil de implementar.

Código-fonte do projeto

###



//Program to

#include

#include


SoftwareSerial Serial1(2,3);     //make RX arduino line is pin 2, make TX arduino line is pin 3.

SoftwareSerial gps(10,11);

LiquidCrystal lcd(13,12,9,8,7,6);


boolean No_IP=false;

String IP="";

String webpage="";

int i=0,k=0;

int  gps_status=0;

String place="

1. Name: (ENTER UR NAME)

"; String num = "

2. Vehicle No: IND001

"; String cordinat="

Coordinates:

"; String latitude=""; String logitude=""; String gpsString=""; char *test="$GPGGA"; void setup { Serial1.begin(9600); Serial.begin(9600); lcd.begin(16,2); lcd.print("Vehicle Monitoring"); lcd.setCursor(0,1); lcd.print(" System "); delay(2000); lcd.clear ; lcd.print("Connecting...."); delay(1000); connect_wifi("AT",1000); connect_wifi("AT+CWMODE=3",1000); connect_wifi("AT+CWQAP",1000); connect_wifi("AT+RST",5000); FindIP(5000); if(!No_IP) { Serial.println("Connecting Wifi...."); connect_wifi("AT+CWJAP="(ENTER UR SSID NAME) ","(ENTER THE PASSWORD)"",7000); //AT+CWJAP=”wifi_username”,”wifi_password” } else { } Serial.println("Wifi Connected"); lcd.clear ; lcd.print("WIFI Connected"); delay(2000); lcd.clear ; lcd.setCursor(5,0); lcd.print("IP"); lcd.setCursor(3,1); lcd.print("ADDRESS"); ip_add ; delay(2000); connect_wifi("AT+CIPMUX=1",100); connect_wifi("AT+CIPSERVER=1,80",100); Serial1.end ; lcd.clear ; lcd.print(" GPS DATA"); delay(2000); gps.begin(9600); get_gps ; coordinate_display ; gps.end ; Serial1.begin(9600); } void loop { k=0; Serial.println("Please Refresh Ur Page"); while(k<1000) { k++; while(Serial1.available ) { if(Serial1.find("0,CONNECT")) { Serial1.end ; gps.begin(9600); get_gps ; gps.end ; Serial1.begin(9600); Serial1.flush ; Serial.println("Start Printing"); Send ; coordinate_display ; Serial.println("Done Printing"); delay(5000); lcd.clear ; lcd.print("System Ready"); delay(1000); k=1200; break; } } delay(1); } } void FindIP(int t1) { int t2=millis ; while(t2+t1>millis ) { while(Serial1.available >0) { if(Serial1.find("WIFI GOT IP")) { No_IP=true; } } } } void ip_add { IP=""; char ch=0; while(1) { Serial1.println("AT+CIFSR"); while(Serial1.available >0) { if(Serial1.find("STAIP,")) { delay(1000); Serial.print("IP Address:"); while(Serial1.available >0) { ch=Serial1.read ; if(ch=='+') break; IP+=ch; } } if(ch=='+') break; } if(ch=='+') break; delay(1000); } lcd.clear ; lcd.print(IP); lcd.setCursor(0,1); lcd.print("Port: 80"); Serial.print(IP); Serial.print("Port:"); Serial.println(80); delay(1000); } void connect_wifi(String cmd, int t) { int temp=0,i=0; while(1) { Serial.println(cmd); Serial1.println(cmd); while(Serial1.available >0) { if(Serial1.find("OK")) { i=8; } } delay if(i>5) break; i++; } if(i==8) { Serial.println("OK"); } else { Serial.println("Error"); } delay(1000); } void gps_Function { gpsString=""; while(1) { while (gps.available >0) //Serial incoming data from GPS { char inChar = (char)gps.read ; gpsString+= inChar; //store incoming data from GPS to temporary string str i++; if (i < 7) { if(gpsString(i-1) != test(i-1)) //check for right string { i=0; gpsString=""; } } if(inChar=='r') { if(i>65) { gps_status=1; break; } else { i=0; } } } if(gps_status) break; } } void get_gps { gps_status=0; int x=0; while(gps_status==0) { gps_Function ; int str_lenth=i; latitude=""; logitude=""; coordinate2dec ; i=0;x=0; str_lenth=0; } } void coordinate_display { lcd.clear ; lcd.print("LATITUTE:"); lcd.print(latitude); lcd.setCursor(0,1); lcd.print("LONGITUTE:"); lcd.print(logitude); Serial.print("Latitude:"); Serial.println(latitude); Serial.print("Longitude:"); Serial.println(logitude); } void coordinate2dec { String lat_degree=""; for(i=18;i<20;i++) //extract latitude from string lat_degree+=gpsString(i); String lat_minut=""; for(i=20;i<28;i++) lat_minut+=gpsString(i); String long_degree=""; for(i=30;i<33;i++) //extract longitude from string long_degree+=gpsString(i); String long_minut=""; for(i=33;i<41;i++) long_minut+=gpsString(i); float minut= lat_minut.toFloat ; minut=minut/60; float degree=lat_degree.toFloat ; latitude=degree+minut; minut= long_minut.toFloat ; minut=minut/60; degree=long_degree.toFloat ; logitude=degree+minut; } void Send { webpage = "

Welcome to Engineers Garage

"; webpage+=place; webpage+=num; webpage+=cordinat; webpage+="

Latitude:"; webpage+=latitude; webpage+="

"; webpage+="

Longitude:"; webpage+=logitude; webpage+="

"; webpage+= "Click Here for google map"; webdata ; webpage=""; while(1) { Serial.println("AT+CIPCLOSE=0"); Serial1.println("AT+CIPCLOSE=0"); while(Serial1.available ) { if(Serial1.find("0,CLOSE")) { return; } } delay(500); i++; if(i>5) { i=0; } if(i==0) break; } } void webdata { i=0; while(1) { unsigned int l=webpage.length ; Serial1.print("AT+CIPSEND=0,"); Serial1.println(l+2); Serial.println(l+2); Serial.println(webpage); Serial1.println(webpage); while(Serial1.available ) { if(Serial1.find("OK")) { return; } } i++; if(i>5) i=0; if(i==0) break; delay(200); } } ###

Diagramas de circuito

Diagrama de circuito-Dispositivo de rastreamento de veículos baseado em IoT-Arduino-ESP8266

Vídeo do Projeto

Related Content

Back to blog

Leave a comment

Please note, comments need to be approved before they are published.