Привет, Хабр!
В этой статье я хочу поделиться своим давним проектом, который до сих пор не утратил актуальности. Я расскажу об его реализации в далеком 2017 году, обновлю прошивку устройства в соответствии с моими современными стандартами умных устройств и покажу реализацию нового дизайна цифрового модуля. Присоединяйтесь, будет интересно!
❚ Начало
События происходили в 2017 году. Проработав в компании первый год, я заметил, что мне слегка поднадоели блювотно болотно-зеленые стены в моем кабинете, и я решил добавить какой-то отвлекающий элемент от этого ужаса в мой рабочий интерьер. Недолго думая, я решил спроектировать электронные часы на базе адресных светодиодов SK6812 (инновационное решение на тот момент), катушку которых я недавно купил на распродаже на популярном оранжевом маркетплейсе, и даже разместил небольшое описание моих часов на площадке Hackaday.io.
❚ Мои хотелки
Давайте их назовем «Техническим заданием». Прежде всего, мне хотелось разработать простое устройство, а применение адресных светодиодов значительно упрощает конструкцию часов, исключая необходимость в дополнительных узлах управления светодиодами, таких как регистры сдвига. В качестве «мозга» устройства я решил применить микроконтроллер esp8266, который обладает встроенным беспроводным интерфейсом, что позволяет отказаться от модуля RTC и добавить возможность работы в качестве IoT-устройства. Я сторонник простых решений, и у меня брызжет кровь из глаз, когда вижу очередное DIY-устройство с бутербродом из ардуинок, который легко можно заменить одним модулем esp8266 или esp32. Что-то я отвлекся. Ниже приведен перечень возможностей, которые необходимо реализовать в данном устройстве.
Часы должны иметь возможность подключения к Wi-Fi сети;
Часы должны иметь функцию синхронизации времени с NTP сервером;
Часы должны иметь интуитивно понятный интерфейс для конфигурации, в данном случае, на базе встроенного web сервера;
Часы должны иметь возможность получения метео данных из внешних источников, например «Умного дома»;
Часы должны иметь функцию автоматической регулировки яркости сегментов в зависимости от внешнего освещения.
❚ Аппаратная платформа
Как я уже говорил ранее, принципиальная схема очень проста:
Для данной статьи я перевел проект печатной платы в САПР KiCad, а в 2017 году использовался Sprint-Layout.
Обожаю визуализацию, поэтому ниже представлен рендер печатной платы.
Для питания платы использовался блок питания на 5 В с током не менее 2 А. Для подключения источника питания использовался штырьковый разъем, но в современных реалиях целесообразнее использовать USB Type-C.
❚ Корпус устройства
Для разработки моделей корпусов я использую САПР FreeCAD. Для платы модуля управления я решил разработать отдельный корпус, который крепиться на стену рядом с цифровыми модулями часов. Ниже представлена 3D модель корпуса электроники.
Эта модель уже адаптирована для применения разъема USB Type-C. Далее самое интересное - модель модуля цифры.
Мне нравится классическая форма цифровых сегментов, поэтому я не стал "изобретать велосипед" и разработал классическую форму, ниже представлен результат.
Модель состоит из семи сегментов в которые помещаются адресные светодиоды. После установки светодиодов, сегменты закрываются светорассеивателями.
❚ 3D печать элементов корпуса
На тот момент домашняя 3D печать была не настолько доступна, как сейчас, тем не менее, у меня уже дома был 3D принтер (китайская копия Prusa i3), которым я и воспользовался.
Элементы модулей печатались ABS пластиком, а светорассеиватели белым HIPS.
❚ Сборка модулей цифр
Это самый ответственный и трудоемкий процесс, так как мне предстояло вручную спаять светодиоды 5х5 мм в единую цепь. Ниже представлен порядок следования светодиодов.
Подключение светодиодов выполняется согласно назначению выводов.
После сборки, каждый модуль проверяется на работоспособность методом подключения к тестовому микроконтроллеру. Ниже фото собранного модуля.
Часы в сборе, ниже представлен второй экземпляр часов, который был размещен над выходом нашего подразделения.
Так выглядели часы моим взглядом с моего рабочего места :)
Ниже представлено видео тестовой работы часов после сборки.
❚ Прошивка устройства - она же микро ПО
Микро ПО часов разрабатывалось в среде Arduino IDE, и, как я уже говорил ранее, было приведено к моему стандарту прошивки «умных» устройств. Вся конфигурация устройства выполняется с помощью веб-интерфейса, первоначальная конфигурация выполняется с помощью создаваемой устройством точки доступа и сервиса Captive Portal. Для входа в устройство используется дефолтный пароль «admin», при необходимости его можно будет сменить в соответствующем разделе конфигурации. Ниже показаны скриншоты наиболее важных страниц конфигурации.
Выше на скриншоте показана дополнительная функция подключения часов к системе умного дома по 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)
vladkorotnev
21.11.2024 05:00Пришла в голову идея сделать всё это ещё более безумным — микроконтроллер в каждой цифре свой вместе с батарейкой, а местоположение своё друг от друга они как-то определяют и выводят корректную цифру %)
CyberexTech Автор
21.11.2024 05:00Батареек надолго не хватит. Можно попробовать использовать беспроводное питание.
kimstik0
21.11.2024 05:00тогда уж лучше солнечную панель между сегментами. благо она темная.
CyberexTech Автор
21.11.2024 05:00К сожалению, и в этом случае выработанной энергии не будет достаточно.
voldemar_d
21.11.2024 05:00местоположение своё друг от друга они как-то определяют
По GPS? ;-)
vladkorotnev
21.11.2024 05:00Как вариант — слева и справа вставить по паре пьеза + микрофон, и фигачить FSK на ультразвуке. Можно поиграться потом с формой корпуса вокруг них и попытаться даже расширить диаграмму направленности за счёт дифракции. Ну а потом уже оттуда вытаскиваем нужные данные и соответственным образом изменяем отображение.
CyberexTech Автор
21.11.2024 05:00Это шутка?)
vladkorotnev
21.11.2024 05:00Ну не я же первым предложил часы безумными сделать %) следующим шагом можно, например, рубидиевую капсулу внутрь каждой цифры для точности хода сделать, синхронизируясь по полураспаду %)
А вообще FSK+ультразвук, например, для перекидывания настроек вайфая из приложения в те же самые кнопки от амазона используется, и ещё много где, и при этом имеет достаточную направленность в отличие от слышимых звуковых волн — так что если есть желание упороться, звучит как интересный проект. ESP32 очень жирный чип, на нём и не такое сделать можно.
Как альтернатива — в стенки направленные NFC-антенны и RFID-метки, чтобы каждая цифра знала своих соседей. Но тут уже побольше энергии надо будет, чем пьезой дрыгать, а тут как уже вы сказали — батарейки не хватит %)
CyberexTech Автор
21.11.2024 05:00Ну не я же первым предложил часы безумными сделать
Ну не в прямом же смысле).
А вообще FSK+ультразвук, например, для перекидывания настроек вайфая из приложения
Идея не нова, но вряд-ли стоит реализовывать эту фичу для редко используемой процедуры.
Как альтернатива — в стенки направленные NFC-антенны и RFID-метки, чтобы каждая цифра знала своих соседей.
Ну это опять рокет саенс, можно просто каждому модулю назначить свое место, указав его в конфигурации мастер-контроллера, а обращаться к ведомым по их идентификатору.
vladkorotnev
21.11.2024 05:00Но было бы весело, если цифры как на полке ни переставляй, а они всё правильно показывают %)
CyberexTech Автор
21.11.2024 05:00Тогда можно поставить в каждый сегмент по гироскопу и пускай они отправляют данные о своем положении, относительно мастер-контроллера)
vladkorotnev
21.11.2024 05:00Тогда ошибка накапливаться будет, и цифры могут "уплыть". Но вот с ультразвуком мне теперь и самому захотелось собрать. Простые часы каждый первый учащийся электронике собирает, и я в том числе — а вот так, чтобы всраться по максимуму и запихать туда парочку технологий, которые только в какой-то суровой индустриальщине встретишь.. %)
CyberexTech Автор
21.11.2024 05:00Заинтриговали, хотелось бы посмотреть на результат).
vladkorotnev
21.11.2024 05:00Увы, сначала у меня в планах порт других своих часов (на базе аж PIS-DOS https://github.com/vladkorotnev/plasma-clock/blob/develop/README.md) на вот такой полуметровый ламповый индикатор, так что когда руки дойдут не знаю %)
vladkorotnev
21.11.2024 05:00Personal Information Screen - Disk Operating System, со шрифтами в формате MoFo (Monospace Font), музыкой в формате PoMF (Portable Music Format), а ещё в написании набор документации для разработчиков железа под неё — Personal Information Screen/Device Architecture и PIS/Device Engineering Concepts
Я же говорю, ESP32 очень жЫрныц чип :-)
CyberexTech Автор
21.11.2024 05:00О, газоразрядный индикатор! Обожаю, в детстве часто собирал с ними схемы. А если их использовать вместе с современными микроконтроллерами, то получается просто магия.
vladkorotnev
21.11.2024 05:00Да, особенно когда управляющая схема с высоким напряжением и всей чепухой уже с завода в комплекте — одно удовольствие :-)
Пока что из всей коллекции личный фаворит, правда, вот такой
Zara6502
Автору лайкос!
Скажу о своих тараканах - больше люблю изначально темный фон сегмента, например зеленое/синее стекло, чтобы пока оно не засветилось не было особо и видно, не люблю приглядываться и расшифровывать. Плюс нужен датчик освещенности, так как в сумраке или ночью яркость у вас просто безумная, можно уменьшить раз в 20.
ds138
"Плюс нужен датчик освещенности"
На схеме есть R1 ;)
CyberexTech Автор
Спасибо! Да, темный матовый светорассеиватель смотрелся бы гораздо интереснее, но его изготовление нужно заказывать на стороне. Датчик освещенности присутствует - как подметил @ds138.
Zara6502
Тонкий цветной акриловый лист и мелкая шкурка
Ну хорошо бы чтобы он работал тогда ) яркость же безумно выкручена
gagarinas
Даже на картинке хочется прищурится :)
CyberexTech Автор
Примите мои сожаления по этому поводу :).
voldemar_d
Любые камеры (фото и видео) при съемке на автомате такие объекты сделают чрезмерно яркими. Плюс, у недорогих камер (особенно в смартфонах) динамический диапазон матрицы обычно не очень большой. Вообще, качественно снять включенный светодиод так, чтобы и пересвета не получилось, и фон вокруг был проработан - непростая задача.
Хорошо сделать фото можно, например, на зеркалку, сняв в формате RAW, а потом "вытянуть" при проявке. Причем, скорее всего, придется снимать в ручном режиме с пониженной экспозицией, чтобы избежать пересвета.
Zara6502
пытаясь объяснить одну проблему вы создаёте другую. если всё так как вы написали, то автор безответственно подошёл к оформлению статьи (он же видел фото до релиза статьи и мог подкорректировать изображение) и я не знаю какая проблема хуже.
voldemar_d
Не знаю, у кого какие проблемы я создаю. Я просто описал реальные технические сложности, возникающие при съемке подобных объектов. И я не считаю, что автор подошел к чему-то безответственно. Всего на свете знать невозможно.
Предлагаю Вам обсудить это с автором статьи. Возможно, он не считает свои фото неприемлемыми по качеству.
Zara6502
вы просто залезли в чужой разговор и взяли на себя право отвечать за автора.
а я с автором и разговариваю, если вы залезли в разговор со своим мнением, то логично что я буду отвечать на ваши слова и вы должны отвечать за свои. если вам это не нравится - не влезайте в разговор и держите свое мнение при себе.
вы снова решили отвечать за автора?
voldemar_d
Вы здесь модератор?
Какие правила комментирования я нарушил? Здесь не чат между парой людей, а общая площадка для обмена мнениями, которые не запрещено выражать никому. Я отвечал не за автора, а констатировал факт, который существует независимо от автора.
Если есть претензии к технической части моего комментария - давайте обсудим. Если хотите попереходить на личности - лично у меня нет интереса вступать в подобные перепалки. Если Ваша цель была - меня заткнуть, считайте, что она достигнута, но и советы свои оставьте при себе. По технической части мне добавить нечего. Умалять достоинств автора и его статьи у меня тем более и в мыслях не было. Всех благ.
CyberexTech Автор
Работает отлично, просто такие вещи нужно оценивать по реальным ощущениям, а не по фото).
voldemar_d
Это не яркость безумная, а камера так сняла, скорее всего. В другом ответе подробнее написал.