V predchádzajúcich tutoriáloch sme sa dozvedeli, ako prepojiť GPS modul s počítačom a ako sledovať vozidlo pomocou GSM a GPS. Tiež sme postavili systém upozornenia na nehodu vozidla pomocou Arduina a akcelerometra. Tu opäť budujeme rovnaký projekt, ale tentoraz sa na detekciu nehody vozidla použije launchpad MSP430 a snímač vibrácií. Tento projekt teda bude rozprávať aj o prepojení vibračného senzora s launchpadom MSP430. Viac projektov MSP430 nájdete tu.
Tu modul senzora vibrácií detekuje vibrácie vozidla a odošle signál do Launchpadu MSP430. Potom MSP430 načíta dáta z GPS modulu a pošle ich na mobilný telefón užívateľa cez SMS pomocou GSM modulu. LED bude tiež svietiť ako signál upozornenia na nehodu, túto LED je možné nahradiť alarmom. Miesto nehody sa odosiela vo forme odkazu na Google Mapy odvodeného od zemepisnej šírky a dĺžky od modulu GPS. Na konci si pozrite ukážkové video.
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íkazy AT
AT znamená POZOR. Tento príkaz sa používa na ovládanie modulu GSM. 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 vypnutie ozveny
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = „Číslo mobilného telefónu“
>> Teraz môžeme napísať našu správu
>> Po napísaní správy
Ctrl + Z odošle príkaz správy (26 v desatinnej čiarke).
ENTER = 0x0d v HEX
(Ak sa chcete dozvedieť viac informácií o module GSM, pozrite si naše rôzne projekty GSM s rôznymi mikrokontrolérmi tu).
Modul snímača vibrácií
V tomto projekte systému varovania pred nehodami MSP430 sme použili modul senzora vibrácií, ktorý detekuje vibrácie alebo náhle modulácie. Modul snímača vibrácií poskytuje digitálny výstup HIGH / LOW logiky v závislosti od modulu. V našom prípade sme použili aktívny modul senzora logických vibrácií HIGH. To znamená, že kedykoľvek snímač vibrácií zaznamená vibrácie, dá mikrokontroléru VYSOKÚ logiku.
Vysvetlenie obvodu
Pripojenie k obvodu tohto projektu výstražného systému nehôd vozidla je jednoduché. Tu je pin Tx modulu GPS priamo pripojený k číslu digitálneho kolíka P1_1 Launchpadu MSP430 (hardvérové sériové číslo) a na napájanie modulu GPS sa používa napätie 5 V. Použitím softvérovej sériovej knižnice tu sme povolili sériovú komunikáciu na pinoch P_6 a P1_7, vytvorili sme ich Rx a Tx a pripojili sme ich k GSM modulu. Na napájanie modulu GSM sa používa 12 voltové napájanie. Vibračný snímač je pripojený na P1_3. LED sa tiež používa na indikáciu detekcie nehody. Zvyšok pripojení je uvedený v schéme zapojenia.
Vysvetlenie programovania
Programovanie tohto projektu je ľahké až na časť GPS. Celý kód je uvedený na konci projektu. Na napísanie alebo kompiláciu kódu v MSP430 sme použili Energia IDE, ktorá je kompatibilná s Arduino. Väčšinu funkcií IDE Arduino je možné použiť priamo v tomto IDE Energia.
Najskôr sme teda zahrnuli požadované knižnice a deklarovali pin a premenné.
#include
Daná funkcia sa používa na čítanie signálu senzora vibrácií. Táto funkcia bude filtrovať aj malé alebo falošné vibrácie.
#define count_max 25 char SensorRead (int pin) // čítanie sw s debounce { char count_low = 0, count_high = 0; do { oneskorenie (1); if (digitalRead (pin) == HIGH) { count_high ++; count_low = 0; } else { count_high = 0; count_low ++; } } while (count_low <count_max && count_high <count_max); if (count_low> = count_max) return LOW; inak návrat VYSOKÝ; }
Funkcia nižšie detekuje vibrácie a volá funkciu gpsEvent (), aby získala súradnicu GPS, a nakoniec zavolá funkciu Send () na odoslanie SMS.
void loop () { if (SensorRead (vibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Odoslať (); digitalWrite (led, LOW); meškanie (2000); } }
Daná funkcia je zodpovedná za získanie reťazcov GPS z modulu GPS, extrahuje z nich súradnice a prevádza ich v desatinnom formáte.
void gpsEvent () { char gpsString; char test = "RMC"; i = 0; while (1) { while (Serial.available ()) // Sériové prichádzajúce údaje z GPS { char inChar = (char) Serial.read (); gpsString = inChar; // ukladanie prichádzajúcich údajov z GPS do dočasného reťazca str i ++; if (i <4) { if (gpsString! = test) // kontrola správneho reťazca i = 0; }
int stupeň = 0; stupeň = gpsString-48; stupeň * = 10; stupeň + = gpsString-48; int minut_int = 0; minut_int = gpsString-48; minut_int * = 10; minut_int + = gpsString-48; int minut_dec = 0; minut_dec + = (gpsString-48) * 10 000; minut_dec + = (gpsString-48) * 1000; minut_dec + = (gpsString-48) * 100; minut_dec + = (gpsString-48) * 10; minut_dec + = (gpsString-48); float minut = (((float) minut_int + ((float) minut_dec / 100000.0)) / 60,0; zemepisná šírka = ((plavák) stupeň + minúta);
A nakoniec, funkcia Send () sa používa na odoslanie SMS na číslo používateľa, ktoré je vložené v tejto časti kódu.
void Send () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // zadajte svoje mobilné číslo GSM.println ('"'); oneskorenie (500); // GSM.print ("Latitude:"); // GSM.println (zemepisná šírka); GSM.println ("Nehoda sa stala"); oneskorenie (500); // GSM.print ("longitude:"); // GSM.println (logitude); GSM.println ("Kliknutím na odkaz zobrazíte polohu"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (zemepisná šírka, 6); GSM.print ("+"); GSM.print (logitude, 6); GSM.pis (26); oneskorenie (4 000); }
Kompletný kód a ukážkové video je uvedené nižšie. Všetky funkcie v kóde môžete skontrolovať.