- Požadované komponenty:
- GPS modul a jeho práce:
- GSM modul:
- Akcelerometr:
- Vysvětlení obvodu:
- Pracovní vysvětlení:
- Vysvětlení programování:
V našich předchozích výukových programech jsme se dozvěděli o tom, jak propojit modul GPS s počítačem, jak postavit hodiny Arduino GPS a jak sledovat vozidlo pomocí GSM a GPS. Tady v tomto projektu budeme stavět Arduino systém varování před nehodami vozidel pomocí GPS, GSM a akcelerometru. Akcelerometr detekuje náhlou změnu v osách vozidla a GSM modul odešle výstražnou zprávu na váš mobilní telefon s místem nehody. Místo nehody se odesílá ve formě odkazu na Google Map, odvozeného od zeměpisné šířky a délky z modulu GPS. Zpráva také obsahuje rychlost vozidla v uzlech. Podívejte se na ukázkové videona konci. Tento projekt varování před nehodou vozidla lze také použít jako sledovací systém a mnoho dalšího, stačí provést několik změn v hardwaru a softwaru.
Požadované komponenty:
- Arduino Uno
- GSM modul (SIM900A)
- GPS modul (SIM28ML)
- Akcelerometr (ADXL335)
- 16x2 LCD
- Zdroj napájení
- Připojení vodičů
- 10 K-POT
- Nepájivá deska nebo deska plošných spojů
- Napájení 12v 1amp
Před vstupem do projektu probereme GPS, GSM a akcelerometr.
GPS modul a jeho práce:
GPS znamená Global Positioning System a používá se k detekci zeměpisné šířky a délky jakéhokoli místa na Zemi s přesným časem UTC (Universal Time Coordinated). GPS modul se používá ke sledování místa nehody v našem projektu. Toto zařízení přijímá souřadnice ze satelitu každou sekundu s časem a datem. Dříve jsme v systému pro sledování vozidel extrahovali řetězec $ GPGGA, abychom našli souřadnice zeměpisné šířky a délky.
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říkaz 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 echo off AT + CNMI = 2,2,0,0,0
(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)
Akcelerometr:
Pin Popis akcelerometru:
- Na tomto pinu by se mělo připojit napájení 5 voltů Vcc.
- X-OUT Tento pin poskytuje analogový výstup ve směru x
- Y-OUT Tento pin poskytuje analogový výstup ve směru y
- Z-OUT Tento pin poskytuje analogový výstup ve směru z
- GND zem
- ST Tento kolík slouží k nastavení citlivosti snímače
Zkontrolujte také naše další projekty pomocí akcelerometru: Ping Pong Game pomocí Arduina a robota řízeného gesty pomocí akcelerometru.
Vysvětlení obvodu:
Připojení k obvodu tohoto projektu systému varování před nehodou vozidla je jednoduché. Zde je Tx pin modulu GPS přímo připojen k digitálnímu pinu číslo 10 Arduina. Tím, že zde používáme softwarovou sériovou knihovnu, jsme povolili sériovou komunikaci na pinech 10 a 11, udělali jsme jim Rx a Tx a ponechali jsme Rx pin modulu GPS otevřený. Ve výchozím nastavení se pro sériovou komunikaci používají Pin 0 a 1 Arduina, ale pomocí knihovny SoftwareSerial můžeme povolit sériovou komunikaci na jiných digitálních pinech Arduina. K napájení modulu GPS se používá 12voltové napájení.
Kolíky Tx a Rx GSM modulu jsou přímo připojeny k pinům D2 a D3 Arduina. Pro rozhraní GSM jsme zde také použili softwarovou sériovou knihovnu. GSM modul je také napájen 12V zdrojem. Volitelného LCD je datové piny D4, D5, D6 a D7 jsou napojeny na pin číslo 6, 7, 8, a 9 Arduino. Příkazový pin RS a EN na LCD jsou spojeny s kolíky číslo 4 a 5 Arduino a RW pin je přímo spojen se zemí. Potenciometr se také používá k nastavení kontrastu nebo jasu LCD.
Do tohoto systému je přidán akcelerometr pro detekci nehody a jeho výstupní piny ADC v ose x, y a z jsou přímo připojeny k pinům ADC Arduino ADC A1, A2 a A3.
Pracovní vysvětlení:
V tomto projektu se Arduino používá pro řízení celého procesu pomocí GPS přijímače a GSM modulu. Přijímač GPS slouží k detekci souřadnic vozidla, modul GSM slouží k odesílání výstražných SMS se souřadnicemi a odkazem na Google Map. Akcelerometr, jmenovitě ADXL335, se používá k detekci nehody nebo náhlé změny v jakékoli ose. A volitelný 16x2 LCD se také používá pro zobrazení stavových zpráv nebo souřadnic. Použili jsme GPS modul SIM28ML a GSM modul SIM900A.
Když jsme po programování připraveni na hardware, můžeme jej nainstalovat do našeho vozidla a zapnout jej. Nyní, kdykoli dojde k nehodě, se auto nakloní a akcelerometr změní hodnoty jeho osy. Tyto hodnoty načte Arduino a zkontroluje, zda dojde ke změně v jakékoli ose. Pokud dojde ke změně, Arduino načte souřadnice extrahováním řetězce $ GPGGA z dat modulu GPS (GPS funguje vysvětleno výše) a odešle SMS na předem definované číslo policii nebo sanitce nebo rodinnému příslušníkovi se souřadnicemi umístění místa nehody. Zpráva také obsahuje odkaz Google Map na místo nehody, takže lze snadno sledovat polohu. Když obdržíme zprávu, stačí kliknout na odkaz a přesměrujeme se na mapu Google a poté uvidíme přesnou polohu vozidla. Rychlost vozidla v uzlech(1,852 KPH), je také odeslána v SMS a zobrazena na LCD panelu. Podívejte se na celé ukázkové video pod projektem.
Tady v tomto projektu můžeme nastavit citlivost akcelerometru vložením minimální a maximální hodnoty do kódu.
Zde v ukázce byly použity dané hodnoty:
#define minVal -50 #define MaxVal 50
Ale pro lepší výsledky můžete použít 200 místo 50, nebo můžete nastavit podle svého požadavku.
Vysvětlení programování:
Kompletní program je uveden níže v sekci Kód; zde stručně vysvětlujeme jeho různé funkce.
Nejprve jsme zahrnuli všechny požadované knihovny nebo soubory záhlaví a deklarovali různé proměnné pro výpočty a dočasné ukládání dat.
Poté jsme vytvořili funkci void initModule (String cmd, char * res, int t) pro inicializaci modulu GSM a kontrolu jeho odezvy pomocí AT příkazů.
void initModule (String cmd, char * res, int t) {while (1) {Serial.println (cmd); Serial1.println (cmd); zpoždění (100); while (Serial1.available ()> 0) {if (Serial1.find (res)) {Serial.println (res); zpoždění (t); vrátit se; } else {Serial.println ("Chyba"); }} zpoždění (t); }}
Poté jsme ve funkci void setup () inicializovali hardwarovou a softwarovou sériovou komunikaci, LCD, GPS, GSM modul a akcelerometr.
void setup () {Serial1.begin (9600); Serial.begin (9600); lcd.begin (16,2); lcd.print ("Nehoda Alert"); lcd.setCursor (0,1); lcd.print ("Systém"); zpoždění (2000); lcd.clear ();…………………
Proces kalibrace akcelerometru se také provádí ve smyčce nastavení . V tomto jsme vzali několik vzorků a poté našli průměrné hodnoty pro osu x, osu y a osu z. A uložte je do proměnné. Poté jsme tyto vzorové hodnoty použili ke čtení změn v ose akcelerometru, když se vozidlo nakloní (nehoda).
lcd.print ("Kalibrace"); lcd.setCursor (0,1); lcd.print ("Acceleromiter"); pro (int i = 0; i
Poté jsme ve funkci void loop () načetli hodnoty osy akcelerometru a provedli výpočet k extrakci změn pomocí vzorků, které byly odebrány v Kalibraci. Nyní, pokud jsou nějaké změny více či méně definované úrovně, Arduino odešle zprávu na předem definované číslo.
void loop () {int value1 = analogRead (x); int hodnota2 = analogRead (y); int hodnota3 = analogRead (z); int xValue = xsample-value1; int yValue = ysample-value2; int zValue = zsample-value3; Serial.print ("x ="); Serial.println (xValue); Serial.print ("y ="); Serial.println (yValue); Serial.print ("z ="); Serial.println (zValue);…………………
Zde jsme také vytvořili několik dalších funkcí pro různé puposy, jako je void gpsEvent () pro získání GPS souřadnic, void coordinate2dec () pro extrahování souřadnic z řetězce GPS a jejich převod na desítkové hodnoty, void show_coordinate () pro zobrazení hodnot přes sériový monitor a LCD a nakonec prázdnota Send () pro odesílání výstražných SMS na předem definované číslo.
Kompletní kód a demo video jsou uvedeny níže, můžete zkontrolovat všechny funkce v kódu.