Има много GPS сателити около Земята, които се използват за предоставяне на точното местоположение на всяко място. Заедно с координатите на местоположението (географска ширина и дължина), той предоставя и други данни като час, дата, надморска височина, ъгъл на проследяване на посоката и т.н. Вече се научихме да четем тези GPS данни от спътника, използвайки Arduino. Така че ще направим GPS часовник, използвайки данните „Час и дата“ от GPS сателита. GPS актуализиран часовник е много точен и предоставя данни в реално време с точност от милисекунди.
Компоненти:
- Arduino Uno
 - GPS модул
 - 16x2 LCD
 - Свързващи проводници
 - Захранване
 
Работно обяснение:
GPS модулът изпраща данните във формат NMEA, вижте изхода на GPS данни на екрана по-долу. Форматът NMEA се състои от няколко изречения, в които се нуждаем от едно изречение, за да извлечем датата и часа. Това изречение започва от $ GPRMC и съдържа координатите, времето и друга полезна информация. Този $ GPRMC е посочен за Препоръчителни минимални специфични GPS / Транзитни данни и дължината на този низ е около 70 знака. Преди това извадихме низ от $ GPGGA в системата за проследяване на превозни средства, за да намерим координатите на географска ширина и дължина. Ето GPS изхода:

И низът $ GPRMC съдържа предимно скорост, час, дата и позиция
$ GPRMC, 123519.000, A, 7791.0381, N, 06727.4434, E, 022.4,084.4,230394,003.1, W * 6 A $ GPRMC, HHMMSS.SSS, A, географска ширина, N, дължина, E, скорост, ъгъл, дата, MV, W, CMD
| 
 Идентификатор  | 
 Описание  | 
| 
 RMC  | 
 Препоръчително Минимално изречение C  | 
| 
 HHMMSS.SSS  | 
 Време в час минута секунди и милисекунди формат.  | 
| 
 A  | 
 Състояние // A = активно и V = невалидно  | 
| 
 Географска ширина  | 
 Географска ширина 49 градуса 16,45 мин. север  | 
| 
 н  | 
 Посока N = север, S = юг  | 
| 
 Географска дължина  | 
 Географска дължина (координати)  | 
| 
 Е.  | 
 Посока E = Изток, W = Запад  | 
| 
 Скорост  | 
 скорост във възли  | 
| 
 Ъгъл  | 
 Ъгъл на проследяване в градуси  | 
| 
 Дата  | 
 DATE в UTC  | 
| 
 MV  | 
 Магнитна вариация  | 
| 
 W  | 
 Посока на вариация E / W  | 
| 
 CMD (* 6A)  | 
 Данни за контролна сума  | 
Можем да извлечем час и дата от $ GPRMC низ, като преброим запетаите в низа. С помощта на Arduino и програмиране намираме $ GPRMC низ и го съхраняваме в масив, след което Време (24-часов формат) може да се намери след една запетая, а Date може да се намери след девет запетаи. Часът и датата се запазват допълнително в низове.
GPS сателит предоставя час и дата в координирано универсално време (UTC), така че трябва да го преобразуваме съответно. За да конвертираме според индийското време, добавихме 5:30 в UTC време, тъй като индийското време е с 5 часа и половина преди UTC / GMT.
Електрическа схема:
Верижните връзки на Arduino GPS Clock са прости. Arduino се използва за контрол на целия процес, той получава GPS данните от сателит чрез GPS модул, извлича датата и часа от $ GPRMC низ и ги показва на LCD.
Пиновете за данни D4, D5, D6, D7 от 16x2 LCD са свързани към щифт №. 5, 4, 3, 2 на Arduino и командният щифт RS и EN на LCD са свързани съответно към пинове 7 и 6 на Arduino. ПИН за модул GPS приемник Tx е свързан с Rx извод 10 на Arduino. Наземният ПИН на Arduino и GPS са свързани помежду си. Тук използвахме SKG13BL GPS модул, работещ при скорост на предаване от 9800 bps. Arduino също е конфигуриран на скорост на предаване от 9800 bps, като се използва функцията „Serial.begin (9800)“.

Обяснение на програмирането:
В частта за програмиране първо включваме библиотеки и дефинираме щифтове за LCD и софтуерна серийна комуникация. Също така дефинирайте някаква променлива с масиви за съхранение на данни. Използвайки тук серийна библиотека на софтуера, ние разрешихме последователна комуникация на пин 10 и 11 и ги направихме съответно Rx и Tx. По подразбиране Пин 0 и 1 на Arduino се използват за серийна комуникация, но с помощта на библиотеката SoftwareSerial можем да разрешим серийна комуникация на други цифрови щифтове на Arduino
#include
След него инициализирахме серийна комуникация и LCD в настройка и показахме приветствено съобщение на LCD.
След това сме извлекли час и дата от получения низ.
докато (x
И след това конвертирайте времето и датата в десетични и ги променете в индийско време (UTC +5: 30)
int UTC_hourDec = UTC_hour.toInt (); int UTC_minutDec = UTC_minut.toInt (); int Второ = UTC_second.toInt (); int Дата = UTC_date.toInt (); int Month = UTC_month.toInt ();……………
И накрая Часът и датата са показани на LCD с помощта на функцията lcd.print , проверете пълния код по-долу.
