Po Zemi existuje mnoho satelitů GPS, které slouží k zajištění přesné polohy jakéhokoli místa. Spolu s polohovými souřadnicemi (zeměpisná šířka a délka) poskytuje také další data, jako je čas, datum, nadmořská výška, úhel sledování směru atd. Již jsme se naučili číst tato data GPS ze satelitu pomocí Arduina. Budeme tedy vyrábět hodiny GPS pomocí dat „Čas a datum“ ze satelitu GPS. Hodiny aktualizované pomocí GPS jsou velmi přesné a poskytují data v reálném čase s přesností milisekund.
Součásti:
- Arduino Uno
- GPS modul
- 16x2 LCD
- Připojovací vodiče
- Zdroj napájení
Pracovní vysvětlení:
GPS modul odesílá data ve formátu NMEA, viz výstup GPS dat na níže uvedeném snímku obrazovky. Formát NMEA se skládá z několika vět, ve kterých potřebujeme jednu větu pro extrahování data a času. Tato věta začíná od $ GPRMC a obsahuje souřadnice, čas a další užitečné informace. Na tento $ GPRMC se odkazuje na Doporučená minimální specifická data GPS / Transit a délka tohoto řetězce je asi 70 znaků. 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. Zde je výstup GPS:
A $ string GPRMC obsahuje především rychlost, čas, datum a umístění
$ GPRMC, 123519 000, A, 7791.0381, N, 06727.4434, E, 022,4,084,4,230394,003,1, W * 6 A $ GPRMC, HHMMSS.SSS, A, zeměpisná šířka, N, zeměpisná délka, E, rychlost, úhel, datum, MV, W, CMD
Identifikátor |
Popis |
RMC |
Doporučená minimální věta C |
HHMMSS.SSS |
Čas v hodinových minutových sekundách a milisekundách. |
A |
Stav // A = aktivní a V = neplatné |
Zeměpisná šířka |
Zeměpisná šířka 49 stupňů. 16,45 min. Severní |
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 |
Rychlost |
rychlost v uzlech |
Úhel |
Úhel sledování ve stupních |
datum |
DATUM v UTC |
MV |
Magnetická variace |
Ž |
Směr variace E / W |
CMD (* 6A) |
Data kontrolního součtu |
Můžeme extrahovat čas a datum z řetězce $ GPRMC počítáním čárek v řetězci. S pomocí Arduina a programování najdeme řetězec $ GPRMC a uložíme jej do pole, poté lze najít čas (formát 24 hodin) po jedné čárce a datum lze najít po devíti čárkách. Čas a datum se dále ukládají do řetězců.
Satelitní satelit GPS poskytuje čas a datum v koordinovaném světovém čase (UTC), takže jej musíme odpovídajícím způsobem převést. Chcete-li převést podle indického času, přidali jsme 5:30 v UTC čase, protože indický čas je 5 a půl hodiny před UTC / GMT.
Kruhový diagram:
Okruhové připojení hodin GPS Arduino je jednoduché. Arduino se používá k ovládání celého procesu, přijímá GPS data ze satelitu přes GPS modul, extrahuje datum a čas z řetězce $ GPRMC a zobrazuje je na LCD.
Datové piny D4, D5, D6, D7 16x2 LCD jsou připojeny k pinu č. 5, 4, 3, 2 Arduina a příkazový pin RS a EN LCD jsou připojeny k pinům 7 a 6 Arduina. Pin Tx modulu GPS přijímače je připojen k Rx pinu 10 Arduina. Pozemní PIN Arduina a GPS jsou vzájemně propojeny. Zde jsme použili modul GPS SKG13BL s přenosovou rychlostí 9800 b / s. Arduino je také nakonfigurováno na přenosovou rychlost 9800 b / s pomocí funkce „Serial.begin (9800)“.
Vysvětlení programování:
V programovací části nejprve zahrneme knihovny a definujeme piny pro LCD a softwarovou sériovou komunikaci. Definujte také nějakou proměnnou s poli pro ukládání dat. Tím, že zde používáme softwarovou sériovou knihovnu, jsme povolili sériovou komunikaci na pinech 10 a 11 a vytvořili jsme z nich Rx a Tx. 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
#zahrnout
Poté jsme inicializovali sériovou komunikaci a LCD ve funkci nastavení a na LCD jsme ukázali uvítací zprávu.
Poté jsme z přijatého řetězce extrahovali čas a datum.
while (x
A poté převeďte čas a datum na desítkové a upravte je 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 měsíc = UTC_month.toInt ();……………
A nakonec se čas a datum zobrazí na LCD pomocí funkce lcd.print , zkontrolujte celý kód níže.