Всё началось с того, что меня достали вечно убегающие китайские часы. Причём не на секунды, а на минуты. Когда за полгода часы убегают на 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. Можно поиграться с цветом и яркостью. Всё, грузим в плату.
Скетч простой как гвоздь, так что можно свободно менять что угодно — яркость, цвет, алгоритм и т.д. и т.п.
Ну вот, собственно, и всё. Если есть вопросы — спрашивайте в комментах — отвечу там же или добавлю в статью.
An_private
https://mysku.club/blog/diy/103978.html