- Szükséges alkatrészek:
- GPS modul és működése:
- GSM modul:
- Gyorsulásmérő:
- Áramkör magyarázat:
- Munka magyarázat:
- Programozási magyarázat:
Korábbi oktatóanyagainkban megtanultuk, hogyan lehet a GPS modult összekapcsolni a számítógéppel, hogyan kell felépíteni egy Arduino GPS órát, és hogyan lehet nyomon követni a járművet a GSM és a GPS segítségével. Ebben a projektben egy Arduino alapú járműbaleseti riasztórendszert fogunk építeni GPS, GSM és gyorsulásmérő segítségével. A gyorsulásmérő érzékeli a jármű tengelyének hirtelen változását, és a GSM modul figyelmeztető üzenetet küld a mobiltelefonjára a baleset helyszínével. A baleset helyét a Google Map link formájában küldjük el, a GPS modul szélességi és hosszúsági fokai alapján. Az üzenet csomókban is tartalmazza a jármű sebességét. Lásd a bemutató videóta végén. Ez a járműbaleset-riasztási projekt nyomkövető rendszerként és még sok minden másként is használható, csak kevés változtatást hajt végre a hardveren és a szoftveren.
Szükséges alkatrészek:
- Arduino Uno
- GSM modul (SIM900A)
- GPS modul (SIM28ML)
- Gyorsulásmérő (ADXL335)
- 16x2 LCD
- Tápegység
- Vezetékek csatlakoztatása
- 10 K-POT
- Kenyérlemez vagy NYÁK
- Tápegység 12v 1amp
Mielőtt belekezdenénk a projektbe, megbeszéljük a GPS-t, a GSM-t és az Accelerometer-t.
GPS modul és működése:
A GPS a globális helymeghatározó rendszert jelenti, és a Föld bármely pontjának szélességi és hosszúsági fokának észlelésére szolgál, pontos UTC idővel (Universal Time Coordinated). A GPS modul segítségével a projektünkben nyomon lehet követni a balesetet. Ez az eszköz másodpercenként megkapja a műhold koordinátáit, az idővel és a dátummal együtt. Korábban kivontuk a $ GPGGA karakterláncot a járműkövető rendszerből a szélességi és hosszúsági koordináták megkeresésére.
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 parancs:
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 visszhang esetén AT + CNMI = 2,2,0,0,0
(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)
Gyorsulásmérő:
Tű a gyorsulásmérő leírása:
- Az 5 voltos Vcc tápnak ennél a csapnál kell csatlakoznia.
- X-OUT Ez a tű analóg kimenetet ad x irányban
- Y-OUT Ez a tű analóg kimenetet ad y irányban
- Z-OUT Ez a csap analóg kimenetet ad z irányban
- GND föld
- ST Ez a tű az érzékelő érzékenységének beállítására szolgál
Ellenőrizze más projektjeinket is az Accelerometer segítségével: Ping Pong Game Arduino és Accelerometer Based Hand Gesture Controlled Robot használatával.
Áramkör magyarázat:
A járműbaleset-riasztási rendszer projektjének áramköri csatlakozásai egyszerűek. Itt a GPS modul Tx tűje közvetlenül csatlakozik az Arduino 10-es számú digitális tűjéhez. A Software Serial Library itt történő használatával engedélyeztük a soros kommunikációt a 10-es és a 11-es tűn, és Rx-ként, illetve Tx-kké tettük őket, és nyitva hagytuk a GPS-modul Rx tűjét. Alapértelmezés szerint az Arduino 0-as és 1-es pinjét használják a soros kommunikációhoz, de a SoftwareSerial könyvtár használatával engedélyezhetjük a soros kommunikációt az Arduino más digitális érintkezõin. 12 voltos tápfeszültséget használ a GPS modul.
A GSM modul Tx és Rx csapjai közvetlenül csatlakoznak az Arduino D2 és D3 csatlakozóihoz. A GSM interfészhez itt szoftveres soros könyvtárat is használtunk. A GSM modult szintén 12 V-os tápfeszültség táplálja. Az opcionális LCD D4, D5, D6 és D7 adatcsapjai az Arduino 6., 7., 8. és 9. tűjéhez vannak csatlakoztatva. Az LCD RS és EN parancscsapjai az Arduino 4. és 5. számú csatlakozóival vannak összekötve, az RW tű pedig közvetlenül a földdel van összekötve. Potenciométert is használnak az LCD kontrasztjának vagy fényerejének beállításához.
Ebben a rendszerben egy gyorsulásmérő van hozzáadva a balesetek észleléséhez, és az x, y és z tengelyű ADC kimeneti csapjai közvetlenül kapcsolódnak az Arduino ADC A1, A2 és A3 csatlakozóihoz.
Munka magyarázat:
Ebben a projektben az Arduino-t arra használják, hogy GPS-vevővel és GSM-modullal vezérelje az egész folyamatot. A GPS vevőt a jármű koordinátáinak felismerésére, a GSM modult a riasztó SMS küldésére használják a koordinátákkal és a Google Map linkjével. Gyorsulásmérő, nevezetesen az ADXL335 bármely tengely balesetének vagy hirtelen változásának észlelésére szolgál. És egy opcionális 16x2 LCD-t is használnak állapotüzenetek vagy koordináták megjelenítésére. Használtuk a SIM28ML GPS modult és a SIM900A GSM modult.
Amikor programozás után készen állunk a hardverünkkel, telepíthetjük a járművünkbe és bekapcsolhatjuk. Most, amikor baleset történik, az autó dől és a gyorsulásmérő megváltoztatja tengelyértékeit. Ezeket az értékeket az Arduino olvassa el, és ellenőrzi, hogy bármilyen tengelyen történik-e változás. Ha bármilyen változás történik, az Arduino kiolvassa a koordinátákat úgy, hogy kivonja a $ GPGGA karakterláncot a GPS modul adataiból (a GPS működését fentebb kifejtettük), és SMS-t küld az előre meghatározott számra a rendőrségnek, a mentőknek vagy a családtagoknak a baleset helyének koordinátáival. Az üzenet tartalmaz egy Google Map linket is a baleset helyszínére, így az könnyen nyomon követhető. Amikor megkapjuk az üzenetet, akkor csak a linkre kell kattintanunk, és átirányítjuk a Google térképre, majd láthatjuk a jármű pontos helyét. A jármű sebessége, csomókban(1,852 KPH), az SMS-ben is elküldik és megjelenik az LCD panelen. Ellenőrizze a teljes bemutató videót a projekt alatt.
Itt, ebben a projektben beállíthatjuk az Accelerometer érzékenységét úgy, hogy a min és max értékeket beírjuk a kódba.
Itt a bemutatóban megadott értékeket használtunk:
#define minVal -50 #define MaxVal 50
De a jobb eredmény érdekében 200 helyett 50-et használhat, vagy beállíthatja az Ön igényei szerint.
Programozási magyarázat:
A teljes program az alábbiakban a Kód szakaszban található; itt röviden ismertetjük különféle funkcióit.
Először belefoglaltuk az összes szükséges könyvtárat vagy fejlécfájlt, és különféle változókat deklaráltunk a számításokhoz és az adatok ideiglenes tárolásához.
Ezek után létrehoztunk egy void initModule (String cmd, char * res, int t) függvényt, hogy inicializáljuk a GSM modult, és az AT parancsokkal ellenőrizzük a válaszát.
void initModule (Karakterlánc cmd, char * res, int t) {while (1) {Soros.println (cmd); Sorozat1.println (cmd); késés (100); while (Sorozat1.elérhető ()> 0) {if (Soros1.talál (res)) {Soros.println (res); késés (t); Visszatérés; } else {Serial.println ("Hiba"); }} késés (t); }}
Ezt követően a void setup () funkcióban inicializáltuk a hardver és szoftver soros kommunikációt, LCD-t, GPS-t, GSM modult és gyorsulásmérőt.
void setup () {Serial1.begin (9600); Serial.begin (9600); lcdbegin (16,2); lcd.print ("Balesetjelzés"); lcd.setCursor (0,1); lcd.print ("Rendszer"); késés (2000); lcd.clear ();…………………
A gyorsulásmérő kalibrálási folyamata szintén a telepítési ciklusban történik. Ebben vettünk néhány mintát, majd megkerestük az x tengely, az y tengely és a z tengely átlagértékeit. És tárolja őket egy változóban. Ezután ezeket a mintaértékeket használtuk a gyorsulásmérő tengelyének változásainak kiolvasására, amikor a jármű megdől (baleset).
lcd.print ("Callibrating"); lcd.setCursor (0,1); lcd.print ("Acceleromiter"); mert (int i = 0; i
Ezt követően a void loop () függvényben kiolvastuk a gyorsulásmérő tengelyének értékeit és elvégeztünk egy számítást a változások kivonására a kalibrálás során vett minták segítségével. Most, ha bármilyen változás többé-kevésbé meghaladja a meghatározott szintet, akkor az Arduino üzenetet küld az előre meghatározott számra.
void loop () {int érték1 = analógRead (x); int értéke2 = analógRead (y); int értéke3 = analógRead (z); int xValue = xsample-value1; int yValue = ysample-value2; int zValue = zsample-value3; Soros nyomtatás ("x ="); Soros.println (xValue); Soros nyomtatás ("y ="); Soros.println (yValue); Soros nyomtatás ("z ="); Soros.println (zValue);…………………
Itt létrehoztunk egy másik funkciót is különféle pupózok számára, mint például a void gpsEvent () a GPS koordináták megszerzéséhez, a void coordinate2dec () a koordináták kivonásához a GPS karakterláncból és decimális értékekké alakításához , void show_coordinate () az értékek soros monitoron történő megjelenítéséhez és LCD, és végül az érvénytelen Send () , amely riasztási SMS küldésére az előre meghatározott számra.
A teljes kód és a bemutató videó az alábbiakban található, a kód összes funkcióját ellenőrizheti.