Не знаю почему, но мне очень нравятся светодиоды, и видеть их можно почти во всех моих проектах. Буквально недавно меня вдохновил Грег Дэвилл своим проектом миниатюрного LED-куба с 3456 светодиодами. Немного поразмышляв на эту тему, я решил собрать такой же чудесный куб сам, о чем и поделюсь с вами в данной статье.

Аппаратная часть: печатные платы


Я изначально предполагал, что сборка LED-панелей будет самой сложной частью проекта, и не ошибся. У меня уже есть опыт успешной пайки оплавлением, но в той ситуации мне не требовалось втискивать 576 RGB-светодиодов в крохотную квадратную поверхность.

Замечательные люди с PCBWay.com по-дружески предоставили для моего проекта панели печатных плат. Толщина этих плат составляет 1.6мм, они обработаны паяльной маской, имеют покрытие ENIG и оформлены белой шелкографией. Такое сочетание цветов мне нравится.


LED-панель, верхняя часть


LED-панель, нижняя часть

Тем, кого интересуют подробности дизайна электроники, я посоветую прочесть статью Грега. Если кратко, то управление панелями реализовано с помощью мультиплексирования. Ряды матрицы управляются сдвиговыми регистрами SN74HC595, которые, в свою очередь, управляются 24 МОП-транзисторами. Рядами светодиодов управляют шесть LED-драйверов постоянного тока TLC59025.

Я начал со сборки нижней части панелей. Это довольно просто, поскольку все компоненты достаточно велики. Некоторые панели после извлечения из духовки потребовали доработки, в основном из-за возникших «мостиков» припоя между выводами на корпусах TLC59025 QSOP-24.


Нижняя часть в сборе, до оплавления


Оплавление нижней стороны. Красный стержень – это термощуп

На очереди сборка верхней части. Это, как можно догадаться, оказалось сложнее всего. Я знал, что установить вручную 576 светодиодов размером 2х2мм без спец инструмента будет излишне трудоемкой задачей, поэтому купил вакуумный пинцет Quick 381A. Справляется он со своей задачей отлично. Как только я с ним освоился, на заполнение одной панели ушел всего где-то час.


Стальной трафарет верхней стороны


Раздражало, когда я случайно задевал катушку


Верхняя сторона в сборе, до оплавления. Нестыковки в процессе пайки выправятся


Каждая площадка покрыта крохотным сгустком паяльной пасты


Защита пластиковых коннекторов фольгой


Пайка верхней стороны. Наблюдать выравнивание в процессе светодиодов — чистое удовольствие

В ходе сборки семи таких панелей я допустил ряд очень поучительных ошибок, исходя из которых могу дать такие рекомендации:

  1. Внимательно следите за температурой пайки, потому что при перегреве светодиоды утратят работоспособность. В моем случае это произошло при пайке первой панели, где в итоге отказалась работать большая группа красных светодиодов в самой середине платы. Сперва причину я понять не мог, но чуть позже до меня дошло, что они находились непосредственно над теном духовки.
  2. Оказалось, что выравнивать трафарет на плате нужно очень точно и потеков необходимо избегать любой ценой. Я оплавил плату с небольшим потеком в углу и в итоге получил кучу спаянных контактов. В общей сложности из-за этого мне пришлось заново переделать около десятка светодиодов на одной плате.
  3. Прочно фиксируйте термощуп, чтобы он случайно не выбил с платы светодиоды, когда вы будете открывать дверцу по завершению оплавления.


Шесть светодиодных панелей собраны и протестированы

Аппаратная часть: корпус


Я спроектировал корпус для куба сам, решив сделать его максимально простым. Размер получился 67мм3. Это единая деталь, которую можно напечатать на 3D-принтере. Платы же фиксируются в него за счет вытянутых краев.

Для печати я решил использовать процесс мультиструйной плавки (MJF) Shapeways. Получилось симпатично, хотя точность размеров оказалась ниже ожидаемой. Поначалу панели вставали в каркас чересчур свободно, что я легко исправил небольшим количеством суперклея, который нанес на его ребра и оставил высыхать на ночь.


3D-печатный каркас (1)


3D-печатный каркас (2)

Программирование


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

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

Принципиально моя программа проста: настроить таймер для вызова прерываний каждые 1/2400 секунды. При этом каждый раз нужно считывать и смещать объем данных, «защелкивать» регистры и ожидать прерывания, чтобы повторить все это сначала.

Отлаживать такой код – боль, но в итоге он отлично работает и радует своей скоростью. Uno не способен генерировать много изощренных паттернов анимации, но мне удалось получить красивый эффект случайного мерцания — и это с помощью простейшего 3-битного цвета. Скажу честно, такой результат меня даже немного удивил.

Тестирование, сборка, результаты


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


Соединение шести панелей шлейфом


Проверочная установка панели


Боке!

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


Добро пожаловать в шлейфовые джунгли



Готово! Результат мне пришелся по душе. Я был настолько им восхищен, что не захотел откладывать публикацию статьи до момента установки батарей и контроллера. Опять же, огромная благодарность Грегу Дэвиллу и PCBWay – благодаря вам этот проект увидел жизнь. Он также научил меня многому в плане программного управления массивами светодиодов. Кроме того, я существенно отточил свои навыки по сборке и переделке печатных плат.




Вуаля!


Еще боке!







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


  1. YMA
    16.12.2021 16:21
    +19

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


    1. Ivnika
      16.12.2021 16:35
      +19

      Элементарно - часы / погодная станция / уведомления / уровень чего-то / волнение на море / скорость ветра / прогресс процесса

      Увлекся я, не надо ничего такого, просто хочу смотреть как он переливается!!!


      1. psycho-coder
        16.12.2021 16:43
        +19

        запустить на нем Жизнь. 6 граней, разные цвета для разных вигур… Эх мечты


        1. Ivnika
          16.12.2021 16:45
          +7

          Супер идея, причем чтобы сразу все грани были задействованы, то есть по факту замкнутое пространство а не плоскость


          1. psycho-coder
            16.12.2021 16:47
            +1

            Именно!


          1. shtwark
            16.12.2021 17:47

            Еще бы модификацию игры жизнь для RGB придумать. Или может есть какие то готовые?


            1. Ivnika
              16.12.2021 17:51
              +6

              Первый шаг - все одного цвета, следующее поколение другого и тд

              Соответсвенно устойчивый блок из первого поколения будет одного цвета


              1. psycho-coder
                16.12.2021 19:59

                Тоже интересный вариант


              1. Razoomnick
                16.12.2021 21:49

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

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

                Мой вариант: поскольку жизнь зарождается только при наличии трёх соседей, то можно определить правила для цвета новой ячейки. Например (первые два циклические, как сделать равноправное третье пока не придумал):

                rrr -> g, rrg -> b, rgb -> r


                1. Ivnika
                  16.12.2021 22:36

                  Я про это и пишу - новая ячейка = новое поколение, так как и рождение и смерть происходит одновременно. Мы заранее знаем сколько цветов есть - столько и используем циклически. Старые (первые ячейки) либо погибают, либо замеяются другими, либо остаются неподвижными.


                1. nulovkin
                  17.12.2021 03:53

                  Напоминает об умножении кватернионов.


            1. Refridgerator
              17.12.2021 06:42
              +2

              Я делал цветной вариант «Жизни» для кнопочного телефона, где цвет выбирался нелинейно в зависимости от паттерна:


            1. FloorZ
              18.12.2021 09:31

              Задать цвет от количество соседей у клетки. Вот тебе и цветнойсвариант.


          1. nulovkin
            17.12.2021 03:51

            У всех 24 угловых клеток будет максимально по 7 соседей, а не 8. Интересно, это даст ошибку? И вообще, насколько иначе выглядит эта игра на замкнутой плоскости?


            1. psycho-coder
              17.12.2021 11:51

              Можно ведь делать игру как на плоскости условно бесконечной, так и замкнутой, ограниченной какими-то размерами. Мы пробовали делать в замкнутом, вставал вопрос как замкнуть, как в змейке откуда ушел туда и вышел или «по даигонали» вниз слева ушел — сверху справа вышел. Уже не помню что выбрали


              1. LynXzp
                19.12.2021 04:36

                Если как в змейке то это поверхность типа тор, часто выбирается в играх. А если по диагонали то
                1. Расстояния от точки входа до выхода (без нового перехода) зависит от точки на которой перешел, что странно.
                2. Попробуйте представить как нужно скрутить двухмерную поверхность в трехмерном пространстве чтобы по ней можно было перемещаться так как Вы описали. Занятная поверхность получается. И похоже пересечения будут обязательны.


                1. psycho-coder
                  19.12.2021 12:03

                  Эти вопросы и решались. Чем все закончилось уже, к сожалению, не помню(


        1. dragonnur
          17.12.2021 09:15

          Вовремя надо перечитывать комменты :)


        1. vladvul
          17.12.2021 16:41

          я придумал только Змейку но Жизнь конечно лучше


    1. infund
      16.12.2021 16:42
      +10

      Забабахать имитацию перемешивания/сборки кубика Рубика

      _
      красивое…


      1. psycho-coder
        16.12.2021 16:46

        Точно. Как я сам не додумался(


      1. GennPen
        16.12.2021 17:18
        +3

        Сделать игру 2048 по всем плоскостям куба одновременно.


        1. zartdinov
          17.12.2021 09:03
          +5

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


    1. PanDubls
      16.12.2021 18:41
      +1

      А еще, мне кажется, очень круто было бы использовать как учебное пособие на курсах статистики. Представьте эту штуку с доступным API, с помощью которого можно кодировать мерцание в соответствии с разными статистическими законами. Например, задать единовременное количество точек цвета i как результат динамического стохастического процесса. Ябзалип.


    1. zartdinov
      17.12.2021 08:59
      +1

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


  1. alexeynos
    16.12.2021 16:30
    +5

    Красиво.

    Не логичнее ли использовать ESP32 в качестве управляющего контроллера? Он доступен везде: от ЧипДип до Бангуда, стоит сейчас дешевле Ардуинок, куда производительней и с беспроводкой на борту, что для кубика важно, IMHO.

    Второй вопрос: если заказывать на PCBWay.com сразу собранные платы это разве выйдет сильно дороже, особенно с учетом испорченной платы и потерянного времени?


    1. ainu
      16.12.2021 23:02

      Это перевод, врятли автор ответит. Да, esp32 100% будет лучше, на видео видно, что "эффектов нескучных" толком нет.

      Но есть нюанс. ws2812b и подобные RGB контроллеры тут не поставить, так как 3456 светодиодов - это очень, очень много.


      1. isden
        17.12.2021 10:44

        Можно пойти чуть дальше, и поискать цветные квадратные oled дисплеи с крупными пикселям или готовые сборки с обычными led.


    1. nochkin
      17.12.2021 20:08

      Странное сравнение платформы Arduino с голой железкой в виде ESP32. Особенно если учесть, что Arduino портировано под ESP32.


      1. zxcvbv
        17.12.2021 20:29

        Arduino портировано под ESP32

        Cкорее, наоборот, ESP32, выпущено на платформе Arduino. Также, как и STM32, Intel x86 и др.


        1. nochkin
          17.12.2021 21:02
          +1

          ESP32 не выпускали специально для Arduino. ESP32 появилась раньше, чем было под неё портирована Arduino. Софт портировали после выпуска ESP32.


  1. AndySS
    16.12.2021 16:30
    +3

    Сложно установить 575 светиков на все 576 посадочных места.


  1. yarkov
    16.12.2021 16:31
    +9

    Нужен режим свечения как у тессеракта ))
    image


  1. zxcvbv
    16.12.2021 16:40
    +1

    На каком источнике питания всё работает и какой потребляемый ток, если зажжены все светодиоды?


    1. zxcvbv
      16.12.2021 23:48
      +3

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

      Значит, в оригинальном посте автор утверждает, что 2х18650 у него светят 8 часов:

      I ended up being able to use 2x 18650 cells fitted in diagonally, this provided around 8 hours of runtime.

      Не ясно, сколько в среднем светодиодов светилось одновременно за эти 8 часов, допустим, что половина, как на фото. Всё равно пока не очень сложилось, как 2х3600 мАч@3.7В могут питать 1800 пусть даже самых дохлых светодиодов в течение 8 часов.


      1. Zordhauer
        17.12.2021 13:38

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


        1. isden
          17.12.2021 15:01

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


  1. Asket007
    16.12.2021 16:41
    +3

    кубик-залипубик)


  1. dernuss
    16.12.2021 16:53
    +2

    жаль батарейка большая не поместится внутрь


    1. zhka
      16.12.2021 17:31
      +1

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


      1. drWhy
        17.12.2021 00:20

        Психоистория v0.1.

        Психоистория


  1. INSTE
    16.12.2021 17:06
    +1

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


  1. vlreshet
    16.12.2021 18:03
    +6

    Внутрь бы акселерометр с гироскопом поместить, можно было бы очень залипательные штуки написать


  1. Barma2012
    16.12.2021 18:51
    +1

    А чего не использовали китайские светодиодные панели? Типа такой: https://aliexpress.ru/item/1005001834968231.html?sku_id=12000017794774087

    Там полноцветные диоды, уже собранная схема сканирования строк, и довольно простой интерфейс. Яркость высокая, и хорошая цветопередача - можно фильм показывать )))


    1. vaslobas
      16.12.2021 19:13
      +1

      А у них разве не фиксированный размер 192 на 192?

      С гранью в 192 мм это будет уже не кубик, а кубище!


      1. dernuss
        16.12.2021 22:51
        +2

        И шаг ещё огромный


      1. vitecd
        17.12.2021 02:39

        и никакая ардуина это уже не разрулит


        1. nochkin
          17.12.2021 20:06

          Почему же? Есть достаточно много сильных МК для такого. Вроде на старых Teensy даже управляли большом количеством светодиодов, что уж про более новые говорить.


      1. Barma2012
        18.12.2021 20:27

        Есть панели разных размеров. От диаметра светодиодов зависит.

        Самая маленькая 64х64 пикселя - по моему, 128 мм сторона. А 32х32 будет примерно вдвое меньше.


  1. vitecd
    17.12.2021 02:39
    +4

    защита? оловянной? фольгой... ок


    1. dragonnur
      17.12.2021 09:18

      Жестяная, да.


      1. SergeyMax
        17.12.2021 13:47
        +1

        Алюминиевая, в данном случае, да.


        1. dragonnur
          17.12.2021 13:55

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


          1. SergeyMax
            17.12.2021 13:58
            +1

            Да, tin переводится как олово или жесть, но в США tin foil - это алюминиевая фольга.


            1. nochkin
              17.12.2021 20:04

              Там вообще часто "tin" -- это типа как "железяка" без подробностей о составе сплава.


              1. Bright_Translate Автор
                18.12.2021 19:53

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


                1. nochkin
                  18.12.2021 20:20

                  Я не обсуждал неточность перевода в статье, а больше о том, какие варианты есть у этого слова.

                  А оловянную фольгу я делал в детстве просто ради интереса. Правда, в её составе ещё был свинец.


  1. iiiytn1k
    17.12.2021 02:42
    +1

    Запилить бы такое из шести ГИП-10000… Эпичная вундервафля получилась бы.


  1. Ghost_nsk
    17.12.2021 07:47

    Вместо TLC59025 лучше подошда бы TLC5947, сразу 24 канала, 12bit PWM, возможность последовательного соединения, разные корпуса. Правда ценой 288 бит на строку.


    1. Alexeyslav
      17.12.2021 13:17

      И как потом это совместить со сканированием строк? ШИМ будет в конфликте с частотой сканирования строк и появится стробоскопический эффект. Или тогда отказаться от матричного подключения светодиодов, запилить статику? Всего 24 чипа на каждую плату и магасложнейшая разводка... минимум 4-х слойные нужны будут платы?


      1. Ghost_nsk
        17.12.2021 14:46

        Совместить точно так же как и автор. Частота ШИМ на память 1kHz (4MHz / 2^12), это больше частоты сканирования, стробоскопического эффекта не должно быть. Проблема может возникнуть с объемом данных (24 * 12 = 288bit на строку) и скоростью (30Mhz CLK ~ 30Mbps). Но по цифрам запас есть, 30Mbps / (288 бит на строку * 24 строки) получаем примерно 4k FPS.


  1. 1Logic
    17.12.2021 08:27
    +1

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


  1. andybeg
    17.12.2021 08:48
    +2

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


    1. VIPDC
      17.12.2021 10:40

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


      1. andybeg
        17.12.2021 10:44

        соглашусь, мозг потерял от красоты :)


  1. srg27y
    17.12.2021 09:15

    заліть туда змейку і тэтріс


  1. alexeynos
    17.12.2021 09:20
    +1

    На самом деле, туда надо вот это во внутрь встроить:

    https://youtu.be/n_6p-1J551Y

    И тогда точно никто не отлипнет.


  1. tnt23
    17.12.2021 09:36

    Перевод переводом, но tin foil - совсем не "оловянная фольга"


  1. AlexKly
    18.12.2021 15:40

    Как то раз очень давно паял куб 16×16×16 из светодиодов. Такое Г вышло, т.к. все криво вышло. Но в таком варианте очень круто выглядит. Автору спасибо, возьму на вооружение! В закладочки добавил)