Источник

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

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

И я подумал, почему бы не обдумать вероятность создания примерно таких часов, на русском языке?

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

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

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.

Это позволит разбить вставленную строку на отдельные буквы. После чего, мы начинаем подравнивать каждую букву, выравнивая её по центру квадратика, символизирующего пиксель светодиодной ленты.

image

Однако, данная работа была бы неполной, без преобразования получившихся букв — в буквы трафаретного типа. Так как будущую конструкцию часов мы оптимизируем под производство с применением лазерной резки, нам необходимо, чтобы каждая буква не содержала замкнутых объёмов внутри (как например, буква О). Поэтому все замкнутые объёмы внутри букв мы соединяем перемычками с внешними объёмами.

Для этого, мы предварительно выделяем все строки, вставленные в 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)


  1. Rsa97
    02.09.2021 12:11
    +4

    Бедный словарик у часов.
    А где надписи «полвторого», «без четверти час», «пять минут третьего»?


    1. igrushkin
      02.09.2021 12:33
      +6

      у меня есть такая матрица. Кратная пяти минутам, с традионно русскими формулировками типа "без пятнадцати три". Занимает 17х17 букв


      1. AnDS0
        02.09.2021 14:40
        +5

        а можно взглянуть?


        1. arxz
          06.09.2021 14:24

          Выложил свой вариант 12x12 в корне этой ветки.


    1. arxz
      06.09.2021 14:24
      +4

      Сделал матрицу 12х12 с добавлением фраз "без четверти", "без десяти", "без пяти", а так же полдень и полночь.

      Если добавлять слова третьего, четвертого, пятого и т.д., это раза в полтора надо размер увеличить.


      1. DAN_SEA Автор
        06.09.2021 19:56

        Молодец! :-)

        А матрицу на основе моего генератора делал или вручную? (просто интересно).


        1. arxz
          06.09.2021 20:23
          +1

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


          1. DAN_SEA Автор
            06.09.2021 21:53

            Да, не учитывает...Допилить можно-но нужно ли.


  1. balamutang
    02.09.2021 12:14
    +7

    Интересный дизайн - как надгробный камень.

    Когда я умру - поставьте пожалуйста такие часы на моей могиле, чтоб они показывали "Я гнию здесь уже столько-то лет, столько-то дней, столько-то часов, спасибо что интересуетесь, желаю вам хорошего настроения и держитесь там"


    1. DAN_SEA Автор
      02.09.2021 12:24
      +1

      Это просто концепция;-) Условная "прямоугольность" или "квадратность" часов зависит от конкретного наполнения массива слов, в коде java и от количества символов в строке у матрицы.


    1. DAN_SEA Автор
      02.09.2021 12:42
      +1

      Отличная идея кстати! Теперь я знаю, что написать в завещании:-)


    1. NickSin
      06.09.2021 15:37

      вот только тело разлагается полностью до костей за 17-18 месяцев. Нужно что-то дальше потом придумать


  1. RiddickABSent
    02.09.2021 12:20
    +2

    Шикарная идея!

    Наконец-то кукушка будет с субтитрами)


  1. Vladislav-Popov
    02.09.2021 12:40
    +16

    Это классные часы. В далеком 2014 году, попались мне фотки Qlock и я решил воплотить их в жизнь. Мне они до сих пор нравятся. Реализованы atduino и той же адресной ленте.

    Гостям нравится эти необычные часы и все они не верят что это DIY ))


    1. AnDS0
      02.09.2021 13:11

      Кратность пяти минутам?


      1. Vladislav-Popov
        02.09.2021 13:24
        +2

        Точки по углам - это минуты.

        10:38


        1. dlinyj
          02.09.2021 14:57
          +1

          Не хотите об этом написать?


          1. Vladislav-Popov
            02.09.2021 15:19
            +4

            Если честно не думал, что это будет кому то интересным. И опять же плагиат налицо, ведь есть коммерческая разработка часов. Да и за код свой мне будет очень стыдно )) Но спасибо за наводку, возможно сделаю вторую ревизию часов, у меня как раз с 14 года лежит вторая лицевая стальная панель.


    1. usa_habro_user
      02.09.2021 20:54

      Забавно, безусловно, и выглядят отлично. Правда, как часами, наверное, трудновато пользоваться (особенно без привычки, или издалека), но все равно огромный "зачОт"! Статью напишите и опубликуйте обязательно! Думаю, не одному мне будут интересны детали реализации, да и работающий годами реальный гаджет это совершенно другое дело, чем даже подробно описанный, но нереализованный проект (реверанс в сторону автора статьи, тоже "плюсанул", ибо все DIY-щики заслуживают, по моему мнению, только "плюсов"!


      1. Vladislav-Popov
        03.09.2021 12:58

        Благодарю!

        Если снять часы, то там нет задней стенки и кнопки установки времени не распаяны, тупо выведены контакты ????, так что не все DIY-щики «одинаково полезны» )). Это я к тому, что тоже своего рода недоделка.


    1. tro9n4ik
      03.09.2021 12:45

      А есть чертеж таких часов под чпу?


      1. Vladislav-Popov
        03.09.2021 13:00
        +2

        Определенно где то должны быть. Соберу все материалы и сделаю публикацию.


        1. tro9n4ik
          03.09.2021 13:07
          +1

          Было бы замечательно


        1. Uris
          05.09.2021 17:36

          Ждём)


        1. danij_com
          25.09.2021 14:52

          Присоединяюсь к тем, кто ждет. Ваши часы выглядят очень круто, если сравнивать с другими diy проектами, которые смог найти на просторах интернета :)


  1. Pasha13666
    02.09.2021 13:50
    +1

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

    PS: "час" и "часа" можно было совместить.


    1. Vladislav-Popov
      02.09.2021 15:55

      Как пользователь аналогичных текстовых часов могу сказать, что изначально конечно было непривычно, но позже и я и супруга довольно быстро стали понимать текущее время. 

      Ещё лично для себя заметил особенность - запоминание текущего времени происходит лучше и я не ловлю себя на мысли «а который час», хотя минуту назад смотрел на часы, как это происходит со смартфоном…


  1. grizzly_8
    02.09.2021 13:54
    +1

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


    1. DAN_SEA Автор
      02.09.2021 18:15

      Если честно, то просто не подумал о спец.шрифтах - и безусловно, вы правы!:-) Проще взять трафаретный шрифт. Однако, мой способ любопытен тем, что я сразу пошел по более сложному пути, как сделать из любого шрифта, - подходящий для дела.


  1. usa_habro_user
    02.09.2021 21:02

    @DAN_SEA, резистор на 470Ω там не нужен: у меня такие ленты работают годами, напрямую подключенные к ESP32. Можно было-бы коснуться слегка требуемого блока питания, но для 60 LED подойдет и самый обыкновенный, дешевенький на 1-1.5A. Ну, и на схеме вы забыли питание VIN к ESP32 подвести (но это так - слова, а не придирки ради, всем все понятно).


    1. usa_habro_user
      02.09.2021 22:02

      Часы являются малодоступными широкому кругу людей, ввиду их дороговизны (это явилось одним из стимулов для разработки своих собственных

      Чёрт меня дернул посмотреть на Amazon-е (из-за слов о дороговизне): цена вопроса, к сожалению, всего $24.99 c free shipping-ом (для Prime members).


      1. DAN_SEA Автор
        02.09.2021 22:07

        Полезная информация! Я сам видел только версию, которая в начале статьи. Цена у нее довольно жесткая...


        1. usa_habro_user
          02.09.2021 22:42
          +1

          Цена у нее довольно жесткая...

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


    1. DAN_SEA Автор
      02.09.2021 22:06

      Спасибо за коммент! На самом деле я не забыл - я просто выборочно рассказал о подключении адресной ленты - к esp32. А саму esp-шку конечно надо запитать. А еще желательно корпус, а еще, а еще...:-)))


    1. igormu
      06.09.2021 04:49

      У меня при подключении ленты напрямую к ESP32 не хватило напряжения высокого уровня, пришлось добавить диод с резистором.


  1. Dinxor
    02.09.2021 21:27
    +1

    Узнал про такие часики лет 8 назад, тоже хотел собрать, но руки так и не дошли. В 2017 разработал программу на AutoIt, сын как раз проходил часы по английскому.

    Потом стал изучать Пайтон, переписал на нём но попроще, без цветных букв и эффектов.


  1. tirus
    03.09.2021 09:20
    +2

    У меня в кружке шестиклассник в прошлом году на логических микросхемах такие часы собрал ) почему не на Ардуино? Потому что он ещё не изучал микроконтроллеры и Ардуино в частности. А в планах было сделать все на ПЛИС, но из-за ковида кружок закрыли, поэтому проект так и остался на микросхемах 4000 серии. Просил его вместе с отцом написать о проекте на Хабр, но они постеснялись. Папа у него, кстати, не электронщик, помогал ему лишь с корпусом и текстовой панелью - заказали лазерную резку на стороне В итоге часы получили диплом 2 степени на конкурсе для школьников Радиопоиск-2020. Если найду фото, выложу


  1. esynr3z
    03.09.2021 23:18
    +6

    Тоже делал подобные часы =) Очень долго играл в шарады, чтобы можно было составить читаемую надпись для любой минуты. Часы сами себе являются корпусом - стек из 4 плат и рамки из акрила.


  1. tima_tey
    03.09.2021 23:32
    +1

    Какая приятность) Часы от Qlocktwo то и дело всплывают в ленте хабра.
    Не так давно делал реализацию этого концепта. Началось всё с короткого оживления их демо, собранного за один вечер, которое вылилось в крутой элемент интерьера.

    Как раз на следующей неделе планирую собирать модель в масштабе метр на метр для нашего офиса.


  1. LeVoN_CCCP
    04.09.2021 07:50
    +1

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


    1. DAN_SEA Автор
      04.09.2021 07:52

      Пока никак не могу добраться непосредственно до котов - мать живет в другом городе. Видимо уже на новый год... Заодно соберу еще один аппарат - гораздо проще и протестирую оба сразу :-). Более простую версию сможет собрать любой- выложу инструкции по сборке (впрочем, это как всегда:-) )


  1. pasdeprenom
    10.09.2021 21:46

    Как насчет создании матрицы русского (любого другого) языка, использовав например Большой толковый словарь русского языка, интересно каких размеров получится матрица после сжатия? Кстати на сайте https://qlocktwo.com/ch_fr/qlocktwo-w35-copper можно подсмотреть их матрицы для наиболее распространённых языков - кто первый сделает реверс-инжиниринг алгоритма?


  1. kvitkov
    11.09.2021 23:03

    добрый вечер. хотел бы пообщаться про часы. удобно будет написать на alkvitkov //// mail.ru


  1. Rsa97
    16.11.2021 17:56

    Глупая мысль — часы в виде динамического QR-кода для тех, кто никогда не расстаётся со смартфоном.


    1. balamutang
      17.11.2021 15:38

      Можно нагнетать посильнее - в QR коде ссылка на страницу где можно посмотреть время, т.е. чтоб еще и интернет нужен был.