Okolo Zeme je veľa satelitov GPS, ktoré sa používajú na zabezpečenie presnej polohy ktoréhokoľvek miesta. Spolu s polohovými súradnicami (zemepisná šírka a dĺžka) poskytuje aj ďalšie údaje, ako sú čas, dátum, nadmorská výška, uhol sledovania smeru atď. Tieto údaje GPS sme sa už naučili čítať zo satelitu pomocou aplikácie Arduino. Chystáme sa teda vyrobiť hodiny GPS pomocou údajov „Čas a dátum“ zo satelitu GPS. Hodiny aktualizované pomocou GPS sú veľmi presné a poskytujú údaje v reálnom čase s presnosťou na milisekundy.
Komponenty:
- Arduino Uno
- GPS modul
- 16x2 LCD
- Pripojovacie vodiče
- Zdroj
Pracovné vysvetlenie:
GPS modul odosiela údaje vo formáte NMEA, výstup GPS údajov nájdete na nasledujúcom obrázku. Formát NMEA pozostáva z niekoľkých viet, v ktorých potrebujeme jednu vetu na extrahovanie dátumu a času. Táto veta začína od $ GPRMC a obsahuje súradnice, čas a ďalšie užitočné informácie. Na tento $ GPRMC sa odkazuje na odporúčané minimálne konkrétne údaje GPS / Tranzit a dĺžka tohto reťazca je asi 70 znakov. Predtým sme v systéme na sledovanie vozidiel extrahovali reťazec $ GPGGA, aby sme našli súradnice zemepisnej šírky a dĺžky. Tu je výstup GPS:
A $ GPRMC reťazec obsahuje hlavne rýchlosť, čas, dátum a pozíciu
$ GPRMC, 123519 000, A, 7791,0381, N, 06727,4434, E, 022,4,084,4,230394,003,1, W * 6 A $ GPRMC, HHMMSS.SSS, A, zemepisná šírka, N, zemepisná dĺžka, E, rýchlosť, uhol, dátum, MV, W, CMD
Identifikátor |
Popis |
RMC |
Odporúčaná minimálna veta C |
HHMMSS.SSS |
Čas v hodinách, minútach a sekundách a milisekundách. |
A |
Stav // A = aktívny a V = neplatný |
Zemepisná šírka |
49 ° zemepisnej šírky 16,45 min. Sever |
N |
Smer N = sever, S = juh |
Zemepisná dĺžka |
Zemepisná dĺžka (súradnice) |
E |
Smer E = východ, Z = západ |
Rýchlosť |
rýchlosť v uzloch |
Uhol |
Uhol sledovania v stupňoch |
Dátum |
DÁTUM v UTC |
MV |
Magnetická variácia |
Ž |
Smer variácie E / W |
CMD (* 6A) |
Údaje kontrolného súčtu |
Čas a dátum môžeme extrahovať z reťazca $ GPRMC počítaním čiarok v reťazci. Pomocou Arduina a programovania nájdeme reťazec $ GPRMC a uložíme ho do poľa, potom čas (formát 24 hodín) nájdete po jednej čiarke a dátum po deviatich čiarkach. Čas a dátum sa ďalej ukladajú do reťazcov.
Satelit GPS poskytuje čas a dátum v koordinovanom svetovom čase (UTC), takže ho musíme zodpovedajúcim spôsobom previesť. Aby sme prepočítali podľa indického času, pridali sme 5:30 v UTC čase, pretože indický čas je 5 a pol hodiny pred UTC / GMT.
Schéma zapojenia:
Okruhové pripojenie hodín Arduino GPS je jednoduché. Arduino slúži na riadenie celého procesu, prijíma údaje GPS zo satelitu prostredníctvom modulu GPS, extrahuje dátum a čas z reťazca $ GPRMC a zobrazuje ich na LCD displeji.
Dátové piny D4, D5, D6, D7 16x2 LCD sú pripojené k pinu č. 5, 4, 3, 2 Arduina a príkazový pin RS a EN LCD sú pripojené k pinom 7 a 6 Arduina. Kolík Tx modulu GPS prijímača je pripojený k kolíku Rx 10 Arduina. Pozemný PIN Arduina a GPS sú navzájom prepojené. Tu sme použili modul GPS SKG13BL pracujúci s prenosovou rýchlosťou 9800 b / s. Arduino je tiež nakonfigurované na prenosovú rýchlosť 9800 bps pomocou funkcie „Serial.begin (9800)“.
Vysvetlenie programovania:
V programovacej časti najskôr zahrnieme knižnice a definujeme piny pre LCD a softvérovú sériovú komunikáciu. Definujte tiež niektorú premennú s poľami na ukladanie údajov. Použitím softvérovej sériovej knižnice tu sme povolili sériovú komunikáciu na pinoch 10 a 11 a vytvorili sme z nich Rx a Tx. Štandardne sa pin 0 a 1 Arduina používajú na sériovú komunikáciu, ale pomocou knižnice SoftwareSerial môžeme povoliť sériovú komunikáciu na iných digitálnych pinoch Arduina
#include
Potom sme inicializovali sériovú komunikáciu a LCD vo funkcii nastavenia a na LCD sme zobrazili uvítaciu správu.
Potom sme z prijatého reťazca extrahovali čas a dátum.
while (x
A potom preveďte čas a dátum na desatinné miesto a upravte ich na indický čas (UTC +5: 30)
int UTC_hourDec = UTC_hour.toInt (); int UTC_minutDec = UTC_minut.toInt (); int druhý = UTC_second.toInt (); int Date = UTC_date.toInt (); int mesiac = UTC_month.toInt ();……………
A nakoniec sa čas a dátum zobrazia na LCD displeji pomocou funkcie lcd.print , skontrolujte celý kód uvedený nižšie.