Aplink Žemę yra daug GPS palydovų, kurie naudojami tiksliai nurodant bet kurią vietą. Kartu su vietos koordinatėmis (platuma ir ilguma) taip pat pateikiami kiti duomenys, tokie kaip laikas, data, aukštis, krypties stebėjimo kampas ir kt. Mes jau išmokome skaityti šiuos GPS duomenis iš palydovo naudodami „Arduino“. Taigi mes sukursime GPS laikrodį naudodami GPS laiko palydovo duomenis „Laikas ir data“. GPS atnaujintas laikrodis yra labai tikslus ir pateikia duomenis realiuoju laiku tiksliai milisekundėmis.
Komponentai:
- Arduino Uno
- GPS modulis
- 16x2 LCD ekranas
- Jungiamieji laidai
- Maitinimo šaltinis
Darbinis paaiškinimas:
GPS modulis siunčia duomenis NMEA formatu, žr. GPS duomenų išvestį žemiau esančiame ekrano kopijoje. NMEA formatas susideda iš kelių sakinių, kuriuose mums reikia vieno sakinio, kad išgautume datą ir laiką. Šis sakinys prasideda nuo $ GPRMC ir jame yra koordinatės, laikas ir kita naudinga informacija. Šis $ GPRMC nurodomas rekomenduojamiems minimaliems konkretiems GPS / tranzito duomenims, o šios eilutės ilgis yra apie 70 simbolių. Anksčiau mes išskyrėme $ GPGGA eilutę transporto priemonių stebėjimo sistemoje, kad rastume platumos ir ilgumos koordinates. Čia yra GPS išvestis:
Ir $ GPRMC eilutė daugiausia yra greitis, laiką, datą ir vietą
$ GPRMC, 123519.000, A, 7791.0381, N, 06727.4434, E, 022.4.084.4,230394,003.1, W * 6 A $ GPRMC, HHMMSS.SSS, A, platuma, N, ilguma, E, greitis, kampas, data, MV, W, CMD
Identifikatorius |
apibūdinimas |
RMC |
Rekomenduojamas minimalus sakinys C |
HHMMSS.SSS |
Laikas valandomis minutėmis sekundėmis ir milisekundžių formatu. |
A |
Būsena // A = aktyvus ir V = negaliojantis |
Platuma |
49 laipsnių platuma. 16.45 min. Šiaurė |
N |
Kryptis N = šiaurė, S = pietūs |
Ilguma |
Ilguma (koordinatė) |
E |
Kryptis E = rytai, W = vakarai |
Greitis |
greitis mazgais |
Kampas |
Stebėjimo kampas laipsniais |
Data |
DATA UTC |
MV |
Magnetinė variacija |
W |
Variacijos E / W kryptis |
CMD (* 6A) |
Kontrolinės sumos duomenys |
Laiką ir datą galime išgauti iš $ GPRMC eilutės suskaičiavę kablelius eilutėje. Su „Arduino“ ir programavimo pagalba randame $ GPRMC eilutę ir ją saugome masyve, tada laiką (24 valandų formatas) galima rasti po vieno kablelio, o datą - po devynis kablelius. Laikas ir data toliau įrašomi eilutėmis.
GPS palydovas pateikia laiką ir datą suderintu pasauliniu laiku (UTC), todėl turime jį atitinkamai konvertuoti. Norėdami perskaičiuoti pagal Indijos laiką, pridėjome 5:30 UTC laiku, nes Indijos laikas yra 5 su puse valandos priekyje UTC / GMT.
Grandinės schema:
„ Arduino GPS Clock“ grandinės jungtys yra paprastos. „Arduino“ yra naudojamas visam procesui valdyti, jis per GPS modulį gauna GPS duomenis iš palydovo, iš $ GPRMC eilutės išskiria datą ir laiką ir rodo juos LCD ekrane.
Duomenų kaiščiai D4, D5, D6, D7 iš 16x2 LCD yra prijungti prie kaiščio Nr. 5, 4, 3, 2 „Arduino“ ir LCD kaiščiai RS ir EN yra prijungti prie „Arduino“ 7 ir 6 kaiščių. GPS imtuvo modulio Tx kaištis yra prijungtas prie „Arduino“ Rx kaiščio 10. „Arduino“ žemės PIN kodas ir GPS yra sujungti vienas su kitu. Čia mes panaudojome SKG13BL GPS modulį, veikiantį 9800 bps greičiu. „Arduino“ taip pat sukonfigūruotas 9800 bps greičiu naudojant funkciją „Serial.begin (9800)“.
Programavimo paaiškinimas:
Pirmiausia programavimo dalyje mes įtraukiame bibliotekas ir nustatome LCD ir programinės įrangos nuosekliojo ryšio kaiščius. Taip pat apibrėžkite keletą kintamųjų su masyvais duomenims saugoti. Čia naudodami „Software Serial Library“, leidome nuoseklų ryšį 10 ir 11 kaiščiuose ir padarėme juos atitinkamai Rx ir Tx. Pagal numatytuosius nustatymus nuosekliam ryšiui naudojami „Arduino“ kaiščiai 0 ir 1, tačiau naudodami „SoftwareSerial“ biblioteką galime leisti nuoseklųjį ryšį per kitus skaitmeninius „Arduino“ kaiščius
# įtraukti
Po to mes pradėjome nuoseklųjį ryšį ir skystųjų kristalų ekraną sąrankos funkcijoje ir parodėme sveikinimo pranešimą LCD ekrane.
Tada mes ištraukėme laiką ir datą iš gautos eilutės.
o (x
Tada konvertuokite laiką ir datą į dešimtainį skaičių ir pakeiskite jį į Indijos laiką (UTC +5: 30)
int UTC_hourDec = UTC_hour.toInt (); int UTC_minutDec = UTC_minut.toInt (); int Antrasis = UTC_second.toInt (); int Data = UTC_data.toInt (); int mėnuo = UTC_month.toInt ();……………
Pagaliau laikas ir data buvo rodomi LCD, naudojant funkciją lcd.print , patikrinkite visą kodą žemiau.