Полгода назад мы дополнили наш почти традиционный офисный каток 7,6 тыс. светодиодами, чтобы транслировать изображения и видео прямо на поверхность льда. На гиктаймсе был опубликован пост, в котором рассказывалось о том, что подо льдом скрывается самый настоящий гигантский дисплей разрешением 120х63 «пикселей», на который можно выводить достаточно сложные и яркие изображения.
Часто нам задавали вопрос: можно ли своими руками сделать нечто подобное дома? Можно, почему нет? Про лед был подробный рассказ (вот история о первом катке — захватывающее чтиво в июльскую жару), а вот о способах превращения светодиодов в большой дисплей практически не упоминали. Так как наши мейкеры люди занятые и предпочитают говорить о чем-то новом, а не пережевывать прошлое, публикация этой статьи откладывалась снова и снова. В конечном счете мы решили перевести для вас понятный и наглядный туториал, после которого можно будет взять и повесить дисплей себе на стену.
Итак, выдохните, все будет просто. Бoльшая часть времени уйдет на сборку — придется немного покорпеть над соединением лент друг с другом. Они должны быть спаяны в последовательную цепь на задней стороне панели. Для рассеивания света защитное стекло будет матированным.
Главный вопрос проекта — какое ПО использовать? Здесь все зависит от ваших потребностей: мы начнем с демокода и указателей, а в одной из следующих статей рассмотрим, как выводить на дисплей уведомления и котировки акций.
Что нам понадобится
- 10 м светодиодной ленты (продается в катушках по 5 м). Я использовал дешевый вариант — WS2812B. Если же вам хочется получить более высокое разрешение дисплея, можете приобрести ленту с плотностью 60 светодиодов/метр;
- блок питания на 5 В и 10 А. Я использовал модель, у которой входное питание до 240 В подается на винтовые зажимы. Если вам нужно сделать дисплей более безопасным, выберите полностью закрытый блок питания;
- Arduino UNO;
- большое количество отрезков толстого провода. Я отрезал пучок от старого компьютерного блока питания;
- фоторамка 50х50 см;
- матирующий спрей и белая краска.
Общие затраты у меня получились меньше $100.
Также вам понадобятся инструменты:
- паяльник с припоем;
- клеевой пистолет;
- нож или ножницы;
- инструмент для снятия изоляции.
Сначала прочитайте пособие по работе с электроникой для начинающих!
Расчеты
Если вы приобрели рамку 50х50 см и такие же светодиодные ленты, как у меня, то сможете уместить в дисплей 15 отрезков по 15 светодиодов. Но ничто не мешает использовать рамку другого размера. Расстояние между светодиодами — около 30 мм, таким образом на один пиксель приходится примерно 30 мм2. Это наш 1DPI. Ну да, разрешение не как у Retina.
Рассчитайте, сколько отрезков ленты вам понадобится, и расчертите направляющие с обратной стороны панели. Семь раз проверьте, один раз отрежьте: у меня ленты немного различаются, потому что когда я начал их приклеивать, то обнаружил, что могу вместить только 14 отрезков по 15 светодиодов. Но это не страшно — в приложении можно легко настроить разное количество рядов пикселей и их длину. Отрежьте куски, подходящие для вашей рамки. К сожалению, я обнаружил, что у меня 15-е светодиоды в отрезках приходятся как раз на то место, где нужно припаивать соединительные провода. Поэтому пришлось их выпаивать.
Матирование стекла
Для лучшего рассеивания света я решил нанести на обе стороны стекла матирующий спрей. Делать это лучше на улице или на балконе, так как спрей вреден для здоровья. Наносить его необходимо как можно более равномерно. После высыхания матирование получается очень устойчивым, но изначально необходимо добиться равномерного покрытия без каких-либо царапин.
Также задуйте белой краской панель, которая будет видна сквозь стекло. Отрежьте один из углов — здесь пройдут провода.
Крепление светодиодных лент
Для приклеивания лент к панели используйте суперклей. Я пробовал двусторонний скотч, но через несколько недель он отвалился. Клеевой пистолет еще хуже, ведь обе поверхности — панель и обратная сторона ленты — гладкие и не имеют пор. Если вы приобрели светодиодные ленты в резиновом корпусе, то не сильно переживайте относительно точности размещения — их можно свободно двигать.
Помните, что сигнал будет проходить через всю цепь, и у каждой ленты есть направление передачи сигнала. Ленты нужно размещать так: у одной стрелка (направление сигнала) указывает направо, у следующей — налево, потом опять направо и т.д. То есть сигнал по дисплею будет идти «змейкой». Проверьте еще раз правильность размещения лент, прежде чем клеить их!
Пайка
Для соединения лент требуется по три провода разной длины. Внутреннюю пару контактов соединяем самым коротким проводом (на фото — красный), для средней пары берем провод подлиннее, а к внешним контактам припаиваем самый длинный. В зависимости от того, какие ленты в данный момент соединяются, внутренние контакты будут либо питанием (+5V), либо заземлением (GND).
Прежде чем припаивать провода, залудите их и сами контакты на лентах. На это уйдет больше всего времени, но это крайне важный момент. Не торопитесь, дважды проверьте правильность соединяемых контактов!
Фиксация лент
После возни с подключением проводов вы можете обнаружить, что первая лента сдвинулась. Эту проблему я решил следующим образом: просверлил два маленьких отверстия и зафиксировал ленту стяжкой. Если у вас не было под рукой достаточно сильного клея, то таким образом можно дополнительно зафиксировать все ленты с обоих концов.
Проверка подключения
Шестой пин Arduino используется для передачи управляющего сигнала; напряжение питания должно подаваться напрямую от блока питания. Подключите заземление между лентами, Arduino и блоком питания. Не пытайтесь запитать ленты от Arduino, а также не подключайте блок питания к Arduino при подключенном USB (когда будет загружаться код для тестирования).
Скачайте и добавьте в соответствующую папку библиотеку AdafruitNeoPixel, затем запустите Arduino. Протестируйте подключение с помощью следующего кода, указав в первом параметре количество светодиодов (в нашем примере — 60):
Adafruit_NeoPixel strip =Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800);
Если анимация остановится на каком-то ряду, сразу отключите всю конструкцию и проверьте подключение. Возможные причины сбоя:
- неправильное направление ленты;
- вы спутали контакты при соединении лент;
- вы припаяли +5V к GND.
Помещаем в рамку
Поскольку рамка не была рассчитана на такую глубину размещения панели, мне пришлось сначала зафиксировать стекло клеевым пистолетом, а затем по периметру вставить резиновый уплотнитель, работающий буфером между стеклом и панелью со светодиодами. После завершающего тестирования помещаем панель в рамку и фиксируем ее клеевым пистолетом. В углу можно проделать небольшое отверстие для вывода проводов. Все, техническая сторона проекта завершена.
Можете еще подумать над тем, возможно ли спрятать в рамке еще и блок питания с Arduino. А пока переходим к настройке ПО.
Glediator
Программа Glediator компании SolderLab.de очень хорошо подходит для анимирования светодиодных матриц на вечеринках или в ночных клубах. Она способна управлять матрицей, состоящей из 512 светодиодов WS2812/NeoPixels, формируя до 24 кадров/сек — этого вполне достаточно для нашего дисплея, можно даже выводить на него простенькие анимационные гифы. Микшер позволит делать плавные переходы между анимациями.
Для работы с Glediator установите на Arduino UNO прошивку, и проверьте, чтобы сигнальный кабель был подключен к пину 6. Не забудьте прописать в переменной количество используемых вами светодиодов.
Запустите Glediator, откройте свойства и измените размер матрицы и режим вывода. Настройте порядок пикселей, если у вас используется другая схема, но по этому шагу мало документации, поэтому придется действовать методом проб и ошибок. Если изображение на дисплее отличается от задуманного, попробуйте поиграть с настройками. У меня работал порядок пикселей HS_BL — подозреваю, что это означает «horizontalsnake, startingbottomleft» (горизонтальная змейка, начало слева внизу).
Glediator — профессиональное приложение, не будем пока изучать его интерфейс и возможности. Загрузите в левое и правое окна разные анимации, затем двигайте микшер между ними. Или используйте готовый плейлист, который показан в видеоролике.
Библиотеки Adafruit NeoMatrix и Adafruit GFX
Компания Adafruit создала очень полезную библиотеку для работы со светодиодными матрицами. Сначала она называлась Adafruit GFX, и изначально предназначалась для TFT- и LCD-дисплеев. Затем появилась модификация NeoMatrix, позволяющая полноценно работать с матрицами NeoPixel. Она имеет огромное количество простых в использовании функций по выводу текста или растровой спрайтовой графики.
Если вы в точности повторили мой проект, то можете воспользоваться этим кодом. Самая важная часть:
#define XSIZE 15
#define YSIZE 14
#define PIN 6
Adafruit_NeoMatrix matrix =Adafruit_NeoMatrix(XSIZE, YSIZE, PIN,
NEO_MATRIX_BOTTOM + NEO_MATRIX_LEFT +
NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
NEO_GRB+NEO_KHZ800);
С первыми строками все понятно. В последних трех описывается схема матрицы: в данном случае первый пиксель находится слева внизу (bottomleft), пиксели расположены рядами (rows), соединенными зигзагообразно (zigzag). Если вы сделали иначе, то обратитесь к документации библиотеки.
Я задал в коде несколько спрайтов — смайлы. Вы можете создать собственные с помощью Java-приложения Img2Code, лежащего в папке библиотеки GFX.
В будущем мы рассмотрим использование библиотеки для вывода полезной информации вроде котировок акций или ленты Twitter, а пока предлагаю вам самостоятельно поиграть с кодом и загрузить собственные изображения.
На этом все. Вы создали большой дисплей из светодиодных лент. Теперь нужно придумать, как его использовать. Из оставшихся светодиодов можете создать лампу в виде облачка.
Комментарии (24)
yktoo
28.06.2016 21:59А на первом фото что? Внешне довольно сильно похоже на проект моего знакомого Alley of Light. У них там, правда, далеко не пара дней ушла на сборку.
EnigMan
28.06.2016 22:29Чего-то я не понял. Лента управляется с ардуинки 6 ногой, а откуда ардуинка берет картинки для вывода? Из кода? Или как-то связана с компьютером?
sashabeep
28.06.2016 23:28Она подключена через usb к компу, на котором крутится рисующий софт Glediator.
На данный момент есть еще несколько интересных реализаций контроллера панели. Например, на модной esp8266, получается беспроводное artnet устройство. У меня панель 15*10 крутится на raspberry, управляется таким же образом, через локалку.sp01
30.06.2016 12:44А не покажете, что-то на ESP?
sashabeep
30.06.2016 12:51Сам еще не делал, до осени руки не дойдут, но, судя по коду, все просто. Нашел в обсуждениях Glediator-a
Вот этот репозиторий Вроде все достаточно просто, используется адафруктовская либа для пикселейsp01
30.06.2016 13:06Я же правильно понимаю, таким образом исключаем подключение к компу через USB. Взаимодействие идет через Wi-Fi?
Офтоп… Вчера ночью доделал один проектик на ESP. В режиме приема/передачи инфы жрет много электричества, и греется, но думаю радиатор легко решит вопрос.sashabeep
30.06.2016 13:11Artnet — это протокол передачи сигналов DMX через локальную сеть.
C его помощью можно собирать стены из экранов, например. Да и вообще, любым световым сценическим оборудованием управлять без всяких железных конветроров DMX и т.п. Экран — частный случай использования протокола.
Данных там пересылается кот наплакал.
Как раз на этой картинке окно выбора настроек можно задать mapping mode — boards of pixels и их порядок, объединяя несколько маленьких экранов в один большой.
Связь идет через локальную сеть. Кнопка Patch как раз отвечает за то, какой пиксель на каком ip и в каком порядке виситsp01
30.06.2016 14:42Ну я и говорю, исключаем раздел, где написано «COM-Port», начинаем использовать «Socket is… „
Примерно концепция ясна, очень интересно, нужно будет обязательно попробовать, just for fun. Благодарю за инфо!
sashabeep
28.06.2016 23:32Под Windows есть аналог Glediator — Jinx. Написан на winapi, потому не кроссплатформенный, в отличие от первого, работает чуть шустрее, есть интересный режим шоу, где просто куча кнопок со всеми твоими анимациями в виде консоли
sashabeep
28.06.2016 23:42Еще в Glediator есть режим capture — можно просто ловить видеопоток с любого окна и рисовать на панели нечто похожее на видеоряд. Если разрешение панели позволяет — выглядит интересно
soshnikov
29.06.2016 00:52Если честно, я совсем не понял, как реализована матрица и как она управляется одной ногой ардуины.
Может быть, схематично как-нибудь изобразить можно?AndreyNagih
29.06.2016 07:17Там в каждом светодиоде маленький контроллер, который позволяет делать управление по одной ноге, соединяя светодиоды в цепочку. Я думаю, там что-то вроде сдвигового регистра и данные нужно последовательно заливать пока не заполнится вся «матрица».
Gdalex
29.06.2016 11:04Микросхема WS2811 (а в светодиодах WS2812b этот контроллер встроен сразу в чип диода) компании Worldsemi [1] является трехканальным драйвером для управления светодиодами стабилизированным током, при этом обеспечивается 256 градаций яркости по каждому каналу. Яркость светодиодов, подключенных к WS2811, управляется последовательным цифровым кодом, который формируется микроконтроллером. Данные при этом передаются всего лишь по 1 проводу. Цифровой сигнал управления проходит сквозь микросхему WS2811, так что несколько микросхем WS2811 могут быть объединены в длинную цепочку с сохранением возможности управлять каждым светодиодом в цепочке по отдельности. Микросхема использует режим обмена данными NZR (Non-return-to-zero, код без возврата к нулю [2]). После сброса при подаче питания (power-on reset), порт DIN принимает данные от внешнего контроллера, при этом первая микросхема собирает первые 24 бита данных, и затем передает их во внутреннюю защелку данных, при этом у остальных данных восстанавливается форма с помощью узла восстановления и усиления, и эти остальные данные передаются следующей в цепочке микросхеме через порт DOUT. После прохождения каждой микросхемы количество бит в общем потоке уменьшается каждый раз на 24 бита. Технология автоматического восстановления передаваемого сигнала данных устроена таким образом, что количество каскадируемых микросхем ограничивается только скоростью передачи и требуемой частотой обновления яркости светодиодов.
Подробно здесь: http://microsin.net/adminstuff/hardware/ws2811-led-driver.html или гуглите.KonstantinSoloviov
30.06.2016 13:45Извините, но резануло глаз это (я понимаю, что текст — цитата с сайта):
трехканальным драйвером для управления светодиодами стабилизированным током, при этом обеспечивается 256 градаций яркости по каждому каналу
Что-то не вижу я ничего в даташите про «стабилизированный ток»
Gray level 256 can be adjusted and scan frequency not less than 400Hz/s.
я понимаю как управление ШИМом не частоте не менее 400Гц. (кстати «Hz/s» — эт вообще не понятно что)
Управление стабилизированным током — это было бы слишком хорошо. Да, и сложнее заметно.Gdalex
01.07.2016 09:50Стабилизацию тока обеспечивает сама МС. На нее просто подается напряжение питания, дальше — дело техники :)
KonstantinSoloviov
01.07.2016 12:14Не пишите ерунду, нет там стабилизации тока, только ШИМ.
Для стабилизации тока нужнен либо баластный элемент для пассивного регулирования либо индуктивность для активного.Gdalex
01.07.2016 13:24Не буду спорить — это написано на сайте (ссылку я приводил выше). Я не знаю схемы чипа :)
BerkutEagle
29.06.2016 11:04Здесь используются светодиоды с так называемой пиксельной адресацией WS2812B. Хотя адресации как таковой и нет. Данные льются потоком по управляющей линии на частоте 400 или 800 кГц, первый светодиод «забирает» свои 24 бита информации (RGB), остальное отправляет дальше по цепочке. До 1024 штук в одну цепь можно соединить.
ClearAirTurbulence
29.06.2016 11:34Видел похожий проект где-то на DIY сайтах, только там подход был немного другой — вместо жестко закрепленных лент, типа табло, автор сделал «занавеску» из свободно свисающих лент. Получилось атмосферно.
thunderspb
Прикольно, облачко еще прикольнее :) Для себя пока только сделал ambilight-like подсветку на монитор… Подумаю насчет облачка