Aikaisemmissa opetusohjelmissa olemme oppineet GPS-moduulin liittämisestä tietokoneeseen ja ajoneuvon jäljittämiseen GSM: n ja GPS: n avulla. Rakensimme myös ajoneuvojen onnettomuuksien hälytysjärjestelmän Arduinolla ja kiihtyvyysmittarilla. Täällä rakennamme jälleen samaa projektia, mutta tällä kertaa MSP430-laukaisinta ja tärinäanturia käytetään ajoneuvon onnettomuuksien havaitsemiseen. Joten tämä projekti kertoo myös värähtelyanturin liittämisestä MSP430-käynnistinlaitteeseen. Löydät lisää MSP430-projekteja täältä.
Tärinäanturimoduuli havaitsee ajoneuvon tärinän ja lähettää signaalin MSP430 Launchpadille. Sitten MSP430 hakee tietoja GPS-moduulista ja lähettää sen matkapuhelimen käyttäjälle tekstiviestillä GSM-moduulin avulla. LED palaa myös onnettomuushälytyssignaalina, tämä LED voidaan korvata jollakin hälytyksellä. Onnettomuuden sijainti lähetetään Google Map -linkkinä, joka johdetaan GPS-moduulin leveys- ja pituusasteista. Katso esittelyvideo lopussa.
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-komennot
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 päältä
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = ”Matkapuhelinnumero”
>> Nyt voimme kirjoittaa viestimme
>> Viestin kirjoittamisen jälkeen
Ctrl + Z lähettää viestikomennon (26 desimaalilla).
ENTER = 0x0d HEX: ssä
(Jos haluat lisätietoja GSM-moduulista, tarkista erilaiset GSM-projektit erilaisilla mikrokontrollereilla täältä)
Tärinäanturimoduuli
Tässä MSP430 Onnettomuuksien hälytysjärjestelmä -projektissa olemme käyttäneet värähtelyanturimoduulia, joka havaitsee tärinät tai äkilliset moduloinnit. Tärinäanturimoduuli antaa digitaalilähdön HIGH / LOW-logiikan moduulista riippuen. Meidän tapauksessamme olemme käyttäneet aktiivista HIGH-logiikan värähtelyanturimoduulia. Se tarkoittaa, että aina kun tärinäanturi havaitsee tärinän, se antaa KORKEA logiikan mikrokontrollerille.
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 MSP430 Launchpadin (laitteistosarja) digitaaliseen pin-numeroon P1_1 ja 5v: tä käytetään GPS-moduulin virtalähteeseen. Käyttämällä tässä ohjelmistosarjakirjastoa, olemme sallineet sarjaliikenteen pin'illä P_6 ja P1_7 ja tehneet niistä vastaavasti Rx ja Tx ja yhdistetyt GSM-moduuliin. 12 voltin syöttöä käytetään GSM-moduulin virtalähteeseen. Tärinä anturi on kytketty P1_3. LEDiä käytetään myös onnettomuuksien havaitsemiseen. Muut liitännät on esitetty piirikaaviossa.
Ohjelmoinnin selitys
Ohjelmointi tähän projektiin on helppoa paitsi GPS-osa. Täydellinen koodi annetaan projektin lopussa. Koodin kirjoittamiseen tai kääntämiseen MSP430: ssä olemme käyttäneet Energia IDE: tä, joka on Arduino-yhteensopiva. Suurinta osaa Arduino IDE -toiminnosta voidaan käyttää suoraan tässä Energia IDE: ssä.
Joten ensinnäkin olemme sisällyttäneet vaaditut kirjastot ja ilmoittaneet pin ja muuttujat.
#sisältää
Annettua toimintoa käytetään värähtelyanturin signaalin lukemiseen. Tämä toiminto suodattaa myös pienet tai väärät värähtelyt.
#define count_max 25 merkkiä SensorRead (int pin) // lue sw debounce { char count_low = 0, count_high = 0; tee { viive (1); if (digitalRead (tappi) == KORKEA) { count_high ++; count_low = 0; } else { count_high = 0; count_low ++; } } while (count_low <count_max && count_high <count_max); jos (count_low> = count_max) palauttaa LOW; muuten palaa KORKEA; }
Alla oleva toiminto havaitsee tärinän ja soittaa gpsEvent () -toiminnon saadakseen GPS-koordinaatit ja soittamalla lopuksi Lähetä () -toimintoon lähettääksesi tekstiviestejä.
void loop () { if (SensorRead (vibrationSensor) == KORKEA) { digitalWrite (led, HIGH); gpsEvent (); Lähettää(); digitalWrite (led, LOW); viive (2000); } }
Annettu toiminto on vastuussa GPS-merkkijonojen saamisesta GPS-moduulista, poista niistä koordinaatit ja muuntaa ne aste-desimaalimuodossa.
void gpsEvent () { char gpsString; char-testi = "RMC"; i = 0; while (1) { while (Serial.available ()) // Serial incomming data from GPS { char inChar = (char) Serial.read (); gpsString = inChar; // tallenna tulevat tiedot GPS: stä tilapäiseen merkkijonoon str i ++; if (i <4) { if (gpsString! = test) // tarkista oikea merkkijono i = 0; }
int-aste = 0; aste = gpsString-48; aste * = 10; aste + = gpsString-48; int minuutti = 0; minut_int = gpsString-48; minut_int * = 10; minut_int + = gpsString-48; int minuutti_dec = 0; minut_dec + = (gpsString-48) * 10000; minut_dec + = (gpsString-48) * 1000; minut_dec + = (gpsString-48) * 100; minut_dec + = (gpsString-48) * 10; minuutti_dec + = (gpsString-48); float minut = ((float) minut_int + ((float) minut_dec / 100000.0)) / 60.0; leveysaste = ((kelluva) aste + minuutit);
Ja lopuksi Lähetä () -toimintoa käytetään lähettämään tekstiviesti käyttäjän numeroon, joka on lisätty koodin tähän osaan.
void Lähetä () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // anna matkapuhelinnumerosi GSM.println ('"'); viive (500); // GSM.print ("Leveysaste:"); // GSM.println (leveysaste); GSM.println ("Tapaturma tapahtui"); viive (500); // GSM.print ("pituusaste:"); // GSM.println (logitude); GSM.println ("Napsauta linkkiä nähdäksesi sijainnin"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (leveysaste, 6); GSM.print ("+"); GSM.print (logitudi, 6); GSM.write (26); viive (4000); }
Täydellinen koodi ja esittelyvideo on annettu alla, voit tarkistaa kaikki koodin toiminnot.