Sistema de seguimiento de vehículos IoT basado en ESP8266 y Arduino

Los sistemas de seguimiento de vehículos son una necesidad para los viajeros de hoy. Estos sistemas son esenciales para mantener los vehículos personales a salvo de robos y hurtos. Los sistemas de seguimiento de vehículos solo se pueden diseñar habilitándolos con Internet. En este proyecto, se diseña un sistema simple de seguimiento de vehículos que actualizará continuamente la ubicación actual del vehículo en una página web personalizada.
Los sistemas de seguimiento de vehículos están diseñados para rastrear el movimiento de un vehículo desde un lugar en un momento dado. Este sistema está equipado con un receptor GPS que mantiene la ubicación GPS del dispositivo. La ubicación GPS del dispositivo rastreado por el sensor GPS se envía a un servidor o servicio en la nube con la ayuda de un controlador. Este proyecto es una implementación simple de este sistema en una de las placas de creación de prototipos más populares: Arduino UNO.
Se supone que el lector ha leído el proyecto sobre cómo empezar a utilizar Arduino y la interfaz LCD con Arduino. El dispositivo de seguimiento de vehículos diseñado aquí es un dispositivo IoT. Tiene interfaz Arduino con módulo GPS Neo-6M, una pantalla LCD de caracteres y un módem Wi-Fi ESP8266. El Arduino recibe la ubicación del dispositivo desde el receptor GPS y la muestra en la pantalla LCD. Cuando el dispositivo encuentra una conexión de datos a través de Wi-Fi, como el punto de acceso Wi-Fi de un teléfono inteligente, envía la ubicación GPS actual a una página web personalizada. La página web muestra la ubicación del dispositivo con la ayuda de Google Maps.
Este sencillo dispositivo de seguimiento de vehículos es fácil de diseñar, implementar y puede instalarse en cualquier vehículo. Realiza un seguimiento del vehículo en el que está instalado en tiempo real. Los datos de GPS que este dispositivo muestra y envía a la página remota son las coordenadas geográficas (latitud y longitud) del dispositivo.
El Arduino Sketch gestiona funcionalidades del dispositivo como obtener la ubicación GPS, mostrarla en el módulo LCD, conectarse a un punto de acceso Wi-Fi y enviar los datos del GPS a una página generada en tiempo real. El boceto de Arduino se escribe, compila y carga con la ayuda de Arduino IDE.
Protótipo de dispositivo de rastreamento de veículos IoT baseado em Arduino e ESP8266
Figura 1: Prototipo de dispositivo de seguimiento de vehículos IoT basado en Arduino y ESP8266
Componentes necesarios
Lista de componentes usados ​​no projeto de dispositivo de rastreamento de veículos IoT baseado em Arduino e ESP8266
Fig. 2: Lista de componentes utilizados en el diseño del dispositivo de seguimiento de vehículos IoT basado en Arduino y ESP8266
Diagrama de bloques -
Diagrama de blocos do dispositivo de rastreamento de veículos IoT baseado em Arduino e ESP8266
Fig. 3: Diagrama de bloques del dispositivo de seguimiento de vehículos IoT basado en Arduino y ESP8266
Conexiones de circuito –
El sistema de seguimiento de vehículos basado en Arduino diseñado aquí es un dispositivo IoT. Está diseñado conectando el módulo GPS, la pantalla LCD de caracteres y el módem Wi-Fi ESP8266 a Arduino UNO. El módulo GPS NEO-6M se utiliza para obtener las coordenadas geográficas de la ubicación. El módulo ESP se utiliza para actualizar la ubicación del vehículo en el servidor web que se puede rastrear a través de Google Maps, donde se puede rastrear la posición exacta del movimiento del vehículo.
Imagem mostrando conexões de circuito do dispositivo de rastreamento de veículos IoT baseado em Arduino e ESP8266
Fig. 4: Imagen que muestra las conexiones del circuito del dispositivo de seguimiento de vehículos IoT basado en Arduino y ESP8266
El dispositivo IoT de seguimiento de vehículos basado en Arduino tiene los siguientes componentes y conexiones de circuito:
Fuente de alimentación : el Arduino UNO puede alimentarse mediante una toma USB. Las fuentes de alimentación USB están disponibles en la mayoría de los automóviles. Incluso las bicicletas se pueden modificar para que tengan una fuente de alimentación USB procedente de la batería del vehículo. El módulo GPS y la pantalla LCD de caracteres en el circuito obtienen energía de la fuente de 5 V CC del Arduino, mientras que el módem Wi-Fi ESP8266 obtiene energía de la fuente de 3,3 V CC del Arduino.
Arduino UNO: Arduino UNO es una placa de microcontrolador basada en ATmega328. La placa viene con un gestor de arranque Arduino integrado. Tiene 14 pines GPIO, 6 pines PWM, 6 entradas analógicas e interfaces UART, SPI y TWI integradas, un resonador integrado, un botón de reinicio y orificios para montar conectores de pines. Mientras se programa la placa, se puede conectar a la PC mediante el puerto USB y la placa puede funcionar con alimentación USB. El Arduino UNO dispone de 32 Kb de memoria Flash, 1 Kb de EEPROM y 2 Kb de SRAM. La placa se puede conectar a diferentes Arduino Shields para conectividad de red Ethernet, Bluetooth, Wi-Fi, Zigbee o celular y se puede conectar a la mayoría de las plataformas IoT. El controlador ATmega328 tiene la siguiente configuración de pines:
Tabela de Listagem de Configuração de Pinos do Arduino Uno
Fig. 5: Tabla que enumera la configuración de pines de Arduino Uno
Tabela de Listagem de Configuração de Pinos do Arduino Uno
Fig. 6: Tabla que enumera la configuración de pines de Arduino Uno
En este proyecto, se utilizan 6 pines GPIO de Arduino para interconectar la pantalla LCD de caracteres, 2 pines GPIO se utilizan para proporcionar comunicación en serie con el módem ESP8266 mediante software en serie y dos pines GPIO se utilizan para la comunicación en serie con el módulo GPS.
Módem Wi-Fi ESP8266: el módulo Wi-Fi ESP8266 se utiliza para conectar la placa Arduino a un punto de acceso Wi-Fi para que pueda acceder al servidor en la nube y actualizar los datos del GPS en el servidor. Es un SOC independiente con una pila de protocolos TCP/IP integrada que puede acceder a una red Wi-Fi. El ESP8266 es capaz de alojar una aplicación o descargar todas las funciones de la red Wi-Fi desde otro procesador de aplicaciones. Cada módulo ESP8266 viene preprogramado con el firmware del conjunto de comandos AT. El módulo está disponible en dos modelos: ESP-01 y ESP-12. El ESP-12 tiene 16 pines disponibles para interconexión, mientras que el ESP-01 solo tiene 8 pines disponibles para su uso. El ESP-12 tiene la siguiente configuración de pines:
Tabela de listagem de configuração de pinos do modem Wi-Fi ESP8266 ESP-12
Fig. 7: Tabla que enumera la configuración de pines del módem Wi-Fi ESP8266 ESP-12
En el proyecto se utiliza el modelo ESP-01. El modelo ESP-01 tiene la siguiente configuración de pines:
Tabela de listagem de configuração de pinos do modem Wi-Fi ESP8266 ESP-12
Fig. 8: Tabla que enumera la configuración de pines del módem Wi-Fi ESP8266 ESP-01
Los pines RESET y VCC del módulo están conectados a los 3,3 V CC del Arduino, mientras que el pin de tierra está conectado a tierra común. Los pines Tx y Rx del módulo están conectados a los pines 10 y 11 del Arduino UNO respectivamente, donde los pines Arduino se configuran como receptor y transmisor en serie respectivamente utilizando la biblioteca de software en serie.
LCD 16X2: la pantalla LCD 16X2 se conecta a la placa Arduino conectando sus pines de datos DB4 a DB7 con los pines 8 a 5 de la placa Arduino. Los pines RS y E de la pantalla LCD están conectados a los pines 13 y 12 de la placa Arduino respectivamente. El pin LCD RW está conectado a tierra.
Tabela listando as conexões do circuito entre o LCD e o Arduino Uno
Fig. 9: Tabla que enumera las conexiones del circuito entre la pantalla LCD y el Arduino Uno
En el proyecto se utiliza la biblioteca estándar de código abierto para interconectar LCD con placa Arduino. La biblioteca funciona como se esperaba y no necesita cambios ni modificaciones.
Módulo GPS: el módulo GPS utilizado en este proyecto es el Neo 6M. Es un módulo GPS independiente con motor de posicionamiento u-blox 6 de 50 canales que cuenta con un Time-To-First-Fix (TTFF) de menos de 1 segundo. El motor de adquisición dedicado, con 2 millones de correlatos, es capaz de realizar búsquedas masivas en paralelo de tiempo/frecuencia en el espacio, lo que le permite encontrar satélites al instante. El diseño y la tecnología innovadores suprimen las fuentes de interferencia y mitigan los efectos de trayectorias múltiples, lo que brinda a los receptores GPS NEO-6 un excelente rendimiento de navegación incluso en los entornos más desafiantes. Dispone de puerto UART para transferencia de datos. El SOC del módulo es un chip de 24 pines con la siguiente configuración de pines:
Tabela de listagem de configuração de pinos do chip GPS Neo 6M
Fig. 10: Tabla que enumera la configuración de pines del chip GPS Neo 6M
Tabela de listagem de configuração de pinos do chip GPS Neo 6M
Fig. 11: Tabla que enumera la configuración de pines del chip GPS Neo 6M
El módulo GPS está conectado al Arduino UNO según la siguiente tabla:
Tabela listando as conexões do circuito entre o módulo GPS e o Arduino Uno
Fig. 12: Tabla que enumera las conexiones del circuito entre el módulo GPS y el Arduino Uno
Los pines 2 y 3 de Arduino se configuran como receptor y transmisor serie de software respectivamente utilizando la biblioteca serie de software.
Cómo funciona el circuito –
Cuando se enciende el dispositivo IoT basado en Arduino, se muestran algunos mensajes iniciales en la pantalla LCD y comienza a leer los datos GPS del módulo Neo-6M. Primero, se debe cargar la IP del servidor local en la página web que se mostrará inicialmente en el monitor serie Arduino o en la pantalla LCD. El GPS comienza a obtener las coordenadas geográficas de la ubicación donde el módulo GPS obtiene la actualización de la ubicación cada 27 segundos y la actualiza en el servidor web con la ayuda del módulo ESP Wi-Fi. El dispositivo comienza a buscar un punto de acceso Wi-Fi. El punto de acceso Wi-Fi está disponible, Arduino obtiene la dirección IP si es necesario y se conecta al punto Wi-Fi. El nombre y la contraseña del punto de acceso Wi-Fi están codificados en el boceto de Arduino. La inicialización de la conexión Wi-Fi se realiza dentro de la función de configuración del boceto de Arduino, que se ejecuta tan pronto como se enciende la placa.
La configuración de la conexión Wi-Fi se realiza pasando comandos AT al módem Wi-Fi ESP8266. El módem está conectado a los pines GPIO del Arduino que están configurados como pines de transmisor y receptor UART utilizando la biblioteca serial del software. El Wi-Fi se inicializa pasando los siguientes comandos AT al módulo ESP:
AT: Este comando se pasa para verificar si el módem está funcionando correctamente.
AT+CWMODE=3: este comando se pasa para configurar el modo Wi-Fi tanto para el modo AP como para el modo Estación.
AT+CWQAP: Este comando se pasa para desconectarse de cualquier AP (Punto de acceso) si el módem está conectado.
AT+RST: este comando se pasa para reiniciar el módem.
Después de reiniciar, el módem verifica las direcciones IP de los puntos de acceso disponibles. El módem ESP puede conectarse al punto de acceso cuyo SSID y contraseña están codificados en Arduino Sketch. Se pasa el siguiente comando AT para conectarse al punto de acceso:
AT+CWJAP
Una vez que el módem está conectado a un punto de acceso, obtiene la dirección IP ejecutando el siguiente comando:
AT+CIFSR: Este comando se utiliza para obtener la dirección IP del módulo ESP como cliente.
La dirección IP se almacena en una cadena y la placa Arduino la reconoce. Ahora los siguientes comandos AT se pasan al módulo ESP: AT+CIPMUX=1: este comando se pasa para habilitar múltiples conexiones.
AT+CIPSERVER=1.80: este comando se pasa para crear un servidor en el puerto 80.
El Arduino lee la latitud y longitud del módulo GPS. Los datos del GPS se encapsulan en cadenas con el formato adecuado y se almacenan en variables. Se muestran en la pantalla LCD de caracteres y se envían al servidor remoto (servidor local en este caso) cuando la conexión Wi-Fi está disponible. Los datos se actualizan cada 27 segundos y los datos almacenados actualmente se actualizan en el servidor local a medida que se configura la conexión Wi-Fi. El servidor local es una PC o computadora portátil conectada al mismo punto de acceso Wi-Fi y ejecutando localhost. Arduino Sketch crea una página web y la envía con los datos GPS actualizados al servidor local. En el servidor web se puede ver la ubicación del vehículo en movimiento mediante Google Maps. El dispositivo aquí se conecta al localhost. Para conectarse a un sitio web o página web alojados, el reenvío de puertos se debe realizar en el módem ESP8266.
Guía de programación –
El boceto de Arduino comienza con la importación de bibliotecas estándar como SoftwareSerial.h y LiquidCrystal.h. LiquidCrystal.h se utiliza para gestionar la comunicación de datos entre el módulo LCD y Arduino. SoftwareSerial.h se utiliza para configurar los pines Arduino como transmisor y receptor en serie para realizar comunicación en serie con el módulo GPS y el módem ESP8266. Se declara que algunas variables contienen datos y mensajes de GPS, dirección IP del punto de acceso Wi-Fi y contenido HTML de la 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 pantalla del código Arduino utilizado para inicializar el dispositivo de seguimiento de vehículos IoT
Se llama a la función de configuración en la que se define la velocidad en baudios para la comunicación serie con el módem Wi-Fi. El modo Wi-Fi y la conectividad de red se establecen mediante comandos AT con algunos retrasos. El retraso se debe dar según el tiempo que tarde en conectarse a la red llamando a la función wifi_init. El módulo GPS se inicializa y las coordenadas se leen usando la función 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 pantalla de la función de configuración del código Arduino utilizada en el dispositivo IoT de seguimiento de vehículos
La función de bucle se llama y se ejecuta infinitamente. En esta función, se llama a la función get_gps para leer las coordenadas geográficas de la ubicación. Se llaman funciones para crear contenido HTML para la página web con ubicación GPS actualizada y enviar la página web al 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 pantalla de Mani Loop del código Arduino utilizado en el dispositivo de seguimiento de vehículos IoT
Consulte el Arduino Sketch en la sección de códigos para probarlo. Se trata de un sencillo dispositivo GPS para seguimiento de vehículos. El código Arduino se puede modificar para conectarse a cualquier página web o sitio web. Es un proyecto de IoT de bajo costo y fácil de implementar.

Código fuente del proyecto

 ###



 //Programa para

 #incluir 

#incluir 


SoftwareSerial Serial1(2,3); //hacer que la línea RX arduino sea el pin 2, hacer que la línea TX arduino sea el pin 3.

 SoftwareGps serie(10,11);

 Lcd de cristal líquido (13,12,9,8,7,6);


 booleano No_IP=falso;

 Cadena IP="";

 Página web de cadena="";

 int i=0,k=0;

 int gps_status=0;

 Lugar de cadena=" 1. Nombre: (INGRESE SU NOMBRE) ";

 Número de cadena = "

2. Número de vehículo: IND001

"; Cordinat="

Coordenadas:

"; Cadena latitud=""; Longitud de cadena=""; Cadena gpsString=""; char *prueba="$GPGGA"; configuración vacía { Serie1.begin(9600); Serie.begin(9600); lcd.comenzar(16,2); lcd.print("Monitoreo de vehículos"); lcd.setCursor(0,1); lcd.print(" Sistema "); retraso(2000); lcd.claro; lcd.print("Conectando...."); retraso(1000); conectar_wifi("AT",1000); connect_wifi("AT+CWMODE=3",1000); connect_wifi("AT+CWQAP",1000); connect_wifi("AT+RST",5000); BuscarIP(5000); si(!No_IP) { Serial.println("Conectando Wifi...."); connect_wifi("AT+CWJAP="(INGRESE EL NOMBRE DE SU SSID) ","(INGRESE LA CONTRASEÑA)"",7000); //AT+CWJAP=”wifi_nombre de usuario”, “wifi_contraseña” } demás { } Serial.println("Wifi conectado"); lcd.claro; lcd.print("WIFI conectado"); retraso(2000); lcd.claro; lcd.setCursor(5,0); lcd.print("IP"); lcd.setCursor(3,1); lcd.print("DIRECCIÓN"); ip_add; retraso(2000); connect_wifi("AT+CIPMUX=1",100); connect_wifi("AT+CIPSERVER=1,80",100); Serie1.end; lcd.claro; lcd.print("DATOS GPS"); retraso(2000); gps.begin(9600); obtener_gps; visualización_coordinada; gps.end; Serie1.begin(9600); } bucle vacío { k=0; Serial.println("Actualice su página"); mientras(k<1000) { k++; mientras (Serie1.disponible) { si(Serial1.find("0,CONECTAR")) { Serie1.end; gps.begin(9600); obtener_gps; gps.end; Serie1.begin(9600); Serie1.flush; Serial.println("Iniciar impresión"); Enviar ; visualización_coordinada; Serial.println("Impresión finalizada"); retraso(5000); lcd.claro; lcd.print("Sistema listo"); retraso(1000); k=1200; romper; } } retraso(1); } } anular FindIP (int t1) { int t2=millis ; mientras(t2+t1>milis) { mientras(Serie1.disponible >0) { if(Serial1.find("WIFI OBTUVO IP")) { No_IP=verdadero; } } } } anular ip_add { IP=""; char ch=0; mientras(1) { Serial1.println("AT+CIFSR"); mientras(Serie1.disponible >0) { si(Serial1.find("STAIP,"")) { retraso(1000); Serial.print("Dirección IP:"); mientras(Serie1.disponible >0) { ch=Serial1.read; si(ch=='+') romper; IP+=canal; } } si(ch=='+') romper; } si(ch=='+') romper; retraso(1000); } lcd.claro; lcd.imprimir(IP); lcd.setCursor(0,1); lcd.print("Puerto: 80"); Impresión.serie(IP); Serial.print("Puerto:"); Serie.println(80); retraso(1000); } void connect_wifi(Cadena cmd, int t) { int temp=0,i=0; mientras(1) { Serie.println(cmd); Serie1.println(cmd); mientras(Serie1.disponible >0) { si(Serial1.find("OK")) { yo=8; } } demora si(i>5) romper; yo ++; } si(yo==8) { Serial.println("OK"); } demás { Serial.println("Error"); } retraso(1000); } anular gps_Function { gpsString=""; mientras(1) { while (gps.available >0) //Datos entrantes en serie desde GPS { char inChar = (char)gps.read; gpsString+= inChar; //almacena los datos entrantes del GPS en una cadena temporal yo ++; si (yo < 7) { if(gpsString(i-1) != test(i-1)) //comprueba la cadena correcta { yo=0; gpsString=""; } } si(enChar=='r') { si(i>65) { estado_gps=1; romper; } demás { yo=0; } } } si(estado_gps) romper; } } anular get_gps { estado_gps=0; intx=0; mientras(estado_gps==0) { función_gps; int str_lenth=yo; latitud=""; longitud=""; coordinar2dec; i=0;x=0; str_lenth=0; } } visualización de coordenadas vacía { lcd.claro; lcd.print("LATITUTE:"); lcd.print(latitud); lcd.setCursor(0,1); lcd.print("LONGITUD:"); lcd.print(logitud); Serial.print("Latitud:"); Serial.println(latitud); Serial.print("Longitud:"); Serial.println(logitud); } coordenada nula2dec { Cadena lat_grado=""; for(i=18;i<20;i++) //extraer latitud de la cadena lat_grado+=gpsString(i); Cadena lat_minuto=""; para(i=20;i<28;i++) lat_minuto+=gpsString(i); Cadena long_grado=""; for(i=30;i<33;i++) //extrae la longitud de la cadena long_grado+=gpsString(i); Cadena long_minuto=""; para(i=33;i<41;i++) minuto_largo+=gpsString(i); minuto flotante= lat_minut.toFloat; minuto=minuto/60; grado flotante=lat_grado.toFloat; latitud=grado+minuto; minuto= minuto_largo.toFloat; minuto=minuto/60; grado=long_grado.toFloat; longitud=grado+minuto; } envío anulado { página web = "

Bienvenido a Ingenieros Garaje

"; página web+=lugar; página web+=núm; página web+=cordinat; página web+="

Latitud:"; página web+=latitud; página web+="

"; página web+="

Longitud:"; página web+=logitud; página web+="

"; página web+= "Haga clic aquí para ver el mapa de Google"; datos web; página web=""; mientras(1) { Serial.println("AT+CYPCLOSE=0"); Serial1.println("AT+CYPCLOSE=0"); mientras (Serie1.disponible) { si(Serial1.find("0,CERRAR")) { devolver; } } retraso(500); yo ++; si(i>5) { yo=0; } si(yo==0) romper; } } anular datos web { yo=0; mientras(1) { unsigned int l=página web.longitud; Serial1.print("AT+CIPSEND=0,"); Serie1.println(l+2); Serie.println(l+2); Serial.println(página web); Serial1.println(página web); mientras (Serie1.disponible) { si(Serial1.find("OK")) { devolver; } } yo ++; si(i>5) yo=0; si(yo==0) romper; retraso(200); } } ###

Diagramas de circuito

Diagrama de circuito: dispositivo de seguimiento de vehículos basado en IoT-Arduino-ESP8266

Vídeo del proyecto

contenido relacionado

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.