I tidligere tutorials har vi lært om, hvordan man interfacer GPS-modul med computer, og hvordan man sporer køretøj ved hjælp af GSM og GPS. Vi byggede også køretøjsulykkesystem ved hjælp af Arduino og accelerometer. Her bygger vi igen det samme projekt, men denne gang vil en MSP430 launchpad og en vibrationssensor blive brugt til at detektere køretøjsulykker. Så dette projekt fortæller også om grænsefladen mellem en vibrationssensor og MSP430 launchpad. Du kan finde flere MSP430-projekter her.
Her registrerer vibrationssensormodul køretøjets vibrationer og sender et signal til MSP430 Launchpad. Derefter henter MSP430 data fra GPS-modulet og sender det til brugerens mobiltelefon via SMS ved hjælp af GSM-modulet. En LED vil også lyse som signal om ulykkesalarm, denne LED kan udskiftes med en eller anden alarm. Ulykkens placering sendes i form af et Google Map-link, der stammer fra breddegrad og længdegrad fra GPS-modulet. Se demo-videoen i slutningen.
GPS-modul sender data relateret til sporingsposition i realtid, og det sender så mange data i NMEA-format (se skærmbilledet nedenfor). NMEA-format består af flere sætninger, hvor vi kun har brug for en sætning. Denne sætning starter fra $ GPGGA og indeholder koordinater, tid og andre nyttige oplysninger. Denne GPGGA henvises til data om Global Positioning System Fix. Lær mere om NMEA-sætninger og læsning af GPS-data her.
Vi kan udtrække koordinater fra $ GPGGA-streng ved at tælle kommaerne i strengen. Antag at du finder $ GPGGA-streng og gemmer den i en matrix, så kan Latitude findes efter to kommaer og længdegrad kan findes efter fire kommaer. Nu kan denne breddegrad og længdegrad placeres i andre arrays.
Nedenfor er $ GPGGA- strengen sammen med beskrivelsen:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510.4, M, 43,9, M,, * 47 $ GPGGA, HHMMSS.SSS, breddegrad, N, længdegrad, E, FQ, NOS, HDP, højde, M, højde, M,, kontrolsumdata
Identifikator |
Beskrivelse |
$ GPGGA |
Data om Global Positioning-systemrettelse |
HHMMSS.SSS |
Tid i time minut sekunder og millisekunder format. |
Breddegrad |
Breddegrad (Koordinat) |
N |
Retning N = Nord, S = Syd |
Længde |
Længdegrad (Koordinat) |
E |
Retning E = øst, W = vest |
FQ |
Ret kvalitetsdata |
NOS |
Antal anvendte satellitter |
HDP |
Vandret fortynding af præcision |
Højde |
Højde (meter over havets overflade) |
M |
Måler |
Højde |
Højde |
Kontrolsum |
Data om kontrolsum |
GSM-modul
SIM900 er et komplet Quad-band GSM / GPRS-modul, som let kan integreres af kunde eller hobbyist. SIM900 GSM-modul giver en industristandard-interface. SIM900 leverer GSM / GPRS 850/900/1800 / 1900MHz ydeevne til tale, SMS, data med lavt strømforbrug. Det er let tilgængeligt på markedet.
- SIM900 designet ved hjælp af single-chip-processor, der integrerer AMR926EJ-S-kerne
- Quad-band GSM / GPRS-modul i lille størrelse.
- GPRS aktiveret
AT-kommandoer
AT betyder OBS! Denne kommando bruges til at styre GSM-modulet. Der er nogle kommandoer til opkald og beskeder, som vi har brugt i mange af vores tidligere GSM-projekter med Arduino. Til test af GSM-modul brugte vi AT-kommandoen. Efter modtagelse af AT Command GSM-modul, svar med OK. Det betyder, at GSM-modul fungerer fint. Nedenfor er nogle AT-kommandoer, vi brugte her i dette projekt:
ATE0 Til ekko fra
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = ”mobilnummer”
>> Nu kan vi skrive vores besked
>> Efter at have skrevet en besked
Ctrl + Z sender beskedkommando (26 i decimal).
ENTER = 0x0d i HEX
(For at lære mere om GSM-modul, se vores forskellige GSM-projekter med forskellige mikrocontrollere her)
Vibrationssensormodul
I dette MSP430 Accident Alert System- projekt har vi brugt et vibrationssensormodul, der registrerer vibrationer eller pludselige moduleringer. Vibrationssensormodul giver en digital udgang HIGH / LOW-logik afhængigt af modulet. I vores tilfælde har vi brugt et aktivt HIGH logisk vibrationssensormodul. Det betyder, at når vibrationssensoren registrerer vibrationer, vil det give HIGH logik til mikrocontrolleren.
Forklaring af kredsløb
Kredsløbstilslutninger af dette køretøjsulykkesystemprojekt er enkle. Her er Tx-stift på GPS-modulet direkte tilsluttet til det digitale pin-nummer P1_1 på MSP430 Launchpad (hardware Serial) og 5v bruges til at drive GPS-modul. Ved at bruge Software Serial Library her har vi tilladt seriel kommunikation på pin P_6 og P1_7 og gjort dem henholdsvis Rx og Tx og forbundet til GSM-modulet. 12 volt forsyning bruges til at drive GSM-modulet. Den vibration sensor er forbundet ved P1_3. En LED bruges også til at indikere detektering af ulykken. Resten af forbindelser er vist i kredsløbsdiagrammet.
Programmering Forklaring
Programmering til dette projekt er let undtagen GPS-delen. Komplet kode gives i slutningen af projektet. For at skrive eller kompilere koden i MSP430 har vi brugt Energia IDE, som er Arduino-kompatibel. Det meste af Arduino IDE-funktionen kan bruges direkte i denne Energia IDE.
Så først og fremmest har vi inkluderet de nødvendige biblioteker og deklareret pin og variabler.
#omfatte
Den givne funktion bruges til at læse vibrationssensorsignal. Denne funktion filtrerer også små eller falske vibrationer.
#define count_max 25 char SensorRead (int pin) // read sw with debounce { char count_low = 0, count_high = 0; gør { forsinkelse (1); hvis (digitalRead (pin) == HIGH) { count_high ++; count_low = 0; } andet { count_high = 0; count_low ++; } } mens (count_low <count_max && count_high <count_max); hvis (count_low> = count_max) returnerer LOW; ellers vender tilbage HØJ; }
Funktionen nedenfor registrerer vibrationer og kalder gpsEvent () -funktionen for at få GPS-koordinat og til sidst ringe til Send () -funktionen for at sende SMS.
ugyldig loop () { if (SensorRead (vibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Sende(); digitalWrite (led, LAV); forsinkelse (2000); } }
Denne funktion er ansvarlig for at hente GPS-strenge fra GPS-modulet, trække koordinaterne ud af dem og konvertere dem i grad-decimalformat.
ugyldigt gpsEvent () { char gpsString; char test = "RMC"; i = 0; while (1) { while (Serial.available ()) // Serial incomming data from GPS { char inChar = (char) Serial.read (); gpsString = inChar; // gemme indkomne data fra GPS til temparary string str i ++; hvis (i <4) { hvis (gpsString! = test) // tjek for højre streng i = 0; }
int grad = 0; grad = gpsString-48; grad * = 10; grad + = 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); flyde minut = ((flyde) minut_int + ((flyde) minut_dec / 100000.0)) / 60.0; breddegrad = ((flydende) grad + minut);
Og endelig bruges funktionen Send () til at sende SMS'en til det brugernummer, der er indsat i denne del af koden.
ugyldig Send () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // indtast dit mobilnummer GSM.println ('"'); forsinkelse (500); // GSM.print ("Latitude:"); // GSM.println (breddegrad); GSM.println ("Ulykke sket"); forsinkelse (500); // GSM.print ("længdegrad:"); // GSM.println (logitude); GSM.println ("Klik på linket for at se placering"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (breddegrad, 6); GSM.print ("+"); GSM.print (logitude, 6); GSM.write (26); forsinkelse (4000); }
Komplet kode og demo-video er angivet nedenfor, du kan kontrollere alle funktionerne i koden.