Er zijn veel GPS-satellieten rond de aarde die worden gebruikt om de exacte locatie van elke plaats te bepalen. Samen met de locatiecoördinaten (breedtegraad en lengtegraad) levert het ook andere gegevens op, zoals tijd, datum, hoogte, richtingvolgingshoek enz. We hebben al geleerd om deze GPS-gegevens van de satelliet te lezen met Arduino. Dus gaan we een gps-klok maken met behulp van de 'Tijd en datum'-gegevens van de gps-satelliet. De bijgewerkte GPS-klok is zeer nauwkeurig en biedt de realtime gegevens met een precisie van milliseconden.
Componenten:
- Arduino Uno
- GPS-module
- 16x2 LCD
- Draden aansluiten
- Stroomvoorziening
Werkende uitleg:
GPS-module verzendt de gegevens in NMEA-formaat, zie de uitvoer van GPS-gegevens in onderstaande schermafbeelding. NMEA-formaat bestaat uit verschillende zinnen, waarin we één zin nodig hebben om de datum en tijd te extraheren. Deze zin begint vanaf $ GPRMC en bevat de coördinaten, tijd en andere nuttige informatie. Deze $ GPRMC wordt verwezen naar aanbevolen minimumspecifieke GPS / Transit-gegevens en de lengte van deze string is ongeveer 70 tekens. We hebben eerder de $ GPGGA- string in het voertuigvolgsysteem geëxtraheerd om de lengte- en breedtegraadcoördinaten te vinden. Hier is de GPS-uitvoer:
En de tekenreeks $ GPRMC bevat voornamelijk snelheid, tijd, datum en positie
$ GPRMC, 123519.000, A, 7791.0381, N, 06727.4434, E, 022.4,084.4,230394,003.1, W * 6 A $ GPRMC, HHMMSS.SSS, A, breedtegraad, N, lengtegraad, E, snelheid, hoek, datum, MV, W, CMD
ID |
Omschrijving |
RMC |
Aanbevolen minimumzin C |
HHMMSS.SSS |
Tijd in uur minuten seconden en milliseconden formaat. |
EEN |
Status // A = actief en V = ongeldig |
Breedtegraad |
Breedtegraad 49 graden. 16.45 min. noorden |
N |
Richting N = Noord, S = Zuid |
Lengtegraad |
Lengtegraad (coördinaat) |
E. |
Richting E = Oost, W = West |
Snelheid |
snelheid in knopen |
Hoek |
Volghoek in graden |
Datum |
DATUM in UTC |
MV |
Magnetische variatie |
W. |
Variatierichting E / W |
CMD (* 6A) |
Checksum-gegevens |
We kunnen Tijd en Datum extraheren uit de $ GPRMC-string door de komma's in de string te tellen. Met behulp van Arduino en programmeren vinden we de $ GPRMC-string en slaan deze op in een array, waarna Tijd (24-uursnotatie) kan worden gevonden na één komma en Datum kan worden gevonden na negen komma's. Tijd en datum worden verder opgeslagen in strings.
Een GPS-satelliet geeft de tijd en datum weer in UTC (Coordinated Universal Time), dus we moeten deze dienovereenkomstig converteren. Om om te rekenen naar Indiase tijd hebben we 5:30 UTC-tijd toegevoegd, aangezien de Indiase tijd 5 en een half uur voorloopt op UTC / GMT.
Schakelschema:
Circuitverbindingen van Arduino GPS Clock zijn eenvoudig. Arduino wordt gebruikt om het hele proces te besturen, het ontvangt de GPS-gegevens van de satelliet via de GPS-module, haalt de datum en tijd uit de $ GPRMC-reeks en toont deze op het LCD-scherm.
Datapinnen D4, D5, D6, D7 of 16x2 LCD zijn verbonden met pin nr. 5, 4, 3, 2 van Arduino en commandopin RS en EN van LCD zijn respectievelijk verbonden met pen 7 en 6 van Arduino. GPS-ontvangermodule Tx-pin is verbonden met Rx-pin 10 van Arduino. Ground PIN van Arduino en GPS zijn met elkaar verbonden. Hier hebben we de SKG13BL GPS-module gebruikt, werkend op 9800 bps baudrate. Arduino is ook geconfigureerd met een baudrate van 9800 bps met behulp van de functie "Serial.begin (9800)".
Programmering Toelichting:
In het programmeergedeelte nemen we eerst bibliotheken op en definiëren we pinnen voor LCD- en software seriële communicatie. Definieer ook een variabele met arrays voor het opslaan van gegevens. Door hier Software Serial Library te gebruiken, hebben we seriële communicatie op pin 10 en 11 toegestaan en deze respectievelijk Rx en Tx gemaakt. Standaard worden pin 0 en 1 van Arduino gebruikt voor seriële communicatie, maar door de SoftwareSerial-bibliotheek te gebruiken, kunnen we seriële communicatie op andere digitale pinnen van de Arduino toestaan
# omvatten
Daarna hebben we seriële communicatie en LCD geïnitialiseerd in de setup- functie en een welkomstbericht op LCD getoond.
Vervolgens hebben we tijd en datum uit de ontvangen string gehaald.
terwijl (x
En converteer vervolgens tijd en datum naar decimalen en wijzig deze in Indiase tijd (UTC +5: 30)
int UTC_hourDec = UTC_hour.toInt (); int UTC_minutDec = UTC_minut.toInt (); int Second = UTC_second.toInt (); int Date = UTC_date.toInt (); int Maand = UTC_month.toInt ();……………
En dan zijn eindelijk tijd en datum op het LCD-scherm weergegeven met behulp van de lcd.print- functie, controleer de volledige code hieronder.