Postoji mnogo GPS satelita oko Zemlje koji se koriste za pružanje točnog mjesta bilo kojeg mjesta. Zajedno s koordinatama lokacije (zemljopisna širina i dužina), pruža i druge podatke poput vremena, datuma, nadmorske visine, kuta praćenja smjera itd. Već smo naučili čitati ove GPS podatke sa satelita pomoću Arduina. Tako ćemo izraditi GPS sat koristeći podatke 'Vrijeme i datum' s GPS satelita. GPS ažurirani sat vrlo je precizan i pruža podatke u stvarnom vremenu s preciznošću u milisekundama.
Komponente:
- Arduino Uno
- GPS modul
- LCD 16x2
- Spajanje žica
- Napajanje
Radno objašnjenje:
GPS modul šalje podatke u NMEA formatu, pogledajte izlaz GPS podataka na donjem snimku zaslona. NMEA format sastoji se od nekoliko rečenica, u kojima nam je potrebna jedna rečenica za izdvajanje datuma i vremena. Ova rečenica počinje od $ GPRMC i sadrži koordinate, vrijeme i ostale korisne informacije. Ovaj $ GPRMC upućen je na Preporučeni minimalni specifični GPS / Transit podaci, a duljina ovog niza je oko 70 znakova. Prethodno smo izdvojili $ GPGGA niz u sustavu za praćenje vozila kako bismo pronašli koordinate geografske širine i dužine. Evo GPS izlaza:

A $ GPRMC niz uglavnom sadrži brzinu, vrijeme, datum i položaj
$ GPRMC, 123519.000, A, 7791.0381, N, 06727.4434, E, 022.4,084.4,230394,003.1, W * 6 A $ GPRMC, HHMMSS.SSS, A, širina, N, dužina, E, brzina, kut, datum, SN, W, CMD
| Identifikator | Opis | 
| RMC | Preporučena minimalna rečenica C | 
| HHMMSS.SSS | Vrijeme u satima minutnim sekundama i milisekundama. | 
| A | Status // A = aktivan i V = nevažeći | 
| Zemljopisna širina | Geografska širina 49 °. 16,45 min. Sjeverno | 
| N | Smjer N = sjever, S = jug | 
| Zemljopisna dužina | Zemljopisna dužina (koordinata) | 
| E | Smjer E = Istok, Z = Zapad | 
| Ubrzati | brzina u čvorovima | 
| Kut | Kut praćenja u stupnjevima | 
| Datum | DATUM u UTC | 
| MV | Magnetska varijacija | 
| W | Smjer varijacije E / W | 
| CMD (* 6A) | Podaci o kontrolnoj sumi | 
Vrijeme i datum možemo izdvojiti iz $ GPRMC niza brojanjem zareza u nizu. Uz pomoć Arduina i programiranja pronalazimo $ GPRMC niz i pohranjujemo ga u niz, tada se vrijeme (24-satni format) može pronaći nakon jedne zarezke, a Date nakon devet zareza. Vrijeme i datum se dalje spremaju u nizove.
GPS satelit pruža vrijeme i datum u univerzalnom koordiniranom vremenu (UTC), pa ga moramo pretvoriti u skladu s tim. Da bismo izvršili konverziju prema indijskom vremenu, dodali smo 5:30 po UTC vremenu, jer je indijsko vrijeme 5 i pol sati ispred UTC / GMT.
Kružni dijagram:
Kružne veze Arduino GPS sata jednostavne su. Arduino se koristi za kontrolu cijelog procesa, prima GPS podatke sa satelita putem GPS modula, izvlači datum i vrijeme iz $ GPRMC niza i prikazuje ih na LCD-u.
Priključci za podatke D4, D5, D6, D7 od 16x2 LCD-a spojeni su na pin br. 5, 4, 3, 2 Arduina i naredbeni pin RS i EN LCD-a spojeni su na pin 7 i 6 Arduina. Priključak modula GPS prijamnika Tx povezan je s Rx pinom 10 Arduina. Prizemni PIN Arduina i GPS povezani su međusobno. Ovdje smo koristili SKG13BL GPS modul, koji radi na brzini prijenosa od 9800 bps. Arduino je također konfiguriran na brzinu prijenosa od 9800 bps pomoću funkcije "Serial.begin (9800)".

Objašnjenje programiranja:
U programski dio prvo uključujemo knjižnice i definiramo igle za LCD i softversku serijsku komunikaciju. Također definirajte neku varijablu s nizovima za pohranu podataka. Korištenjem softverske serijske biblioteke ovdje omogućili smo serijsku komunikaciju na pinovima 10 i 11 i postavili ih Rx odnosno Tx. Prema zadanim postavkama pin 0 i 1 Arduina koriste se za serijsku komunikaciju, ali pomoću biblioteke SoftwareSerial možemo dopustiti serijsku komunikaciju na drugim digitalnim pinovima Arduina
#include
Nakon nje inicijalizirali smo serijsku komunikaciju i LCD u funkciji postavljanja i prikazali poruku dobrodošlice na LCD-u.
Tada smo izvadili vrijeme i datum iz primljenog niza.
dok (x
A zatim pretvorite vrijeme i datum u decimalne i izmijenite ih u indijsko vrijeme (UTC +5: 30)
int UTC_hourDec = UTC_hour.toInt (); int UTC_minutDec = UTC_minut.toInt (); int Drugo = UTC_second.toInt (); int Datum = UTC_date.toInt (); int Mjesec = UTC_month.toInt ();……………
A onda su napokon na LCD-u prikazani Vrijeme i Datum pomoću funkcije lcd.print , provjerite donji kôd.

