Когда-то давно мой отец сделал настольные часы из каких-то останков «Электроники», которые работали без корпуса и выглядели примерно так:
Фото из Музея советской электроники
Заметная часть моего детства прошла среди развороченных телевизоров, магнитофонов и прочей техники, я играл с радиодетальками, поэтому вид электронных внутренностей был привычен, не вызывал никаких негативных эмоций, и работающие часы без корпуса смотрелись гораздо интереснее, чем в корпусе. А ещё они отлично светились ночью, озаряя комнату магически-зелёным светом своего ваккумно-люминесцентного индикатора.
Не то чтобы мне хотелось иметь дополнительный источник светового загрязнения у себя дома, но частенько, просыпаясь ночью, хотелось бы знать, который час. Сейчас для этого я вынужден включать экран телефона, который очень неприятно бьёт светом в глаза, или вставать с кровати и нажимать кнопку «стационарного» (на самом деле SIP) телефона, который тоже показывает правильное время.
Собственно, набор требований к часам такой:
- Светятся в темноте, но неярко;
- Дешёвые;
- Сами синхронизируют время, т. е., не требуют ручной подводки;
- Питание от сети, никаких батареек.
Начал поиски готовых вариантов. Удивительно, но под такие, казалось бы, простые требования найти готовые недорогие часы я так и не смог. Часы, в которых есть wi-fi или которые умеют получать время по GPS, есть, но стоят они каких-то неприличных денег и называются «умными», т. е., обладают большим количеством никому не нужных функций. Оказалось, что часы с автосинхронизацией как отдельный прибор, а не как встроенный функционал чего-то большего — это редкость и, судя по ценникам, роскошь.
Во время поиска подходящего варианта узнал от коллеги, что есть так называемые часы с радиоконтролем, а именно — умеющие синронизировать время по протоколу DCF77, но стоят они тоже недёшево, к тому же, передатчик расположен в Германии, и Москва находится фактически на самом краю области приёма сигнала. Я прочёл на форумах, что синхронизация таких часов здесь — это вопрос везения, в основном она проходит ночью, когда меньше радиопомех, а ещё желательно жить повыше и иметь окна, обращённые на запад. Так как окна у меня обращены на юг, живу я за пределами Москвы, да ещё и на востоке, и высотой этажа похвастаться не могу, поэтому я оставил эту идею. Интересно, что и в России есть много служб точного времени — RWM, RBU, RTZ, но часов, способных использовать эти службы, я в продаже не обнаружил.
Остался единственный вариант — сделать часы самому. Идея заключается в том, что нужно найти какой-то микрокомпьютер, который умеет подключаться к интернету по wi-fi, по протоколу NTP получать оттуда точное время и показывать его на подключаемом экранчике, отсчитывая секунды самостоятельно до следующего сеанса синхронизации. Так как вычислительной мощности от этого микрокомпьютера не требуется, поэтому такой вариант, как Raspberry Pi, отпадает: здесь нужно что-то более миниатюрное и дешёвое.
Экран должен быть маленьким — всё-таки, я не на вокзал часы делаю. Мне очень нравятся часы на газоразрядных лампах (nixie tubes), которые смотрятся просто великолепно:
Но для моих познаний в электронике собрать такое слишком сложно, к тому же, эти лампы ярко светят и кушают относительно много электричества, да и корпус для такого великолепия нужно делать посерьёзнее, и блок питания нужен какой-то особый, то есть, задача сильно усложняется. Я обнаружил проект часов в интернете, которые мне подошли бы (Nixie Tap), но этот проект уже давно находится в подвешенном состоянии и неизвестно, будет ли он реализован вообще.
В результате, нашёл ровно то, что мне было нужно, на сайте arduinolab.pw, заказал железки, которые там рекомендуют, на AliExpress:
- Сам микрокомпьютер: LoLin NodeMcu V3 WIFI IoT development board based on ESP8266 — в районе 200 руб.
- Светодиодный дисплей: RobotDyn 4-Digit LED Display Tube, 7-segments, TM1637, 30x14 mm — примерно 100 руб.
Питается это хозяйство от стандартного зарядного устройства для телефона с проводом USB-microUSB. Я хотел собрать вариант 2.0, который с часами реального времени, и заказал их тоже, но впоследствии с ними у меня не заработало, к тому же оказалось, что микрокомпьютер прекрасно и сам справляется со счётом секунд. Код я взял на сайте Стива Кемпа, немного изменив его параметры. В частности, там часы синхронизируются с интернет-серверами каждые 5 минут, что безумно часто и так в принципе нехорошо делать, да и ни к чему.
В Правилах предоставления сервиса кластера серверов точного времени pool.ntp.org не рекомендуется синхронизация чаще, чем раз в полчаса, и вообще — чем реже, тем лучше. Я поставил 36 часов (129600 секунд), как там советуют делать, и за этот интервал вообще не заметно, чтобы часы отклонялись от эталонного времени — точность хода прекрасная. В коде также реализована возможность обновлять встроенную программу прямо через wi-fi (ArduinoOTA), но мне так и не удалось её задействовать — может быть, код устарел, да и в данном случае эта функция не очень нужна, в принципе. Прочие технические подробности можно прочитать в моём Карманном справочнике.
В итоге, я получил точнейшие и дешёвые часы, на которых нет ни одной кнопки. Всё, что им нужно — это питание и доступ к интернету через wi-fi. В качестве корпуса я использовал упаковку от велосипедного ремкомплекта, который я отмыл от наклеек и прорезал в нём необходимые отверстия канцелярским ножом.
А дисплей я выбрал зелёный, потому что, во-первых, зелёные светодиоды не такие яркие, как белые или синие, тем более, что яркость в настройках выставлена ниже средних значений, а во-вторых, это отдалённо напоминает те самые часы из моего детства.