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

Всё началось с того, что меня достали вечно убегающие китайские часы. Причём не на секунды, а на минуты. Когда за полгода часы убегают на 8 минут (реальная цифра) — это бесит.
И я решил это исправить.
Ок, раз такого нету — попробую сделать сам. С контроллером сразу всё было понятно — ESP32 — дешево, сразу есть куча библиотек. Но — если брать не голый модуль, а готовый контроллер, то он довольно габаритный и резко увеличивает толщину готового изделия. И тут я подумал — а почему бы не разделить контроллер и индикатор? В таком случае контроллер может спокойно лежать рядом с блоком питания (а для LED индикации он нужен в любом случае), а от него до блока индикации пойдёт тонкий провод с питанием и управлением. Ок.
Сначала я начал прорабатывать вариант «готовые семисегментные индикаторы + многоканальные LED контроллеры со стабилизацией выходного тока». Получалось не очень. Во-первых, большие индикаторы довольно дороги. А во-вторых — они неожиданно толстые. Получалось дорого и громоздко.
Следующим вариантом стало «самодельные семисегментные индикаторы на SMD светодиодах + многоканальные LED контроллеры со стабилизацией выходного тока». Уже лучше. Но вылезла неожиданная проблема — для равномерной засветки на сегмент надо вешать по два светодиода. Если их вешать последовательно, то требуемое напряжение становится больше 5 вольт, а это резко усложняет запитывание системы. Если вешать параллельно, то какой смысл ставить драйвера со стабилизацией тока?
И тут я подумал — зачем мне драйвера — сейчас же есть куча адресуемых светодиодов WS2812 в маленьких SMD корпусах. Три провода, любой цвет, компактный корпус. То, что надо.
Далее я засел в Autodesk inventor и нарисовал корпус, так как исходил именно от желаемой формы сегментов. Я воспользовался тем, что в моём распоряжении есть двухголовый 3D принтер, поэтому рассеиватели я сделал белым ABS пластиком, а основной корпус — чёрным ABS пластиком. Получилось как-то так:
Далее я экспортировал слой с контурами плат, сегментов и расположением светодиодов в Kicad и нарисовал платы. Платы получились очень простые и я радостно заказал десяток плат у китайцев.
Получив платы я начал их паять и понял, что крепко лажанулся. Дело в том, что стандартный footprint для светодиода WS2812 в корпусе 3528 рассчитан на запайку в печке. И припаять его паяльником даже с самым тонким жалом почти невозможно — площадки почти не выступают из-под корпуса.
Убив с десяток светодиодов я пошёл на поклон к знакомому мастеру, который мне с помощью подогреваемого стола и какой-то матери напаял светодиоды на две платы.
Собрав всё это в кучу и набросав простейший скетч на GyverNTP и FastLED я таки получил свои первые часы. И это даже работало. Надо было делиться достижениями с народом. Но в варианте с 3528 это было нереально.
Первое, что я сделал — купил такие же светодиоды в корпусе 1209. Несмотря на название они буквально на полмиллиметра меньше 3528, что и позволило их запаивать ручками. Ок. Можно делиться.
Так как передняя часть печатается двумя пластиками, то после импорта STL в слайсер надо пометить грани, которые должны быть белыми. Я использую Snapmaker Luban, там этот инструмент называется Mesh Painting. Готовый файл для Luban после разметки лежит вместе с STL файлами.
После печати получаем переднюю и заднюю части. В переднюю часть вбиваем медные вставки M3X4X4mm под винты крепления плат. В результате должно получиться примерно так:

Напаиваем светодиоды и конденсаторы по питанию. Конденсаторы можно не ставить — у меня успешно работала плата и без них. Но с ними как-то спокойнее.
С 3528 получается как-то вот так:
С 1209 — вот так:
Я подпаивал трехконтактный хвостик с разъемом, но если надо большую длину, то можно прямо напаивать трехпроводный плоский кабель соответствующей длины.
Со стороны ESP32 на этот кабель обжимается обычный трёхконтактный Dupont разъем. Я когда-то покупал набор, взял из него.
Следует помнить, что со стороны индикатора последовательность GND-DATA-VCC, а со стороны ESP32 — VCC-GND-DATA — не забываем правильно перекинуть линии. Кроме того, не забываем, что Dupont можно вставить любой стороной — обязательно вставляем ПРАВИЛЬНО
Временно прикручиваем платы на переднюю часть корпуса короткими винтами M3x6 и соединяем их короткими проводами. Должно получиться как-то так:
Разбираем и с использованием винтов M3x10 окончательно собираем индикаторную часть. Готово.
Печатаем для неё кожух
Скручиваем половинки винтами M3x10 — они просто входят в пластик, но так как нагрузки нет, то держатся довольно неплохо.
В кожухе заранее предусмотрено отверстие под dupont разъем с питанием и данными.
Остальные отверстия сделаны под датчик освещенности для автоматической регулировки яркости, но эта часть в программе пока не реализована — можете потом добавить сами.
Сделано под датчик
В Arduino для него надо выбрать плату DOIT ESP32 DEVKIT V1 и соответствующий COM-порт.
Нужно установить библиотеки GyverNTP и FastLED, в WiFi.begin задать имя и пароль точки доступа. Если надо — поменять часовой пояс — сейчас стоит +3. Можно поиграться с цветом и яркостью. Всё, грузим в плату.
Скетч простой как гвоздь, так что можно свободно менять что угодно — яркость, цвет, алгоритм и т.д. и т.п.
Ну вот, собственно, и всё. Если есть вопросы — спрашивайте в комментах — отвечу там же или добавлю в статью.
И я решил это исправить.
Как я до этого дошёл (предыстория)
Для начала я составил для себя список — что я хочу. И вот что получилось:- индикация — семисегментные светодиодные индикаторы не менее 40 мм высотой — чтобы ночью было видно время с кровати
- синхронизация от NTP
- умеренная толщина, чтобы можно было вешать на стену и это не смотрелось бегемотом
Ок, раз такого нету — попробую сделать сам. С контроллером сразу всё было понятно — ESP32 — дешево, сразу есть куча библиотек. Но — если брать не голый модуль, а готовый контроллер, то он довольно габаритный и резко увеличивает толщину готового изделия. И тут я подумал — а почему бы не разделить контроллер и индикатор? В таком случае контроллер может спокойно лежать рядом с блоком питания (а для LED индикации он нужен в любом случае), а от него до блока индикации пойдёт тонкий провод с питанием и управлением. Ок.
Сначала я начал прорабатывать вариант «готовые семисегментные индикаторы + многоканальные LED контроллеры со стабилизацией выходного тока». Получалось не очень. Во-первых, большие индикаторы довольно дороги. А во-вторых — они неожиданно толстые. Получалось дорого и громоздко.
Следующим вариантом стало «самодельные семисегментные индикаторы на SMD светодиодах + многоканальные LED контроллеры со стабилизацией выходного тока». Уже лучше. Но вылезла неожиданная проблема — для равномерной засветки на сегмент надо вешать по два светодиода. Если их вешать последовательно, то требуемое напряжение становится больше 5 вольт, а это резко усложняет запитывание системы. Если вешать параллельно, то какой смысл ставить драйвера со стабилизацией тока?
И тут я подумал — зачем мне драйвера — сейчас же есть куча адресуемых светодиодов WS2812 в маленьких SMD корпусах. Три провода, любой цвет, компактный корпус. То, что надо.
Конструирование
Изучив то, что есть на Aliexpress я выбрал вариант корпуса светодиодов — 3528. Как мне казалось — он достаточно маленький чтобы вписаться в сегмент, но при этом еще не настолько маленький, чтобы его нельзя было паять обычным паяльником. Как потом оказалось — это был неудачный выбор.Далее я засел в Autodesk inventor и нарисовал корпус, так как исходил именно от желаемой формы сегментов. Я воспользовался тем, что в моём распоряжении есть двухголовый 3D принтер, поэтому рассеиватели я сделал белым ABS пластиком, а основной корпус — чёрным ABS пластиком. Получилось как-то так:

Получив платы я начал их паять и понял, что крепко лажанулся. Дело в том, что стандартный 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 получается как-то вот так:


Со стороны ESP32 на этот кабель обжимается обычный трёхконтактный Dupont разъем. Я когда-то покупал набор, взял из него.
Следует помнить, что со стороны индикатора последовательность GND-DATA-VCC, а со стороны ESP32 — VCC-GND-DATA — не забываем правильно перекинуть линии. Кроме того, не забываем, что Dupont можно вставить любой стороной — обязательно вставляем ПРАВИЛЬНО


Контроллер
Готовим часть контроллера. ESP32 я покупал здесь.Печатаем для неё кожух
Скручиваем половинки винтами M3x10 — они просто входят в пластик, но так как нагрузки нет, то держатся довольно неплохо.
В кожухе заранее предусмотрено отверстие под dupont разъем с питанием и данными.
Остальные отверстия сделаны под датчик освещенности для автоматической регулировки яркости, но эта часть в программе пока не реализована — можете потом добавить сами.
Сделано под датчик
Прошивка
Основной скетч лежит здесьВ Arduino для него надо выбрать плату DOIT ESP32 DEVKIT V1 и соответствующий COM-порт.
Нужно установить библиотеки GyverNTP и FastLED, в WiFi.begin задать имя и пароль точки доступа. Если надо — поменять часовой пояс — сейчас стоит +3. Можно поиграться с цветом и яркостью. Всё, грузим в плату.
Скетч простой как гвоздь, так что можно свободно менять что угодно — яркость, цвет, алгоритм и т.д. и т.п.
Ну вот, собственно, и всё. Если есть вопросы — спрашивайте в комментах — отвечу там же или добавлю в статью.

Самые обсуждаемые обзоры
+48 |
1690
45
|
+20 |
1564
34
|
+36 |
1852
27
|
+82 |
5770
96
|
Блин… сколько лет прошло…
— Пульт ДУ от любой техники. В режиме обучения запоминает нажатые кнопки и потом можно управлять. Руками выставить время/дату и корректировки к аналоговому датчику давления, цифровую подстройку точности хода, ну и эти режимы отображения. Можно полностью погасить табло.
— 2 датчика DS18B20
— Аналоговый датчик давления, отдельно ОУ для выделения атмосферного диапазона
— Главная фишка — автоматическая регулировка яркости высокочастотным ШИМом (нет мерцания). Заложена таблица интенсивности, адаптированная под глаз человека. Цифры стоят как нарисованные и с выключенным светом, и со включенным, немного теряют яркость при прямых солнечных лучах — просто индикаторы не вывозят.
— Синхронизация времени по UART, но уже отдельным устройством.
2. Белое свечение на белом фоне среди черного имеет малый контраст, не хватает дымчатого светофильтра или печати чем-то более темным.
3 Не думаю, что маленький модулек esp32c3 mini увеличил бы толщину, зато питать можно было бы от любого зарядника без колхозного провода.
3. Существенно усложняется плата и растёт толщина. Если не нравится стандартный цветной трехпроводный, то есть куча вариантов — от тонкого прозрачного трёхпроводного (используется для гирлянд на WS2812) до провода от старой мыши (тонкий, гибкий и 4 провода внутри).
2. А при темных несветящихся сегментах и на солнце хорошо видно было бы.
3. Не очень понял, просто на плату ставится маленький модулек плоский и фсе, TypeC его наружу. Все равно между рассеивателем и светодиодами нужно расстояние для равномерной светимости и оно видно внутри корпуса. Модулек 22*18, на взгляд примерно чуть побольше и есть от сегмента до края корпуса.
2. Возможно. Можно будет попробовать взять прозрачный ABS — вроде был. Но пока и такой вполне устраивает — никаких проблем с читаемостью я не испытываю.
3. Насколько я помню FastLed не поддерживает ESP32C3. И места там недостаточно (~15мм), надо расширять. И, самое главное, для меня это вообще не проблема. Найти красивый тонкий прозрачный трехжильный провод элементарно. Так как блок питания всё равно нужен, то маленькая коробочка с ESP32 болтающаяся где-то рядом с ним никому не мешает
Я думал просто выкинуть родную плату и вкорячить туда кастомную (если бы умел их делать)), а корпус оставить заводской с большими сегментами.
А так, когда сторублёвые китайские часы начали сильно врать, поменял на них кварц и стали более-менее точно ходить.
DCF-77
Только у меня редко и в пасмурную погоду.
RST и OREGON станции
В России тоже есть передатчики точного времени, но ни одних потребительских часах не встречал с поддержкой нашего стандарта. А вот DCF77 довольно популярные, особенно от европейских брендов.
Не знаю, как они это делают(так, как сервера синхр. разные). но период. в Москве идет подлог.
Кто с видеонабл. работает. те уже попадали))
когда архив есть, записи есть а событий нет! Время пропало (остановилось) на 6ч)))
Синхронизация стояла раз в час.
А потом перепрыгнуло и пошло дальше.
У меня да же телек LG отказался на днях VK видео показывать.
Ругается, сертификат бла-бла…
Оказывается год перепрыгнул))) (стояла авт. синхр.)
ну и по нескольку раз в день. я по аэр. Шереметьево катаюсь.
Но это уже «классика»…
За 20+ лет проблем не замечено…
Кстати по хорошему время при синхронизации не должно резко прыгать. Правильные решения не меняют время, а корректируют скорость течения системного времени таким образом, чтобы время системы плавно «догоняло» истинное время.
надо делать на ламповом VFD от «дисплея покупателя»
cxem.net/arduino/arduino275.php
или на газоразрядных советских ИН-ках.
в обоих случаях DS3231 в качестве точного источника времени дает отличную точность хода часов.
Правда, у меня их 60+ штук…
Для сегментных экранов мне нравится другое решение. Печатать лицевую поверхнось тонким слоем. Если светодиоды явркие, то прозрачности пластика достаточно, чтобы цифры через него было видно, при этом выключенные сегменты совершенно не отличимы от фона. Что улучшает читаемость.
10 плат обошлись в 16$
И синхронизация, доступная каждому:
или