I tidligere veiledninger har vi lært om hvordan du kan grensesnitt GPS-modul med datamaskin og hvordan du kan spore kjøretøy ved hjelp av GSM og GPS. Vi bygget også bilulykkesvarslingssystem ved hjelp av Arduino og akselerometer. Her bygger vi igjen det samme prosjektet, men denne gangen vil en MSP430 launchpad og en vibrasjonssensor brukes til å oppdage bilulykke. Så dette prosjektet vil også fortelle om grensesnitt mellom en vibrasjonssensor og MSP430 launchpad. Du finner flere MSP430-prosjekter her.
Her oppdager vibrasjonssensormodulen vibrasjonen i kjøretøyet og sender et signal til MSP430 Launchpad. Deretter henter MSP430 data fra GPS-modulen og sender dem til brukerens mobiltelefon via SMS ved hjelp av GSM-modulen. En LED vil også lyse som et ulykkesvarsel signal, denne LED kan erstattes av en alarm. Plasseringen av ulykken sendes i form av Google Map-lenke, avledet fra breddegrad og lengdegrad fra GPS-modulen. Se demonstrasjonsvideoen på slutten.
GPS-modulen sender data relatert til sporingsposisjon i sanntid, og den sender så mange data i NMEA-format (se skjermbildet nedenfor). NMEA-format består av flere setninger, der vi bare trenger en setning. Denne setningen starter fra $ GPGGA og inneholder koordinatene, tiden og annen nyttig informasjon. Denne GPGGA henvises til Global Positioning System Fix Data. Lær mer om NMEA setninger og lesing av GPS-data her.
Vi kan trekke ut koordinat fra $ GPGGA-streng ved å telle kommaene i strengen. Anta at du finner $ GPGGA-streng og lagrer den i en matrise, så kan du finne Latitude etter to komma og lengdegrad etter fire komma. Nå kan denne breddegraden og lengdegraden settes i andre matriser.
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, lengdegrad, E, FQ, NOS, HDP, høyde, M, høyde, M,, sjekksumdata
Identifikator |
Beskrivelse |
$ GPGGA |
Data om globale posisjoneringssystemer |
HHMMSS.SSS |
Tid i time minutt sekunder og millisekunder format. |
Breddegrad |
Breddegrad (Koordinat) |
N |
Retning N = Nord, S = Sør |
Lengdegrad |
Lengdegrad (koordinat) |
E |
Retning E = Øst, W = Vest |
FQ |
Løs kvalitetsdata |
NOS |
Antall satellitter som brukes |
HDP |
Horisontal fortynning av presisjon |
Høyde |
Høyde (meter over havet) |
M |
Måler |
Høyde |
Høyde |
Sjekksum |
Kontrollsumdata |
GSM-modul
SIM900 er en komplett Quad-band GSM / GPRS-modul som enkelt kan bygges inn av kunde eller hobbyist. SIM900 GSM-modul gir et industristandard grensesnitt. SIM900 leverer GSM / GPRS 850/900/1800 / 1900MHz ytelse for tale, SMS, data med lavt strømforbruk. Den er lett tilgjengelig i markedet.
- SIM900 designet ved bruk av enchipsprosessor som integrerer AMR926EJ-S-kjerne
- Quad-band GSM / GPRS-modul i liten størrelse.
- GPRS aktivert
AT-kommandoer
AT betyr OBS. Denne kommandoen brukes til å kontrollere GSM-modulen. Det er noen kommandoer for å ringe og sende meldinger som vi har brukt i mange av våre tidligere GSM-prosjekter med Arduino. For å teste GSM-modulen brukte vi AT-kommandoen. Etter å ha mottatt AT Command GSM-modul, svar med OK. Det betyr at GSM-modulen fungerer bra. Nedenfor er noen AT-kommandoer vi brukte her i dette prosjektet:
ATE0 For ekko av
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = ”mobilnummer”
>> Nå kan vi skrive meldingen vår
>> Etter å ha skrevet en melding
Ctrl + Z sender meldingskommando (26 i desimal).
ENTER = 0x0d i HEX
(For å lære mer om GSM-modul, sjekk våre forskjellige GSM-prosjekter med forskjellige mikrokontrollere her)
Vibrasjonssensormodul
I dette MSP430 Accident Alert System- prosjektet har vi brukt en vibrasjonssensormodul som oppdager vibrasjoner eller plutselige modulasjoner. Vibrasjonssensormodul gir en digital utgang HIGH / LOW logikk avhengig av modulen. I vårt tilfelle har vi brukt en aktiv HIGH logic vibrasjonssensormodul. Det betyr at når vibrasjonssensoren oppdager vibrasjoner, vil den gi HØY logikk til mikrokontrolleren.
Kretsforklaring
Kretsforbindelser i dette prosjektet for bilvarslingsvarsler er enkle. Her er Tx-pin på GPS-modulen direkte koblet til det digitale pin-nummeret P1_1 på MSP430 Launchpad (hardware Serial) og 5v brukes til å drive GPS-modulen. Ved å bruke Software Serial Library her har vi tillatt seriell kommunikasjon på pin P_6 og P1_7, og gjort dem til henholdsvis Rx og Tx og koblet til GSM-modulen. 12 Volt forsyning brukes til å drive GSM-modulen. Den vibrasjonsføler er forbundet ved P1_3. En LED brukes også til å indikere deteksjonen av ulykken. Resten av tilkoblinger er vist i kretsskjemaet.
Programmering Forklaring
Programmering for dette prosjektet er enkelt bortsett fra GPS-delen. Komplett kode er gitt på slutten av prosjektet. For å skrive eller kompilere koden i MSP430 har vi brukt Energia IDE som er Arduino-kompatibel. Det meste av Arduino IDE-funksjonen kan brukes direkte i denne Energia IDE.
Så først og fremst har vi tatt med nødvendige biblioteker og erklært pin og variabler.
#inkludere
Denne funksjonen brukes til å lese vibrasjonssensorsignal. Denne funksjonen filtrerer også små eller falske vibrasjoner.
#define count_max 25 char SensorRead (int pin) // read sw with debounce { char count_low = 0, count_high = 0; gjør { forsinkelse (1); hvis (digitalRead (pin) == HIGH) { count_high ++; count_low = 0; } annet { count_high = 0; count_low ++; } } mens (count_low <count_max && count_high <count_max); hvis (count_low> = count_max) returnerer LOW; ellers returnere HØY; }
Funksjonen under oppdager vibrasjon og ring gpsEvent () -funksjonen for å få GPS-koordinat og til slutt ring Send () -funksjonen for å sende SMS.
void loop () { if (SensorRead (vibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Sende(); digitalWrite (ledet, LAV); forsinkelse (2000); } }
Gitt funksjon er ansvarlig for å hente GPS-strenger fra GPS-modulen, trekke ut koordinatene fra dem og konvertere dem i graddesimalformat.
ugyldig 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; // lagre innkommende data fra GPS til temparary string str i ++; hvis (i <4) { if (gpsString! = test) // se etter høyre 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); float minut = ((float) minut_int + ((float) minut_dec / 100000.0)) / 60.0; breddegrad = ((flyte) grad + minut);
Og til slutt brukes Send () -funksjonen til å sende SMSen til brukernummeret som er satt inn i denne delen av koden.
ugyldig Send () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // skriv inn mobilnummeret GSM.println ('"'); forsinkelse (500); // GSM.print ("Latitude:"); // GSM.println (breddegrad); GSM.println ("Ulykke skjedd"); forsinkelse (500); // GSM.print ("lengdegrad:"); // GSM.println (logitude); GSM.println ("Klikk på lenke for å se plassering"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM-trykk (breddegrad, 6); GSM.print ("+"); GSM.print (logitude, 6); GSM.write (26); forsinkelse (4000); }
Fullstendig kode og demo-video er gitt nedenfor, du kan sjekke alle funksjonene i koden.