En tutorials anteriors, hem après sobre com es pot connectar el mòdul GPS amb l'ordinador i com fer un seguiment del vehicle mitjançant GSM i GPS. També vam construir un sistema d’alerta d’accidents de vehicles mitjançant Arduino i acceleròmetre. Aquí tornem a construir el mateix projecte, però aquesta vegada s’utilitzarà un llançador MSP430 i un sensor de vibració per detectar accidents de vehicles. Per tant, aquest projecte també explicarà la interfície d’un sensor de vibració amb el llançador MSP430. Podeu trobar més projectes MSP430 aquí.
Aquí el mòdul del sensor de vibració detecta la vibració del vehicle i envia un senyal a MSP430 Launchpad. A continuació, MSP430 recupera les dades del mòdul GPS i les envia al telèfon mòbil de l'usuari mitjançant SMS mitjançant el mòdul GSM. Un LED també brillarà com a senyal d'alerta d'accident, aquest LED es pot substituir per una alarma. La ubicació de l'accident s'envia en forma d' enllaç de Google Map, derivat de la latitud i longitud del mòdul GPS. Vegeu el vídeo de demostració al final.
![]()
El mòdul GPS envia les dades relacionades amb la posició de seguiment en temps real i envia tantes dades en format NMEA (vegeu la captura de pantalla següent). El format NMEA consta de diverses frases, en què només necessitem una frase. Aquesta frase comença a partir de $ GPGGA i conté les coordenades, el temps i altra informació útil. Aquest GPGGA es refereix a dades de correcció del sistema de posicionament global. Obteniu més informació sobre les frases NMEA i la lectura de dades GPS aquí.
Podem extreure coordenades de la cadena $ GPGGA comptant les comes de la cadena. Suposem que trobeu una cadena $ GPGGA i la deseu en una matriu; llavors Latitude es pot trobar després de dues comes i la Longitud es pot trobar després de quatre comes. Ara, aquesta latitud i longitud es poden incloure en altres matrius.

A continuació es mostra la cadena $ GPGGA, juntament amb la seva descripció:
$ 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, alçada, M,, dades de suma de verificació
|
Identificador |
Descripció |
|
$ GPGGA |
Dades de correcció del sistema de posicionament global |
|
HHMMSS.SSS |
Temps en format hora hora segon i mil·lisegons. |
|
Latitud |
Latitud (coordenada) |
|
N |
Direcció N = nord, S = sud |
|
Longitud |
Longitud (coordenada) |
|
E |
Direcció E = Est, O = Oest |
|
FQ |
Corregir dades de qualitat |
|
NOS |
Nombre de satèl·lits que s’utilitzen |
|
HDP |
Dilució horitzontal de precisió |
|
Altitud |
Altitud (metres sobre el nivell del mar) |
|
M |
Metre |
|
Alçada |
Alçada |
|
Suma de control |
Dades de suma de verificació |
Mòdul GSM
El SIM900 és un mòdul GSM / GPRS de quatre bandes complet que pot ser incrustat fàcilment per al client o aficionat. El mòdul GSM SIM900 proporciona una interfície estàndard del sector. SIM900 ofereix un rendiment GSM / GPRS 850/900/1800/1900 MHz per a veu, SMS, dades amb baix consum d'energia. Està fàcilment disponible al mercat.
- SIM900 dissenyat mitjançant un processador d’un sol xip que integra el nucli AMR926EJ-S
- Mòdul GSM / GPRS de quatre bandes de mida petita.
- GPRS activat
![]()
Comandaments AT
AT significa ATENCIÓ. Aquesta ordre s’utilitza per controlar el mòdul GSM. Hi ha algunes ordres per trucar i enviar missatges que hem utilitzat en molts dels nostres projectes GSM anteriors amb Arduino. Per provar el mòdul GSM hem utilitzat l'ordre AT. Després de rebre AT Command Module GSM, responeu amb OK. Vol dir que el mòdul GSM funciona bé. A continuació es mostren algunes ordres AT que hem utilitzat aquí en aquest projecte:
ATE0 Per fer ressò
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = "Número de mòbil"
>> Ara podem escriure el nostre missatge
>> Després d'escriure un missatge
Ctrl + Z envia l'ordre del missatge (26 en decimal).
ENTER = 0x0d a HEX
(Per obtenir més informació sobre el mòdul GSM, consulteu aquí els nostres diferents projectes GSM amb diversos microcontroladors)
Mòdul de sensor de vibració
En aquest projecte MSP430 Accident Alert System, hem utilitzat un mòdul de sensor de vibracions que detecta vibracions o modulacions sobtades. El mòdul del sensor de vibració proporciona una lògica de sortida digital ALTA / BAIXA en funció del mòdul. En el nostre cas, hem utilitzat un mòdul de sensor de vibració lògica HIGH activa. Vol dir que cada vegada que el sensor de vibració detectarà vibracions donarà una lògica ALTA al microcontrolador.
![]()
Explicació del circuit
Les connexions de circuit d’aquest projecte de sistema d’alerta d’accidents de vehicles són senzilles. Aquí, el pin Tx del mòdul GPS està directament connectat al pin digital número P1_1 del MSP430 Launchpad (maquinari de sèrie) i s’utilitzen 5v per alimentar el mòdul GPS. Mitjançant l’ús de Software Serial Library aquí, hem permès la comunicació en sèrie als pins P_6 i P1_7, i els hem fet Rx i Tx respectivament i connectats al mòdul GSM. L’alimentació de 12 volts s’utilitza per alimentar el mòdul GSM. El sensor de vibració està connectat a P1_3. També s’utilitza un LED per indicar la detecció d’accidents. La resta de connexions es mostren al diagrama del circuit.
![]()
![]()
Explicació de la programació
La programació per a aquest projecte és fàcil excepte la part GPS. Es dóna un codi complet al final del projecte. Per escriure o compilar el codi a MSP430 hem utilitzat Energia IDE que és compatible amb Arduino. La majoria de les funcions IDE d’Arduino es poden utilitzar directament en aquest IDE Energia.
Per tant, en primer lloc hem inclòs les biblioteques necessàries i hem declarat el PIN i les variables.
#incloure
La funció donada s’utilitza per llegir el senyal del sensor de vibració. Aquesta funció també filtrarà les vibracions petites o falses.
#define count_max 25 char SensorRead (int pin) // llegeix sw amb debounce { char count_low = 0, count_high = 0; fer { delay (1); if (digitalRead (pin) == HIGH) { count_high ++; count_low = 0; } else { count_high = 0; count_low ++; } } while (count_low <count_max && count_high <count_max); if (count_low> = count_max) torna BAIX; en cas contrari, torneu ALT; }
A continuació, la funció detecta vibracions i crida a la funció gpsEvent () per obtenir la coordenada GPS i, finalment, truca a la funció Send () per enviar SMS.
bucle buit () { if (SensorRead (vibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Enviar (); digitalWrite (led, BAIX); endarreriment (2000); } }
Funció donada és responsable d’ obtenir les cadenes GPS del mòdul GPS, extreure’n les coordenades i convertir-les en format grau-decimal.
void gpsEvent () { char gpsString; char test = "RMC"; i = 0; while (1) { while (Serial.available ()) // Dades sèries entrants del GPS { char inChar = (char) Serial.read (); gpsString = inChar; // emmagatzema dades entrants del GPS a la cadena temporal i i; if (i <4) { if (gpsString! = test) // comprova si hi ha una cadena correcta i = 0; }
int grau = 0; degree = gpsString-48; grau * = 10; grau + = 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); float minut = ((float) minut_int + ((float) minut_dec / 100000.0)) / 60.0; latitud = ((flotant) grau + minut);
I, finalment, la funció Send () s’utilitza per enviar l’SMS al número d’usuari que s’insereix en aquesta part del codi.
void Enviar () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // introduïu el vostre número de mòbil GSM.println ('"'); retard (500); // GSM.print ("Latitud:"); // GSM.println (latitud); GSM.println ("Accident ocorregut"); retard (500); // GSM.print ("longitud:"); // GSM.println (logitud); GSM.println ("Feu clic a l'enllaç per veure la ubicació"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (latitud, 6); GSM.print ("+"); GSM.print (logitud, 6); GSM.write (26); retard (4000); }
A continuació es mostra el codi complet i el vídeo de demostració, podeu consultar totes les funcions del codi.
