- Būtini komponentai:
- GPS modulis ir jo veikimas:
- GSM modulis:
- Akselerometras:
- Grandinės paaiškinimas:
- Darbinis paaiškinimas:
- Programavimo paaiškinimas:
Ankstesnėse mūsų pamokose sužinojome apie tai, kaip susieti GPS modulį su kompiuteriu, kaip sukurti „Arduino“ GPS laikrodį ir kaip sekti transporto priemonę naudojant GSM ir GPS. Šiame projekte mes sukursime „ Arduino“ pagrįstą transporto priemonių avarijų perspėjimo sistemą, naudodami GPS, GSM ir akselerometrą. Akselerometras nustato staigų transporto priemonės ašių pasikeitimą, o GSM modulis į jūsų mobilųjį telefoną siunčia įspėjimo pranešimą su avarijos vieta. Nelaimingo atsitikimo vieta siunčiama kaip „Google Map“ nuoroda, gaunama iš GPS modulio platumos ir ilgumos. Pranešime taip pat nurodomas transporto priemonės greitis mazgais. Žiūrėkite demonstracinį vaizdo įrašąpabaigoje. Šis įspėjimas apie transporto priemonių avarijas taip pat gali būti naudojamas kaip sekimo sistema ir daug daugiau, atlikus tik keletą techninės ir programinės įrangos pakeitimų.
Būtini komponentai:
- Arduino Uno
- GSM modulis (SIM900A)
- GPS modulis (SIM28ML)
- Akselerometras (ADXL335)
- 16x2 LCD ekranas
- Maitinimas
- Laidų sujungimas
- 10 K-POT
- Breadboard arba PCB
- Maitinimas 12v 1amp
Prieš eidami į projektą aptarsime GPS, GSM ir akselerometrą.
GPS modulis ir jo veikimas:
GPS reiškia visuotinę padėties nustatymo sistemą ir naudojamas nustatyti bet kurios Žemės vietos platumą ir ilgumą, nurodant tikslų UTC laiką (universalusis laikas koordinuojamas). GPS modulis naudojamas avarijos vietai stebėti mūsų projekte. Šis prietaisas gauna koordinates iš palydovo kiekvienai sekundei, nurodydamas laiką ir datą. Anksčiau mes išskyrėme $ GPGGA eilutę transporto priemonių stebėjimo sistemoje, kad rastume platumos ir ilgumos koordinates.
GPS modulis realiuoju laiku siunčia duomenis, susijusius su stebėjimo padėtimi, ir tiek daug duomenų siunčia NMEA formatu (žr. Toliau pateiktą ekrano kopiją). NMEA formatą sudaro keli sakiniai, kuriuose mums reikia tik vieno sakinio. Šis sakinys prasideda nuo $ GPGGA ir jame yra koordinatės, laikas ir kita naudinga informacija. Ši GPGGA vadinama visuotinės padėties nustatymo sistemos taisymo duomenimis. Sužinokite daugiau apie NMEA sakinius ir GPS duomenų skaitymą čia.
Mes galime išgauti koordinates iš $ GPGGA eilutės skaičiuodami kablelius eilutėje. Tarkime, kad rasite $ GPGGA eilutę ir ją saugote masyve, tada Platumą galima rasti po dviejų kablelių, o Ilgumą - po keturių kablelių. Dabar šią platumą ir ilgumą galima įdėti į kitus masyvus.
Žemiau yra $ GPGGA eilutė kartu su jos aprašymu:
$ GPGGA, 104534.000.7791.0381, N, 06727.4434, E, 1,08,0.9,510,4, M, 43,9, M,, * 47 $ GPGGA, HHMMSS.SSS, platuma, N, ilguma, E, FQ, NOS, HDP, aukštis, M, aukštis, M,, kontrolinės sumos duomenys
Identifikatorius |
apibūdinimas |
$ GPGGA |
Visuotinės padėties nustatymo sistemos pataisų duomenys |
HHMMSS.SSS |
Laikas valandomis minutėmis sekundėmis ir milisekundžių formatu. |
Platuma |
Platuma (koordinatė) |
N |
Kryptis N = šiaurė, S = pietūs |
Ilguma |
Ilguma (koordinatė) |
E |
Kryptis E = rytai, W = vakarai |
FQ |
Pataisykite kokybės duomenis |
NOS |
Naudojamų palydovų skaičius |
HDP |
Horizontalus tikslumo skiedimas |
Aukštis |
Aukštis (metrais virš jūros lygio) |
M |
Skaitiklis |
Aukštis |
Aukštis |
Kontrolinė suma |
Kontrolinės sumos duomenys |
GSM modulis:
SIM900 yra visas keturių juostų GSM / GPRS modulis, kurį galima lengvai įterpti klientui ar mėgėjui. SIM900 GSM modulis suteikia pramonės standarto sąsają. SIM900 teikia GSM / GPRS 850/900/1800 / 1900MHz našumą balso, SMS, duomenų suvartojimui su mažu energijos suvartojimu. Tai lengvai pasiekiama rinkoje.
- SIM900 sukurtas naudojant vienos mikroschemos procesorių, integruojantį AMR926EJ-S šerdį
- Mažo dydžio keturių juostų GSM / GPRS modulis.
- GPRS įjungtas
AT komanda:
AT reiškia DĖMESĮ. Ši komanda naudojama GSM moduliui valdyti. Yra keletas skambučių ir pranešimų komandų, kurias naudojome daugelyje ankstesnių „GSM“ projektų su „Arduino“. Testuodami GSM modulį naudojome komandą AT. Gavę „AT Command“ GSM modulį, atsakykite OK. Tai reiškia, kad GSM modulis veikia gerai. Žemiau yra keletas AT komandų, kurias čia naudojome šiame projekte:
ATE0 echo išjungimui AT + CNMI = 2,2,0,0,0
(Norėdami sužinoti daugiau apie GSM modulį, patikrinkite įvairius mūsų GSM projektus su įvairiais mikrovaldikliais čia)
Akselerometras:
Kaištis Akselerometro aprašymas:
- Prie šio kaiščio turėtų prisijungti 5 V voltų maitinimas.
- X-OUT Šis kaištis suteikia analoginę išvestį x kryptimi
- Y-OUT Šis kaištis suteikia analoginę išvestį y kryptimi
- Z-OUT Šis kaištis suteikia analoginę išvestį z kryptimi
- BND žemė
- ST Šis kaištis naudojamas nustatyti jutiklio jautrumą
Taip pat patikrinkite kitus mūsų projektus naudodami akselerometrą: „Ping Pong“ žaidimą naudodami „Arduino“ ir „Accelerometer Based Hand Gesture Controlled Robot“.
Grandinės paaiškinimas:
Šio transporto priemonės avarijų perspėjimo sistemos projekto grandinės jungtys yra paprastos. Čia GPS modulio Tx kaištis yra tiesiogiai prijungtas prie „Arduino“ skaitmeninio kaiščio numerio 10. Čia naudodami programinės įrangos nuosekliąją biblioteką leidome nuoseklų ryšį 10 ir 11 kaiščiuose, padarėme juos atitinkamai Rx ir Tx, o GPS modulio Rx kaištį palikome atvirą. Pagal numatytuosius nustatymus nuosekliam ryšiui naudojami „Arduino“ kaiščiai 0 ir 1, tačiau naudodami „SoftwareSerial“ biblioteką galime leisti nuoseklųjį ryšį per kitus skaitmeninius „Arduino“ kaiščius. 12 modulių maitinimas naudojamas maitinant GPS modulį.
GSM modulio Tx ir Rx kaiščiai yra tiesiogiai prijungti prie „Arduino“ kaiščių D2 ir D3. GSM sąsajai čia taip pat naudojome programinės įrangos nuosekliąją biblioteką. GSM modulis taip pat maitinamas 12v maitinimo šaltiniu. Prašymu Galimas LCD s duomenų kaiščiai D4, D5, D6, ir D7 yra prijungtas prie pin skaičius 6, 7, 8, 9 ir iš Arduino. LCD komandinis kaištis RS ir EN yra sujungtas su „Arduino“ 4 ir 5 kaiščiais, o „RW“ kaištis yra tiesiogiai sujungtas su žeme. Potenciometras taip pat naudojamas LCD kontrastui ar ryškumui nustatyti.
Pagreičio yra įtraukta į šią sistemą aptikti avarijos ir jos X, Y, ir Z-ašis ADC išėjimo kaiščių yra tiesiogiai prijungtas prie Arduino ADC pin A1, A2, A3 ir.
Darbinis paaiškinimas:
Šiame projekte „Arduino“ naudojamas viso proceso valdymui naudojant GPS imtuvą ir GSM modulį. GPS imtuvas naudojamas transporto priemonės koordinatėms aptikti, GSM modulis naudojamas siųsti įspėjimo SMS su koordinatėmis ir nuoroda į „Google Map“. Akselerometras, būtent ADXL335, naudojamas avarijoms ar staigiems bet kurios ašies pokyčiams aptikti. Taip pat pasirenkamas 16x2 skystųjų kristalų ekranas taip pat naudojamas būsenos pranešimams ar koordinatėms rodyti. Mes naudojome GPS modulį SIM28ML ir GSM modulį SIM900A.
Kai būsime pasirengę naudoti aparatinę įrangą po programavimo, galėsime ją įdiegti į savo transporto priemonę ir ją įjungti. Dabar, kai įvyksta avarija, automobilis pakrypsta, o akselerometras keičia savo ašies vertes. Šias „Arduino“ perskaitytas reikšmes patikrina, ar bet kurioje ašyje nepasikeitė. Jei įvyksta kokių nors pokyčių, „Arduino“ nuskaito koordinates iš GPS modulio duomenų ištraukdama $ GPGGA eilutę (GPS veikia aukščiau) ir policijai, greitosios pagalbos automobiliui ar šeimos nariui siunčia SMS žinutę iš anksto nustatytu numeriu su avarijos vietos koordinatėmis. Pranešime taip pat yra „Google Map“ nuoroda į avarijos vietą, kad tą vietą būtų galima lengvai atsekti. Kai gausime pranešimą, mums tereikės spustelėti nuorodą ir mes nukreipsime į „Google“ žemėlapį, tada galėsime pamatyti tikslią transporto priemonės vietą. Transporto priemonės greitis mazgais(1.852 KPH), taip pat siunčiama SMS žinute ir rodoma LCD skydelyje. Patikrinkite visą demonstracinį vaizdo įrašą žemiau projekto.
Šiame projekte galime nustatyti akcelerometro jautrumą, į kodą įvesdami min ir max vertes.
Čia demonstracijoje buvo naudojamos nurodytos vertės:
#define minVal -50 #define MaxVal 50
Tačiau norint pasiekti geresnių rezultatų, galite naudoti 200 vietoj 50 arba nustatyti pagal savo reikalavimus.
Programavimo paaiškinimas:
Užbaigta programa buvo pateikta toliau skyriuje Kodas; čia mes trumpai paaiškiname įvairias jo funkcijas.
Pirmiausia įtraukėme visas reikalingas bibliotekų ar antraščių failus ir deklaravome įvairius kintamuosius skaičiavimams ir laikinam duomenų saugojimui.
Po to mes sukūrėme funkciją void initModule (String cmd, char * res, int t), kad inicijuotume GSM modulį ir patikrintume jo atsakymą naudojant AT komandas.
void initModule (String cmd, char * res, int t) {while (1) {Serial.println (cmd); Serial1.println (cmd); vėlavimas (100); while (Serial1.available ()> 0) {if (Serial1.find (res)) {Serial.println (res); vėlavimas (t); grįžti; } else {Serial.println ("Klaida"); }} vėlavimas (t); }}
Po to, esant negaliojančios sąrankos () funkcijai, pradėjome aparatinės ir programinės įrangos nuoseklųjį ryšį, LCD, GPS, GSM modulį ir akselerometrą.
negaliojanti sąranka () {Serial1.begin (9600); Serijos pradžia (9600); lcd.prade (16,2); lcd.print („Įspėjimas apie avariją“); lcd.setCursor (0,1); lcd.print („sistema“); vėlavimas (2000); lcd.clear ();…………………
Akselerometro kalibravimo procesas taip pat atliekamas sąrankos cikle. Tai atlikę mes paėmėme keletą pavyzdžių ir suradome x ašies, y ašies ir z ašies vidutines vertes. Ir laikykite juos kintamajame. Tada mes panaudojome šias imties reikšmes, kad nuskaitytume akselerometro ašies pokyčius, kai transporto priemonė pakrypsta (avarija).
lcd.print („kalibravimas“); lcd.setCursor (0,1); lcd.print („Acceleromiter“); už (int i = 0; i
Po to, funkcijoje void loop () , mes perskaitėme akselerometro ašies vertes ir atlikome skaičiavimą, kad išgautume pokyčius naudojant kalibravimo mėginius. Dabar, jei pakeitimai yra daugiau ar mažiau nei apibrėžtas lygis, „Arduino“ siunčia pranešimą iš anksto nustatytu numeriu.
void loop () {int reikšmė1 = analogRead (x); int reikšmė2 = analogasRead (y); int reikšmė3 = analogasRead (z); int xValue = xsample-value1; int yValue = ysample-value2; int zValue = zsample-value3; Serijinis.atspausdinti ("x ="); Serial.println (xValue); Serijinis spaudinys ("y ="); Serial.println (yValue); Serijinis atspaudas ("z ="); Serial.println (zValue);…………………
Čia taip pat sukūrėme dar vieną funkciją įvairioms mokiniams, pvz., Void gpsEvent (), kad gautume GPS koordinates, void coordinate2dec () , kad gautumėte koordinates iš GPS eilutės ir paverstumėte jas dešimtainėmis reikšmėmis, void show_coordinate () reikšmėms rodyti per nuoseklųjį monitorių ir Skystųjų kristalų ekranas ir galiausiai negaliojantis „Send“ ( siuntimas) įspėjimo SMS siuntimui iš anksto nustatytu numeriu.
Pilnas kodas ir demonstracinis vaizdo įrašas pateikiami žemiau, galite patikrinti visas kodo funkcijas.