Има много 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 , проверете пълния код по-долу.