Привет, Хабр!

В этой статье я хочу поделиться своим давним проектом, который до сих пор не утратил актуальности. Я расскажу об его реализации в далеком 2017 году, обновлю прошивку устройства в соответствии с моими современными стандартами умных устройств и покажу реализацию нового дизайна цифрового модуля. Присоединяйтесь, будет интересно!

❚ Начало

События происходили в 2017 году. Проработав в компании первый год, я заметил, что мне слегка поднадоели блювотно болотно-зеленые стены в моем кабинете, и я решил добавить какой-то отвлекающий элемент от этого ужаса в мой рабочий интерьер. Недолго думая, я решил спроектировать электронные часы на базе адресных светодиодов SK6812 (инновационное решение на тот момент), катушку которых я недавно купил на распродаже на популярном оранжевом маркетплейсе, и даже разместил небольшое описание моих часов на площадке Hackaday.io.

❚ Мои хотелки

Давайте их назовем «Техническим заданием». Прежде всего, мне хотелось разработать простое устройство, а применение адресных светодиодов значительно упрощает конструкцию часов, исключая необходимость в дополнительных узлах управления светодиодами, таких как регистры сдвига. В качестве «мозга» устройства я решил применить микроконтроллер esp8266, который обладает встроенным беспроводным интерфейсом, что позволяет отказаться от модуля RTC и добавить возможность работы в качестве IoT-устройства. Я сторонник простых решений, и у меня брызжет кровь из глаз, когда вижу очередное DIY-устройство с бутербродом из ардуинок, который легко можно заменить одним модулем esp8266 или esp32. Что-то я отвлекся. Ниже приведен перечень возможностей, которые необходимо реализовать в данном устройстве.

  • Часы должны иметь возможность подключения к Wi-Fi сети;

  • Часы должны иметь функцию синхронизации времени с NTP сервером;

  • Часы должны иметь интуитивно понятный интерфейс для конфигурации, в данном случае, на базе встроенного web сервера;

  • Часы должны иметь возможность получения метео данных из внешних источников, например «Умного дома»;

  • Часы должны иметь функцию автоматической регулировки яркости сегментов в зависимости от внешнего освещения.

❚ Аппаратная платформа

Как я уже говорил ранее, принципиальная схема очень проста:

Принципиальная схема модуля управления адресными светодиодами часов
Принципиальная схема модуля управления адресными светодиодами часов

Для данной статьи я перевел проект печатной платы в САПР KiCad, а в 2017 году использовался Sprint-Layout.

Трассировка платы модуля управления
Трассировка платы модуля управления

Обожаю визуализацию, поэтому ниже представлен рендер печатной платы.

3D визуализация печатной платы
3D визуализация печатной платы

Для питания платы использовался блок питания на 5 В с током не менее 2 А. Для подключения источника питания использовался штырьковый разъем, но в современных реалиях целесообразнее использовать USB Type-C.

❚ Корпус устройства

Для разработки моделей корпусов я использую САПР FreeCAD. Для платы модуля управления я решил разработать отдельный корпус, который крепиться на стену рядом с цифровыми модулями часов. Ниже представлена 3D модель корпуса электроники.

Модель корпуса блока управления
Модель корпуса блока управления

Эта модель уже адаптирована для применения разъема USB Type-C. Далее самое интересное - модель модуля цифры.

Мне нравится классическая форма цифровых сегментов, поэтому я не стал "изобретать велосипед" и разработал классическую форму, ниже представлен результат.

Модель модуля цифры
Модель модуля цифры

Модель состоит из семи сегментов в которые помещаются адресные светодиоды. После установки светодиодов, сегменты закрываются светорассеивателями.

❚ 3D печать элементов корпуса

На тот момент домашняя 3D печать была не настолько доступна, как сейчас, тем не менее, у меня уже дома был 3D принтер (китайская копия Prusa i3), которым я и воспользовался.

Готовые модули
Готовые модули
Печать светорассеивателей
Печать светорассеивателей

Элементы модулей печатались ABS пластиком, а светорассеиватели белым HIPS.

❚ Сборка модулей цифр

Это самый ответственный и трудоемкий процесс, так как мне предстояло вручную спаять светодиоды 5х5 мм в единую цепь. Ниже представлен порядок следования светодиодов.

Порядок следования светодиодов
Порядок следования светодиодов

Подключение светодиодов выполняется согласно назначению выводов.

Назначение выводов адресного светодиода sk6812
Назначение выводов адресного светодиода sk6812
Принципиальная схема подключения светодиодов
Принципиальная схема подключения светодиодов

После сборки, каждый модуль проверяется на работоспособность методом подключения к тестовому микроконтроллеру. Ниже фото собранного модуля.

Фото модулей
Фото модулей

Часы в сборе, ниже представлен второй экземпляр часов, который был размещен над выходом нашего подразделения.

Часы в собранном виде
Часы в собранном виде

Так выглядели часы моим взглядом с моего рабочего места :)

Часы в моем кабинете
Часы в моем кабинете
В приближении
В приближении

Ниже представлено видео тестовой работы часов после сборки.

❚ Прошивка устройства - она же микро ПО

Микро ПО часов разрабатывалось в среде Arduino IDE, и, как я уже говорил ранее, было приведено к моему стандарту прошивки «умных» устройств. Вся конфигурация устройства выполняется с помощью веб-интерфейса, первоначальная конфигурация выполняется с помощью создаваемой устройством точки доступа и сервиса Captive Portal. Для входа в устройство используется дефолтный пароль «admin», при необходимости его можно будет сменить в соответствующем разделе конфигурации. Ниже показаны скриншоты наиболее важных страниц конфигурации.

Главная страница
Главная страница
Настройка синхронизации времени по NTP серверу
Настройка синхронизации времени по NTP серверу
Конфигурация MQTT для вывода метеоданных
Конфигурация MQTT для вывода метеоданных

Выше на скриншоте показана дополнительная функция подключения часов к системе умного дома по MQTT протоколу для возможности получения метеоданных. При активации данной функции, часы будут отображать температуру, влажность и атмосферное давление.

Для управления светодиодами используется следующая функция

void digitset(int digit, int queue){
   int gu = 7 * queue;
   for (int j = 0; j < 7; j++) {
            int pix = pgm_read_word(&(digits_pix[digit][j]));    // Чтение значения из PROGMEM
            if(pix == 1){
              pixels.setPixelColor(j+gu, pixels.Color(settings.RGB_C[0],settings.RGB_C[1],settings.RGB_C[2]));
            }else{
              pixels.setPixelColor(j+gu, pixels.Color(0,0,0));
            }
        }
  pixels.show();
}

В данную функцию передаются два аргумента: digit - номер символа для отображения и queue - очередь отображения. Что касается последнего аргумента - он отвечает за номер цифрового модуля от 0 до 6, где 0 - это первый модуль, а 6 - это седьмой модуль, порядок отображения с права налево.

Все состояния сегментов модуля сохранены в массиве и вызываются в вышеописанной функции.

const int digits_pix[20][7] PROGMEM = {
    {1, 1, 1, 0, 1, 1, 1},                  // 0
    {1, 0, 0, 0, 0, 0, 1},                  // 1
    {1, 1, 0, 1, 1, 1, 0},                  // 2
    {1, 1, 0, 1, 0, 1, 1},                  // 3
    {1, 0, 1, 1, 0, 0, 1},                  // 4
    {0, 1, 1, 1, 0, 1, 1},                  // 5
    {0, 1, 1, 1, 1, 1, 1},                  // 6
    {1, 1, 0, 0, 0, 0, 1},                  // 7
    {1, 1, 1, 1, 1, 1, 1},                  // 8
    {1, 1, 1, 1, 0, 1, 1},                  // 9
    {0, 0, 0, 0, 0, 0, 0},                  // Очистка            10
    {0, 0, 1, 1, 1, 1, 0},                  // Температура t      11
    {1, 0, 1, 1, 1, 0, 1},                  // Влажность H        12
    {1, 1, 1, 1, 1, 0, 0},                  // Давление P         13
    {1, 1, 1, 1, 0, 0, 0},                  // Градус Цельсия С   14
    {0, 1, 1, 0, 1, 1, 0},                  // Градус Цельсия С * 15
    {0, 0, 0, 1, 0, 0, 0},                  // Знак минуса        16
    {0, 1, 1, 1, 1, 1, 0},                  // E                  17
    {0, 1, 1, 0, 1, 0, 0},                  // L                  18
    {1, 1, 1, 0, 1, 1, 1}                   // O                  19
};

Судя по статистике, код в статьях мало кому интересен, поэтому ссылку на полный исходный код часов я приложу в конце статьи.

На этом можно было бы завершить статью, но просматривая свой архив, я наткнулся на разработанный, но не реализованный концепт сегмента цифры.

Папка с файлами проекта
Папка с файлами проекта

Видимо ввиду определенных событий, я забыл реализовать данную концепцию в жизнь. Но ни что не мешает сделать это мне сейчас, да и самому интересно увидеть результат.

❚ Новые цифры

Мое новое решение выглядит следующим образом:

Концепт цифрового модуля
Концепт цифрового модуля

Задумка была следующая: мне хотелось создать сегмент цифры, который бы напоминал свечение кристалла. Так давайте изготовим пробный прототип и проверим сработает ли задумка.

Как обычно, данную модель я разработал во FreeCAD, далее нам необходимо распечатать модель уже на моем современном 3D принтере Flying Bear 5.

Результат печати основы цифрового модуля
Результат печати основы цифрового модуля
Результат печати светорассеивателей сегмента
Результат печати светорассеивателей сегмента

После печати всех компонентов, убеждаемся что все элементы правильно подогнаны и выполняем тестовую сборку:

Модель в собранном виде
Модель в собранном виде

Далее необходимо установить в прототип адресные светодиоды:

Установка светодиодов
Установка светодиодов

Так как данный модуль больше своего предыдущего «собрата», то пришлось установить по два светодиода на один сегмент, при этом выполнить параллельное подключение сигнальных входов. Пример удвоения светодиодов показан на схеме подключения, что была размещена выше.

Дальше нас ждет самое интересное - тест концепции. Возвращаем светорассеиватели на место и включаем. В результате мы видим следующее:

Тест концепции
Тест концепции

И если честно, то данный вариант цифрового модуля мне нравится больше. Эффект светящегося кристалла однозначно достигнут! Ниже представлено видео работы тестового модуля:

❚ Итоги

Несмотря на то, что изначально проект был реализован в 2017 году, он до сих пор не потерял актуальность, а адресные светодиоды всё больше и больше находят применение в различных DIY проектах. Описанные в статье часы, могут идеально вписаться в ваш рабочий интерьер и создать точку фокуса, которая будет пользоваться интересом со стороны ваших гостей, Надеюсь, что данная статья как минимум - развлекла вас, а как максимум - принесла пользу. Спасибо за то, что уделили ваше время! Если есть вопросы, замечания, дополнения, то добро пожаловать в комментарии! Всем добра и интересных проектов!

Ссылки к статье:

Дорогие друзья, небольшое объявление. Изначально данную статью планировалось опубликовать при спонсорской поддержке, но что-то не пошло по плану, и в итоге статья публикуется на «голом энтузиазме». Написание статей отнимает огромное количество личного времени, да и в данный момент у меня всё чаще возникают мысли бросить это дело и направить освободившееся время на более полезные дела (в экономическом плане). Если вам понравилась данная статья и у вас есть желание поддержать меня финансово (при наличии такой возможности), то вы можете воспользоваться ссылками в моем профиле. И как говорит народная мудрость: «Талантам нужно помогать, а дураки пробьются сами». Спасибо за поддержку!

Комментарии (32)


  1. Zara6502
    21.11.2024 05:00

    Автору лайкос!

    Скажу о своих тараканах - больше люблю изначально темный фон сегмента, например зеленое/синее стекло, чтобы пока оно не засветилось не было особо и видно, не люблю приглядываться и расшифровывать. Плюс нужен датчик освещенности, так как в сумраке или ночью яркость у вас просто безумная, можно уменьшить раз в 20.


    1. ds138
      21.11.2024 05:00

      "Плюс нужен датчик освещенности"
      На схеме есть R1 ;)


    1. CyberexTech Автор
      21.11.2024 05:00

      Спасибо! Да, темный матовый светорассеиватель смотрелся бы гораздо интереснее, но его изготовление нужно заказывать на стороне. Датчик освещенности присутствует - как подметил @ds138.


      1. Zara6502
        21.11.2024 05:00

        Да, темный матовый светорассеиватель смотрелся бы гораздо интереснее, но его изготовление нужно заказывать на стороне

        Тонкий цветной акриловый лист и мелкая шкурка

        Датчик освещенности присутствует

        Ну хорошо бы чтобы он работал тогда ) яркость же безумно выкручена


        1. gagarinas
          21.11.2024 05:00

          Даже на картинке хочется прищурится :)


          1. CyberexTech Автор
            21.11.2024 05:00

            Примите мои сожаления по этому поводу :).


          1. voldemar_d
            21.11.2024 05:00

            Любые камеры (фото и видео) при съемке на автомате такие объекты сделают чрезмерно яркими. Плюс, у недорогих камер (особенно в смартфонах) динамический диапазон матрицы обычно не очень большой. Вообще, качественно снять включенный светодиод так, чтобы и пересвета не получилось, и фон вокруг был проработан - непростая задача.

            Хорошо сделать фото можно, например, на зеркалку, сняв в формате RAW, а потом "вытянуть" при проявке. Причем, скорее всего, придется снимать в ручном режиме с пониженной экспозицией, чтобы избежать пересвета.


            1. Zara6502
              21.11.2024 05:00

              пытаясь объяснить одну проблему вы создаёте другую. если всё так как вы написали, то автор безответственно подошёл к оформлению статьи (он же видел фото до релиза статьи и мог подкорректировать изображение) и я не знаю какая проблема хуже.


              1. voldemar_d
                21.11.2024 05:00

                Не знаю, у кого какие проблемы я создаю. Я просто описал реальные технические сложности, возникающие при съемке подобных объектов. И я не считаю, что автор подошел к чему-то безответственно. Всего на свете знать невозможно.

                он же видел фото до релиза статьи и мог подкорректировать изображение

                Предлагаю Вам обсудить это с автором статьи. Возможно, он не считает свои фото неприемлемыми по качеству.


                1. Zara6502
                  21.11.2024 05:00

                  Я просто

                  вы просто залезли в чужой разговор и взяли на себя право отвечать за автора.

                  Предлагаю Вам обсудить это с автором статьи

                  а я с автором и разговариваю, если вы залезли в разговор со своим мнением, то логично что я буду отвечать на ваши слова и вы должны отвечать за свои. если вам это не нравится - не влезайте в разговор и держите свое мнение при себе.

                  Возможно, он не считает свои фото неприемлемыми по качеству.

                  вы снова решили отвечать за автора?


                  1. voldemar_d
                    21.11.2024 05:00

                    Вы здесь модератор?

                    Какие правила комментирования я нарушил? Здесь не чат между парой людей, а общая площадка для обмена мнениями, которые не запрещено выражать никому. Я отвечал не за автора, а констатировал факт, который существует независимо от автора.

                    Если есть претензии к технической части моего комментария - давайте обсудим. Если хотите попереходить на личности - лично у меня нет интереса вступать в подобные перепалки. Если Ваша цель была - меня заткнуть, считайте, что она достигнута, но и советы свои оставьте при себе. По технической части мне добавить нечего. Умалять достоинств автора и его статьи у меня тем более и в мыслях не было. Всех благ.


        1. CyberexTech Автор
          21.11.2024 05:00

          Ну хорошо бы чтобы он работал тогда ) яркость же безумно выкручена

          Работает отлично, просто такие вещи нужно оценивать по реальным ощущениям, а не по фото).


    1. voldemar_d
      21.11.2024 05:00

      Это не яркость безумная, а камера так сняла, скорее всего. В другом ответе подробнее написал.


  1. vladkorotnev
    21.11.2024 05:00

    Пришла в голову идея сделать всё это ещё более безумным — микроконтроллер в каждой цифре свой вместе с батарейкой, а местоположение своё друг от друга они как-то определяют и выводят корректную цифру %)


    1. CyberexTech Автор
      21.11.2024 05:00

      Батареек надолго не хватит. Можно попробовать использовать беспроводное питание.


      1. kimstik0
        21.11.2024 05:00

        тогда уж лучше солнечную панель между сегментами. благо она темная.


        1. CyberexTech Автор
          21.11.2024 05:00

          К сожалению, и в этом случае выработанной энергии не будет достаточно.


    1. voldemar_d
      21.11.2024 05:00

      местоположение своё друг от друга они как-то определяют

      По GPS? ;-)


      1. vladkorotnev
        21.11.2024 05:00

        Как вариант — слева и справа вставить по паре пьеза + микрофон, и фигачить FSK на ультразвуке. Можно поиграться потом с формой корпуса вокруг них и попытаться даже расширить диаграмму направленности за счёт дифракции. Ну а потом уже оттуда вытаскиваем нужные данные и соответственным образом изменяем отображение.


        1. CyberexTech Автор
          21.11.2024 05:00

          Это шутка?)


          1. vladkorotnev
            21.11.2024 05:00

            Ну не я же первым предложил часы безумными сделать %) следующим шагом можно, например, рубидиевую капсулу внутрь каждой цифры для точности хода сделать, синхронизируясь по полураспаду %)

            А вообще FSK+ультразвук, например, для перекидывания настроек вайфая из приложения в те же самые кнопки от амазона используется, и ещё много где, и при этом имеет достаточную направленность в отличие от слышимых звуковых волн — так что если есть желание упороться, звучит как интересный проект. ESP32 очень жирный чип, на нём и не такое сделать можно.

            Как альтернатива — в стенки направленные NFC-антенны и RFID-метки, чтобы каждая цифра знала своих соседей. Но тут уже побольше энергии надо будет, чем пьезой дрыгать, а тут как уже вы сказали — батарейки не хватит %)


            1. CyberexTech Автор
              21.11.2024 05:00

              Ну не я же первым предложил часы безумными сделать

              Ну не в прямом же смысле).

              А вообще FSK+ультразвук, например, для перекидывания настроек вайфая из приложения

              Идея не нова, но вряд-ли стоит реализовывать эту фичу для редко используемой процедуры.

              Как альтернатива — в стенки направленные NFC-антенны и RFID-метки, чтобы каждая цифра знала своих соседей.

              Ну это опять рокет саенс, можно просто каждому модулю назначить свое место, указав его в конфигурации мастер-контроллера, а обращаться к ведомым по их идентификатору.


              1. vladkorotnev
                21.11.2024 05:00

                Но было бы весело, если цифры как на полке ни переставляй, а они всё правильно показывают %)


                1. CyberexTech Автор
                  21.11.2024 05:00

                  Тогда можно поставить в каждый сегмент по гироскопу и пускай они отправляют данные о своем положении, относительно мастер-контроллера)


                  1. vladkorotnev
                    21.11.2024 05:00

                    Тогда ошибка накапливаться будет, и цифры могут "уплыть". Но вот с ультразвуком мне теперь и самому захотелось собрать. Простые часы каждый первый учащийся электронике собирает, и я в том числе — а вот так, чтобы всраться по максимуму и запихать туда парочку технологий, которые только в какой-то суровой индустриальщине встретишь.. %)


                    1. CyberexTech Автор
                      21.11.2024 05:00

                      Заинтриговали, хотелось бы посмотреть на результат).


                      1. vladkorotnev
                        21.11.2024 05:00

                        Увы, сначала у меня в планах порт других своих часов (на базе аж PIS-DOS https://github.com/vladkorotnev/plasma-clock/blob/develop/README.md) на вот такой полуметровый ламповый индикатор, так что когда руки дойдут не знаю %)


                      1. ds138
                        21.11.2024 05:00

                        Название операционки поражает игрой красок )))


                      1. vladkorotnev
                        21.11.2024 05:00

                        Personal Information Screen - Disk Operating System, со шрифтами в формате MoFo (Monospace Font), музыкой в формате PoMF (Portable Music Format), а ещё в написании набор документации для разработчиков железа под неё — Personal Information Screen/Device Architecture и PIS/Device Engineering Concepts

                        Я же говорю, ESP32 очень жЫрныц чип :-)


                      1. CyberexTech Автор
                        21.11.2024 05:00

                        О, газоразрядный индикатор! Обожаю, в детстве часто собирал с ними схемы. А если их использовать вместе с современными микроконтроллерами, то получается просто магия.


                      1. vladkorotnev
                        21.11.2024 05:00

                        Да, особенно когда управляющая схема с высоким напряжением и всей чепухой уже с завода в комплекте — одно удовольствие :-)

                        Пока что из всей коллекции личный фаворит, правда, вот такой


                      1. CyberexTech Автор
                        21.11.2024 05:00

                        А чем управляете в ВВ части?