В этой статье мы расскажем, как собрать часы на Arduino с использованием GPS-модуля и другими необходимыми компонентами.
Итак, из этой статьи вы узнаете, как собрать часы на Arduino с помощью GPS-модуля NEO-6M. Вам наверное стало интересно, зачем нам внешний модуль для определения времени, если у нас есть встроенный таймер в Arduino?
И ответ на этот вопрос: да, мы можем собрать часы, используя внутренний таймер, но эта задача будет более сложной. Поэтому использование внешнего модуля для часов на Arduino станет более простым вариантом.
Использование GPS-модуля NEO-6M
Возможно, вы уже использовали модуль GPS для разработки системы слежения, но знаете ли вы, что вы также можете использовать GPS-модуль для создания часов на Arduino? Да, верно, GPS-модуль также отправляет информацию, связанную со временем, и мы собираемся использовать эту информацию для наших часов.
Поэтому, как вы знаете, GPS-модуль NEO-6M предоставляет набор данных в последовательном формате, который включает в себя точное местоположение (широту и долготу). А в дополнение к этому GPS предоставляет информацию о времени и дате. А чтобы отделить требуемую информацию от данных, отправляемых GPS, мы используем плату Arduino.
Результат, который вы видите на изображении выше, — это данные в формате NMEA, полученные GPS-модулем NEO-6M с различных спутников. Результат включает в себя несколько строк, среди которых нам нужны строки, начинающиеся с $ GPRMC и $ GPRMC.
Код для получения времени GPS из строки $ GPRMC
1 |
$GPRMC,182306,A,1523.82,N,00022.24,W,173.8,231.8,110120,004.2,W*70 |
В строке выше буква рядом с $ GPRMC представляет всемирное координированное время (UTC)) (« ччммсс .ss »).
Затем буква рядом с номером UTC указывает статус данных.
- «А» означает, что вы получаете сигнал и что все работает правильно.
- Буква «V» означает, что ваш GPS-навигатор не подключен ни к одному спутнику.
Эти две цифры после буквы «А» означают широту и долготу.
Следующая таблица поможет вам понять значение указанной выше строки NMEA.
Идентификатор | Описание |
220516 | Время в формате часов, минут, секунд и миллисекунд . ( Hms) 18-23-06 |
А | Статус // A = Активно и V = Нет сигнала |
Широта | Широта 15 град. 23,82 мин. север |
N | Направление N = север, S = юг |
Долгота | Долгота 2 2,24 мин. Запад |
W | Направление E = Восток, W = Запад |
Скорость | 173,8 скорость в узлах |
Угол | 231,8 |
Дата | ДАТА по всемирному координированному времени — 01.11.20 |
MV | Магнитная вариация |
W | Направление изменения E / W |
Мы думаем, что этой информации о приведенной выше строке NMEA достаточно для работы над нашим проектом. Если вы хотите узнать больше об этом формате, перейдите по этой ссылке.
Компоненты для сборки GPS-часов на Arduino
Необходимые компоненты:
- GPS-модуль NEO-6M (можно заказать здесь)
- Плата Ардуино (можно заказать здесь)
- Дополнительные провода
- ЖК дисплей (можно заказать здесь)
- Макетная плата (можно заказать здесь)
- Литий-ионный аккумулятор
Программное обеспечение:
- Arduino IDE
Спецификация GPS-модуля NEO-6M
- Одновременный прием до 3-х GNSS (GPS, Galileo, ГЛОНАСС, BeiDou).
- Навигационная чувствительность –167 дБмВт (децибел-милливатт).
- Безопасность и защита целостности.
- Встроенная память ROM.
- Поддерживает все спутниковые системы дополнения.
- Расширенное обнаружение помех и спуфинга. Совместимость с семействами NEO-7, NEO-6 и NEO-5.
Принципиальная электрическая схема
На следующей картинке показана принципиальная схема часов Arduino GPS.
На картинке выше показана схема подключения, в которой мы подключили контакт TX модуля GPS к контакту D9 платы Arduino, запитываем GPS-модуль через саму плату Arduino.
Код программы для GPS-часов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
#include<LiquidCrystal.h> LiquidCrystal lcd(7, 6, 5, 4, 3, 2); #include <SoftwareSerial.h> SoftwareSerial Serial1(9, 10); // RX, TX char str[70]; char *test="$GPRMC"; int temp,i; void setup() { lcd.begin(16,2); Serial1.begin(9600); lcd.setCursor(0,0); lcd.print("GPS Updated Clock"); lcd.setCursor(0,1); lcd.print(" Circuit Digest "); delay(300); } void loop() { serial1Event(); if (temp) { lcd.clear(); int str_lenth=i; int x=0,comma=0; String UTC_hour=""; String UTC_minut=""; String UTC_second=""; String UTC_date=""; String UTC_month=""; String UTC_year=""; String str1=""; while(x<str_lenth) { if(str[x]==',') comma++; if(comma==1) { x++; UTC_hour+=str[x++]; UTC_hour+=str[x++]; UTC_minut+=str[x++]; UTC_minut+=str[x++]; UTC_second+=str[x++]; UTC_second+=str[x]; comma=2; } if(comma==10) { x++; UTC_date+=str[x++]; UTC_date+=str[x++]; UTC_month+=str[x++]; UTC_month+=str[x++]; UTC_year+=str[x++]; UTC_year+=str[x]; } x++; } int UTC_hourDec=UTC_hour.toInt(); int UTC_minutDec=UTC_minut.toInt(); int Second=UTC_second.toInt(); int Date=UTC_date.toInt(); int Month=UTC_month.toInt(); int Year=UTC_year.toInt(); int Hour=UTC_hourDec+5; if(Hour>23) { Hour-=24; Date+=1; } int Minut=UTC_minutDec+30; if(Minut>59) Minut-=60; // UTC_ind_zone_time lcd.clear(); lcd.print("Date: "); lcd.print(Date); lcd.print("/"); lcd.print(Month); lcd.print("/"); lcd.print("20"); lcd.print(Year); lcd.setCursor(0,1); lcd.print("Time: "); lcd.print(Hour); lcd.print(":"); lcd.print(Minut); lcd.print(":"); lcd.print(Second); // delay(100); temp=0; // j=0; i=0; x=0; str_lenth=0; // k=0; } // delay(1000); } void serial1Event() { while(1) { while (Serial1.available()) //проверка данных с GPS { char inChar = (char)Serial1.read(); str[i]= inChar; //хранение данных с GPS в str[] i++; if (i < 7) { if(str[i-1] != test[i-1]) //проверка $GPRMC { i=0; } } if(i>65) { temp=1; break; } } if(temp) break; } } |
Итог
Таким образом, вы сможете сами собрать и запрограммировать часы на Arduino с использованием GPS-модуля NEO-6M. Если у вас есть какие-либо сомнения по данному проекту, то сообщите нам об этом в разделе комментариев.
С Уважением, МониторБанк