En tutoriales anteriores, hemos aprendido cómo conectar el módulo GPS con la computadora y cómo rastrear un vehículo usando GSM y GPS. También construimos un sistema de alerta de accidentes de vehículos usando Arduino y acelerómetro. Aquí estamos nuevamente construyendo el mismo proyecto, pero esta vez se usará una plataforma de lanzamiento MSP430 y un sensor de vibración para detectar accidentes de vehículos. Por lo tanto, este proyecto también hablará sobre la interconexión de un sensor de vibración con la plataforma de lanzamiento MSP430. Puede encontrar más proyectos de MSP430 aquí.
Aquí, el módulo del sensor de vibración detecta la vibración del vehículo y envía una señal al Launchpad MSP430. Luego, MSP430 obtiene datos del módulo GPS y los envía al teléfono móvil del usuario a través de SMS utilizando el módulo GSM. Un LED también se iluminará como señal de alerta de accidente, este LED puede ser reemplazado por alguna alarma. 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. Vea el video de demostración al final.
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
Comandos AT
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
ATD
AT + CMGF = 1
AT + CMGS = "Número de móvil"
>> Ahora podemos escribir nuestro mensaje
>> Después de escribir un mensaje
Ctrl + Z envía un comando de mensaje (26 en decimal).
ENTRAR = 0x0d en HEX
(Para obtener más información sobre el módulo GSM, consulte nuestros diversos proyectos GSM con varios microcontroladores aquí)
Módulo sensor de vibraciones
En este proyecto del sistema de alerta de accidentes MSP430, hemos utilizado un módulo sensor de vibraciones que detecta vibraciones o modulaciones repentinas. El módulo del sensor de vibración da una salida digital lógica ALTA / BAJA dependiendo del módulo. En nuestro caso, hemos utilizado un módulo sensor de vibración de lógica ALTA activa. Significa que siempre que el sensor de vibración detecte vibración, le dará lógica ALTA al microcontrolador.
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 P1_1 de MSP430 Launchpad (hardware Serial) y 5v se usa para alimentar el módulo GPS. Al usar Software Serial Library aquí, permitimos la comunicación serial en los pines P_6 y P1_7, y los hicimos Rx y Tx respectivamente y conectados al módulo GSM. El suministro de 12 voltios se utiliza para alimentar el módulo GSM. El sensor de vibraciones está conectado en P1_3. También se utiliza un LED para indicar la detección de accidentes. El resto de conexiones se muestran en el esquema del circuito.
Explicación de programación
La programación de este proyecto es sencilla excepto la parte del GPS. El código completo se proporciona al final del proyecto. Para escribir o compilar el código en MSP430 hemos utilizado Energia IDE que es compatible con Arduino. La mayor parte de la función IDE de Arduino se puede utilizar directamente en este IDE de Energia.
Entonces, en primer lugar, hemos incluido una biblioteca requerida y un pin y variables declarados.
#incluir
La función dada se utiliza para leer la señal del sensor de vibración. Esta función también filtrará vibraciones pequeñas o falsas.
#define count_max 25 char SensorRead (int pin) // lee sw con antirrebote { char count_low = 0, count_high = 0; hacer { retraso (1); if (digitalRead (pin) == HIGH) { count_high ++; count_low = 0; } más { count_high = 0; count_low ++; } } while (count_low <count_max && count_high <count_max); if (count_low> = count_max) return LOW; si no, devuelve ALTO; }
La siguiente función detecta la vibración y llama a la función gpsEvent () para obtener las coordenadas GPS y finalmente llama a la función Send () para enviar SMS.
bucle vacío () { if (SensorRead (sensor de vibración) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Enviar(); digitalWrite (led, BAJO); retraso (2000); } }
Given Function es responsable de obtener las cadenas de GPS del módulo GPS, extraer las coordenadas de ellas y convertirlas en formato de grado decimal.
void gpsEvent () { char gpsString; char prueba = "RMC"; i = 0; while (1) { while (Serial.available ()) // Datos en serie entrantes del GPS { char inChar = (char) Serial.read (); gpsString = inChar; // almacena los datos entrantes del GPS en la cadena temporal str i ++; if (i <4) { if (gpsString! = test) // verifica la cadena derecha i = 0; }
int grado = 0; grado = gpsString-48; grado * = 10; grado + = 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); flotar minut = ((flotar) minut_int + ((flotar) minut_dec / 100000.0)) / 60.0; latitud = ((flotación) grado + minuto);
Y finalmente, la función Send () se utiliza para enviar el SMS al número de usuario que se inserta en esta parte del código.
enviar vacío () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // ingrese su número de móvil GSM.println ('"'); retraso (500); // GSM.print ("Latitud:"); // GSM.println (latitud); GSM.println ("Accidente ocurrido"); retraso (500); // GSM.print ("longitud:"); // GSM.println (logitude); GSM.println ("Haga clic en el enlace para ver la ubicación"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (latitud, 6); GSM.print ("+"); GSM.print (logitude, 6); GSM.write (26); retraso (4000); }
El código completo y el video de demostración se proporcionan a continuación, puede verificar todas las funciones en el código.