V prejšnjih vajah smo se naučili, kako povezati GPS modul z računalnikom in kako slediti vozilu z uporabo GSM in GPS. Z uporabo Arduina in merilnika pospeška smo zgradili tudi sistem za opozarjanje na nesreče v vozilu. Tu spet gradimo isti projekt, tokrat pa bomo za odkrivanje prometne nesreče uporabili izstrelitveno ploščo MSP430 in senzor vibracij. Torej, ta projekt bo povedal tudi o povezovanju senzorja vibracij z lansirno ploščo MSP430. Več projektov MSP430 najdete tukaj.
Tu modul senzorja vibracij zazna vibracije vozila in pošlje signal na lansirno ploščo MSP430. Nato MSP430 pridobi podatke iz modula GPS in jih pošlje uporabniku mobilnega telefona prek SMS-a z uporabo modula GSM. Lučka LED bo svetila tudi kot signal za opozorilo o nesreči, to LED lahko zamenja kakšen alarm. Lokacija nesreče se pošlje v obliki povezave Google Map, ki izhaja iz zemljepisne širine in dolžine iz modula GPS. Oglejte si predstavitveni video na koncu.
Modul GPS pošilja podatke, povezane s položajem sledenja, v realnem času in pošlje toliko podatkov v obliki NMEA (glejte spodnjo sliko zaslona). Oblika NMEA vsebuje več stavkov, v katerih potrebujemo le en stavek. Ta stavek se začne od $ GPGGA in vsebuje koordinate, čas in druge koristne informacije. Ta GPGGA se imenuje Global Fix System Fix Data. Več o stavkih NMEA in branju podatkov GPS lahko izveste tukaj.
Iz niza $ GPGGA lahko izvlečemo koordinate s štetjem vejic v nizu. Recimo, da najdete niz $ GPGGA in ga shranite v matriko, nato Latitude najdemo po dveh vejicah, Longitude pa po štirih vejic. Zdaj lahko to zemljepisno širino in dolžino damo v druge nize.
Spodaj je niz $ GPGGA skupaj z opisom:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510.4, M, 43.9, M,, * 47 $ GPGGA, HHMMSS.SSS, zemljepisna širina, N, dolžina, E, FQ, NOS, HDP, nadmorska višina, M, višina, M,, podatki o kontrolni vsoti
Identifikator |
Opis |
$ GPGGA |
Podatki o popravkih sistema globalnega pozicioniranja |
HHMMSS.SSS |
Čas v obliki ure v minuti in sekundah in milisekundah. |
Zemljepisna širina |
Zemljepisna širina (koordinata) |
N |
Smer N = sever, S = jug |
Zemljepisna dolžina |
Zemljepisna dolžina (koordinata) |
E |
Smer E = vzhod, W = zahod |
FQ |
Popravite podatke o kakovosti |
NOS |
Število uporabljenih satelitov |
HDP |
Horizontalno redčenje natančnosti |
Nadmorska višina |
Nadmorska višina (metri nad morsko gladino) |
M |
Merilnik |
Višina |
Višina |
Kontrolna vsota |
Podatki o kontrolni vsoti |
GSM modul
SIM900 je popoln štiripasovni GSM / GPRS modul, ki ga lahko kupec ali ljubitelj enostavno vdela. GSM modul SIM900 zagotavlja industrijski vmesnik. SIM900 zagotavlja GSM / GPRS 850/900/1800 / 1900MHz zmogljivosti za govor, SMS in podatke z nizko porabo energije. Na trgu je lahko dostopen.
- SIM900, zasnovan z uporabo enočipnega procesorja, ki vključuje jedro AMR926EJ-S
- Štiripasovni GSM / GPRS modul v majhni velikosti.
- GPRS omogočen
Ukazi AT
AT pomeni POZOR. Ta ukaz se uporablja za nadzor GSM modula. Obstaja nekaj ukazov za klicanje in pošiljanje sporočil, ki smo jih uporabili v številnih prejšnjih projektih GSM z Arduino. Za testiranje GSM modula smo uporabili AT ukaz. Po prejemu AT Command GSM modula odgovorite z OK. To pomeni, da GSM modul deluje v redu. Spodaj je nekaj ukazov AT, ki smo jih uporabili v tem projektu:
ATE0 Za odmev
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = "Mobilna številka"
>> Zdaj lahko napišemo svoje sporočilo
>> Po pisanju sporočila
Ctrl + Z pošlje ukaz za sporočilo (26 v decimalnih mestih).
ENTER = 0x0d v šestnajstiškem
(Če želite izvedeti več o modulu GSM, tukaj preglejte naše različne projekte GSM z različnimi mikrokrmilniki)
Modul senzorja vibracij
V tem projektu MSP430 Accident Alert System smo uporabili modul vibracijskega senzorja, ki zazna vibracije ali nenadne modulacije. Modul senzorja vibracij daje digitalni izhod HIGH / LOW logiko, odvisno od modula. V našem primeru smo uporabili aktivni modul HIGH logičnega senzorja vibracij. Pomeni, da bo senzor vibracij, kadar zazna vibracije, mikrofonu dal VISOKO logiko.
Pojasnilo vezja
Krožne povezave tega projekta sistema za opozarjanje na nesreče v vozilu so preproste. Tu je pin Tx modula GPS neposredno povezan z digitalno številko pin P1_1 na lansirni ploščici MSP430 (serijska strojna oprema), 5v pa se uporablja za napajanje modula GPS. Z uporabo programske serijske knjižnice tukaj smo dovolili serijsko komunikacijo na zatičih P_6 in P1_7 ter jih naredili Rx oziroma Tx in priključili na modul GSM. Za napajanje modula GSM se uporablja 12-voltno napajanje. Vibracij senzor priključen na P1_3. Za prikazovanje nesreče se uporablja tudi LED. Ostali priključki so prikazani na vezju.
Pojasnilo programiranja
Programiranje za ta projekt je enostavno, razen dela GPS. Popolna koda je podana na koncu projekta. Za pisanje ali prevajanje kode v MSP430 smo uporabili Energia IDE, ki je združljiv z Arduino. Večino funkcije Arduino IDE je mogoče uporabiti neposredno v tem programu Energia IDE.
Najprej smo torej vključili zahtevane knjižnice in razglasili pin in spremenljivke.
#include
Dana funkcija se uporablja za branje signala vibracijskega senzorja. Ta funkcija bo filtrirala tudi majhne ali lažne vibracije.
#define count_max 25 char SensorRead (int pin) // branje sw z debounce { char count_low = 0, count_high = 0; do { delay (1); if (digitalRead (pin) == HIGH) { count_high ++; count_low = 0; } sicer { count_high = 0; count_low ++; } } medtem (count_low <count_max && count_high <count_max); če (count_low> = count_max) vrne LOW; sicer vrne VISOKO; }
Spodnja funkcija zazna vibracije in pokliče funkcijo gpsEvent (), da dobi koordinate GPS in končno pokliče funkcijo Send () za pošiljanje SMS-a.
void loop () { if (SensorRead (vibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Pošlji (); digitalWrite (led, LOW); zamuda (2000); } }
Družba Function je odgovorna za pridobivanje nizov GPS iz modula GPS, izvlečenje koordinat iz njih in njihovo pretvorbo v stopinjsko decimalno obliko.
void gpsEvent () { char gpsString; preizkus char = "RMC"; i = 0; while (1) { while (Serial.available ()) // Serijski dohodni podatki iz GPS-a { char inChar = (char) Serial.read (); gpsString = inChar; // shranimo dohodne podatke iz GPS-ja v začasni niz str i ++; if (i <4) { if (gpsString! = test) // preverimo, ali je desni niz i = 0; }
int stopnja = 0; stopnja = gpsString-48; stopnja * = 10; stopnja + = 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; zemljepisna širina = ((plovec) stopinja + minuta);
In končno, funkcija Send () se uporablja za pošiljanje SMS-a na uporabniško številko, ki je vstavljena v ta del kode.
void Send () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // vnesite svojo mobilno številko GSM.println ('"'); zamuda (500); // GSM.print ("Latitude:"); // GSM.println (zemljepisna širina); GSM.println ("Nesreča se je zgodila"); zamuda (500); // GSM.print ("zemljepisna dolžina:"); // GSM.println (logitude); GSM.println ("Kliknite povezavo za prikaz lokacije"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (zemljepisna širina, 6); GSM.print ("+"); GSM.print (zemljepisna širina, 6); GSM.write (26); zamuda (4000); }
Spodaj je navedena celotna koda in predstavitveni video, lahko preverite vse funkcije v kodi.