Мои безумные часы: или как создать точку фокуса в рабочем интерьере
Привет, Хабр!
В этой статье я хочу поделиться своим давним проектом, который до сих пор не утратил актуальности. Я расскажу об его реализации в далеком 2017 году, обновлю прошивку устройства в соответствии с моими современными стандартами умных устройств и покажу реализацию нового дизайна цифрового модуля. Присоединяйтесь, будет интересно!
❚ Начало
События происходили в 2017 году. Проработав в компании первый год, я заметил, что мне слегка поднадоели блювотно болотно-зеленые стены в моем кабинете, и я решил добавить какой-то отвлекающий элемент от этого ужаса в мой рабочий интерьер. Недолго думая, я решил спроектировать электронные часы на базе адресных светодиодов SK6812 (инновационное решение на тот момент), катушку которых я недавно купил на распродаже на популярном оранжевом маркетплейсе, и даже разместил небольшое описание моих часов на площадке Hackaday.io.
❚ Мои хотелки
Давайте их назовем «Техническим заданием». Прежде всего, мне хотелось разработать простое устройство, а применение адресных светодиодов значительно упрощает конструкцию часов, исключая необходимость в дополнительных узлах управления светодиодами, таких как регистры сдвига. В качестве «мозга» устройства я решил применить микроконтроллер esp8266, который обладает встроенным беспроводным интерфейсом, что позволяет отказаться от модуля RTC и добавить возможность работы в качестве IoT-устройства. Я сторонник простых решений, и у меня брызжет кровь из глаз, когда вижу очередное DIY-устройство с бутербродом из ардуинок, который легко можно заменить одним модулем esp8266 или esp32. Что-то я отвлекся. Ниже приведен перечень возможностей, которые необходимо реализовать в данном устройстве.
Часы должны иметь возможность подключения к Wi-Fi сети;
Часы должны иметь функцию синхронизации времени с NTP сервером;
Часы должны иметь интуитивно понятный интерфейс для конфигурации, в данном случае, на базе встроенного web сервера;
Часы должны иметь возможность получения метео данных из внешних источников, например «Умного дома»;
Часы должны иметь функцию автоматической регулировки яркости сегментов в зависимости от внешнего освещения.
❚ Аппаратная платформа
Как я уже говорил ранее, принципиальная схема очень проста:
Принципиальная схема модуля управления адресными светодиодами часов
Для данной статьи я перевел проект печатной платы в САПР KiCad, а в 2017 году использовался Sprint-Layout.
Трассировка платы модуля управления
Обожаю визуализацию, поэтому ниже представлен рендер печатной платы.
3D визуализация печатной платы
Для питания платы использовался блок питания на 5 В с током не менее 2 А. Для подключения источника питания использовался штырьковый разъем, но в современных реалиях целесообразнее использовать USB Type-C.
❚ Корпус устройства
Для разработки моделей корпусов я использую САПР FreeCAD. Для платы модуля управления я решил разработать отдельный корпус, который крепиться на стену рядом с цифровыми модулями часов. Ниже представлена 3D модель корпуса электроники.
Модель корпуса блока управления
Эта модель уже адаптирована для применения разъема USB Type-C. Далее самое интересное — модель модуля цифры.
Мне нравится классическая форма цифровых сегментов, поэтому я не стал «изобретать велосипед» и разработал классическую форму, ниже представлен результат.
Модель модуля цифры
Модель состоит из семи сегментов в которые помещаются адресные светодиоды. После установки светодиодов, сегменты закрываются светорассеивателями.
❚ 3D печать элементов корпуса
На тот момент домашняя 3D печать была не настолько доступна, как сейчас, тем не менее, у меня уже дома был 3D принтер (китайская копия Prusa i3), которым я и воспользовался.
Готовые модули
Печать светорассеивателей
Элементы модулей печатались ABS пластиком, а светорассеиватели белым HIPS.
❚ Сборка модулей цифр
Это самый ответственный и трудоемкий процесс, так как мне предстояло вручную спаять светодиоды 5×5 мм в единую цепь. Ниже представлен порядок следования светодиодов.
Порядок следования светодиодов
Подключение светодиодов выполняется согласно назначению выводов.
Назначение выводов адресного светодиода sk6812
Принципиальная схема подключения светодиодов
После сборки, каждый модуль проверяется на работоспособность методом подключения к тестовому микроконтроллеру. Ниже фото собранного модуля.
Фото модулей
Часы в сборе, ниже представлен второй экземпляр часов, который был размещен над выходом нашего подразделения.
Часы в собранном виде
Так выглядели часы моим взглядом с моего рабочего места :)
Часы в моем кабинете
В приближении
Ниже представлено видео тестовой работы часов после сборки.
❚ Прошивка устройства — она же микро ПО
Микро ПО часов разрабатывалось в среде Arduino IDE, и, как я уже говорил ранее, было приведено к моему стандарту прошивки «умных» устройств. Вся конфигурация устройства выполняется с помощью веб-интерфейса, первоначальная конфигурация выполняется с помощью создаваемой устройством точки доступа и сервиса Captive Portal. Для входа в устройство используется дефолтный пароль «admin», при необходимости его можно будет сменить в соответствующем разделе конфигурации. Ниже показаны скриншоты наиболее важных страниц конфигурации.
Главная страница
Настройка синхронизации времени по NTP серверу
Конфигурация 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 проектах. Описанные в статье часы, могут идеально вписаться в ваш рабочий интерьер и создать точку фокуса, которая будет пользоваться интересом со стороны ваших гостей, Надеюсь, что данная статья как минимум — развлекла вас, а как максимум — принесла пользу. Спасибо за то, что уделили ваше время! Если есть вопросы, замечания, дополнения, то добро пожаловать в комментарии! Всем добра и интересных проектов!
Ссылки к статье:
Дорогие друзья, небольшое объявление. Изначально данную статью планировалось опубликовать при спонсорской поддержке, но что-то не пошло по плану, и в итоге статья публикуется на «голом энтузиазме». Написание статей отнимает огромное количество личного времени, да и в данный момент у меня всё чаще возникают мысли бросить это дело и направить освободившееся время на более полезные дела (в экономическом плане). Если вам понравилась данная статья и у вас есть желание поддержать меня финансово (при наличии такой возможности), то вы можете воспользоваться ссылками в моем профиле. И как говорит народная мудрость: «Талантам нужно помогать, а дураки пробьются сами». Спасибо за поддержку!