Были у меня часы, да состарились и морально, и физически. И решил я продолжить обновление своего парка часов.
По сравнению с предыдущими эти часы проще в использовании — они вообще никак не настраиваются, у них нет ни кнопок, ни пульта управления. Этакая вещь в себе — включил, и они идут, причем правильно! Даже при первом включении сами определяют, летнее сейчас время или зимнее. Хитрость в том, что они берут время из интернета, используя роутер, который есть сейчас практически в каждом доме. Настройка делается только один раз, на этапе программирования.
Новые часы собраны в таком же корпусе, что и предыдущие (ну, понравился он мне):
Интернет-часы
Из функций убраны 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.
Скачать схему интернет-часов.