Авторизация
Регистрация

Напомнить пароль

Часы, которые не убегают

Всё началось с того, что меня достали вечно убегающие китайские часы. Причём не на секунды, а на минуты. Когда за полгода часы убегают на 8 минут (реальная цифра) — это бесит.
И я решил это исправить.

Как я до этого дошёл (предыстория)

Для начала я составил для себя список — что я хочу. И вот что получилось:
  • индикация — семисегментные светодиодные индикаторы не менее 40 мм высотой — чтобы ночью было видно время с кровати
  • синхронизация от NTP
  • умеренная толщина, чтобы можно было вешать на стену и это не смотрелось бегемотом
Для начала я прошерстил Aliexpress на предмет часов с синхронизацией от NTP. Да, они существуют, но это либо маленькие настольные кубики, либо уже офисные варианты с бешеной ценой. Облом.
Ок, раз такого нету — попробую сделать сам. С контроллером сразу всё было понятно — ESP32 — дешево, сразу есть куча библиотек. Но — если брать не голый модуль, а готовый контроллер, то он довольно габаритный и резко увеличивает толщину готового изделия. И тут я подумал — а почему бы не разделить контроллер и индикатор? В таком случае контроллер может спокойно лежать рядом с блоком питания (а для LED индикации он нужен в любом случае), а от него до блока индикации пойдёт тонкий провод с питанием и управлением. Ок.
Сначала я начал прорабатывать вариант «готовые семисегментные индикаторы + многоканальные LED контроллеры со стабилизацией выходного тока». Получалось не очень. Во-первых, большие индикаторы довольно дороги. А во-вторых — они неожиданно толстые. Получалось дорого и громоздко.
Следующим вариантом стало «самодельные семисегментные индикаторы на SMD светодиодах + многоканальные LED контроллеры со стабилизацией выходного тока». Уже лучше. Но вылезла неожиданная проблема — для равномерной засветки на сегмент надо вешать по два светодиода. Если их вешать последовательно, то требуемое напряжение становится больше 5 вольт, а это резко усложняет запитывание системы. Если вешать параллельно, то какой смысл ставить драйвера со стабилизацией тока?
И тут я подумал — зачем мне драйвера — сейчас же есть куча адресуемых светодиодов WS2812 в маленьких SMD корпусах. Три провода, любой цвет, компактный корпус. То, что надо.

Конструирование

Изучив то, что есть на Aliexpress я выбрал вариант корпуса светодиодов — 3528. Как мне казалось — он достаточно маленький чтобы вписаться в сегмент, но при этом еще не настолько маленький, чтобы его нельзя было паять обычным паяльником. Как потом оказалось — это был неудачный выбор.
Далее я засел в Autodesk inventor и нарисовал корпус, так как исходил именно от желаемой формы сегментов. Я воспользовался тем, что в моём распоряжении есть двухголовый 3D принтер, поэтому рассеиватели я сделал белым ABS пластиком, а основной корпус — чёрным ABS пластиком. Получилось как-то так:
Далее я экспортировал слой с контурами плат, сегментов и расположением светодиодов в Kicad и нарисовал платы. Платы получились очень простые и я радостно заказал десяток плат у китайцев.
Получив платы я начал их паять и понял, что крепко лажанулся. Дело в том, что стандартный footprint для светодиода WS2812 в корпусе 3528 рассчитан на запайку в печке. И припаять его паяльником даже с самым тонким жалом почти невозможно — площадки почти не выступают из-под корпуса.
Убив с десяток светодиодов я пошёл на поклон к знакомому мастеру, который мне с помощью подогреваемого стола и какой-то матери напаял светодиоды на две платы.
Собрав всё это в кучу и набросав простейший скетч на GyverNTP и FastLED я таки получил свои первые часы. И это даже работало. Надо было делиться достижениями с народом. Но в варианте с 3528 это было нереально.
Первое, что я сделал — купил такие же светодиоды в корпусе 1209. Несмотря на название они буквально на полмиллиметра меньше 3528, что и позволило их запаивать ручками. Ок. Можно делиться.

Конструкция

Корпус

Корпус состоит из двух частей — передней и задней. Исходные файлы в формате Autodesk Inventor лежат тут, а готовые STL модели тут.
Так как передняя часть печатается двумя пластиками, то после импорта STL в слайсер надо пометить грани, которые должны быть белыми. Я использую Snapmaker Luban, там этот инструмент называется Mesh Painting. Готовый файл для Luban после разметки лежит вместе с STL файлами.
После печати получаем переднюю и заднюю части. В переднюю часть вбиваем медные вставки M3X4X4mm под винты крепления плат. В результате должно получиться примерно так:

Платы

Плату рисовал в KiCad 9.0, все исходники здесь. Там же лежат два готовых zip файла с герберами для заказа. Без номера — исходная версия, которую можно увидеть на фото. С постфиксом V2 — новая версия, рассчитанная под ручную пайку с кастомным footprint. Заказать я их уже заказал, а получить и проверить еще не успел. Поэтому пока выкладываю обе версии.
Напаиваем светодиоды и конденсаторы по питанию. Конденсаторы можно не ставить — у меня успешно работала плата и без них. Но с ними как-то спокойнее.
С 3528 получается как-то вот так:
С 1209 — вот так:
Я подпаивал трехконтактный хвостик с разъемом, но если надо большую длину, то можно прямо напаивать трехпроводный плоский кабель соответствующей длины.
Со стороны ESP32 на этот кабель обжимается обычный трёхконтактный Dupont разъем. Я когда-то покупал набор, взял из него.
Следует помнить, что со стороны индикатора последовательность GND-DATA-VCC, а со стороны ESP32 — VCC-GND-DATA — не забываем правильно перекинуть линии. Кроме того, не забываем, что Dupont можно вставить любой стороной — обязательно вставляем ПРАВИЛЬНО
Временно прикручиваем платы на переднюю часть корпуса короткими винтами M3x6 и соединяем их короткими проводами. Должно получиться как-то так:
Разбираем и с использованием винтов M3x10 окончательно собираем индикаторную часть. Готово.

Контроллер

Готовим часть контроллера. ESP32 я покупал здесь.
Печатаем для неё кожух
Скручиваем половинки винтами M3x10 — они просто входят в пластик, но так как нагрузки нет, то держатся довольно неплохо.
В кожухе заранее предусмотрено отверстие под dupont разъем с питанием и данными.
Остальные отверстия сделаны под датчик освещенности для автоматической регулировки яркости, но эта часть в программе пока не реализована — можете потом добавить сами.
Сделано под датчик

Прошивка

Основной скетч лежит здесь
В Arduino для него надо выбрать плату DOIT ESP32 DEVKIT V1 и соответствующий COM-порт.
Нужно установить библиотеки GyverNTP и FastLED, в WiFi.begin задать имя и пароль точки доступа. Если надо — поменять часовой пояс — сейчас стоит +3. Можно поиграться с цветом и яркостью. Всё, грузим в плату.
Скетч простой как гвоздь, так что можно свободно менять что угодно — яркость, цвет, алгоритм и т.д. и т.п.
Ну вот, собственно, и всё. Если есть вопросы — спрашивайте в комментах — отвечу там же или добавлю в статью.
Добавить в избранное
+44 +48
свернутьразвернуть
Комментарии (45)
RSS
+
avatar
+6
  • dimax
  • 07 августа 2025, 17:26
Чёт разделение на 2 блока не очень хорошая идея. Может у меня такое видение гармонии, но меня даже внешние БП раздражают, особенно если он не в вилке. Если вас это нисколько не смущает, тогда конечно другое дело :)
+
avatar
0
  • xNIXx
  • 07 августа 2025, 19:24
Платы 100х100 стоят 6-7$, а 110-110 что то 30+ что-ли…
+
avatar
0
Отлично. Мой проект на esp8266 — mysku.club/blog/aliexpress/88409.html
+
avatar
+4
  • ploop
  • 07 августа 2025, 17:42
Хех, мой вообще на ассемблере AVR со статической индикацией :)
Блин… сколько лет прошло…

Фотки
+
avatar
0
ассемблер это хорошо, ждем титанов, которые сразу фигачат компилированный машинный код)
+
avatar
0
Пишите свое. Все библиотеки открыты. Библиотеку драйвера MAX тоже дам, просто лень выкладывать, никому не надо.
+
avatar
0
  • ploop
  • 07 августа 2025, 20:35
В нём, кстати, куча фишек было. Помимо порядка 10 вариантов отображения — время (секунды/без), дата, 2 температуры, давление, в разных комбинациях на трёх блоках, они ещё умели
— Пульт ДУ от любой техники. В режиме обучения запоминает нажатые кнопки и потом можно управлять. Руками выставить время/дату и корректировки к аналоговому датчику давления, цифровую подстройку точности хода, ну и эти режимы отображения. Можно полностью погасить табло.
— 2 датчика DS18B20
— Аналоговый датчик давления, отдельно ОУ для выделения атмосферного диапазона
— Главная фишка — автоматическая регулировка яркости высокочастотным ШИМом (нет мерцания). Заложена таблица интенсивности, адаптированная под глаз человека. Цифры стоят как нарисованные и с выключенным светом, и со включенным, немного теряют яркость при прямых солнечных лучах — просто индикаторы не вывозят.
— Синхронизация времени по UART, но уже отдельным устройством.
+
avatar
+15
  • Andreas1
  • 07 августа 2025, 17:34
1. Стандартные 7сегментники не просто так имеют наклон 7..10 градусов, прямые цифры некрасивы.
2. Белое свечение на белом фоне среди черного имеет малый контраст, не хватает дымчатого светофильтра или печати чем-то более темным.
3 Не думаю, что маленький модулек esp32c3 mini увеличил бы толщину, зато питать можно было бы от любого зарядника без колхозного провода.
+
avatar
0
1. По этому поводу я целое исследование устраивал. И первые варианты копировали стандартные большие индикаторы от Kingbright. Вот, до сих пор валяется тестовый вариант:
Но как-то очень агрессивно всё это получалось. В результате просто скопировал дизайн китайских часов:
2. Просто в окно солнце светило. В реальности контраста вполне достаточно для уверенного считывания, учитывая, что в скетче яркость стоит на 8 (с максимальной 255).
3. Существенно усложняется плата и растёт толщина. Если не нравится стандартный цветной трехпроводный, то есть куча вариантов — от тонкого прозрачного трёхпроводного (используется для гирлянд на WS2812) до провода от старой мыши (тонкий, гибкий и 4 провода внутри).
+
avatar
0
  • Andreas1
  • 07 августа 2025, 19:49
1. Просто пропорции нарушены, слишком тонкий или великоват угол. Я много разных часов от 70 до 350мм высотой проектировал для производства, прямые цифры всегда хуже наклонных смотрелись, просто толщину и наклон подбирать приходилось.
2. А при темных несветящихся сегментах и на солнце хорошо видно было бы.
3. Не очень понял, просто на плату ставится маленький модулек плоский и фсе, TypeC его наружу. Все равно между рассеивателем и светодиодами нужно расстояние для равномерной светимости и оно видно внутри корпуса. Модулек 22*18, на взгляд примерно чуть побольше и есть от сегмента до края корпуса.
+
avatar
0
1. На вкус все фломастеры разные. Мне такой вариант нравится
2. Возможно. Можно будет попробовать взять прозрачный ABS — вроде был. Но пока и такой вполне устраивает — никаких проблем с читаемостью я не испытываю.
3. Насколько я помню FastLed не поддерживает ESP32C3. И места там недостаточно (~15мм), надо расширять. И, самое главное, для меня это вообще не проблема. Найти красивый тонкий прозрачный трехжильный провод элементарно. Так как блок питания всё равно нужен, то маленькая коробочка с ESP32 болтающаяся где-то рядом с ним никому не мешает
+
avatar
+7
  • gnznk
  • 07 августа 2025, 17:34
Затемнить бы циферблат, а то белое на белом не видно
+
avatar
+1
Дык а точность хода-то ?!
+
avatar
0
  • SanekK
  • 07 августа 2025, 17:44
Да, меня тоже бесят эти неточные часы.
Я думал просто выкинуть родную плату и вкорячить туда кастомную (если бы умел их делать)), а корпус оставить заводской с большими сегментами.
+
avatar
0
  • xNIXx
  • 07 августа 2025, 19:25
В целом даже нтп не нужны, нормальные rtc совершенно не убегают…
+
avatar
+2
Любые RTC убегают. Какие то быстрее, какие то медленнее. Но убегают абсолютно все. Причём проблема в том, что часы показывающие неправильно время выглядят абсолютно точно так же как и часы показывающие точное. То есть когда рано или поздно часы начнут врать, то ты этого не заметишь. Наличие синхронизации переводит часы в категорию «включил и забыл, всегда точное время».
+
avatar
0
Наличие синхронизации переводит часы в категорию «включил и забыл, всегда точное время».
Наличие синхронизации лишь рождает иллюзию «точное время всегда», так как сеть не дает гарантии получения точного времени. В моей практике администрирования были случаи, когда сервера точного времени банили IP провайдера, либо сам провайдер резал трафик по 123 порту. В теории все прекрасно, а на практике «дерьмо случается».
+
avatar
0
  • CuMr
  • 07 августа 2025, 17:44
есп вполне можно было на обратной стороне развести, добавит толщины пару миллиметров
+
avatar
+5
  • Imk
  • 07 августа 2025, 17:47
Отличные часы и очень здорово сделаны, едиственное что я бы предложил из блока с ESP-32 сделать подставку примерно так, тогда можно было бы зарядку к ней подключать, и избавиться от провода!
+
avatar
0
  • Ed_sled
  • 07 августа 2025, 18:03
Я точно не помню, но где-то я встречал готовые часы, но с синхронизацией по WI Fi. И ещё есть часы которые синхронизируются с передающим сигналом точного времени расположенном где-то в Германии. Каждый час он передает сигнал и часы корректируются.
+
avatar
0
  • Uniset
  • 07 августа 2025, 18:53
В метеостанциях Oregon Scientific так синхронизируется, причём иногда на две тысячи километров пробивает от Франкфурта до Урала.
А так, когда сторублёвые китайские часы начали сильно врать, поменял на них кварц и стали более-менее точно ходить.
+
avatar
0
  • AndryL
  • 07 августа 2025, 19:03
Да во многих, да же в наручных.
DCF-77
Только у меня редко и в пасмурную погоду.
RST и OREGON станции
+
avatar
0
  • Ed_sled
  • 07 августа 2025, 19:18
Вот вот. Именно на этой метеостанции я это и наблюдаю, но срабатывают они 50/50.
+
avatar
0
  • SanekK
  • 07 августа 2025, 19:47
Только нормально синхронизируются через передатчик в Германии в России только очень западная часть страны.
В России тоже есть передатчики точного времени, но ни одних потребительских часах не встречал с поддержкой нашего стандарта. А вот DCF77 довольно популярные, особенно от европейских брендов.
+
avatar
0
  • nimoid
  • 07 августа 2025, 18:29
Вырвиглазная картинка, а так +
+
avatar
-1
  • AndryL
  • 07 августа 2025, 18:37
Так себе идея с синхр. по сети.))
Не знаю, как они это делают(так, как сервера синхр. разные). но период. в Москве идет подлог.
Кто с видеонабл. работает. те уже попадали))
когда архив есть, записи есть а событий нет! Время пропало (остановилось) на 6ч)))
Синхронизация стояла раз в час.
А потом перепрыгнуло и пошло дальше.
У меня да же телек LG отказался на днях VK видео показывать.
Ругается, сертификат бла-бла…
Оказывается год перепрыгнул))) (стояла авт. синхр.)
ну и по нескольку раз в день. я по аэр. Шереметьево катаюсь.
Но это уже «классика»…
+
avatar
+2
  • xNIXx
  • 07 августа 2025, 19:27
Я хз что у вас там убегает, у меня сервера синхронизируются.
За 20+ лет проблем не замечено…
+
avatar
+1
Чушь какая. Нормальные сервера надо использовать, и все ок будет. Тысячи серверов исключительно по NTP синхронизируются.
+
avatar
+1
Всё зависит от того, на какой NTP сервер ты настроен. Настраивайся на хороший сервер и всё будет хорошо. А для надёжности можно собственный сервер поднять.

Кстати по хорошему время при синхронизации не должно резко прыгать. Правильные решения не меняют время, а корректируют скорость течения системного времени таким образом, чтобы время системы плавно «догоняло» истинное время.
+
avatar
0
  • mike888
  • 07 августа 2025, 18:45
Как бы всегда настраивал кварцы в часах и ничего не бегало. Простым частотомером Ч3-33 мерить период секундного выхода или любого удобного сигнала
+
avatar
+1
  • funtech
  • 07 августа 2025, 19:08
Если нет желания делать самому то есть готовый корпус со светодиодной матрицей для raspberry pico — www.waveshare.com/pico-clock-green.htm
+
avatar
0
Не плохо.
+
avatar
+1
Если нет желания делать самому, берётся старый смартфон…
+
avatar
0
  • Boor
  • 07 августа 2025, 20:04
А не проще и дешевле купить всем известный 'кубик', точность которого разумеется не идеальная, но раз в месяц синхронизировать его труда не составляет...)
+
avatar
0
  • fafhrd
  • 07 августа 2025, 19:31
что за бездуховный LED индикатор!
надо делать на ламповом VFD от «дисплея покупателя»
cxem.net/arduino/arduino275.php
или на газоразрядных советских ИН-ках.

в обоих случаях DS3231 в качестве точного источника времени дает отличную точность хода часов.
+
avatar
0
  • ABATAPA
  • 07 августа 2025, 19:48
У меня есть. Ярковато в темноте даже на 1 из 4 яркости. И выгорают сегменты.
Правда, у меня их 60+ штук…
+
avatar
0
  • fafhrd
  • 07 августа 2025, 20:06
За год ничего не выгорел. Продолжаю наблюдение…
+
avatar
+1
Большой минус — использование белого пластика. Неактивные сегменты очень хорошо видно и это большой недостаток. Хотя бы тренировочную пленку наклеить.
+
avatar
+2
Имхо, не очень красивое решение с двухцветным пластиком. Ночью наверное норм, но днём, при хорошем свете разница в яркости между белым сегментом и светящимся белым сегментом небольшая. Да она есть, и если присмотреться то нет проблемы прочитать. Но если в описании интерфейса фигурирует «если присмотреться» то это явно плохое решение.

Для сегментных экранов мне нравится другое решение. Печатать лицевую поверхнось тонким слоем. Если светодиоды явркие, то прозрачности пластика достаточно, чтобы цифры через него было видно, при этом выключенные сегменты совершенно не отличимы от фона. Что улучшает читаемость.

+
avatar
+1
  • dkim7
  • 07 августа 2025, 19:40
Тоже делал часы на esp. Но индикатор использовал готовый.
+
avatar
0
Автор, если ты из РФ, расскажи пожалуйста где ты нынче заказываешь платы и что-почём выходит за это удовольствие?)
+
avatar
0
Заказываю — тут
10 плат обошлись в 16$
+
avatar
0
С доставкой, какого размера платы? И сколько времени заняла доставка?
+
avatar
0
  • Ulises
  • 07 августа 2025, 20:07
Так себе идея с синхр. по сети.))
Раньше таких проблем не было. Хоть от питающей сети 50Гц частоту задающего генератора бери, хоть «часовой» кварц на 32.768кГц, хоть какой будет, но повыше и дели ег на сколько требуется. Лучше, конечно, что-нить с «круглой» частотой, кратной 10, я частенько на 1-10мГц ставил.

И синхронизация, доступная каждому:


или
+
avatar
0
Как же, помню. «Передаем сигналы точного времени… пик… пик… пик… пик… пик… пик. Для тех, кто не успел, повторяем… пик… пик… пик… пик… пик… пик.»
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.