V předchozích cvičeních jsme se dozvěděli o tom, jak propojit modul GPS s počítačem a jak sledovat vozidlo pomocí GSM a GPS. Také jsme postavili systém varování před nehodami vozidel pomocí Arduina a akcelerometru. Zde opět stavíme stejný projekt, ale tentokrát bude k detekci dopravní nehody použit launchpad MSP430 a snímač vibrací. Tento projekt tedy vypráví také o propojení snímače vibrací s příručním panelem MSP430. Více projektů MSP430 najdete zde.
Zde modul snímače vibrací detekuje vibrace vozidla a odešle signál do MSP430 Launchpad. Poté MSP430 načte data z modulu GPS a odešle je na mobilní telefon uživatele prostřednictvím SMS pomocí modulu GSM. LED bude také svítit jako signál upozornění na nehodu, tuto LED lze nahradit nějakým alarmem. Místo nehody se odesílá ve formě odkazu na Google Map, odvozeného od zeměpisné šířky a délky z modulu GPS. Podívejte se na ukázkové video na konci.
Modul GPS odesílá data související se sledováním polohy v reálném čase a odesílá tolik dat ve formátu NMEA (viz snímek obrazovky níže). Formát NMEA se skládá z několika vět, ve kterých potřebujeme pouze jednu větu. Tato věta začíná od $ GPGGA a obsahuje souřadnice, čas a další užitečné informace. Toto GPGGA se označuje jako opravná data globálního pozičního systému. Zde se dozvíte více o větách NMEA a čtení údajů GPS.
Můžeme extrahovat souřadnice z řetězce $ GPGGA počítáním čárek v řetězci. Předpokládejme, že najdete řetězec $ GPGGA a uložíte jej do pole, pak Latitude najdete po dvou čárkách a Longitude najdete po čtyřech čárkách. Nyní lze tuto šířku a délku zadat do jiných polí.
Níže je řetězec $ GPGGA spolu s jeho popisem:
$ GPGGA, 104534 000 7791,0381, N, 06727,4434, E, 1,08,0,9 510,4, M, 43,9, M,, * 47 $ GPGGA, HHMMSS.SSS, zeměpisná šířka, N, zeměpisná délka, E, FQ, NOS, HDP, nadmořská výška, M, výška, M,, data kontrolního součtu
Identifikátor |
Popis |
$ GPGGA |
Údaje o opravách globálního pozičního systému |
HHMMSS.SSS |
Čas v hodinových minutových sekundách a milisekundách. |
Zeměpisná šířka |
Zeměpisná šířka (souřadnice) |
N |
Směr N = sever, S = jih |
Zeměpisná délka |
Zeměpisná délka (souřadnice) |
E |
Směr E = východ, W = západ |
FQ |
Opravte údaje o kvalitě |
NOS |
Počet použitých satelitů |
HDP |
Horizontální ředění přesnosti |
Nadmořská výška |
Nadmořská výška (metry nad mořem) |
M |
Metr |
Výška |
Výška |
Kontrolní součet |
Data kontrolního součtu |
GSM modul
SIM900 je kompletní čtyřpásmový GSM / GPRS modul, který může být snadno použit zákazníkem nebo fandy. SIM900 GSM modul poskytuje standardní průmyslové rozhraní. SIM900 poskytuje GSM / GPRS 850/900/1800 / 1900MHz výkon pro hlas, SMS, data s nízkou spotřebou energie. Je snadno dostupný na trhu.
- SIM900 navržený pomocí jednočipového procesoru integrujícího jádro AMR926EJ-S
- Čtyřpásmový modul GSM / GPRS v malé velikosti.
- GPRS povoleno
Příkazy AT
AT znamená POZOR. Tento příkaz se používá k ovládání GSM modulu. Existuje několik příkazů pro volání a zasílání zpráv, které jsme použili v mnoha našich předchozích GSM projektech s Arduino. Pro testování GSM modulu jsme použili AT příkaz. Po obdržení příkazu AT Command GSM Module odpovězte OK. To znamená, že modul GSM funguje dobře. Níže je uvedeno několik AT příkazů, které jsme zde použili v tomto projektu:
ATE0 Pro vypnutou ozvěnu
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = „Číslo mobilního telefonu“
>> Nyní můžeme napsat naši zprávu
>> Po napsání zprávy
Ctrl + Z odešle příkaz zprávy (26 v desítkové soustavě).
ENTER = 0x0d v HEX
(Chcete-li se dozvědět více o modulu GSM, podívejte se zde na naše různé projekty GSM s různými mikrokontroléry)
Modul snímače vibrací
V tomto projektu výstražného systému úrazu MSP430 jsme použili modul snímače vibrací, který detekuje vibrace nebo náhlé modulace. Modul snímače vibrací poskytuje digitální výstup HIGH / LOW logiky v závislosti na modulu. V našem případě jsme použili aktivní modul HIGH logického snímače vibrací. To znamená, že kdykoli snímač vibrací detekuje vibrace, dá mikrokontroléru HIGH logiku.
Vysvětlení obvodu
Připojení k obvodu tohoto projektu systému varování před nehodou vozidla je jednoduché. Zde je pin Tx modulu GPS přímo připojen k číslu digitálního pinu P1_1 Launchpadu MSP430 (hardwarové sériové číslo) a k napájení modulu GPS se používá napětí 5 V. Tím, že zde používáme softwarovou sériovou knihovnu, jsme povolili sériovou komunikaci na pinech P_6 a P1_7, vytvořili jsme je Rx a Tx a připojili se k GSM modulu. K napájení GSM modulu se používá 12voltové napájení. Vibrační snímač je připojen na P1_3. LED se také používá k indikaci detekce nehody. Zbytek připojení je uveden ve schématu zapojení.
Vysvětlení programování
Programování tohoto projektu je kromě GPS části snadné. Celý kód je uveden na konci projektu. K napsání nebo kompilaci kódu v MSP430 jsme použili Energia IDE, která je kompatibilní s Arduino. Většinu funkcí Arduino IDE lze použít přímo v tomto IDE Energia.
Nejprve jsme tedy zahrnuli požadované knihovny a deklarovali pin a proměnné.
#zahrnout
Daná funkce se používá ke čtení signálu snímače vibrací. Tato funkce bude filtrovat i malé nebo falešné vibrace.
#define count_max 25 znaků SensorRead (int pin) // čtení sw s debounce { char count_low = 0, count_high = 0; do { delay (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; jinak návrat VYSOKÝ; }
Níže uvedená funkce detekuje vibrace a volá funkci gpsEvent (), aby získala souřadnici GPS, a nakonec zavolá funkci Send () a odešle SMS.
void loop () { if (SensorRead (vibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Poslat(); digitalWrite (led, LOW); zpoždění (2000); } }
Daná funkce je zodpovědná za získání řetězců GPS z modulu GPS, extrahuje z nich souřadnice a převádí je ve formátu s desetinnou čárkou.
void gpsEvent () { char gpsString; char test = "RMC"; i = 0; while (1) { while (Serial.available ()) // Sériová příchozí data z GPS { char inChar = (char) Serial.read (); gpsString = inChar; // uložení příchozích dat z GPS do dočasného řetězce str i ++; if (i <4) { if (gpsString! = test) // zkontrolovat správný řetězec 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; zeměpisná šířka = ((plovoucí) stupeň + minuta);
A nakonec se funkce Odeslat () používá k odeslání SMS na číslo uživatele, které je vloženo v této části kódu.
void Send () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // zadejte své mobilní číslo GSM.println ('"'); zpoždění (500); // GSM.print ("Latitude:"); // GSM.println (zeměpisná šířka); GSM.println ("Nehoda se stala"); zpoždění (500); // GSM.print ("longitude:"); // GSM.println (logitude); GSM.println ("Kliknutím na odkaz zobrazíte umístění"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (zeměpisná šířka, 6); GSM.print ("+"); GSM.print (logitude, 6); GSM.write (26); zpoždění (4000); }
Kompletní kód a demo video jsou uvedeny níže, můžete zkontrolovat všechny funkce v kódu.