- Požadované komponenty:
- GPS modul a jeho fungovanie:
- GSM modul:
- Akcelerometer:
- Vysvetlenie obvodu:
- Pracovné vysvetlenie:
- Vysvetlenie programovania:
V našich predchádzajúcich tutoriáloch sme sa dozvedeli, ako prepojiť GPS modul s počítačom, ako zostaviť Arduino GPS hodiny a ako sledovať vozidlo pomocou GSM a GPS. Tu v tomto projekte postavíme systém varovania pred nehodami vozidla založený na Arduine pomocou GPS, GSM a akcelerometra. Akcelerometer detekuje náhlu zmenu osí vozidla a GSM modul odošle varovnú správu na váš mobilný telefón s miestom nehody. Miesto nehody sa odosiela vo forme odkazu na Google Mapu, odvodeného od zemepisnej šírky a dĺžky od modulu GPS. Správa obsahuje aj rýchlosť vozidla v uzloch. Pozrite si ukážkové videonakoniec. Tento projekt výstrahy o nehode vozidla možno použiť aj ako sledovací systém a oveľa viac, stačí vykonať niekoľko zmien v hardvéri a softvéri.
Požadované komponenty:
- Arduino Uno
- GSM modul (SIM900A)
- GPS modul (SIM28ML)
- Akcelerometer (ADXL335)
- 16x2 LCD
- Zdroj
- Pripojenie drôtov
- 10 K-POT
- Nepájivá doska alebo doska s plošnými spojmi
- Napájanie 12v 1amp
Pred vstupom do projektu si povieme niečo o GPS, GSM a akcelerometri.
GPS modul a jeho fungovanie:
GPS je skratka pre Global Positioning System (Globálny pozičný systém) a používa sa na zisťovanie zemepisnej šírky a dĺžky ktoréhokoľvek miesta na Zemi s presným časom UTC (Universal Time Coordinated). GPS modul slúži na sledovanie polohy nehody v našom projekte. Toto zariadenie prijíma súradnice zo satelitu každú sekundu s časom a dátumom. Predtým sme v systéme na sledovanie vozidiel extrahovali reťazec $ GPGGA, aby sme našli súradnice zemepisnej šírky a dĺžky.
GPS modul odosiela údaje týkajúce sa polohy sledovania v reálnom čase a zasiela toľko údajov vo formáte NMEA (pozri snímku obrazovky nižšie). Formát NMEA pozostáva z niekoľkých viet, v ktorých nám stačí iba jedna veta. Táto veta začína od $ GPGGA a obsahuje súradnice, čas a ďalšie užitočné informácie. Toto GPGGA sa označuje ako opravné údaje globálneho pozičného systému. Viac informácií o vetách NMEA a čítaní údajov GPS nájdete tu.
Môžeme extrahovať súradnice z reťazca $ GPGGA počítaním čiarok v reťazci. Predpokladajme, že nájdete reťazec $ GPGGA a uložíte ho do poľa, potom Latitude nájdete po dvoch čiarkach a Longitude nájdete po štyroch čiarkach. Túto zemepisnú šírku a dĺžku je teraz možné vložiť do iných polí.
Ďalej je uvedený reťazec $ GPGGA spolu s jeho popisom:
$ GPGGA, 104534 000 7791,0381, N, 06727,4434, E, 1,08,0,9 510,4, M, 43,9, M,, * 47 $ GPGGA, HHMMSS.SSS, zemepisná šírka, N, zemepisná dĺžka, E, FQ, NOS, HDP, nadmorská výška, M, výška, M,, údaje kontrolného súčtu
Identifikátor |
Popis |
$ GPGGA |
Údaje o opravách globálneho pozičného systému |
HHMMSS.SSS |
Čas v hodinách, minútach a sekundách a milisekundách. |
Zemepisná šírka |
Zemepisná šírka (súradnice) |
N |
Smer N = sever, S = juh |
Zemepisná dĺžka |
Zemepisná dĺžka (súradnice) |
E |
Smer E = východ, Z = západ |
FQ |
Opravte údaje o kvalite |
NOS |
Počet použitých satelitov |
HDP |
Horizontálne riedenie presnosti |
Nadmorská výška |
Nadmorská výška (metre nad morom) |
M |
Merač |
Výška |
Výška |
Kontrolný súčet |
Údaje kontrolného súčtu |
GSM modul:
SIM900 je kompletný štvorpásmový modul GSM / GPRS, ktorý môže byť ľahko zabudovaný zákazníkom alebo fandom. SIM900 GSM modul poskytuje priemyselne štandardné rozhranie. SIM900 poskytuje GSM / GPRS 850/900/1800 / 1900MHz výkon pre hlas, SMS, dáta s nízkou spotrebou energie. Je ľahko dostupný na trhu.
- SIM900 navrhnutý pomocou jednočipového procesora integrujúceho jadro AMR926EJ-S
- Štvorpásmový modul GSM / GPRS v malej veľkosti.
- GPRS povolené
Príkaz AT:
AT znamená POZOR. Tento príkaz sa používa na ovládanie GSM modulu. Existuje niekoľko príkazov na volanie a zasielanie správ, ktoré sme použili v mnohých našich predchádzajúcich projektoch GSM s Arduinom. Na testovanie GSM modulu sme použili príkaz AT. Po prijatí AT príkazu GSM modul odpovedzte OK. To znamená, že modul GSM funguje dobre. Ďalej uvádzame niektoré AT príkazy, ktoré sme tu použili v tomto projekte:
ATE0 Pre echo off AT + CNMI = 2,2,0,0,0
(Ak sa chcete dozvedieť viac informácií o module GSM, pozrite si naše rôzne projekty GSM s rôznymi mikrokontrolérmi tu).
Akcelerometer:
Pin Popis akcelerometra:
- Na tomto kolíku by sa malo pripájať 5 voltové napájanie Vcc.
- X-OUT Tento pin poskytuje analógový výstup v smere x
- Y-OUT Tento pin poskytuje analógový výstup v smere y
- Z-OUT Tento pin poskytuje analógový výstup v smere z
- GND zem
- ST Tento pin slúži na nastavenie citlivosti snímača
Skontrolujte tiež naše ďalšie projekty pomocou programu Accelerometer: Ping Pong Game pomocou Arduina a robota riadeného gestami na základe akcelerometra.
Vysvetlenie obvodu:
Pripojenie k obvodu tohto projektu výstražného systému nehôd vozidla je jednoduché. Tu je pin Tx GPS modulu priamo pripojený k digitálnemu kolíku číslo 10 Arduina. Použitím softvérovej sériovej knižnice tu sme povolili sériovú komunikáciu na pinoch 10 a 11, vytvorili sme ich Rx a Tx a ponechali sme pin Rx modulu GPS otvorený. Štandardne sa pre sériovú komunikáciu používajú pin 0 a 1 Arduina, ale pomocou knižnice SoftwareSerial môžeme povoliť sériovú komunikáciu na iných digitálnych kolíkoch Arduina. Na napájanie modulu GPS sa používa 12 voltové napájanie.
Kolíky Tx a Rx GSM modulu sú priamo pripojené k pinom D2 a D3 na Arduine. Pre rozhranie GSM sme tu tiež použili softvérovú sériovú knižnicu. GSM modul je tiež napájaný z 12V zdroja. Voliteľného LCD je dátové piny D4, D5, D6 a D7 sú napojené na pin číslo 6, 7, 8, a 9 Arduino. Príkazový pin RS a EN na LCD displeji sú spojené s pinmi číslo 4 a 5 Arduino a RW pin je priamo spojený so zemou. Potenciometer sa tiež používa na nastavenie kontrastu alebo jasu LCD.
Akcelerometer je pridaný v tomto systéme pre detekciu nehodu a jeho x, y, a z-osi ADC výstupné piny sú pripojené priamo k Arduino ADC pin A1, A2, a A3.
Pracovné vysvetlenie:
V tomto projekte sa Arduino používa na riadenie celého procesu pomocou prijímača GPS a modulu GSM. GPS prijímač slúži na zisťovanie súradníc vozidla, GSM modul na zasielanie výstražných SMS so súradnicami a odkazom na Google Map. Akcelerometer, menovite ADXL335, sa používa na zisťovanie nehôd alebo náhlych zmien v ktorejkoľvek osi. A voliteľný 16x2 LCD sa tiež používa na zobrazovanie stavových správ alebo súradníc. Použili sme GPS modul SIM28ML a GSM modul SIM900A.
Keď sme po programovaní pripravení na hardvér, môžeme ho nainštalovať do nášho vozidla a zapnúť ho. Teraz sa kedykoľvek pri nehode auto nakloní a akcelerometer zmení hodnoty svojej osi. Tieto hodnoty načítava Arduino a kontroluje, či dôjde k zmene v ktorejkoľvek osi. Ak dôjde k akejkoľvek zmene, Arduino načíta súradnice extrahovaním reťazca $ GPGGA z údajov modulu GPS (funkcia GPS je vysvetlená vyššie) a pošle SMS na vopred definované číslo polícii alebo sanitke alebo rodinnému príslušníkovi so súradnicami miesta nehody. Správa obsahuje aj odkaz Google Map na miesto nehody, aby bolo možné miesto ľahko sledovať. Keď dostaneme správu, stačí kliknúť na odkaz a presmerujeme sa na mapu Google. Potom uvidíme presnú polohu vozidla. Rýchlosť vozidla v uzloch(1,852 KPH), sa tiež odošle v SMS správe a zobrazí sa na LCD paneli. Skontrolujte celé ukážkové video pod projektom.
Tu v tomto projekte môžeme nastaviť citlivosť akcelerometra vložením minimálnej a maximálnej hodnoty do kódu.
Tu v ukážke sme použili dané hodnoty:
# definovať minVal -50 # definovať MaxVal 50
Ale pre lepšie výsledky môžete použiť 200 namiesto 50, alebo môžete nastaviť podľa vašich požiadaviek.
Vysvetlenie programovania:
Kompletný program je uvedený nižšie v sekcii Kód; tu v krátkosti vysvetľujeme jeho rôzne funkcie.
Najskôr sme zahrnuli všetky požadované knižnice alebo súbory hlavičiek a deklarovali rôzne premenné pre výpočty a dočasné ukladanie údajov.
Potom sme vytvorili funkciu void initModule (String cmd, char * res, int t) na inicializáciu modulu GSM a kontrolu jeho odozvy pomocou príkazov AT.
void initModule (String cmd, char * res, int t) {while (1) {Serial.println (cmd); Serial1.println (cmd); oneskorenie (100); while (Serial1.available ()> 0) {if (Serial1.find (res)) {Serial.println (res); oneskorenie (t); návrat; } else {Serial.println ("Chyba"); }} oneskorenie (t); }}
Potom sme vo funkcii void setup () inicializovali hardvérovú a softvérovú sériovú komunikáciu, LCD, GPS, GSM modul a akcelerometer.
void setup () {Serial1.begin (9600); Serial.begin (9600); lcd.začiatok (16,2); lcd.print („Nehoda“); lcd.setCursor (0,1); lcd.print ("Systém"); meškanie (2000); lcd.clear ();…………………
Proces kalibrácie akcelerometra sa tiež vykonáva v nastavovacej slučke. V tomto sme odobrali niekoľko vzoriek a potom našli priemerné hodnoty pre os x, os y a os z. A uložte ich do premennej. Potom sme pomocou týchto vzorových hodnôt odčítali zmeny v osi akcelerometra, keď sa vozidlo nakloní (nehoda).
lcd.print ("kalibrácia"); lcd.setCursor (0,1); lcd.print ("Acceleromiter"); pre (int i = 0; i
Potom sme vo funkcii void loop () prečítali hodnoty osí akcelerometra a vykonali výpočet na extrakciu zmien pomocou vzoriek odobratých pri kalibrácii. Ak sú teraz zmeny viac alebo menej definované, potom Arduino odošle správu na preddefinované číslo.
void loop () {int hodnota1 = analogRead (x); int hodnota2 = analogRead (y); int hodnota3 = analogRead (z); int xValue = xsample-value1; int yValue = ysample-hodnota2; int zValue = zsample-value3; Serial.print ("x ="); Serial.println (xValue); Serial.print ("y ="); Serial.println (yValue); Serial.print ("z ="); Serial.println (zValue);…………………
Tu sme tiež vytvorili ďalšiu funkciu pre rôzne pupózy, ako napríklad void gpsEvent () na získanie súradníc GPS, void coordinate2dec () na extrahovanie súradníc z reťazca GPS a ich prevod na desatinné hodnoty, void show_coordinate () na zobrazovanie hodnôt cez sériový monitor a LCD a nakoniec neplatné Send () pre zasielanie výstražných SMS na vopred definované číslo.
Kompletný kód a ukážkové video je uvedené nižšie. Všetky funkcie v kóde môžete skontrolovať.