I tidigare handledning har vi lärt oss hur man gränssnitt GPS-modul med dator och hur man spårar fordon med GSM och GPS. Vi byggde också varningssystem för bilolyckor med Arduino och accelerometer. Här bygger vi igen samma projekt men den här gången kommer en MSP430-startplatta och en vibrationssensor att användas för att upptäcka bilolyckor. Så detta projekt kommer också att berätta om gränssnitt mellan en vibrationssensor och MSP430 launchpad. Du hittar fler MSP430-projekt här.
Här detekterar vibrationssensormodulen vibrationer i fordonet och skickar en signal till MSP430 Launchpad. Sedan hämtar MSP430 data från GPS-modulen och skickar den till användarens mobiltelefon via SMS med GSM-modulen. En lysdiod lyser också som en signal om olycksalarm, denna lysdiod kan ersättas av något larm. Platsen för olyckan skickas i form av en Google Map-länk, härledd från latitud och longitud från GPS-modulen. Se demovideon i slutet.
GPS-modulen skickar data relaterade till spårningsposition i realtid och skickar så många data i NMEA-format (se skärmdumpen nedan). NMEA-formatet består av flera meningar, där vi bara behöver en mening. Denna mening börjar från $ GPGGA och innehåller koordinater, tid och annan användbar information. Denna GPGGA hänvisas till fixeringsdata för globalt positioneringssystem. Lär dig mer om NMEA-meningar och läs GPS-data här.
Vi kan extrahera koordinat från $ GPGGA-sträng genom att räkna komma i strängen. Antag att du hittar $ GPGGA-sträng och lagrar den i en matris, då kan Latitude hittas efter två komma och longitud kan hittas efter fyra komma. Nu kan denna latitud och longitud placeras i andra matriser.
Nedan är $ GPGGA- strängen, tillsammans med dess beskrivning:
$ 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, altitude, M, height, M,, checksum data
Identifierare |
Beskrivning |
$ GPGGA |
Data för fixering av globalt positioneringssystem |
HHMMSS.SSS |
Tid i timme minut sekunder och millisekunder format. |
Latitud |
Latitud (Koordinat) |
N |
Riktning N = Nord, S = Syd |
Longitud |
Longitud (koordinat) |
E |
Riktning E = öst, W = väst |
FQ |
Fixa kvalitetsdata |
NOS |
Antal satelliter som används |
HDP |
Horisontell utspädning av precision |
Höjd över havet |
Höjd (meter över havet) |
M |
Meter |
Höjd |
Höjd |
Kontrollsumma |
Data för kontrollsumman |
GSM-modul
SIM900 är en komplett fyrbands GSM / GPRS-modul som lätt kan inbäddas av kund eller hobbyist. SIM900 GSM-modul har ett branschstandardgränssnitt. SIM900 levererar GSM / GPRS 850/900/1800 / 1900MHz prestanda för röst, SMS, data med låg strömförbrukning. Den är lätt tillgänglig på marknaden.
- SIM900 designad med enchip-processor som integrerar AMR926EJ-S-kärnan
- Fyrbands GSM / GPRS-modul i liten storlek.
- GPRS aktiverat
AT-kommandon
AT betyder OBS! Detta kommando används för att styra GSM-modulen. Det finns några kommandon för samtal och meddelanden som vi har använt i många av våra tidigare GSM-projekt med Arduino. För att testa GSM-modulen använde vi AT-kommandot. Efter att ha fått AT Command GSM-modul, svara med OK. Det betyder att GSM-modulen fungerar bra. Nedan följer några AT-kommandon som vi använde här i det här projektet:
ATE0 För eko av
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = ”mobilnummer”
>> Nu kan vi skriva vårt meddelande
>> Efter att ha skrivit ett meddelande
Ctrl + Z skickar meddelandekommandot (26 i decimal).
RETUR = 0x0d i HEX
(För att lära dig mer om GSM-modul, se våra olika GSM-projekt med olika mikrokontroller här)
Vibrationssensormodul
I detta MSP430 Accident Alert System- projekt har vi använt en vibrationssensormodul som detekterar vibrationer eller plötsliga moduleringar. Vibrationssensormodulen ger en digital utgång HÖG / LÅG logik beroende på modul. I vårt fall har vi använt en aktiv HIGH logisk vibrationssensormodul. Det betyder att när vibrationssensorn kommer att upptäcka vibrationer kommer det att ge HÖG logik till mikrokontrollern.
Kretsförklaring
Kretsanslutningar för detta fordonsprojekt för olycksfallssystem är enkla. Här är Tx-stift på GPS-modulen direkt ansluten till det digitala stiftnummer P1_1 på MSP430 Launchpad (hårdvaruserie) och 5v används för att driva GPS-modulen. Genom att använda Software Serial Library här har vi tillåtit seriekommunikation på stift P_6 och P1_7 och gjort dem till Rx respektive Tx och anslutna till GSM-modulen. 12-voltsförsörjning används för att driva GSM-modulen. Den vibrationssensor är ansluten vid P1_3. En LED används också för att indikera olycksdetektering. Resten av anslutningarna visas i kretsschemat.
Programmeringsförklaring
Programmering för detta projekt är enkelt förutom GPS-delen. Komplett kod ges i slutet av projektet. För att skriva eller sammanställa koden i MSP430 har vi använt Energia IDE som är Arduino-kompatibel. Det mesta av Arduino IDE-funktionen kan användas direkt i denna Energia IDE.
Så först och främst har vi inkluderat nödvändiga bibliotek och deklarerat stift och variabler.
#omfatta
Angiven funktion används för att läsa vibrationssensorsignal. Denna funktion filtrerar också små eller falska vibrationer.
#define count_max 25 char SensorRead (int pin) // read sw with debounce { char count_low = 0, count_high = 0; gör { fördröjning (1); if (digitalRead (pin) == HIGH) { count_high ++; count_low = 0; } annat { count_high = 0; count_low ++; } } medan (count_low <count_max && count_high <count_max); om (count_low> = count_max) return LOW; annars återvänd HÖG; }
Funktionen nedan upptäcker vibrationer och anropar gpsEvent () -funktionen för att få GPS-koordinat och slutligen ring funktionen Send () för att skicka SMS.
void loop () { if (SensorRead (vibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Skicka(); digitalWrite (led, LOW); fördröjning (2000); } }
Given Function är ansvarig för att hämta GPS-strängar från GPS-modulen, extrahera koordinaterna från dem och konvertera dem i decimalformat.
ogiltigt gpsEvent () { char gpsString; char test = "RMC"; i = 0; while (1) { while (Serial.available ()) // Seriell inkommande data från GPS { char inChar = (char) Serial.read (); gpsString = inChar; // lagra inkommande data från GPS till temparary string str i ++; om (i <4) { if (gpsString! = test) // kontrollera rätt höger 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; latitud = ((flyt) grad + minut);
Och slutligen används funktionen Send () för att skicka SMS till det användarnummer som är infogat i denna del av koden.
ogiltig Skicka () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // ange ditt mobilnummer GSM.println ('"'); fördröjning (500); // GSM.print ("Latitude:"); // GSM.println (latitud); GSM.println ("Accident Happned"); fördröjning (500); // GSM.print ("longitude:"); // GSM.println (logitude); GSM.println ("Klicka på länk för att se plats"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM-tryck (latitud, 6); GSM.print ("+"); GSM.print (logitude, 6); GSM.write (26); fördröjning (4000); }
Komplett kod och demo-video ges nedan, du kan kontrollera alla funktioner i koden.