- Potrebne komponente:
- GPS modul in njegovo delovanje:
- GSM modul:
- Merilec pospeška:
- Pojasnilo vezja:
- Delovna razlaga:
- Pojasnilo programiranja:
V naših prejšnjih vadnicah smo se naučili, kako povezati GPS modul z računalnikom, kako zgraditi Arduino GPS Clock in kako slediti vozilu z uporabo GSM in GPS. Tu v tem projektu bomo zgradili sistem za opozarjanje na nesreče na osnovi Arduina z uporabo GPS, GSM in merilnika pospeška. Merilec pospeška zazna nenadno spremembo osi vozila, GSM modul pa na vaš mobilni telefon pošlje opozorilno sporočilo z lokacijo nesreče. Lokacija nesreče se pošlje v obliki povezave Google Map, ki izhaja iz zemljepisne širine in dolžine iz modula GPS. Sporočilo vsebuje tudi hitrost vozila v vozlih. Oglejte si predstavitveni videona koncu. Ta projekt opozarjanja na prometne nesreče se lahko uporablja tudi kot sistem za sledenje in še veliko več, tako da le malo spremeni strojno in programsko opremo.
Potrebne komponente:
- Arduino Uno
- GSM modul (SIM900A)
- GPS modul (SIM28ML)
- Merilec pospeška (ADXL335)
- 16x2 LCD
- Napajanje
- Povezovanje žic
- 10 K-POT
- Breadboard ali PCB
- Napajanje 12v 1amp
Preden začnemo s projektom, se bomo pogovorili o GPS, GSM in merilniku pospeška.
GPS modul in njegovo delovanje:
GPS pomeni sistem za globalno določanje položaja in se uporablja za zaznavanje zemljepisne širine in dolžine katere koli lokacije na Zemlji s točno določenim UTC časom (univerzalni koordinirani čas). Modul GPS se uporablja za sledenje lokacije nesreče v našem projektu. Ta naprava prejme koordinate s satelita vsako sekundo s časom in datumom. Pred tem smo v sistem za sledenje vozil izvlekli niz $ GPGGA, da smo našli koordinate zemljepisne širine in dolžine.
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
Ukaz 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
(Če želite izvedeti več o modulu GSM, tukaj preglejte naše različne projekte GSM z različnimi mikrokrmilniki)
Merilec pospeška:
Pin Opis merilnika pospeška:
- Na tem zatiču se mora priključiti napajalnik Vcc 5 voltov.
- X-OUT Ta zatič daje analogni izhod v smeri x
- Y-OUT Ta zatič daje analogni izhod v smeri y
- Z-OUT Ta zatič daje analogni izhod v smeri z
- GND Ground
- ST Ta zatič se uporablja za nastavitev občutljivosti senzorja
Preverite tudi druge naše projekte z uporabo merilnika pospeška: Ping Pong z uporabo ročnega krmiljenega robota, ki temelji na Arduinu in pospešku.
Pojasnilo vezja:
Krožne povezave tega projekta sistema za opozarjanje na nesreče v vozilu so preproste. Tu je Tx pin modula GPS neposredno povezan z digitalnim pinom 10 Arduino. Z uporabo programske serijske knjižnice tukaj smo dovolili serijsko komunikacijo na pin 10 in 11 ter jih naredili Rx oziroma Tx ter pustili Rx pin modula GPS odprt. Privzeto se za zaporedno komunikacijo uporabljata pin 0 in 1 Arduina, z uporabo knjižnice SoftwareSerial pa lahko omogočimo serijsko komunikacijo na drugih digitalnih nožicah Arduina. Za napajanje modula GPS se uporablja 12-voltno napajanje.
Zatiči Tx in Rx modula GSM so neposredno povezani na zatiča D2 in D3 Arduina. Za povezavo GSM smo tukaj uporabili tudi serijsko knjižnico programske opreme. GSM modul se napaja tudi z 12v napajanjem. An neobvezno LCD zaslon za podatkovne zatiči D4, D5, D6 in D7 so priključeni na pin številko 6, 7, 8 in 9 Arduino. Ukazni pin RS in EN LCD-ja sta povezana s številkama 4 in 5 Arduino, RW-pin pa je neposredno povezan z ozemljitvijo. Potenciometer se uporablja tudi za nastavitev kontrasta ali svetlosti LCD.
V ta sistem je dodan merilnik pospeška za odkrivanje nesreče, njegovi izhodni zatiči ADC osi x, y in z pa so neposredno povezani z zatiči Arduino ADC A1, A2 in A3.
Delovna razlaga:
V tem projektu se Arduino uporablja za nadzor celotnega procesa s sprejemnikom GPS in modulom GSM. GPS sprejemnik se uporablja za zaznavanje koordinat vozila, GSM modul pa pošiljanje opozorilnega SMS s koordinatami in povezavo do Google Map. Merilec pospeška, in sicer ADXL335, se uporablja za odkrivanje nesreč ali nenadnih sprememb katere koli osi. Dodatni LCD 16x2 se uporablja tudi za prikaz sporočil o stanju ali koordinat. Uporabili smo GPS modul SIM28ML in GSM modul SIM900A.
Ko smo po programiranju pripravljeni na našo strojno opremo, jo lahko namestimo v svoje vozilo in vključimo. Zdaj, ko pride do nesreče, se avto nagne in merilnik pospeška spremeni svoje osi. Te vrednosti prebere Arduino in preveri, ali se na kateri koli osi zgodi kakšna sprememba. Če pride do kakršne koli spremembe, Arduino prebere koordinate tako, da iz podatkov modula GPS izvleče niz $ GPGGA (GPS je razložen zgoraj) in pošlje SMS na vnaprej določeno številko policiji ali reševalcu ali družinskemu članu z lokacijskimi koordinatami kraja nesreče. Sporočilo vsebuje tudi povezavo do zemljevida Google do mesta nesreče, tako da je lokaciji mogoče enostavno slediti. Ko prejmemo sporočilo, moramo samo klikniti povezavo in preusmerili se bomo na Googleov zemljevid, nato pa bomo videli natančno lokacijo vozila. Hitrost vozila, v vozlih(1,852 KPH), se pošlje tudi v sporočilu SMS in prikaže na LCD zaslonu. Oglejte si celoten predstavitveni video pod projektom.
V tem projektu lahko nastavimo občutljivost merilnika pospeška, tako da v kodo vnesemo najmanjšo in največjo vrednost.
Tu v predstavitvi so uporabljene dane vrednosti:
#define minVal -50 #define MaxVal 50
Za boljše rezultate lahko uporabite 200 namesto 50 ali pa jih nastavite glede na vaše zahteve.
Pojasnilo programiranja:
Celoten program je naveden spodaj v odseku kode; tukaj na kratko razlagamo njegove različne funkcije.
Najprej smo vključili vse potrebne knjižnice ali datoteke glav in razglasili različne spremenljivke za izračune in shranjevanje podatkov začasno.
Po tem smo ustvarili funkcijo void initModule (String cmd, char * res, int t) za inicializacijo modula GSM in preverjanje njegovega odziva z ukazi AT.
void initModule (String cmd, char * res, int t) {while (1) {Serial.println (cmd); Serial1.println (cmd); zamuda (100); medtem ko (Serial1.available ()> 0) {if (Serial1.find (res)) {Serial.println (res); zamuda (t); vrnitev; } else {Serial.println ("Napaka"); }} zamuda (t); }}
Po tem smo v funkciji void setup () inicializirali serijsko komunikacijo strojne in programske opreme, LCD, GPS, modul GSM in merilnik pospeška.
void setup () {Serial1.begin (9600); Serial.begin (9600); lcd.begin (16,2); lcd.print ("Opozorilo o nesreči"); lcd.setCursor (0,1); lcd.print ("Sistem"); zamuda (2000); lcd.clear ();…………………
Postopek umerjanja merilnika pospeška se izvaja tudi v nastavitveni zanki. Pri tem smo vzeli nekaj vzorcev in nato našli povprečne vrednosti za os x, os y in z. In jih shranite v spremenljivko. Nato smo s temi vzorčnimi vrednostmi odčitali spremembe osi pospeška, ko se vozilo nagne (nesreča).
lcd.print ("Umerjanje"); lcd.setCursor (0,1); lcd.print ("Acceleromiter"); za (int i = 0; i
Po tem smo v funkciji void loop () prebrali vrednosti osi merilnika pospeška in naredili izračun za pridobivanje sprememb s pomočjo vzorcev, odvzetih v umerjanju. Če so kakršne koli spremembe bolj ali manj določene, Arduino pošlje sporočilo na vnaprej določeno številko.
void loop () {int value1 = analogRead (x); int value2 = analogRead (y); int vrednost3 = analogRead (z); int xValue = xsample-value1; int yValue = ysample-value2; int zValue = zsample-value3; Serial.print ("x ="); Serial.println (xValue); Serial.print ("y ="); Serial.println (yValue); Serial.print ("z ="); Serial.println (zValue);…………………
Tu smo ustvarili tudi nekaj drugih funkcij za različne cilje, kot je void gpsEvent (), da dobimo GPS koordinate, void coordinate2dec () za pridobivanje koordinat iz niza GPS in njihovo pretvorbo v decimalne vrednosti, void show_coordinate () za prikaz vrednosti preko serijskega monitorja in LCD in na koncu neveljavno Send () za pošiljanje opozorilnih sporočil SMS na vnaprej določeno številko.
Spodaj je navedena celotna koda in predstavitveni video, lahko preverite vse funkcije v kodi.