Ankstesnėse pamokose sužinojome, kaip susieti GPS modulį su kompiuteriu ir kaip sekti transporto priemonę naudojant GSM ir GPS. Mes taip pat sukūrėme transporto priemonių avarijų perspėjimo sistemą naudodami „Arduino“ ir akselerometrą. Čia mes vėl kuriame tą patį projektą, tačiau šį kartą transporto priemonės avarijai nustatyti bus naudojama „MSP430“ paleidimo pultas ir vibracijos jutiklis. Taigi šis projektas taip pat pasakys apie vibracijos jutiklio sąsają su „MSP430“ paleidimo pultu. Daugiau MSP430 projektų galite rasti čia.
Čia vibracijos jutiklio modulis nustato automobilio vibraciją ir siunčia signalą į „MSP430 Launchpad“. Tada MSP430 atima duomenis iš GPS modulio ir išsiunčia juos vartotojo mobiliajam telefonui SMS žinute, naudodamas GSM modulį. Šviesos diodas taip pat šviečia kaip avarijos perspėjimo signalas. Šį šviesos diodą galima pakeisti pavojaus signalu. Avarijos vieta siunčiama kaip „ Google Map“ nuoroda, gauta iš GPS modulio platumos ir ilgumos. Žr. Demonstracinį vaizdo įrašą pabaigoje.
GPS modulis realiuoju laiku siunčia duomenis, susijusius su stebėjimo padėtimi, ir tiek daug duomenų siunčia NMEA formatu (žr. Toliau pateiktą ekrano kopiją). NMEA formatą sudaro keli sakiniai, kuriuose mums reikia tik vieno sakinio. Šis sakinys prasideda nuo $ GPGGA ir jame yra koordinatės, laikas ir kita naudinga informacija. Ši GPGGA vadinama visuotinės padėties nustatymo sistemos taisymo duomenimis. Sužinokite daugiau apie NMEA sakinius ir GPS duomenų skaitymą čia.
Mes galime išgauti koordinates iš $ GPGGA eilutės skaičiuodami kablelius eilutėje. Tarkime, kad rasite $ GPGGA eilutę ir ją saugote masyve, tada Platumą galima rasti po dviejų kablelių, o Ilgumą - po keturių kablelių. Dabar šią platumą ir ilgumą galima įdėti į kitus masyvus.
Žemiau yra $ GPGGA eilutė kartu su jos aprašymu:
$ GPGGA, 104534.000.7791.0381, N, 06727.4434, E, 1,08,0.9,510,4, M, 43,9, M,, * 47 $ GPGGA, HHMMSS.SSS, platuma, N, ilguma, E, FQ, NOS, HDP, aukštis, M, aukštis, M,, kontrolinės sumos duomenys
Identifikatorius |
apibūdinimas |
$ GPGGA |
Visuotinės padėties nustatymo sistemos pataisų duomenys |
HHMMSS.SSS |
Laikas valandomis minutėmis sekundėmis ir milisekundžių formatu. |
Platuma |
Platuma (koordinatė) |
N |
Kryptis N = šiaurė, S = pietūs |
Ilguma |
Ilguma (koordinatė) |
E |
Kryptis E = rytai, W = vakarai |
FQ |
Pataisykite kokybės duomenis |
NOS |
Naudojamų palydovų skaičius |
HDP |
Horizontalus tikslumo skiedimas |
Aukštis |
Aukštis (metrais virš jūros lygio) |
M |
Skaitiklis |
Aukštis |
Aukštis |
Kontrolinė suma |
Kontrolinės sumos duomenys |
GSM modulis
SIM900 yra visas keturių juostų GSM / GPRS modulis, kurį galima lengvai įterpti klientui ar mėgėjui. SIM900 GSM modulis suteikia pramonės standarto sąsają. SIM900 teikia GSM / GPRS 850/900/1800 / 1900MHz našumą balso, SMS, duomenų suvartojimui su mažu energijos suvartojimu. Tai lengvai pasiekiama rinkoje.
- SIM900 sukurtas naudojant vienos mikroschemos procesorių, integruojantį AMR926EJ-S šerdį
- Mažas keturių dažnių juostos GSM / GPRS modulis.
- GPRS įjungtas
AT komandos
AT reiškia DĖMESĮ. Ši komanda naudojama valdyti GSM modulį. Yra keletas skambučių ir pranešimų komandų, kurias naudojome daugelyje ankstesnių „GSM“ projektų su „Arduino“. Testuodami GSM modulį naudojome komandą AT. Gavę „AT Command“ GSM modulį, atsakykite OK. Tai reiškia, kad GSM modulis veikia gerai. Žemiau yra keletas AT komandų, kurias čia naudojome šiame projekte:
ATE0 skirtas aidui išjungti
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = „Mobilusis numeris“
>> Dabar mes galime parašyti savo žinutę
>> Parašęs žinutę
„Ctrl“ + Z siunčia pranešimo komandą (26 kableliu).
ENTER = 0x0d HEX
(Norėdami sužinoti daugiau apie GSM modulį, patikrinkite įvairius mūsų GSM projektus su įvairiais mikrovaldikliais čia)
Vibracijos jutiklio modulis
Šiame MSP430 avarijų perspėjimo sistemos projekte mes panaudojome vibracijos jutiklio modulį, kuris aptinka vibracijas ar staigias moduliacijas. Vibracijos jutiklio modulis suteikia skaitmeninio išėjimo HIGH / LOW logiką, priklausomai nuo modulio. Mūsų atveju mes naudojome aktyvų HIGH loginį vibracijos jutiklio modulį. Tai reiškia, kad kai vibracijos jutiklis aptiks vibraciją, mikrovaldikliui suteiks AUKŠTOS logikos.
Grandinės paaiškinimas
Šio transporto priemonės avarijų perspėjimo sistemos projekto grandinės jungtys yra paprastos. Čia GPS modulio Tx kaištis yra tiesiogiai prijungtas prie „MSP430 Launchpad“ (aparatinės serijos) skaitmeninio kaiščio numerio P1_1, o 5v naudojamas GPS moduliui maitinti. Čia naudodami programinės įrangos nuosekliąją biblioteką, leidome nuoseklų ryšį kaiščiuose P_6 ir P1_7, padarėme juos atitinkamai Rx ir Tx ir prijungtus prie GSM modulio. 12 modulių maitinimas naudojamas GSM moduliui maitinti. Vibracijos jutiklis yra prijungtas bent P1_3. Šviesos diodas taip pat naudojamas nurodant avariją. Likę jungtys parodyti grandinės schemoje.
Programavimo paaiškinimas
Šį projektą lengva programuoti, išskyrus GPS dalį. Pilnas kodas pateikiamas projekto pabaigoje. Norėdami parašyti ar sukompiliuoti kodą MSP430, naudojome „Energia IDE“, kuri yra suderinama su „Arduino“. Daugumą „Arduino IDE“ funkcijų galima naudoti tiesiogiai šiame „Energia IDE“.
Taigi pirmiausia mes įtraukėme reikalingas bibliotekas ir deklaravome PIN ir kintamuosius.
# įtraukti
Nurodyta funkcija naudojama vibracijos jutiklio signalui nuskaityti. Ši funkcija taip pat filtruos mažas ar klaidingas vibracijas.
#define count_max 25 char SensorRead (int pin) // perskaityti sw su debounce { char count_low = 0, count_high = 0; daryti { delsti (1); if (digitalRead (PIN) == AUKŠTAS) { count_high ++; skaičius_low = 0; } dar { count_high = 0; count_low ++; } }, kol (count_low <count_max && count_high <count_max); if (count_low> = count_max) grąžinti LOW; dar grįžti AUKŠTAI; }
Žemiau esanti funkcija aptinka vibraciją ir iškviečia „ gpsEvent ()“ funkciją, kad gautų GPS koordinates ir galiausiai iškvieskite „ Send“) funkciją, kad išsiųstumėte SMS.
void loop () { if (SensorRead (vibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Siųsti (); digitalWrite (led, LOW); vėlavimas (2000); } }
„Given Function“ yra atsakinga už GPS eilučių gavimą iš GPS modulio, iš jų išimkite koordinates ir paverskite jas laipsnių dešimtainiu formatu.
void gpsEvent () { char gpsString; char testas = "RMC"; i = 0; while (1) { while (Serial.available ()) // Serial incomming data from GPS { char inChar = (char) Serial.read (); gpsString = inChar; // saugoti gaunamus duomenis iš GPS į laikiną eilutę str i ++; if (i <4) { if (gpsString! = test) // patikrinkite, ar teisinga eilutė i = 0; }
int laipsnis = 0; laipsnis = gpsString-48; laipsnis * = 10; laipsnis + = 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); plukdyti minut = ((plukdyti) minut_int + ((plukdyti) minut_dec / 100000.0)) / 60.0; platuma = ((plūduriuojantis) laipsnis + minutės);
Galiausiai funkcija „ Siųsti“ („Send“) naudojama siųsti SMS į vartotojo kodą, įterptą į šią kodo dalį.
negaliojantis Siųsti () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // įveskite savo mobiliojo telefono numerį GSM.println ('"'); vėlavimas (500); // GSM.print ("Platuma:"); // GSM.println (platuma); GSM.println („Įvyko avarija“); vėlavimas (500); // GSM.print ("ilguma:"); // GSM.println (logitudė); GSM.println ("Norėdami pamatyti vietą, spustelėkite nuorodą"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (platuma, 6); GSM.print ("+"); GSM.print (logaritmas, 6); GSM.write (26); vėlavimas (4000); }
Pilnas kodas ir demonstracinis vaizdo įrašas pateikiami žemiau, galite patikrinti visas kodo funkcijas.