A Föld körül sok GPS-műhold található, amelyeket bármely hely pontos helyének megadásához használnak. A helykoordinátákkal (szélesség és hosszúság) együtt egyéb adatokat is szolgáltat, például időt, dátumot, magasságot, iránykövetési szöget stb. Megtanultuk már olvasni ezeket a GPS adatokat a Satellite-től az Arduino segítségével. Tehát GPS órát fogunk készíteni a GPS műhold „Idő és dátum” adatainak felhasználásával. A GPS frissített óra nagyon pontos, és ezredmásodpercek pontossággal biztosítja a valós idejű adatokat.
Alkatrészek:
- Arduino Uno
- GPS modul
- 16x2 LCD
- Csatlakozó vezetékek
- Tápegység
Munka magyarázat:
A GPS modul az adatokat NMEA formátumban küldi, lásd a GPS adatok kimenetét az alábbi képernyőképen. Az NMEA formátum több mondatból áll, amelyekben egy mondatra van szükségünk a Dátum és Idő kinyeréséhez. Ez a mondat a $ GPRMC- től kezdődik, és tartalmazza a koordinátákat, az időt és egyéb hasznos információkat. Ezt a $ GPRMC- t az Ajánlott minimális specifikus GPS / Tranzit adatokra hivatkozik, és a karakterlánc hossza körülbelül 70 karakter. Korábban kivontuk a $ GPGGA karakterláncot a járműkövető rendszerből a szélességi és hosszúsági koordináták megkeresésére. Itt van a GPS kimenet:
A $ GPRMC karakterlánc főként sebességet, időt, dátumot és pozíciót tartalmaz
$ GPRMC, 123519.000, A, 7791.0381, N, 06727.4434, E, 022.4.084.4,230394,003.1, W * 6 A $ GPRMC, HHMMSS.SSS, A, szélesség, N, hosszúság, E, sebesség, szög, dátum, MV, W, CMD
Azonosító |
Leírás |
RMC |
Ajánlott minimális mondat C |
HHMMSS.SSS |
Idő óra perc másodpercben és ezredmásodperc formátumban. |
A |
Állapot // A = aktív és V = érvénytelen |
Szélességi kör |
Szélesség 49 fok. 16.45 perc. Északi |
N |
Irány N = észak, S = dél |
Hosszúság |
Hosszúság (koordináta) |
E |
E = kelet, W = nyugat irány |
Sebesség |
sebesség csomókban |
Szög |
Nyomkövetési szög fokban |
Dátum |
Dátum UTC-ben |
MV |
Mágneses elhajlás |
W |
E / W variáció iránya |
CMD (* 6A) |
Ellenőrző összeg adatok |
Időt és dátumot kivonhatunk a $ GPRMC karakterláncból, ha megszámoljuk a vesszőket a karakterláncban. Az Arduino és a programozás segítségével megtaláljuk a $ GPRMC karakterláncot, és egy tömbben tároljuk, majd az idő (24 órás formátum) egy vessző után, a Date pedig kilenc vessző után található. Az időt és a dátumot további karakterláncok mentik.
A GPS műhold az időt és a dátumot koordinált világidő (UTC) formájában adja meg, ezért ennek megfelelően kell átalakítanunk. Az indiai idő szerinti átváltáshoz hozzáadtuk az UTC idő szerint 5: 30-at, mivel az indiai idő 5 és fél órával megelőzi az UTC / GMT-t.
Kördiagramm:
Az Arduino GPS Clock áramköri kapcsolatai egyszerűek. Az Arduino az egész folyamat vezérlésére szolgál, GPS-modulon keresztül fogadja a GPS adatait műholdról, kivonja a dátumot és az időt a $ GPRMC karakterláncból, és megjeleníti az LCD-n.
A 16x2 LCD D4, D5, D6, D7 adatcsapjai csatlakoznak az 1. sz. Az Arduino 5, 4, 3, 2 és az LCD RS és EN parancscsapjai az Arduino 7, illetve 6 csatlakozójához vannak csatlakoztatva. A GPS-vevő modul Tx pin csatlakozik az Arduino Rx 10 tűjéhez. Az Arduino földi PIN-kódja és a GPS összekapcsolódik. Itt SKG13BL GPS modult használtunk, amely 9800 bps sebességgel működik. Az Arduino a „Serial.begin (9800)” funkció használatával szintén 9800 bps sebességgel van konfigurálva .
Programozási magyarázat:
A programozási részben először könyvtárakat foglalunk be, és meghatározzuk az LCD és szoftver soros kommunikáció csapjait. Adjon meg néhány változót tömbökkel az adatok tárolásához. A Software Serial Library itteni használatával engedélyeztük a soros kommunikációt a 10-es és a 11-es tűn, és Rx-ként, illetve Tx-kké tettük őket. Alapértelmezés szerint az Arduino 0-as és 1-es érintkezõjét használják a soros kommunikációhoz, de a SoftwareSerial könyvtár használatával engedélyezhetjük a soros kommunikációt az Arduino más digitális érintkezõin
#include
Ez után inicializáltuk a soros kommunikációt és az LCD-t a beállítási funkcióban, és üdvözlő üzenetet mutattunk az LCD-n.
Ezután kivontuk az időt és a dátumot a kapott karakterláncból.
míg (x
Ezután konvertálja az időt és a dátumot tizedesre, és módosítsa indiai időre (UTC +5: 30)
int UTC_hourDec = UTC_hour.toInt (); int UTC_minutDec = UTC_minut.toInt (); int Second = UTC_second.toInt (); int Dátum = UTC_dátum.toInt (); int Hónap = UTC_hónap.toInt ();……………
És végül az idő és a dátum megjelent az LCD-n az lcd.print funkcióval, ellenőrizze az alábbi teljes kódot.