- Componenti richiesti:
- Modulo GPS e suo funzionamento:
- Modulo GSM:
- Accelerometro:
- Spiegazione del circuito:
- Spiegazione di lavoro:
- Spiegazione della programmazione:
Nei nostri tutorial precedenti, abbiamo imparato come interfacciare il modulo GPS con il computer, come costruire un orologio GPS Arduino e come tracciare il veicolo utilizzando GSM e GPS. In questo progetto costruiremo un sistema di allarme per incidenti automobilistici basato su Arduino utilizzando GPS, GSM e accelerometro. L'accelerometro rileva il cambio improvviso degli assi del veicolo e il modulo GSM invia il messaggio di avviso sul tuo cellulare con la posizione dell'incidente. La posizione dell'incidente viene inviata sotto forma di collegamento a Google Map, derivato dalla latitudine e longitudine dal modulo GPS. Il messaggio contiene anche la velocità del veicolo in nodi. Guarda il video dimostrativoalla fine. Questo progetto di avviso di incidente automobilistico può essere utilizzato anche come sistema di tracciamento e molto altro, apportando solo poche modifiche all'hardware e al software.
Componenti richiesti:
- Arduino Uno
- Modulo GSM (SIM900A)
- Modulo GPS (SIM28ML)
- Accelerometro (ADXL335)
- LCD 16x2
- Alimentazione elettrica
- Collegamento dei cavi
- 10 K-POT
- Breadboard o PCB
- Alimentazione 12v 1amp
Prima di entrare nel progetto, discuteremo di GPS, GSM e accelerometro.
Modulo GPS e suo funzionamento:
GPS è l'acronimo di Global Positioning System e viene utilizzato per rilevare la latitudine e la longitudine di qualsiasi luogo sulla Terra, con l'ora esatta UTC (Universal Time Coordinated). Il modulo GPS viene utilizzato per tracciare la posizione dell'incidente nel nostro progetto. Questo dispositivo riceve le coordinate dal satellite per ogni secondo, con ora e data. Abbiamo precedentemente estratto la stringa $ GPGGA nel sistema di tracciamento dei veicoli per trovare le coordinate di latitudine e longitudine.
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
Comando 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 eco disattivato AT + CNMI = 2,2,0,0,0
(Per saperne di più sul modulo GSM, controlla i nostri vari progetti GSM con vari microcontrollori qui)
Accelerometro:
Pin Descrizione dell'accelerometro:
- L'alimentazione Vcc 5 volt dovrebbe essere collegata a questo pin.
- X-OUT Questo pin fornisce un'uscita analogica in direzione x
- Y-OUT Questo pin fornisce un'uscita analogica in direzione y
- Z-OUT Questo pin fornisce un'uscita analogica in direzione z
- GND Ground
- ST Questo pin utilizzato per impostare la sensibilità del sensore
Controlla anche i nostri altri progetti che utilizzano Accelerometer: Ping Pong Game utilizzando Arduino e Robot controllato da gesti manuali basati su accelerometro.
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 pin digitale numero 10 di Arduino. Utilizzando la Software Serial Library qui, abbiamo consentito la comunicazione seriale sui pin 10 e 11, e li abbiamo resi rispettivamente Rx e Tx e lasciato aperto il pin Rx del modulo GPS. Di default i Pin 0 e 1 di Arduino sono usati per la comunicazione seriale ma utilizzando la libreria SoftwareSerial, possiamo permettere la comunicazione seriale su altri pin digitali di Arduino. L'alimentazione a 12 Volt viene utilizzata per alimentare il modulo GPS.
I pin Tx e Rx del modulo GSM sono direttamente collegati ai pin D2 e D3 di Arduino. Per l'interfacciamento GSM, qui abbiamo utilizzato anche la libreria seriale del software. Il modulo GSM è anche alimentato da 12v. I pin dati D4, D5, D6 e D7 di un LCD opzionale sono collegati ai pin numero 6, 7, 8 e 9 di Arduino. I pin di comando RS ed EN dell'LCD sono collegati con i pin numero 4 e 5 di Arduino e il pin RW è direttamente collegato a terra. Un potenziometro viene utilizzato anche per impostare il contrasto o la luminosità del display LCD.
In questo sistema viene aggiunto un accelerometro per rilevare un incidente ei suoi pin di uscita ADC sugli assi x, yez sono direttamente collegati ai pin A1, A2 e A3 dell'ADC Arduino.
Spiegazione di lavoro:
In questo progetto, Arduino viene utilizzato per controllare l'intero processo con un ricevitore GPS e un modulo GSM. Il ricevitore GPS viene utilizzato per rilevare le coordinate del veicolo, il modulo GSM viene utilizzato per inviare l'SMS di avviso con le coordinate e il collegamento a Google Map. L'accelerometro, ovvero ADXL335, viene utilizzato per rilevare incidenti o cambiamenti improvvisi in qualsiasi asse. Inoltre, viene utilizzato un LCD 16x2 opzionale per visualizzare i messaggi di stato o le coordinate. Abbiamo utilizzato il modulo GPS SIM28ML e il modulo GSM SIM900A.
Quando siamo pronti con il nostro hardware dopo la programmazione, possiamo installarlo nel nostro veicolo e accenderlo. Ora, ogni volta che si verifica un incidente, l'auto si inclina e l'accelerometro cambia i valori dell'asse. Questi valori vengono letti da Arduino e controlla se si verificano cambiamenti in qualsiasi asse. Se si verifica una modifica, Arduino legge le coordinate estraendo la stringa $ GPGGA dai dati del modulo GPS (il funzionamento del GPS spiegato sopra) e invia un SMS al numero predefinito alla polizia, all'ambulanza o al familiare con le coordinate della posizione del luogo dell'incidente. Il messaggio contiene anche un collegamento di Google Map alla posizione dell'incidente, in modo che la posizione possa essere facilmente rintracciata. Quando riceviamo il messaggio, dobbiamo solo fare clic sul collegamento e verremo reindirizzati alla mappa di Google e quindi potremo vedere la posizione esatta del veicolo. Velocità del veicolo, in nodi(1.852 KPH), viene inviato anche nell'SMS e visualizzato sul pannello LCD. Guarda il video demo completo sotto il progetto.
Qui in questo progetto, possiamo impostare la sensibilità dell'accelerometro inserendo il valore minimo e massimo nel codice.
Qui nella demo sono stati utilizzati valori dati:
#define minVal -50 #define MaxVal 50
Ma per risultati migliori è possibile utilizzare 200 al posto di 50 o impostare in base alle proprie esigenze.
Spiegazione della programmazione:
Il programma completo è stato fornito di seguito nella sezione Codice; ecco spiegandone brevemente le varie funzioni.
Per prima cosa abbiamo incluso tutte le librerie richieste o i file di intestazione e dichiarato varie variabili per i calcoli e la memorizzazione temporanea dei dati.
Successivamente, abbiamo creato una funzione void initModule (String cmd, char * res, int t) per inizializzare il modulo GSM e verificarne la risposta utilizzando i comandi AT.
void initModule (String cmd, char * res, int t) {while (1) {Serial.println (cmd); Serial1.println (cmd); ritardo (100); while (Serial1.available ()> 0) {if (Serial1.find (res)) {Serial.println (res); ritardo (t); ritorno; } else {Serial.println ("Error"); }} ritardo (t); }}
Successivamente, nella funzione void setup () , abbiamo inizializzato la comunicazione seriale hardware e software, LCD, GPS, modulo GSM e accelerometro.
void setup () {Serial1.begin (9600); Serial.begin (9600); lcd.begin (16,2); lcd.print ("Avviso di incidente"); lcd.setCursor (0,1); lcd.print ("System"); ritardo (2000); lcd.clear ();…………………
Anche il processo di calibrazione dell'accelerometro viene eseguito nel ciclo di configurazione . In questo, abbiamo preso alcuni campioni e quindi trovato i valori medi per l'asse x, l'asse ye l'asse z. E memorizzali in una variabile. Quindi abbiamo utilizzato questi valori campione per leggere i cambiamenti nell'asse dell'accelerometro quando il veicolo si inclina (incidente).
lcd.print ("Callibrating"); lcd.setCursor (0,1); lcd.print ("Acceleromiter"); for (int i = 0; i
Dopodiché, nella funzione void loop () , abbiamo letto i valori dell'asse dell'accelerometro e fatto un calcolo per estrarre le modifiche con l'aiuto di campioni prelevati in Calibration. Ora, se le modifiche sono più o meno del livello definito, Arduino invia un messaggio al numero predefinito.
void loop () {int value1 = 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);…………………
Qui abbiamo anche creato qualche altra funzione per varie pupose come void gpsEvent () per ottenere le coordinate GPS, void coordinate2dec () per estrarre le coordinate dalla stringa GPS e convertirle in valori decimali, void show_coordinate () per visualizzare i valori sul monitor seriale e LCD, e infine il void Send () per l'invio di SMS di avviso al numero predefinito.
Di seguito sono riportati il codice completo e il video dimostrativo, è possibile controllare tutte le funzioni nel codice.