Навколо Землі існує багато супутників GPS, які використовуються для точного розташування будь-якого місця. Поряд з координатами місцезнаходження (широта та довгота), він також надає інші дані, такі як час, дата, висота, кут відстеження напрямку тощо. Ми вже навчилися читати ці дані GPS із супутника за допомогою Arduino. Отже, ми збираємося зробити годинник GPS, використовуючи дані «Час та дата» із супутника GPS. GPS Clock Clock дуже точний і забезпечує дані в режимі реального часу з точністю до мілісекунд.
Компоненти:
- Arduino Uno
- Модуль GPS
- РК-дисплей 16x2
- Підключення проводів
- Блок живлення
Робоче пояснення:
Модуль 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, швидкість, кут, дата, МВ, Вт, CMD
Ідентифікатор |
Опис |
RMC |
Рекомендований мінімум речення С |
HHMMSS.SSS |
Час у форматі години хвилини секунд та мілісекунд. |
A |
Статус // A = активний і V = порожній |
Широта |
Широта 49 град. 16,45 хв. Північ |
N |
Напрямок N = Північ, S = Південь |
Довгота |
Довгота (координата) |
Е |
Напрямок E = Схід, W = Захід |
Швидкість |
швидкість у вузлах |
Кут |
Кут відстеження в градусах |
Дата |
DATE в UTC |
МВ |
Магнітна варіація |
W |
Напрямок варіації E / W |
CMD (* 6A) |
Дані контрольної суми |
Ми можемо виділити час і дату з рядка $ GPRMC, підрахувавши коми у рядку. За допомогою Arduino та програмування ми знаходимо рядок $ GPRMC і зберігаємо його в масиві, тоді час (24-годинний формат) можна знайти після однієї коми, а дату - після дев'яти коми. Час і дата додатково зберігаються у рядках.
Супутник GPS надає час і дату за універсальним координованим часом (UTC), тому нам потрібно перевести його відповідно. Для перерахунку за індійським часом ми додали 5:30 за часом UTC, оскільки індійський час на 5 з половиною годин попереду UTC / GMT.
Кругова діаграма:
Схема підключення годинника Arduino GPS проста. Arduino використовується для контролю всього процесу, він отримує дані GPS із супутника через модуль GPS, витягує дату та час із рядка $ GPRMC і показує їх на РК-дисплеї.
Виводи даних D4, D5, D6, D7 РК-дисплея 16x2 підключені до контакту No. 5, 4, 3, 2 Arduino та командний штифт RS та EN РК підключені до виводів 7 та 6 Arduino відповідно. Висновок модуля приймача GPS Tx підключений до виводу Rx 10 Arduino. Наземний PIN-код Arduino та GPS пов’язані між собою. Тут ми використовували GPS-модуль SKG13BL, що працює зі швидкістю передачі в 9800 біт / с. Arduino також налаштовується на швидкість передачі даних в 9800 біт / с за допомогою функції "Serial.begin (9800)".
Пояснення програмування:
Спочатку в програмувальну частину ми включаємо бібліотеки та визначаємо штифти для послідовного зв'язку РК та програмного забезпечення. Також визначте деяку змінну з масивами для зберігання даних. Використовуючи тут послідовну бібліотеку програмного забезпечення, ми дозволили послідовний зв’язок на виводах 10 і 11 і зробили їх відповідно Rx та Tx. За замовчуванням для послідовного зв'язку використовуються виводи 0 та 1 Arduino, але, використовуючи бібліотеку SoftwareSerial, ми можемо дозволити послідовний зв’язок на інших цифрових виводах Arduino
#включати
Після цього ми ініціалізували послідовний зв'язок та РК-дисплей у функції налаштування та показали привітальне повідомлення на РК-дисплеї.
Потім ми отримали час і дату з отриманого рядка.
в той час як (x
А потім перетворіть час і дату в десяткові і змініть їх на індійський час (UTC +5: 30)
int UTC_hourDec = UTC_hour.toInt (); int UTC_minutDec = UTC_minut.toInt (); int Second = UTC_second.toInt (); int Дата = UTC_date.toInt (); int Month = UTC_month.toInt ();……………
А потім, нарешті, на РК-дисплеї за допомогою функції lcd.print було показано час і дату, перевірте повний код нижче.