На эту статью меня вдохновили часы на английском языке, которые случайно увидел на одном из зарубежных сайтов. Они представляют собой матрицу из слов, которые, включая подсветку за определёнными словами, показывают словесную индикацию текущего времени.
Часы являются малодоступными широкому кругу людей, ввиду их дороговизны (это явилось одним из стимулов для разработки своих собственных), а ещё имеются у производителя на разных языках.
И я подумал, почему бы не обдумать вероятность создания примерно таких часов, на русском языке?
Так как полностью копировать чужую идею не хотелось (хотя это достаточно просто осуществить), я подумал, что будет достаточно любопытным разработать нечто своё, базируясь на изначальной идее этих часов.
Дальнейший ход рассуждений предназначен только в ознакомительных целях, «как можно было бы сделать нечто подобное». Целью статьи является изложить ход инженерной мысли, следуя которой каждый может создать что-то своё, уникальное.После появления мысли о создании буквенных часов, я решил проработать в теории, как они могли бы выглядеть, и что для этого бы пригодилось.
Можно сказать, что задача создания буквенных часов может быть разделена на несколько этапов:
1 Этап: Так как нам будет необходимо предварительно создать матрицу из слов, весьма полезно использовать для этого дела свои навыки программирования. Так как, безусловно, возможно создать данную матрицу и просто вручную, Однако, программные методы генерации дают нам гораздо большую гибкость.
2 Этап: Далее, после того как разработана матрица, она должна быть превращена в соответствующую совокупность панелей, которые можно изготовить лазерной резкой. Почему именно таким способом: так как он является одним из самых простых и недорогих в данном случае.
3 Этап: Необходимо разработать прошивку для соответствующего микроконтроллера, который будет заниматься управлением подсветкой матрицы из слов. Тут надо сделать пояснение: часы будут показывать время, включая соответствующие сочетания букв.
Любопытным моментом работы микроконтроллера является то, что на часах необходимо периодически устанавливать корректное время. Так как мне не хотелось вводить в программу дополнительные усложнения, в виде подключения каких-либо кнопок, обработки их нажатий, вывода на какой-то микро экран введённого времени, либо прямо на часы,- мне показалось, что будет достаточно остроумным решением, если код будет сам обращаться с некой периодичностью на сервер времени, получая с него корректное текущее время.
Таким образом, получается, что программисту будет необходимо только предварительно настроить прошивку, введя в неё:
- периодичность подключения к серверу;
- логин и пароль для подключения к wi-fi точке доступа, находящейся в пределах досягаемости для часов.
Таким образом, самый простой и эффективный способ получения времени, — использование микроконтроллера с wi-fi модулем. В качестве такого микроконтроллера возьмём esp32.
В качестве же средства подсветки букв — будем использовать адресную светодиодную ленту. Конкретно данный проект базируется на ленте WS2812B, с количеством светодиодов 30 шт/метр. Что такое адресная светодиодная лента, можно подробнее почитать тут, тут или тут.
Схема подключения адресной светодиодной ленты к esp32 видится такой:
Следуя вышеперечисленному алгоритму, приступим к работе.
▍ Реализация 1 Этапа
Так как хотелось создать нечто максимально универсальное, ввиду того, что я не был совершенно уверен, какое количество слов и в каких комбинациях (сколько слов в строке) у меня получится, я решил написать генератор матрицы слов, который позволит достаточно гибким образом варьировать созданием матрицы и подобрать тот тип матрицы, который будет наиболее удовлетворять разработчика часов.
Для достижения цели я написал генератор на языке Java, в рамках среды IntelliJIDEA.
Вкратце пробежимся по его ключевым моментам.
Все слова, которые будут участвовать в создании матрицы, предварительно добавляются в Arraylist. Если вас не устроит данная подборка словосочетаний, вы всегда сможете заменить в этом списке мои слова — на свои.
Здесь следует сделать одну оговорку: я не ставил себе целью сделать максимально лаконичную матрицу, поэтому моя подборка слов может оказаться несколько избыточной. Это нужно учитывать, и если вы захотите создать более короткую матрицу (короткую в буквальном смысле, что позволит ей быть более узкой по горизонтали), вы можете обдумать и изменить мою подборку слов.
Нашей задачей является создать такую матрицу, которая будет состоять из определённого количества строк, равных по количеству символов.
Генератор после первого запуска, для данного конкретного Arraylist-a выводит статистику, в которой содержится общее количество символов в неразбитой строке, количество комбинаций символов в строке, которые позволяют создать определённое количество строк, с равным количеством символов в них.
Кроме того, генератор выводит непосредственно свёрстанную матрицу слов, а также матрицу номеров, для данной длины строк.
Здесь следует сделать пояснение: так как для подсветки букв мы будем использовать адресную светодиодную ленту, в которой нумерация светодиодов начинается с 0, генератор выводит номера будущих пикселей, также разбитые на строки.
После первого запуска программы, когда мы знаем какое число символов должно содержаться в каждой отдельной строке, чтобы количество символов в каждой строке было равным, мы можем поэкспериментировать, забивая данные числа в переменную horizontalCount.
❒ Код генератора можно глянуть тут: github
Запустим программу заново, чтобы обновить вывод.
Например, для количества символов в строке, равному 41, вывод программы будет выглядеть следующим образом:
▍ Реализация 2 Этапа
После того как у нас сформирован вывод программы, мы можем им воспользоваться в наших целях — а именно, для предварительного формирования внешнего вида будущей матрицы, который мы собираем в программе Microsoft Word.
Для этого, я создал таблицу, в ячейки которой забил получившиеся строки. После чего, я создал ещё одну такую же таблицу, в каждую ячейку которой вставил номера будущих пикселей адресной светодиодной ленты.
Для большего удобства, я создал сводную таблицу, которая содержит как буквы, так и номера подсвечивающих светодиодов адресной ленты.
Также, я раскрасил отдельные слова в таблице, в разные цвета (это можно увидеть в нижней таблице).
Далее мы начинаем обрабатывать получившуюся матрицу в программе CorelDraw.
Так как для подсветки будущих часов мы будем использовать ленту с количеством светодиодов в 60 штук на метр, и размером светодиода 5x5 мм, мы создаём соответствующий массив квадратиков в программе CorelDraw, копируем и вставляем из Ворда каждую строку со словами.
После того, как скопированная строка вставлена в CorelDraw, мы выделяем вставленную строку и нажимаем сочетание клавиш Ctrl+K.
Это позволит разбить вставленную строку на отдельные буквы. После чего, мы начинаем подравнивать каждую букву, выравнивая её по центру квадратика, символизирующего пиксель светодиодной ленты.
Однако, данная работа была бы неполной, без преобразования получившихся букв — в буквы трафаретного типа. Так как будущую конструкцию часов мы оптимизируем под производство с применением лазерной резки, нам необходимо, чтобы каждая буква не содержала замкнутых объёмов внутри (как например, буква О). Поэтому все замкнутые объёмы внутри букв мы соединяем перемычками с внешними объёмами.
Для этого, мы предварительно выделяем все строки, вставленные в CorelDraw, с помощью комбинации Ctrl+A, затем переводим их в не редактируемый формат («в кривые») – комбинацией Ctrl+Q. Далее – вручную рисуем прямоугольничек и, передвигая его – прорезаем вручную каждую букву в матрице, чтобы превратить её в трафаретный вид:
Далее нам остаётся только экспортировать получившуюся матрицу букв в ту программу твердотельного моделирования, которую вы предпочитаете, предварительно переведя её формат dxf.
Можно было бы всю работу проделать и в CorelDraw, — просто мне было так привычней и удобней.
❒ После чего, я собрал следующую сборку, которая содержит:
- лицевую панель с порезанной в ней матрицей слов;
- панель с разделителями между буквами, — которая требуется для того, чтобы избежать паразитной засветки находящихся рядом букв, при их включении. Данная панель разделителя должна быть вырезана из-за какого-либо тёмного материала;
- две панели-рассеиватели света, которые могут быть выполнены из белого пластика;
- задняя часть часов закрывается пластиной-задником.
▍ Реализация 3 Этапа
И напоследок, следует сказать пару слов об электронной части проекта. Видится наиболее перспективным, в качестве микроконтроллера – использование платы esp32, ввиду встроенного в неё wifi модуля. Это позволит часам, с нужной периодичностью производить подключение к серверу, для синхронизации с мировым временем.
▍ Полезности и итоги
Прошивка проекта написана в среде Arduino IDE: github.
Скачать векторные файлы для лазерной резки, в формате pdf, можно по ссылке.
Для удобства, достаточно объёмные функции
void timeBurner (int hours, int minutes)
и void timer ()
— выполнены в отдельных вкладках.Логин и пароль, для подключения к вашей точке доступа wifi следует забивать в переменные:
const char *ssid
и const char *password
.Количество светодиодов в ленте – забивается в переменную
NUMPIXELS
. В моём случае это 164 пикселя (длина строки в символах, выводится программой-генератором матрицы слов на java, в самом начале статьи).Периодичность подключения к серверу задаётся в переменной
CheckPeriod
, в миллисекундах.Так как данный проект ещё никем в реале не реализовывался, возможно, прошивка имеет некоторые погрешности и неочевидные ошибки – просьба отнестись с пониманием. В любом случае, наверняка, потребуется отладка.
Если Вам понравилась вся эта затея – у вас есть всё необходимое, чтобы реализовать свой собственный проект, основываясь на моём. Удачи в проектировании!
Комментарии (45)
balamutang
02.09.2021 12:14+7Интересный дизайн - как надгробный камень.
Когда я умру - поставьте пожалуйста такие часы на моей могиле, чтоб они показывали "Я гнию здесь уже столько-то лет, столько-то дней, столько-то часов, спасибо что интересуетесь, желаю вам хорошего настроения и держитесь там"
DAN_SEA Автор
02.09.2021 12:24+1Это просто концепция;-) Условная "прямоугольность" или "квадратность" часов зависит от конкретного наполнения массива слов, в коде java и от количества символов в строке у матрицы.
NickSin
06.09.2021 15:37вот только тело разлагается полностью до костей за 17-18 месяцев. Нужно что-то дальше потом придумать
Vladislav-Popov
02.09.2021 12:40+16Это классные часы. В далеком 2014 году, попались мне фотки Qlock и я решил воплотить их в жизнь. Мне они до сих пор нравятся. Реализованы atduino и той же адресной ленте.
Гостям нравится эти необычные часы и все они не верят что это DIY ))
AnDS0
02.09.2021 13:11Кратность пяти минутам?
Vladislav-Popov
02.09.2021 13:24+2Точки по углам - это минуты.
10:38
dlinyj
02.09.2021 14:57+1Не хотите об этом написать?
Vladislav-Popov
02.09.2021 15:19+4Если честно не думал, что это будет кому то интересным. И опять же плагиат налицо, ведь есть коммерческая разработка часов. Да и за код свой мне будет очень стыдно )) Но спасибо за наводку, возможно сделаю вторую ревизию часов, у меня как раз с 14 года лежит вторая лицевая стальная панель.
usa_habro_user
02.09.2021 20:54Забавно, безусловно, и выглядят отлично. Правда, как часами, наверное, трудновато пользоваться (особенно без привычки, или издалека), но все равно огромный "зачОт"! Статью напишите и опубликуйте обязательно! Думаю, не одному мне будут интересны детали реализации, да и работающий годами реальный гаджет это совершенно другое дело, чем даже подробно описанный, но нереализованный проект (реверанс в сторону автора статьи, тоже "плюсанул", ибо все DIY-щики заслуживают, по моему мнению, только "плюсов"!
Vladislav-Popov
03.09.2021 12:58Благодарю!
Если снять часы, то там нет задней стенки и кнопки установки времени не распаяны, тупо выведены контакты ????, так что не все DIY-щики «одинаково полезны» )). Это я к тому, что тоже своего рода недоделка.
tro9n4ik
03.09.2021 12:45А есть чертеж таких часов под чпу?
Vladislav-Popov
03.09.2021 13:00+2Определенно где то должны быть. Соберу все материалы и сделаю публикацию.
danij_com
25.09.2021 14:52Присоединяюсь к тем, кто ждет. Ваши часы выглядят очень круто, если сравнивать с другими diy проектами, которые смог найти на просторах интернета :)
Pasha13666
02.09.2021 13:50+1Выглядит интересно, но мне кажется, что не очень удобно. Чтобы узнать время надо полностью прочитать давольно длинную надпись.
PS: "час" и "часа" можно было совместить.
Vladislav-Popov
02.09.2021 15:55Как пользователь аналогичных текстовых часов могу сказать, что изначально конечно было непривычно, но позже и я и супруга довольно быстро стали понимать текущее время.
Ещё лично для себя заметил особенность - запоминание текущего времени происходит лучше и я не ловлю себя на мысли «а который час», хотя минуту назад смотрел на часы, как это происходит со смартфоном…
grizzly_8
02.09.2021 13:54+1Почему-то думал, что есть такие специальные шрифты для трафаретов. Ваш, кстати, на мой взгляд получился неплохим.
DAN_SEA Автор
02.09.2021 18:15Если честно, то просто не подумал о спец.шрифтах - и безусловно, вы правы!:-) Проще взять трафаретный шрифт. Однако, мой способ любопытен тем, что я сразу пошел по более сложному пути, как сделать из любого шрифта, - подходящий для дела.
usa_habro_user
02.09.2021 21:02@DAN_SEA, резистор на 470Ω там не нужен: у меня такие ленты работают годами, напрямую подключенные к ESP32. Можно было-бы коснуться слегка требуемого блока питания, но для 60 LED подойдет и самый обыкновенный, дешевенький на 1-1.5A. Ну, и на схеме вы забыли питание VIN к ESP32 подвести (но это так - слова, а не придирки ради, всем все понятно).
usa_habro_user
02.09.2021 22:02Часы являются малодоступными широкому кругу людей, ввиду их дороговизны (это явилось одним из стимулов для разработки своих собственных
Чёрт меня дернул посмотреть на Amazon-е (из-за слов о дороговизне): цена вопроса, к сожалению, всего $24.99 c free shipping-ом (для Prime members).
DAN_SEA Автор
02.09.2021 22:07Полезная информация! Я сам видел только версию, которая в начале статьи. Цена у нее довольно жесткая...
usa_habro_user
02.09.2021 22:42+1Цена у нее довольно жесткая...
Это вы еще мягко сформулировали; но в русском языке есть и куда более сильные выражения, чтобы обозначить жадность этих торгашей. Их почитать, так можно подумать, что они лично "старили" глину в сланец миллионы лет, а потом лично, долго и скрупулезно, вручную лазером прорезали буквы в нем... На самом деле, цена их "драгоценному" сланцу - $12 в базарный день.
DAN_SEA Автор
02.09.2021 22:06Спасибо за коммент! На самом деле я не забыл - я просто выборочно рассказал о подключении адресной ленты - к esp32. А саму esp-шку конечно надо запитать. А еще желательно корпус, а еще, а еще...:-)))
igormu
06.09.2021 04:49У меня при подключении ленты напрямую к ESP32 не хватило напряжения высокого уровня, пришлось добавить диод с резистором.
Dinxor
02.09.2021 21:27+1Узнал про такие часики лет 8 назад, тоже хотел собрать, но руки так и не дошли. В 2017 разработал программу на AutoIt, сын как раз проходил часы по английскому.
Потом стал изучать Пайтон, переписал на нём но попроще, без цветных букв и эффектов.
tirus
03.09.2021 09:20+2У меня в кружке шестиклассник в прошлом году на логических микросхемах такие часы собрал ) почему не на Ардуино? Потому что он ещё не изучал микроконтроллеры и Ардуино в частности. А в планах было сделать все на ПЛИС, но из-за ковида кружок закрыли, поэтому проект так и остался на микросхемах 4000 серии. Просил его вместе с отцом написать о проекте на Хабр, но они постеснялись. Папа у него, кстати, не электронщик, помогал ему лишь с корпусом и текстовой панелью - заказали лазерную резку на стороне В итоге часы получили диплом 2 степени на конкурсе для школьников Радиопоиск-2020. Если найду фото, выложу
esynr3z
03.09.2021 23:18+6Тоже делал подобные часы =) Очень долго играл в шарады, чтобы можно было составить читаемую надпись для любой минуты. Часы сами себе являются корпусом - стек из 4 плат и рамки из акрила.
tima_tey
03.09.2021 23:32+1Какая приятность) Часы от Qlocktwo то и дело всплывают в ленте хабра.
Не так давно делал реализацию этого концепта. Началось всё с короткого оживления их демо, собранного за один вечер, которое вылилось в крутой элемент интерьера.Как раз на следующей неделе планирую собирать модель в масштабе метр на метр для нашего офиса.
LeVoN_CCCP
04.09.2021 07:50+1Прошу прощения, что немного не в тему, но месяца 4 назад Вы писали про котовий брызгатрон и там обещали рассказать о результатах. Я время от времени просматриваю Ваши записи и комментарии в них, вдруг где-то отдельно упомянуто, но ничего такого не было. Потому хотел спросить (там не получается, ибо новый аккаунт) — что с результатами или демонстрацией — получилось как планировалось?
DAN_SEA Автор
04.09.2021 07:52Пока никак не могу добраться непосредственно до котов - мать живет в другом городе. Видимо уже на новый год... Заодно соберу еще один аппарат - гораздо проще и протестирую оба сразу :-). Более простую версию сможет собрать любой- выложу инструкции по сборке (впрочем, это как всегда:-) )
pasdeprenom
10.09.2021 21:46Как насчет создании матрицы русского (любого другого) языка, использовав например Большой толковый словарь русского языка, интересно каких размеров получится матрица после сжатия? Кстати на сайте https://qlocktwo.com/ch_fr/qlocktwo-w35-copper можно подсмотреть их матрицы для наиболее распространённых языков - кто первый сделает реверс-инжиниринг алгоритма?
kvitkov
11.09.2021 23:03добрый вечер. хотел бы пообщаться про часы. удобно будет написать на alkvitkov //// mail.ru
Rsa97
16.11.2021 17:56Глупая мысль — часы в виде динамического QR-кода для тех, кто никогда не расстаётся со смартфоном.
balamutang
17.11.2021 15:38Можно нагнетать посильнее - в QR коде ссылка на страницу где можно посмотреть время, т.е. чтоб еще и интернет нужен был.
Rsa97
Бедный словарик у часов.
А где надписи «полвторого», «без четверти час», «пять минут третьего»?
igrushkin
у меня есть такая матрица. Кратная пяти минутам, с традионно русскими формулировками типа "без пятнадцати три". Занимает 17х17 букв
AnDS0
а можно взглянуть?
arxz
Выложил свой вариант 12x12 в корне этой ветки.
arxz
Сделал матрицу 12х12 с добавлением фраз "без четверти", "без десяти", "без пяти", а так же полдень и полночь.
Если добавлять слова третьего, четвертого, пятого и т.д., это раза в полтора надо размер увеличить.
DAN_SEA Автор
Молодец! :-)
А матрицу на основе моего генератора делал или вручную? (просто интересно).
arxz
Делал вручную, но на генератор тоже было бы интересно посмотреть. Старался сделать, чтобы разбитые на части слова не сильно разрывались, чтобы читались слева направо и разбивались по слогам. Не думаю что генератор учитывает такие вещи :)
DAN_SEA Автор
Да, не учитывает...Допилить можно-но нужно ли.