Часы с синхронизацией через интернет

Были у меня часы, да состарились и морально, и физически. И решил я продолжить обновление своего парка часов.

По сравнению с предыдущими эти часы проще в использовании — они вообще никак не настраиваются, у них нет ни кнопок, ни пульта управления. Этакая вещь в себе — включил, и они идут, причем правильно! Даже при первом включении сами определяют, летнее сейчас время или зимнее. Хитрость в том, что они берут время из интернета, используя роутер, который есть сейчас практически в каждом доме. Настройка делается только один раз, на этапе программирования.

Новые часы собраны в таком же корпусе, что и предыдущие (ну, понравился он мне):

Интернет-часы

Из функций убраны MP3-плеер, будильник, оперативная коррекция хода часов и температуры, дистанционное управление; из индикации добавлены год, влажность воздуха и RGB-светодиод, сигнализирующий о результате синхронизации времени. Красный цвет — нет связи с роутером, синий — не ответил сервер точного времени, зеленый — норма, точное время получено.

Основа часов — плата NodeMCU-V3 с модулем WiFi ESP-12E:

Увеличить в новом окне
Здесь транзистор 2N7002 служит двунаправленым преобразователем уровня сигнала DIO.

Подстроечник на 20 кОм позволяет оперативно отрегулировать порог срабатывания автоматического регулятора яркости. Как и в предыдущих часах, пришлось ограничиться всего двумя уровнями из-за сильного разброса яркости индикаторов, собранных с разных концов Китая.

Кнопка поставлена по ошибке. Имея мало опыта в работе с NodeMCU, я свято верил, что для ее программирования обязательно надо нажимать кнопку «Flash». Кнопка в часах дублирует кнопку «Flash», чтобы можно было перепрограммировать часы, не открывая корпус. Когда часы уже были собраны, я случайно не успел нажать эту кнопку, а часы все равно перепрошились. Вот такой сюрприз! Эта кнопка выведена на нижнюю сторону корпуса:

Задняя плата в корпусе

Задняя плата крупным планом:

Задняя плата

А это передняя плата:

Передняя плата

Вот ее схема:

Увеличить в новом окне

Увеличить в новом окне

Увеличить в новом окне

Для соединения плат между собой применен шлейф от компьютерного COM-порта и соответствующий разъем, укороченный на 2 контакта.

Теперь немного о скетче. В нем указаны основные настроечные константы, которые в процессе эксплуатации уже не меняются.

Ssid[] и pass[] — имя и пароль WiFi-сети; надо подставить свои значения.

NTP_ADDRESS — адрес сервера точного времени, можно выбрать из имеющихся или найти другой.

ClocksCorr — величина коррекции хода часов. Ее можно вообще не использовать. Она желательна, если часы очень неточные, а интервал между обновлениями большой. Пределы ее изменения — от -128 до 127 в десятичном виде; от 0x80 до 0x7F в 16-ричном; от +1,1 до -1,1 в секундах за сутки. Положительные значения замедляют ход, отрицательные — ускоряют.

TempCorr — величина коррекции температуры в десятых долях градуса. Она нужна из-за того, что внутри корпуса температура примерно на 3,5 градуса выше, чем снаружи. Подбирается в установившемся режиме путем сравнения с другим термометром.

PressCorr — величина коррекции давления (в мм рт. ст.). Нужна в том случае, если хочется, чтобы давление совпадало с данными любимого погодного сайта.

TimeZone — часовой пояс (поправка времени, сдвиг времени относительно гринвичского). Если летнее/зимнее время не используется, можно задать фиксированное значение при объявлении объекта timeClient и не использовать функцию getTimeZone().

Для программирования я использовал следующие настройки Arduino:

Настройки Arduino

В архиве для скачивания находятся схема часов, скетч, печатные платы, использованные библиотеки, чертеж корпуса и схема модуля NodeMCU-V3 с конвертером CH340.

Скачать схему интернет-часов.

Схемы радиоаппаратуры