U prethodnim tutorijalima naučili smo kako povezati GPS modul s računalom i kako pratiti vozilo pomoću GSM-a i GPS-a. Također smo izgradili Sustav za upozoravanje na nezgode u vozilu koristeći Arduino i akcelerometar. Ovdje ponovno gradimo isti projekt, ali ovaj put će se za otkrivanje prometne nesreće koristiti lansirna ploča MSP430 i senzor vibracija. Tako će ovaj projekt također reći o povezivanju senzora vibracija s lansirnom pločom MSP430. Ovdje možete pronaći više projekata MSP430.
Ovdje modul senzora vibracije otkriva vibracije vozila i šalje signal na MSP430 Launchpad. Tada MSP430 dohvaća podatke iz GPS modula i šalje ih korisničkom mobilnom telefonu putem SMS-a koristeći GSM modul. LED će također svijetliti kao signal upozorenja na nesreću, ovaj LED može zamijeniti neki alarm. Mjesto nesreće šalje se u obliku veze Google Map, izvedene iz geografske širine i dužine iz GPS modula. Pogledajte demo video na kraju.
![]()
GPS modul šalje podatke koji se odnose na položaj praćenja u stvarnom vremenu i šalje toliko podataka u NMEA formatu (pogledajte snimku zaslona u nastavku). NMEA format sastoji se od nekoliko rečenica, u kojima nam treba samo jedna rečenica. Ova rečenica počinje od $ GPGGA i sadrži koordinate, vrijeme i ostale korisne informacije. Ovaj GPGGA odnosi se na podatke o popravcima sustava globalnog pozicioniranja. Ovdje saznajte više o NMEA rečenicama i čitanju GPS podataka.
Koordinate možemo izdvojiti iz $ GPGGA niza brojanjem zareza u nizu. Pretpostavimo da pronađete $ GPGGA niz i pohranite ga u niz, a zatim Latitude možete pronaći nakon dva zareza, a Longitude nakon četiri zareza. Sada se ta zemljopisna širina i dužina mogu staviti u druge nizove.

Ispod je $ GPGGA string, zajedno s opisom:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510.4, M, 43.9, M,, * 47 $ GPGGA, HHMMSS.SSS, zemljopisna širina, N, dužina, E, FQ, NOS, HDP, nadmorska visina, M, visina, M,, podaci o kontrolnoj sumi
|
Identifikator |
Opis |
|
$ GPGGA |
Podaci o popravcima sustava globalnog pozicioniranja |
|
HHMMSS.SSS |
Vrijeme u satima minutnim sekundama i milisekundama. |
|
Zemljopisna širina |
Geografska širina (koordinata) |
|
N |
Smjer N = sjever, S = jug |
|
Zemljopisna dužina |
Zemljopisna dužina (koordinata) |
|
E |
Smjer E = Istok, Z = Zapad |
|
FQ |
Ispravite podatke o kvaliteti |
|
NOS |
Broj satelita koji se koriste |
|
HDP |
Horizontalno razrjeđivanje preciznosti |
|
Visina |
Nadmorska visina (metri iznad razine mora) |
|
M |
Metar |
|
Visina |
Visina |
|
Kontrolna suma |
Podaci o kontrolnoj sumi |
GSM modul
SIM900 je cjeloviti četveropojasni GSM / GPRS modul koji kupac ili hobi mogu jednostavno ugraditi. SIM900 GSM modul pruža industrijsko sučelje. SIM900 pruža GSM / GPRS 850/900/1800 / 1900MHz performanse za glas, SMS i podatke s niskom potrošnjom energije. Lako je dostupan na tržištu.
- SIM900 dizajniran pomoću jednočipovog procesora koji integrira jezgru AMR926EJ-S
- Četvero pojasni GSM / GPRS modul u maloj veličini.
- GPRS omogućen
![]()
AT zapovjedništva
AT znači PAŽNJA. Ova se naredba koristi za upravljanje GSM modulom. Postoje neke naredbe za pozivanje i razmjenu poruka koje smo koristili u mnogim našim prethodnim GSM projektima s Arduinom. Za testiranje GSM modula koristili smo AT naredbu. Nakon primanja AT Command GSM modula odgovorite s OK. To znači da GSM modul radi u redu. Ispod je nekoliko AT naredbi koje smo ovdje koristili u ovom projektu:
ATE0 Za isključivanje odjeka
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = "Broj mobitela"
>> Sada možemo napisati svoju poruku
>> Nakon pisanja poruke
Ctrl + Z šalje naredbu za poruku (26 u decimalu).
ENTER = 0x0d u HEX-u
(Da biste saznali više o GSM modulu, ovdje provjerite naše razne GSM projekte s raznim mikrokontrolerima)
Modul senzora vibracija
U ovom projektu MSP430 sustava za uzbunu upotrijebili smo modul senzora vibracija koji otkriva vibracije ili iznenadne modulacije. Modul senzora vibracija daje digitalni izlaz HIGH / LOW logike, ovisno o modulu. U našem smo slučaju koristili aktivni VISOKI modul logičkog senzora vibracija. Znači kad god senzor vibracije detektira vibracije, dat će VISOKU logiku mikrokontroleru.
![]()
Objašnjenje sklopa
Kružne veze ovog Projekta sustava upozorenja na nezgode u vozilu jednostavne su. Ovdje je Tx pin GPS modula izravno povezan s digitalnim pin brojem P1_1 na MSP430 Launchpad (hardverski serijski), a 5v se koristi za napajanje GPS modula. Korištenjem softverske serijske biblioteke ovdje omogućili smo serijsku komunikaciju na pinovima P_6 i P1_7 te ih učinili Rx odnosno Tx i spojili na GSM modul. Za napajanje GSM modula koristi se napajanje od 12 volti. Vibracija Senzor je spojen na P1_3. Također se koristi LED za prikaz otkrivanja nesreće. Ostali spojevi prikazani su na shemi spojeva.
![]()
![]()
Objašnjenje programiranja
Programiranje za ovaj projekt jednostavno je, osim GPS dijela. Kompletni kod dan je na kraju projekta. Za pisanje ili kompajliranje koda u MSP430 koristili smo Energia IDE koji je kompatibilan s Arduinom. Većina funkcije Arduino IDE može se koristiti izravno u ovom Energia IDE-u.
Dakle, prije svega uključili smo potrebne knjižnice i deklarirali pin i varijable.
#include
Dana funkcija koristi se za očitavanje signala vibracijskog senzora. Ova funkcija filtrira i male ili lažne vibracije.
#define count_max 25 char SensorRead (int pin) // čitanje sw s debounceom { char count_low = 0, count_high = 0; učiniti { odgoda (1); if (digitalRead (pin) == HIGH) { count_high ++; count_low = 0; } ostalo { count_high = 0; count_low ++; } } while (count_low <count_max && count_high <count_max); if (count_low> = count_max) return LOW; inače se vraća VISOKO; }
Ispod funkcija otkriva vibraciju i poziva funkciju gpsEvent () da bi dobila GPS koordinate i konačno nazvala funkciju Send () za slanje SMS-a.
void loop () { if (SensorRead (vibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Poslati(); digitalWrite (led, LOW); kašnjenje (2000); } }
Dana funkcija odgovorna je za dobivanje GPS nizova iz GPS modula, izvlačenje koordinata iz njih i pretvaranje u decimalni format.
void gpsEvent () { char gpsString; char test = "RMC"; i = 0; while (1) { while (Serial.available ()) // Serijski dolazni podaci s GPS-a { char inChar = (char) Serial.read (); gpsString = inChar; // pohranjuje dolazne podatke s GPS-a u privremeni niz str i ++; if (i <4) { if (gpsString! = test) // provjeri je li desni niz i = 0; }
int stupanj = 0; stupanj = gpsString-48; stupanj * = 10; stupanj + = 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; zemljopisna širina = ((plutajući) stupanj + minuta);
I na kraju, funkcija Send () koristi se za slanje SMS-a na korisnički broj koji je umetnut u ovaj dio koda.
void Send () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // unesite svoj broj mobitela GSM.println ('"'); kašnjenje (500); // GSM.print ("Latitude:"); // GSM.println (zemljopisna širina); GSM.println ("Nesreća se dogodila"); kašnjenje (500); // GSM.print ("longitude:"); // GSM.println (logitude); GSM.println ("Kliknite vezu da biste vidjeli lokaciju"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (zemljopisna širina, 6); GSM.print ("+"); GSM.print (zemljopisna širina, 6); GSM.write (26); kašnjenje (4000); }
Kompletni kod i demo video prikazan je u nastavku, možete provjeriti sve funkcije u kodu.
