A korábbi oktatóprogramokban megtudtuk, hogyan lehet a GPS modult összekapcsolni a számítógéppel, és hogyan lehet nyomon követni a járművet a GSM és a GPS segítségével. Emellett Arduino és gyorsulásmérő használatával megépítettük a járműbaleset-riasztórendszert. Itt ismét ugyanazt a projektet építjük, de ezúttal egy MSP430 indítópultot és egy rezgésérzékelőt használunk a járműbalesetek felderítésére. Tehát ez a projekt a vibrációs érzékelő és az MSP430 indítópad összekapcsolásáról is szól. További MSP430 projekteket itt talál.
Itt a Rezgésérzékelő modul érzékeli a jármű rezgését és jelet küld az MSP430 Launchpad-nak. Ezután az MSP430 beolvassa az adatokat a GPS modulból, és SMS-ben elküldi a felhasználó mobiltelefonjának a GSM modul segítségével. Egy LED is világít balesetjelzésként, ezt a LED-et valamilyen riasztással helyettesítheti. A baleset helyét a Google Map link formájában küldi el, a GPS modul szélességi és hosszúsági fokai alapján. Lásd a bemutató videót a végén.
A GPS modul valós időben küldi a követési pozícióval kapcsolatos adatokat, és ennyi adatot küld NMEA formátumban (lásd az alábbi képernyőképet). Az NMEA formátum több mondatból áll, amelyekben csak egy mondatra van szükségünk. Ez a mondat a $ GPGGA- tól kezdődik, és tartalmazza a koordinátákat, az időt és egyéb hasznos információkat. Ez a GPGGA a Globális Helymeghatározó Rendszer Javítási Adataira utal. Tudjon meg többet az NMEA mondatokról és a GPS adatok olvasásáról itt.
A $ GPGGA karakterláncból kivonhatjuk a koordinátát, ha megszámoljuk a vesszőket a karakterláncban. Tegyük fel, hogy megtalálta a $ GPGGA karakterláncot, és egy tömbben tárolja, majd a Latitude két vessző után, a Longitude pedig négy vessző után található. Ez a szélesség és hosszúság más tömbökbe is beilleszthető.
Az alábbiakban a $ GPGGA karakterlánc található, a leírásával együtt:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510,4, M, 43,9, M,, * 47 $ GPGGA, HHMMSS.SSS, szélesség, N, hosszúság, E, FQ, NOS, HDP, magasság, M, magasság, M,, ellenőrző összeg adatok
Azonosító |
Leírás |
$ GPGGA |
Globális helymeghatározó rendszer rögzíti az adatokat |
HHMMSS.SSS |
Idő óra perc másodpercben és ezredmásodperc formátumban. |
Szélességi kör |
Földrajzi szélesség (koordináták) |
N |
Irány N = észak, S = dél |
Hosszúság |
Hosszúság (koordináta) |
E |
E = kelet, W = nyugat irány |
FQ |
Javítsa a minőségi adatokat |
NOS |
A használt műholdak száma |
HDP |
A pontosság vízszintes hígítása |
Magasság |
Magasság (méterrel a tengerszint felett) |
M |
Méter |
Magasság |
Magasság |
Ellenőrző összeg |
Ellenőrző összeg adatok |
GSM modul
A SIM900 egy komplett négysávos GSM / GPRS modul, amelyet könnyen be lehet ágyazni az ügyfél vagy a hobbi számára. A SIM900 GSM modul iparági szabványos interfészt biztosít. A SIM900 GSM / GPRS 850/900/1800 / 1900MHz teljesítményt nyújt alacsony hangfogyasztású hang-, SMS- és adatátvitelhez. Könnyen elérhető a piacon.
- A SIM900 az AMR926EJ-S magot integráló egy chipes processzor használatával készült
- Négysávos GSM / GPRS modul kis méretben.
- GPRS engedélyezve
AT parancsok
AT azt jelenti, FIGYELEM. Ez a parancs a GSM modul vezérlésére szolgál. Van néhány parancs a híváshoz és az üzenetküldéshez, amelyeket számos korábbi Arduino-s GSM-projektünkben használtunk. A GSM modul teszteléséhez AT parancsot használtunk. Miután megkapta az AT Command GSM modult, válaszoljon OK-val. Ez azt jelenti, hogy a GSM modul jól működik. Az alábbiakban bemutatunk néhány AT-parancsot, amelyet itt használtunk a projektben:
ATE0 A visszhang kikapcsolásához
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = „Mobilszám”
>> Most megírhatjuk az üzenetünket
>> Üzenet írása után
A Ctrl + Z üzenetparancsot küld (26 tizedesjegyben).
ENTER = 0x0d a HEX-ben
(Ha többet szeretne megtudni a GSM modulról, itt ellenőrizheti a különféle mikrokontrollerekkel rendelkező különböző GSM projektjeinket)
Rezgésérzékelő modul
Ebben az MSP430 Balesetriasztási rendszer projektben rezgésérzékelő modult használtunk, amely érzékeli a rezgéseket vagy a hirtelen modulációkat. A rezgésérzékelő modul digitális kimeneti HIGH / LOW logikát ad a modultól függően. Esetünkben aktív HIGH logikai rezgésérzékelő modult használtunk. Ez azt jelenti, hogy amikor a rezgésérzékelő érzékeli a rezgést, HIGH logikát ad a mikrovezérlőnek.
Áramkör magyarázat
A járműbaleset-riasztási rendszer projektjének áramköri csatlakozásai egyszerűek. Itt a GPS-modul Tx-csatlakozója közvetlenül csatlakozik az MSP430 Launchpad (hardver soros) P1_1 digitális PIN-kódjához, az 5v pedig a GPS-modul táplálására szolgál. A Software Serial Library itt történő használatával lehetővé tettük a soros kommunikációt a P_6 és P1_7 érintkezőkön, és Rx-ként, illetve Tx-kké tettük őket, és csatlakoztattuk a GSM modulhoz. 12 voltos tápegységet használnak a GSM modul táplálásához. A rezgés érzékelő van csatlakoztatva P1_3. A baleset felderítésére LED-et is használnak. A többi csatlakozást a kapcsolási rajz mutatja.
Programozási magyarázat
A projekt programozása a GPS rész kivételével egyszerű. A teljes kódot a projekt végén adjuk meg. A kód MSP430-ba történő írásához vagy fordításához az Arduino kompatibilis Energia IDE-t használtuk. Az Arduino IDE funkció nagy része közvetlenül használható ebben az Energia IDE-ben.
Tehát először is felvettünk egy szükséges könyvtárat, és deklaráltuk a pin-t és a változókat.
#include
Az adott funkció a rezgésérzékelő jelének kiolvasására szolgál. Ez a funkció kiszűri a kicsi vagy hamis rezgéseket is.
#define count_max 25 char SensorRead (int PIN) // olvasási sw a pergésmentesítési { char count_low = 0, count_high = 0; do { késés (1); if (digitalRead (pin) == HIGH) { count_high ++; count_low = 0; } else { count_high = 0; count_low ++; } } while (count_low <count_max && count_high <count_max); if (count_low> = count_max) visszatér LOW; különben HIGH visszatér; }
Az alábbi funkció érzékeli a rázkódást és hívja a gpsEvent () funkciót, hogy megkapja a GPS koordinátát, és végül felhívja a Send () funkciót SMS küldéséhez.
void loop () { if (SensorRead (vibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Küld(); digitalWrite (led, LOW); késés (2000); } }
A Given Function felelős azért, hogy GPS sztringeket kapjon a GPS modulból, kivonja belőlük a koordinátákat, és konvertálja őket fok-tizedes formátumban.
void gpsEvent () { char gpsString; char teszt = "RMC"; i = 0; while (1) { while (Serial.available ()) // Soros adatok a GPS-től { char inChar = (char) Serial.read (); gpsString = inChar; // tárolja az érkező adatokat a GPS-ből az str i ++ karakterláncba ; if (i <4) { if (gpsString! = teszt) // ellenőrizze az i = 0 megfelelő karakterláncot ; }
int fok = 0; fok = gpsString-48; fok * = 10; fok + = gpsString-48; int minut_int = 0; minut_int = gpsString-48; minut_int * = 10; minut_int + = gpsString-48; int perc_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; szélesség = ((úszó) fok + perc);
Végül a Send () függvény segítségével az SMS elküldésre kerül a kód ezen részébe beillesztett felhasználói számra.
void Send () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // írja be mobilszámát GSM.println ('"'); késés (500); // GSM.print ("Szélesség:"); // GSM.println (szélesség); GSM.println ("Baleset történt"); késés (500); // GSM.print ("hosszúság:"); // GSM.println (logitude); GSM.println ("Kattintson a linkre a hely megtekintéséhez"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (szélesség, 6); GSM.print ("+"); GSM.print (logitude, 6); GSM.írás (26); késés (4000); }
A teljes kód és a bemutató videó az alábbiakban található, a kód összes funkcióját ellenőrizheti.