Nei tutorial precedenti, abbiamo appreso come interfacciare il modulo GPS con il computer e come monitorare il veicolo utilizzando GSM e GPS. Abbiamo anche costruito un sistema di allarme per incidenti stradali utilizzando Arduino e accelerometro. Qui stiamo di nuovo costruendo lo stesso progetto, ma questa volta una piattaforma di lancio MSP430 e un sensore di vibrazioni verranno utilizzati per rilevare l'incidente del veicolo. Quindi questo progetto parlerà anche dell'interfacciamento di un sensore di vibrazioni con il launchpad MSP430. Puoi trovare altri progetti MSP430 qui.
Qui il modulo del sensore di vibrazione rileva la vibrazione del veicolo e invia un segnale al Launchpad MSP430. Quindi MSP430 recupera i dati dal modulo GPS e li invia al telefono cellulare dell'utente tramite SMS utilizzando il modulo GSM. Un LED si accenderà anche come segnale di allarme incidente, questo LED può essere sostituito da qualche allarme. La posizione dell'incidente viene inviata sotto forma di collegamento a Google Map, derivato dalla latitudine e longitudine dal modulo GPS. Guarda il video dimostrativo alla fine.
Il modulo GPS invia i dati relativi alla posizione di tracciamento in tempo reale e invia tanti dati in formato NMEA (vedi lo screenshot qui sotto). Il formato NMEA è composto da diverse frasi, in cui abbiamo solo bisogno di una frase. Questa frase parte da $ GPGGA e contiene le coordinate, l'ora e altre informazioni utili. Questo GPGGA è denominato Global Positioning System Fix Data. Scopri di più sulle frasi NMEA e sulla lettura dei dati GPS qui.
Possiamo estrarre le coordinate dalla stringa $ GPGGA contando le virgole nella stringa. Supponiamo di trovare la stringa $ GPGGA e di memorizzarla in un array, quindi Latitude può essere trovata dopo due virgole e Longitude può essere trovata dopo quattro virgole. Ora, questa latitudine e longitudine possono essere inserite in altri array.
Di seguito è riportata la stringa $ GPGGA, insieme alla sua descrizione:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510.4, M, 43.9, M`` * 47 $ GPGGA, HHMMSS.SSS, latitudine, N, longitudine, E, FQ, NOS, HDP, altitudine, M, altezza, M,, dati di checksum
Identificatore |
Descrizione |
$ GPGGA |
Dati di correzione del sistema di posizionamento globale |
HHMMSS.SSS |
Tempo in formato ora minuti secondi e millisecondi. |
Latitudine |
Latitudine (coordinate) |
N |
Direzione N = Nord, S = Sud |
Longitudine |
Longitudine (coordinate) |
E |
Direzione E = Est, W = Ovest |
FQ |
Correggi dati di qualità |
NOS |
Numero di satelliti utilizzati |
HDP |
Diluizione orizzontale della precisione |
Altitudine |
Altitudine (metri sopra il livello del mare) |
M |
Meter |
Altezza |
Altezza |
Checksum |
Dati di checksum |
Modulo GSM
Il SIM900 è un modulo GSM / GPRS quad-band completo che può essere integrato facilmente utilizzato dal cliente o dall'hobbista. Il modulo GSM SIM900 fornisce un'interfaccia standard del settore. SIM900 offre prestazioni GSM / GPRS 850/900/1800/1900 MHz per voce, SMS e dati con un basso consumo energetico. È facilmente reperibile sul mercato.
- SIM900 progettato utilizzando un processore a chip singolo che integra il core AMR926EJ-S
- Modulo GSM / GPRS quad-band di piccole dimensioni.
- GPRS abilitato
Comandi AT
AT significa ATTENZIONE. Questo comando viene utilizzato per controllare il modulo GSM. Ci sono alcuni comandi per la chiamata e la messaggistica che abbiamo utilizzato in molti dei nostri precedenti progetti GSM con Arduino. Per testare il modulo GSM abbiamo utilizzato il comando AT. Dopo aver ricevuto il modulo GSM di comando AT rispondere con OK. Significa che il modulo GSM funziona correttamente. Di seguito sono riportati alcuni comandi AT che abbiamo utilizzato qui in questo progetto:
ATE0 Per l'eco disattivato
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = "Numero di cellulare"
>> Ora possiamo scrivere il nostro messaggio
>> Dopo aver scritto un messaggio
Ctrl + Z invia il comando del messaggio (26 in decimale).
INVIO = 0x0d in HEX
(Per saperne di più sul modulo GSM, controlla i nostri vari progetti GSM con vari microcontrollori qui)
Modulo sensore di vibrazioni
In questo progetto MSP430 Accident Alert System, abbiamo utilizzato un modulo sensore di vibrazione che rileva vibrazioni o modulazioni improvvise. Il modulo del sensore di vibrazioni fornisce un'uscita digitale con logica HIGH / LOW a seconda del modulo. Nel nostro caso, abbiamo utilizzato un modulo sensore di vibrazione logico HIGH attivo. Significa che ogni volta che il sensore di vibrazione rileverà la vibrazione darà una logica ALTA al microcontrollore.
Spiegazione del circuito
I collegamenti del circuito di questo progetto del sistema di allarme per incidenti automobilistici sono semplici. Qui il pin Tx del modulo GPS è direttamente collegato al numero pin digitale P1_1 del Launchpad MSP430 (seriale hardware) e 5v viene utilizzato per alimentare il modulo GPS. Utilizzando qui Software Serial Library, abbiamo consentito la comunicazione seriale sui pin P_6 e P1_7, e li abbiamo resi rispettivamente Rx e Tx e collegati al modulo GSM. L'alimentazione a 12 Volt viene utilizzata per alimentare il Modulo GSM. Il sensore di vibrazione è collegato a P1_3. Un LED viene utilizzato anche per indicare il rilevamento dell'incidente. Gli altri collegamenti sono mostrati nello schema del circuito.
Spiegazione della programmazione
La programmazione per questo progetto è semplice tranne la parte GPS. Il codice completo viene fornito alla fine del progetto. Per scrivere o compilare il codice in MSP430 abbiamo utilizzato Energia IDE compatibile con Arduino. La maggior parte della funzione IDE di Arduino può essere utilizzata direttamente in questo IDE Energia.
Quindi prima di tutto abbiamo incluso le librerie obbligatorie e abbiamo dichiarato pin e variabili.
#includere
La funzione data viene utilizzata per leggere il segnale del sensore di vibrazione. Questa funzione filtrerà anche vibrazioni piccole o false.
#define count_max 25 char SensorRead (int pin) // legge sw con debounce { char count_low = 0, count_high = 0; do { delay (1); if (digitalRead (pin) == HIGH) { count_high ++; count_low = 0; } altro { count_high = 0; count_low ++; } } while (count_low <count_max && count_high <count_max); if (count_low> = count_max) return LOW; altrimenti ritorna ALTO; }
La funzione sottostante rileva la vibrazione e chiama la funzione gpsEvent () per ottenere le coordinate GPS e infine chiama la funzione Send () per inviare SMS.
void loop () { if (SensorRead (VibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Spedire(); digitalWrite (led, LOW); ritardo (2000); } }
Dato Function è responsabile per ottenere le stringhe GPS dal modulo GPS, estrarre le coordinate da esse e convertirle in formato decimale gradi.
void gpsEvent () { char gpsString; char test = "RMC"; i = 0; while (1) { while (Serial.available ()) // Dati in ingresso seriali da GPS { char inChar = (char) Serial.read (); gpsString = inChar; // memorizza i dati in entrata dal GPS alla stringa temporanea str i ++; if (i <4) { if (gpsString! = test) // controlla la stringa giusta i = 0; }
grado int = 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); float minut = ((float) minut_int + ((float) minut_dec / 100000.0)) / 60.0; latitudine = ((float) grado + minuto);
Infine, la funzione Send () viene utilizzata per inviare l'SMS al numero utente inserito in questa parte del codice.
void Send () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // inserisci il tuo numero di cellulare GSM.println ('"'); ritardo (500); // GSM.print ("Latitude:"); // GSM.println (latitudine); GSM.println ("Incidente accaduto"); ritardo (500); // GSM.print ("longitude:"); // GSM.println (logitude); GSM.println ("Fare clic sul collegamento per visualizzare la posizione"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (latitudine, 6); GSM.print ("+"); GSM.print (logitude, 6); GSM.write (26); ritardo (4000); }
Di seguito sono riportati il codice completo e il video dimostrativo, è possibile controllare tutte le funzioni nel codice.