Ap Zemi ir daudz GPS satelītu, kurus izmanto, lai norādītu precīzu jebkuras vietas atrašanās vietu. Līdztekus atrašanās vietas koordinātām (platums un garums) tas sniedz arī citus datus, piemēram, laiku, datumu, augstumu, virziena izsekošanas leņķi utt. Mēs jau esam iemācījušies lasīt šos GPS datus no satelīta, izmantojot Arduino. Tāpēc mēs izgatavosim GPS pulksteni, izmantojot GPS satelīta datus “Laiks un datums”. GPS atjauninātais pulkstenis ir ļoti precīzs un nodrošina reāllaika datus ar milisekunžu precizitāti.
Komponenti:
- Arduino Uno
- GPS modulis
- 16x2 LCD
- Savienojošie vadi
- Enerģijas padeve
Darba skaidrojums:
GPS modulis nosūta datus NMEA formātā, skatiet GPS datu izvadi zemāk esošajā ekrānuzņēmumā. NMEA formāts sastāv no vairākiem teikumiem, kuros mums nepieciešams viens teikums, lai iegūtu datumu un laiku. Šis teikums sākas ar $ GPRMC un satur koordinātas, laiku un citu noderīgu informāciju. Šis $ GPRMC ir norādīts uz Ieteicamie minimālie specifiskie GPS / Tranzīta dati, un šīs virknes garums ir aptuveni 70 rakstzīmes. Mēs iepriekš esam izvilkuši $ GPGGA virkni transportlīdzekļu izsekošanas sistēmā, lai atrastu platuma un garuma koordinātas. Šeit ir GPS izeja:
Un $ GPRMC string galvenokārt satur ātrums, laiku, datumu un vietu
$ GPRMC, 123519.000, A, 7791.0381, N, 06727.4434, E, 022.4.084.4,230394,003.1, W * 6 A $ GPRMC, HHMMSS.SSS, A, platums, N, garums, E, ātrums, leņķis, datums, MV, W, CMD
Identifikators |
Apraksts |
RMC |
Ieteicamais minimālais teikums C |
HHMMSS.SSS |
Laiks stundas minūtēs sekundēs un milisekundes formātā. |
A |
Statuss // A = aktīvs un V = nederīgs |
Platums |
Platums 49 grādi. 16.45 min. Uz ziemeļiem |
N |
Virziens N = ziemeļi, S = dienvidi |
Garums |
Garums (koordinātas) |
E |
Virziens E = Austrumi, W = Rietumi |
Ātrums |
ātrums mezglos |
Leņķis |
Izsekošanas leņķis grādos |
Datums |
DATE UTC |
MV |
Magnētiskā variācija |
W |
E / W variācijas virziens |
CMD (* 6A) |
Kontrolsummas dati |
Laiku un datumu mēs varam iegūt no virknes $ GPRMC, skaitot virknē esošos komatus. Ar Arduino un programmēšanas palīdzību mēs atrodam virkni $ GPRMC un glabājam to masīvā, pēc tam laiku (24 stundu formāts) var atrast pēc viena komata, bet Datumu - pēc deviņiem komatiem. Laiks un datums tiek saglabāti virknēs.
GPS satelīts nodrošina laiku un datumu koordinētajā universālajā laikā (UTC), tāpēc mums tas attiecīgi jāpārvērš. Lai veiktu konvertēšanu pēc Indijas laika, esam pievienojuši 5:30 pēc UTC laika, jo Indijas laiks ir 5 un pusstundas priekšā UTC / GMT.
Ķēdes shēma:
Arduino GPS pulksteņa ķēdes savienojumi ir vienkārši. Arduino tiek izmantots visa procesa kontrolei, tas saņem GPS datus no satelīta caur GPS moduli, no $ GPRMC virknes izvelk datumu un laiku un parāda tos LCD ekrānā.
16x2 LCD ekrāna datu tapas D4, D5, D6, D7 ir savienotas ar tapu Nr. Arduino 5, 4, 3, 2 un LCD komandas RS un EN ir attiecīgi savienotas ar Arduino 7. un 6. tapu. GPS uztvērēja moduļa Tx tapa ir savienota ar Arduino Rx tapu 10. Arduino zemes PIN un GPS ir savienoti viens ar otru. Šeit mēs izmantojām SKG13BL GPS moduli, kas darbojas ar 9800 bps pārraides ātrumu. Arduino ir konfigurēts arī ar ātrumu 9800 bps, izmantojot funkciju “Serial.begin (9800)”.
Programmēšanas skaidrojums:
Programmēšanas daļā vispirms mēs iekļaujam bibliotēkas un definējam LCD un programmatūras sērijveida saziņas tapas. Datu glabāšanai definējiet arī dažus mainīgos ar masīviem. Šeit izmantojot programmatūras sērijas bibliotēku, mēs esam atļāvuši sērijveida saziņu ar 10. un 11. kontaktu un padarījām tos attiecīgi par Rx un Tx. Pēc noklusējuma Arduino 0 un 1 tapas tiek izmantotas sērijveida saziņai, taču, izmantojot SoftwareSerial bibliotēku, mēs varam atļaut seriālu saziņu ar citām Arduino digitālajām tapām
# iekļaut
Pēc tam mēs esam inicializējuši sērijveida sakarus un LCD iestatīšanas funkcijā un parādījuši sveiciena ziņojumu LCD.
Tad mēs esam izvilkuši laiku un datumu no saņemtās virknes.
kamēr (x
Pēc tam laiku un datumu konvertējiet uz decimāldaļu un mainiet to uz Indijas laiku (UTC +5: 30)
int UTC_hourDec = UTC_hour.toInt (); int UTC_minutDec = UTC_minut.toInt (); int Otrais = UTC_sekunde.toInt (); int datums = UTC_date.toInt (); int mēnesis = UTC_mēness.toInt ();……………
Tad beidzot laiks un datums ir parādīti LCD, izmantojot funkciju lcd.print , pārbaudiet pilnu kodu zemāk.