- Componentes requeridos:
- Módulo GPS y su funcionamiento:
- Módulo GSM:
- Acelerómetro:
- Explicación del circuito:
- Explicación de trabajo:
- Explicación de programación:
En nuestros tutoriales anteriores, hemos aprendido cómo conectar el módulo GPS con la computadora, cómo construir un reloj GPS Arduino y cómo rastrear un vehículo usando GSM y GPS. Aquí, en este proyecto, vamos a construir un sistema de alerta de accidentes de vehículos basado en Arduino usando GPS, GSM y acelerómetro. El acelerómetro detecta el cambio brusco en los ejes del vehículo y el módulo GSM envía el mensaje de alerta en su teléfono móvil con la ubicación del accidente. La ubicación del accidente se envía en forma de enlace de Google Map, derivado de la latitud y longitud del módulo GPS. El mensaje también contiene la velocidad del vehículo en nudos. Ver el video de demostraciónal final. Este proyecto de alerta de accidentes de vehículos también se puede utilizar como un sistema de seguimiento y mucho más, con solo realizar algunos cambios en el hardware y el software.
Componentes requeridos:
- Arduino Uno
- Módulo GSM (SIM900A)
- Módulo GPS (SIM28ML)
- Acelerómetro (ADXL335)
- LCD de 16x2
- Fuente de alimentación
- Conexión de cables
- 10 K-POT
- Placa de pruebas o PCB
- Fuente de alimentación 12v 1amp
Antes de entrar en el proyecto, hablaremos sobre GPS, GSM y acelerómetro.
Módulo GPS y su funcionamiento:
GPS significa Sistema de posicionamiento global y se utiliza para detectar la latitud y longitud de cualquier ubicación en la Tierra, con la hora UTC exacta (Hora universal coordinada). El módulo GPS se utiliza para rastrear la ubicación del accidente en nuestro proyecto. Este dispositivo recibe las coordenadas del satélite para cada segundo, con fecha y hora. Hemos extraído previamente la cadena $ GPGGA en el sistema de seguimiento de vehículos para encontrar las coordenadas de latitud y longitud.
El módulo GPS envía los datos relacionados con la posición de seguimiento en tiempo real y envía tantos datos en formato NMEA (vea la captura de pantalla a continuación). El formato NMEA consta de varias oraciones, en las que solo necesitamos una oración. Esta oración comienza en $ GPGGA y contiene las coordenadas, la hora y otra información útil. Este GPGGA se refiere a Datos de reparación del sistema de posicionamiento global. Conozca más sobre las sentencias NMEA y la lectura de datos GPS aquí.
Podemos extraer las coordenadas de la cadena $ GPGGA contando las comas en la cadena. Suponga que encuentra la cadena $ GPGGA y la almacena en una matriz, luego la latitud se puede encontrar después de dos comas y la longitud se puede encontrar después de cuatro comas. Ahora, esta latitud y longitud se pueden colocar en otras matrices.
A continuación se muestra la cadena $ GPGGA, junto con su descripción:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510.4, M, 43.9, M,, * 47 $ GPGGA, HHMMSS.SSS, latitud, N, longitud, E, FQ, NOS, HDP, altitud, M, altura, M,, datos de suma de comprobación
Identificador |
Descripción |
$ GPGGA |
Datos de corrección del sistema de posicionamiento global |
HHMMSS.SSS |
Hora en formato de horas, minutos, segundos y milisegundos. |
Latitud |
Latitud (coordinada) |
norte |
Dirección N = Norte, S = Sur |
Longitud |
Longitud (coordinada) |
mi |
Dirección E = Este, W = Oeste |
FQ |
Corregir datos de calidad |
NOS |
No. de satélites en uso |
HDP |
Dilución horizontal de precisión |
Altitud |
Altitud (metros sobre el nivel del mar) |
METRO |
Metro |
Altura |
Altura |
Suma de comprobación |
Datos de suma de comprobación |
Módulo GSM:
El SIM900 es un módulo GSM / GPRS cuatribanda completo que puede ser integrado fácilmente por el cliente o aficionado. El módulo GSM SIM900 proporciona una interfaz estándar de la industria. SIM900 ofrece un rendimiento GSM / GPRS 850/900/1800/1900 MHz para voz, SMS y datos con bajo consumo de energía. Está fácilmente disponible en el mercado.
- SIM900 diseñado utilizando un procesador de un solo chip que integra el núcleo AMR926EJ-S
- Módulo GSM / GPRS cuatribanda de pequeño tamaño.
- GPRS habilitado
AT comando:
AT significa ATENCIÓN. Este comando se utiliza para controlar el módulo GSM. Hay algunos comandos para llamadas y mensajería que hemos utilizado en muchos de nuestros proyectos GSM anteriores con Arduino. Para probar el módulo GSM usamos el comando AT. Después de recibir AT Command GSM Module responda con OK. Significa que el módulo GSM está funcionando bien. A continuación se muestran algunos comandos AT que usamos aquí en este proyecto:
ATE0 Para eco desactivado AT + CNMI = 2,2,0,0,0
(Para obtener más información sobre el módulo GSM, consulte nuestros diversos proyectos GSM con varios microcontroladores aquí)
Acelerómetro:
Pin Descripción del acelerómetro:
- El suministro de Vcc de 5 voltios debe conectarse en este pin.
- X-OUT Este pin proporciona una salida analógica en la dirección x
- Y-OUT Este pin proporciona una salida analógica en la dirección y
- Z-OUT Este pin proporciona una salida analógica en la dirección z
- Tierra GND
- ST Este pin se usa para configurar la sensibilidad del sensor
También revise nuestros otros proyectos usando Acelerómetro: Juego de Ping Pong usando Arduino y Robot Controlado por Gestos de Mano Basado en Acelerómetro.
Explicación del circuito:
Las conexiones de circuitos de este proyecto de sistema de alerta de accidentes de vehículos son simples. Aquí el pin Tx del módulo GPS está conectado directamente al pin digital número 10 de Arduino. Al usar Software Serial Library aquí, permitimos la comunicación serial en los pines 10 y 11, y los hicimos Rx y Tx respectivamente y dejamos abierto el pin Rx del Módulo GPS. Por defecto, los pines 0 y 1 de Arduino se utilizan para la comunicación en serie, pero al usar la biblioteca SoftwareSerial, podemos permitir la comunicación en serie en otros pines digitales del Arduino. El suministro de 12 voltios se utiliza para alimentar el módulo GPS.
Los pines Tx y Rx del módulo GSM están conectados directamente a los pines D2 y D3 de Arduino. Para la interfaz GSM, aquí también hemos utilizado la biblioteca de serie de software. El módulo GSM también se alimenta con una fuente de 12v. Los pines de datos D4, D5, D6 y D7 de una pantalla LCD opcional están conectados al pin número 6, 7, 8 y 9 de Arduino. El pin de comando RS y EN de la pantalla LCD están conectados con el pin número 4 y 5 de Arduino y el pin RW está conectado directamente a tierra. También se utiliza un potenciómetro para configurar el contraste o el brillo de la pantalla LCD.
Se agrega un acelerómetro en este sistema para detectar un accidente y sus pines de salida ADC de los ejes x, y, z están conectados directamente a los pines A1, A2 y A3 de Arduino ADC.
Explicación de trabajo:
En este proyecto, Arduino se utiliza para controlar todo el proceso con un receptor GPS y un módulo GSM. El receptor GPS se utiliza para detectar las coordenadas del vehículo, el módulo GSM se utiliza para enviar el SMS de alerta con las coordenadas y el enlace a Google Map. El acelerómetro ADXL335 se utiliza para detectar accidentes o cambios repentinos en cualquier eje. Y una pantalla LCD opcional de 16x2 también se utiliza para mostrar mensajes de estado o coordenadas. Hemos utilizado el módulo GPS SIM28ML y el módulo GSM SIM900A.
Cuando estemos listos con nuestro hardware después de la programación, podemos instalarlo en nuestro vehículo y encenderlo. Ahora, cuando hay un accidente, el automóvil se inclina y el acelerómetro cambia los valores de su eje. Estos valores los lee Arduino y comprueba si se produce algún cambio en algún eje. Si ocurre algún cambio, Arduino lee las coordenadas extrayendo $ GPGGA String de los datos del módulo GPS (el funcionamiento del GPS se explica arriba) y envía SMS al número predefinido a la policía o ambulancia o miembro de la familia con las coordenadas de ubicación del lugar del accidente. El mensaje también contiene un enlace de Google Map a la ubicación del accidente, de modo que esa ubicación se puede rastrear fácilmente. Cuando recibamos el mensaje, solo necesitamos hacer clic en el enlace y lo redireccionaremos al mapa de Google y luego podremos ver la ubicación exacta del vehículo. Velocidad del vehículo, en nudos(1.852 KPH), también se envía en el SMS y se muestra en el panel LCD. Vea el video de demostración completo debajo del proyecto.
Aquí, en este proyecto, podemos establecer la sensibilidad del acelerómetro poniendo el valor mínimo y máximo en el código.
Aquí en la demostración hemos utilizado valores dados:
#define minVal -50 #define MaxVal 50
Pero para obtener mejores resultados, puede usar 200 en lugar de 50, o puede configurarlo de acuerdo con sus requisitos.
Explicación de programación:
El programa completo se proporciona a continuación en la sección Código; aquí estamos explicando brevemente sus diversas funciones.
Primero, hemos incluido todas las bibliotecas o archivos de encabezados necesarios y hemos declarado varias variables para los cálculos y el almacenamiento de datos de forma temporal.
Después de esto, hemos creado una función void initModule (String cmd, char * res, int t) para inicializar el módulo GSM y verificar su respuesta usando comandos AT.
initModule vacío (String cmd, char * res, int t) {while (1) {Serial.println (cmd); Serial1.println (cmd); retraso (100); while (Serial1.available ()> 0) {if (Serial1.find (res)) {Serial.println (res); retraso (t); regreso; } else {Serial.println ("Error"); }} retraso (t); }}
Después de esto, en la función void setup () , hemos inicializado la comunicación serial de hardware y software, LCD, GPS, módulo GSM y acelerómetro.
configuración vacía () {Serial1.begin (9600); Serial.begin (9600); lcd.begin (16,2); lcd.print ("Alerta de accidente"); lcd.setCursor (0,1); lcd.print ("Sistema"); retraso (2000); lcd.clear ();…………………
El proceso de calibración del acelerómetro también se realiza en el ciclo de configuración . En esto, hemos tomado algunas muestras y luego encontramos los valores promedio para el eje x, el eje y y el eje z. Y guárdelos en una variable. Luego, hemos utilizado estos valores de muestra para leer los cambios en el eje del acelerómetro cuando el vehículo se inclina (accidente).
lcd.print ("Calibración de calibración"); lcd.setCursor (0,1); lcd.print ("Aceleromiter"); para (int i = 0; i
Después de esto, en la función void loop () , hemos leído los valores del eje del acelerómetro y realizado un cálculo para extraer los cambios con la ayuda de muestras que se toman en Calibración. Ahora, si los cambios son más o menos que el nivel definido, Arduino envía un mensaje al número predefinido.
bucle vacío () {int valor1 = analogRead (x); int value2 = analogRead (y); int value3 = 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);…………………
Aquí también hemos creado alguna otra función para varios propósitos como void gpsEvent () para obtener coordenadas de GPS, void coordenada2dec () para extraer coordenadas de la cadena de GPS y convertirlas en valores decimales, void show_coordinate () para mostrar valores sobre el monitor en serie y LCD, y finalmente el Send void () para enviar SMS de alerta al número predefinido.
El código completo y el video de demostración se proporcionan a continuación, puede verificar todas las funciones en el código.