- Vaaditut komponentit:
- GPS-moduuli ja sen toiminta:
- GSM-moduuli:
- Kiihtyvyysanturi:
- Piirin selitys:
- Työselitys:
- Ohjelmoinnin selitys:
Aikaisemmissa opetusohjelmissamme olemme oppineet GPS-moduulin liittämisestä tietokoneeseen, Arduino GPS -kellon rakentamisesta ja ajoneuvon seuraamisesta GSM: n ja GPS: n avulla. Tässä projektissa aiomme rakentaa Arduino-pohjaisen ajoneuvon onnettomuuksien hälytysjärjestelmän, jossa on GPS, GSM ja kiihtyvyysanturi. Kiihtyvyysanturi havaitsee ajoneuvon akselien äkillisen muutoksen ja GSM-moduuli lähettää matkapuhelimeesi hälytysviestin, jossa on onnettomuuden sijainti. Onnettomuuspaikka lähetetään Google Map -linkkinä, joka johdetaan GPS-moduulin leveys- ja pituusasteista. Viesti sisältää myös ajoneuvon nopeuden solmuina. Katso esittelyvideolopussa. Tätä ajoneuvon onnettomuuksien hälytysprojektia voidaan käyttää myös seurantajärjestelmänä ja paljon muuta tekemällä vain vähän muutoksia laitteistoihin ja ohjelmistoihin.
Vaaditut komponentit:
- Arduino Uno
- GSM-moduuli (SIM900A)
- GPS-moduuli (SIM28ML)
- Kiihtyvyysanturi (ADXL335)
- 16x2 LCD
- Virtalähde
- Johtojen liittäminen
- 10 K-POT
- Leipälauta tai piirilevy
- Virtalähde 12v 1amp
Ennen projektin aloittamista keskustelemme GPS: stä, GSM: stä ja kiihtyvyysmittarista.
GPS-moduuli ja sen toiminta:
GPS tarkoittaa globaalia paikannusjärjestelmää, ja sitä käytetään minkä tahansa maan sijainnin leveys- ja pituuspiirin tunnistamiseen tarkalla UTC-ajalla (Universal Time Coordinated). GPS-moduulia käytetään seuraamaan onnettomuuden sijaintia projektissamme. Tämä laite vastaanottaa satelliitilta jokaisen sekunnin koordinaatit, kellonajan ja päivämäärän. Olemme aiemmin poimineet $ GPGGA- merkkijonon ajoneuvojen seurantajärjestelmästä etsimään leveys- ja pituuskoordinaatit.
GPS-moduuli lähettää seurantapaikkaan liittyvät tiedot reaaliajassa, ja se lähettää niin paljon tietoja NMEA-muodossa (katso alla oleva kuvakaappaus). NMEA-muoto koostuu useista lauseista, joissa tarvitsemme vain yhden lauseen. Tämä lause alkaa $ GPGGA: sta ja sisältää koordinaatit, ajan ja muuta hyödyllistä tietoa. Tätä GPGGA: ta kutsutaan globaalin paikannusjärjestelmän korjaustiedoksi. Lisätietoja NMEA-lauseista ja GPS-tietojen lukemisesta täältä.
Voimme poimia koordinaatin $ GPGGA-merkkijonosta laskemalla merkkijonossa olevat pilkut. Oletetaan, että löydät $ GPGGA-merkkijonon ja tallennat sen matriisiin, niin Latitude löytyy kahden pilkun jälkeen ja Longitude neljän pilkun jälkeen. Nyt tämä leveys- ja pituusaste voidaan laittaa muihin matriiseihin.
Alla on $ GPGGA- merkkijono ja sen kuvaus:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0,9510,4, M, 43,9, M,, * 47 $ GPGGA, HHMMSS.SSS, leveysaste, N, pituusaste, E, FQ, NOS, HDP, korkeus, M, korkeus, M, tarkistussummatiedot
Tunniste |
Kuvaus |
$ GPGGA |
Globaalin paikannusjärjestelmän korjaustiedot |
HHMMSS.SSS |
Aika tunnissa sekunteina ja millisekunteina. |
Leveysaste |
Leveysaste (koordinaatti) |
N |
Suunta N = pohjoinen, S = etelä |
Pituusaste |
Pituusaste (koordinaatti) |
E |
Suunta E = itä, W = länsi |
FQ |
Korjaa laatutiedot |
NOS |
Käytettyjen satelliittien lukumäärä |
HDP |
Tarkkuuden vaakasuora laimennus |
Korkeus |
Korkeus (metriä merenpinnan yläpuolella) |
M |
Mittari |
Korkeus |
Korkeus |
Tarkistussumma |
Tarkistussummatiedot |
GSM-moduuli:
SIM900 on täydellinen nelikaistainen GSM / GPRS-moduuli, jonka asiakas tai harrastaja voi helposti upottaa. SIM900 GSM-moduuli tarjoaa alan standardiliitännän. SIM900 tarjoaa GSM / GPRS 850/900/1800/1900 MHz: n suorituskyvyn puhetta, tekstiviestejä ja dataa pienellä virrankulutuksella. Se on helposti saatavilla markkinoilla.
- SIM900 on suunniteltu käyttämällä yhden sirun prosessoria, joka integroi AMR926EJ-S-ytimen
- Nelitaajuinen GSM / GPRS-moduuli pienessä koossa.
- GPRS käytössä
AT-komento:
AT tarkoittaa HUOMIO. Tätä komentoa käytetään GSM-moduulin ohjaamiseen. On joitain komentoja soittamiseen ja viestintään, joita olemme käyttäneet monissa aiemmissa Arduinon GSM-projekteissamme. GSM-moduulin testaamiseen käytimme AT-komentoa. Vastaanotettuaan AT-komento GSM-moduuli vastaa OK. Se tarkoittaa, että GSM-moduuli toimii hyvin. Alla on joitain AT-komentoja, joita käytimme täällä tässä projektissa:
ATE0 Kaiku pois AT + CNMI = 2,2,0,0,0
(Jos haluat lisätietoja GSM-moduulista, tarkista erilaiset GSM-projektit erilaisilla mikrokontrollereilla täältä)
Kiihtyvyysanturi:
Tappi Kiihtyvyysanturin kuvaus:
- Vcc 5 voltin syöttö tulisi liittää tähän tapiin.
- X-OUT Tämä tappi antaa analogisen lähdön x-suuntaan
- Y-OUT Tämä tappi antaa analogisen lähdön y-suuntaan
- Z-OUT Tämä tappi antaa analogisen lähdön z-suuntaan
- GND-maa
- ST Tätä tapia käytetään anturin herkkyyden asettamiseen
Tarkista myös muut projektimme Accelerometer: Ping Pong -pelissä, jossa on Arduino ja Accelerometer Based Hand Gesture Robot.
Piirin selitys:
Tämän ajoneuvon onnettomuuksien hälytysjärjestelmäprojektin piiriliitännät ovat yksinkertaisia. Tässä GPS-moduulin Tx-nasta on kytketty suoraan Arduinon digitaaliseen nastanumeroon 10. Käyttämällä tässä ohjelmistosarjakirjastoa, olemme sallineet sarjaliikenteen nastoissa 10 ja 11, tehneet niistä vastaavasti Rx ja Tx ja jättäneet GPS-moduulin Rx-nastan auki. Oletusarvoisesti Arduinon nastoja 0 ja 1 käytetään sarjaliikenteeseen, mutta käyttämällä SoftwareSerial-kirjastoa voimme sallia sarjaliikenteen muilla Arduinon digitaalisilla nastoilla. 12 voltin syöttöä käytetään GPS-moduulin virtalähteeseen.
GSM-moduulin Tx- ja Rx-nastat on kytketty suoraan Arduinon napoihin D2 ja D3. GSM-rajapinnoille tässä on käytetty myös ohjelmistojen sarjakirjastoa. GSM-moduuli toimii myös 12 V: n virtalähteellä. Lisävarusteena saatavan nestekidenäytön datanastat D4, D5, D6 ja D7 on kytketty Arduinon nastoihin 6, 7, 8 ja 9. LCD-näytön komentotappi RS ja EN on kytketty Arduinon tapiin numeroihin 4 ja 5 ja RW-nasta on kytketty suoraan maahan. Potentiometriä käytetään myös nestekidenäytön kontrastin tai kirkkauden asettamiseen.
Kiihtyvyysmittari lisätään tässä järjestelmässä onnettomuuden detektoimiseksi ja sen x, y, ja z-akselin ADC ulostulo nastat on kytketty suoraan Arduino ADC pin A1, A2, ja A3.
Työselitys:
Tässä projektissa Arduinoa käytetään koko prosessin ohjaamiseen GPS-vastaanottimella ja GSM-moduulilla. GPS-vastaanotinta käytetään tunnistamaan ajoneuvon koordinaatit, GSM-moduulia käytetään hälytystekstin lähettämiseen koordinaatit ja linkki Google Mapiin. Kiihtyvyysmittaria eli ADXL335 käytetään havaitsemaan minkä tahansa akselin onnettomuus tai äkillinen muutos. Valinnaista 16x2-nestekidenäyttöä käytetään myös tilaviestien tai koordinaattien näyttämiseen. Olemme käyttäneet GPS-moduulia SIM28ML ja GSM-moduulia SIM900A.
Kun olemme valmiita laitteistomme kanssa ohjelmoinnin jälkeen, voimme asentaa sen ajoneuvoon ja käynnistää sen. Nyt kun tapahtuu onnettomuus, auto kallistuu ja kiihtyvyysanturi muuttaa akseliarvojaan. Nämä Arduinon lukemat arvot tarkistavat, tapahtuuko muutosta jossakin akselissa. Jos muutoksia tapahtuu, Arduino lukee koordinaatit purkamalla $ GPGGA-merkkijonon GPS-moduulin tiedoista (GPS toimii yllä selitettynä) ja lähettää tekstiviestin ennalta määritettyyn numeroon poliisille tai ambulanssille tai perheenjäsenelle, jossa on onnettomuuspaikan koordinaatit. Viesti sisältää myös Google Map -linkin onnettomuuspaikkaan, jotta sijaintia voidaan helposti seurata. Kun saamme viestin, meidän tarvitsee vain napsauttaa linkkiä ja ohjaamme Google-kartalle ja voimme nähdä ajoneuvon tarkan sijainnin. Ajoneuvon nopeus, solmuina(1.852 KPH), lähetetään myös tekstiviestinä ja näytetään nestekidenäytössä. Tarkista koko esittelyvideo projektin alapuolelta.
Tässä projektissa voimme asettaa kiihtyvyysmittarin herkkyyden asettamalla koodiin minimi- ja max-arvot.
Tässä esittelyssä on käytetty annettuja arvoja:
#define minVal -50 #define MaxVal 50
Parempien tulosten saavuttamiseksi voit käyttää 200: ta 50: n sijasta tai asettaa haluamasi mukaan.
Ohjelmoinnin selitys:
Täydellinen ohjelma on annettu alla Koodi-osiossa; tässä selitämme sen eri toimintoja lyhyesti.
Ensin olemme sisällyttäneet kaikki vaaditut kirjastot tai otsikkotiedostot ja ilmoittaneet erilaiset muuttujat laskelmia ja tietojen tallentamista varten väliaikaisesti.
Tämän jälkeen olemme luoneet funktion void initModule (String cmd, char * res, int t) alustamaan GSM-moduulin ja tarkistamaan sen vastauksen AT-komennoilla.
void initModule (Merkkijono cmd, char * res, int t) {while (1) {Serial.println (cmd); Sarja1.println (cmd); viive (100); while (Sarja1.käytettävissä ()> 0) {if (Sarja1.tätä (res)) {Sarja.println (res); viive (t); palata; } else {Serial.println ("Virhe"); }} viive (t); }}
Tämän jälkeen, void setup () -toiminnossa, olemme alustaneet laitteiden ja ohjelmistojen sarjaliikenteen, LCD: n, GPS: n, GSM-moduulin ja kiihtyvyysanturin.
void setup () {Sarja1.alku (9600); Sarjan alku (9600); lcd-alku (16,2); lcd.print ("Tapaturmavaroitus"); lcd.setCursor (0,1); lcd.print ("järjestelmä"); viive (2000); lcd.clear ();…………………
Kiihtyvyysanturi kalibrointi tehdään myös setup silmukka. Tässä olemme ottaneet joitain näytteitä ja löytäneet sitten x-akselin, y-akselin ja z-akselin keskiarvot. Ja säilytä ne muuttujassa. Sitten olemme käyttäneet näitä näytearvoja kiihtyvyysmittarin akselin muutosten lukemiseen, kun ajoneuvo kallistuu (onnettomuus).
lcd.print ("kalibrointi"); lcd.setCursor (0,1); lcd.print ("Acceleromiter"); varten (int i = 0; i
Tämän jälkeen void loop () -toiminnossa olemme lukeneet kiihtyvyysanturin akselin arvot ja suorittaneet laskennan poimimaan muutokset kalibroinnissa otettujen näytteiden avulla. Nyt jos muutokset ovat enemmän tai vähemmän kuin määritelty taso, Arduino lähettää viestin ennalta määritettyyn numeroon.
void loop () {int arvo1 = analogRead (x); int-arvo2 = analoginen luku (y); int-arvo3 = analoginen luku (z); int xValue = xsample-value1; int yValue = ysample-value2; int zValue = zsample-arvo3; Sarjaprintti ("x ="); Sarja.println (xValue); Sarjaprintti ("y ="); Serial.println (yValue); Sarjaprintti ("z ="); Serial.println (zValue);…………………
Täällä olemme myös luoneet jonkin muun toiminnon erilaisille pupooseille, kuten void gpsEvent () GPS-koordinaattien saamiseksi, void coordinate2dec () koordinaattien poimimiseksi GPS-merkkijonosta ja niiden muuntamiseksi desimaaliarvoiksi, void show_coordinate () arvojen näyttämiseksi sarjamoduulin kautta ja LCD ja lopuksi tyhjä Send () hälytys-tekstiviestien lähettämiseksi ennalta määritettyyn numeroon.
Täydellinen koodi ja esittelyvideo on annettu alla, voit tarkistaa kaikki koodin toiminnot.