Подключаем светодиодную ленту из матрицы (грамотно)
Привет друзья!
Хочу поделиться опытом подключения светодиодной подсветки из матриц, в моем случае разбитой)
Многие спросят "Почему бы не купить просто светодиодную ленту?".
А потому что в плату матрицы встроен достаточно продвинутый светодиодный драйвер.
Он позволяет запитываться напряжением от 5 до 30 вольт, не меняя интенсивности свечения. Следовательно можно смело подключать в машину не боясь что светодиоды начнут выгорать, или будут светить не полную яркость.
Итак начнем:
Берем любую разбитую матрицу с LED подсветкой, моя на 15.6" называется B156HW02

Для управления подсветкой нам нужный 4 вывода:
1. Питание от 5 до 30 вольт
2. Масса
3. Сигнал включения подсветки
4. Сигнал управления яркостью
у большинства обитающих ныне матриц вот такой разъем

Интресесуют нас вот эти пины
38 VLED LED Power Supply 7V-20V
39 VLED LED Power Supply 7V-20V
40 VLED LED Power Supply 7V-20V
31 VLED_GND LED Ground
32 VLED_GND LED Ground
33 VLED_GND LED Ground
35 PWM System PWM Signal Input
36 LED_EN LED enable pin(+3V Input)
по фотке слева 1 пин, справа 40.
Часто на платах ближе к разъему подключения светодиодов есть площадки с этими выводами, их я и использовал. Видите подписано V_LED, PWM и LED_EN? это они есть

Уровень сигнала включения должен быть 3 вольта, а яркость регулируется подачей от 0 до 3 вольт. Мы подадим на них 5 вольт, ничего не сгорит. Для этого беру маленькую кренку на 5в. припаиваю к плате, у меня все выводы расположились рядом. И закорачиваю между собой PWM и LED_EN, т.о. сигнал включения есть и яркость будет максимальной.

Подключаем и видим подсветка зажглась

Теперь можно разобрать матрицу и вынуть саму светодиодную ленту и снять плату

Этот модуль со светодиодным драйвером всегда идет обособленно на краю платы и т.к. я подключался не к разъему а площадкам возле драйвера, остальная плата мне не нужна и я отломал остальной кусок платы для экономии места
LED-матрица 8×8
Матричный светодиодный индикатор состоит из нескольких рядов и столбцов светодиодов, которыми можно управлять по отдельности или группами.
Светодиодные матрицы бывают одноцветными, двухцветными и RGB (позволяют получать любой цвет). /p>
Очень популярна разновидность матричного индикатора, имеющего восемь рядов и восемь столбцов с красными или зелёными светодиодами (общее число 64). Все светодиоды в матрице соединены по схеме с общим катодом.

Принципиальная схема выглядит немного запутано.

Fritzing: led matrix display
Если смотреть с обратной стороны матрицы, вывод 1 будет находиться справа внизу. Иногда у вывода можно увидеть маленькую цифру 1. Либо имеется дополнительная выемка на стороне матрицы. Выводы нумеруются в направлении по часовой стрелке (если смотреть со стороны выводов), то есть вывод 8 находится слева внизу, а вывод 16 — справа вверху.
Если смотреть со стороны матрицы, то первый вывод будет в левом нижнем углу, затем нумерация идёт против часовой стрелки.

Пробное подключение
У матрицы шестнадцать выводов, что представляет определённую проблему при прототипировании. Приходится задействовать практически все выводы платы. Но так как все светодиоды в матрице независимы, мы можем поиграться с одной. Соединим матрицу с платой по следующей схеме: вывод 9 от матрицы соединяем с выводом 2 на плате, а вывод 13 от матрицы с GND через резистор.

При таком подключении мы задействуем самый верхний левый светодиод матрицы. Запускаем скетч мигания светодиодом Blink, чтобы увидеть работу одного светодиода.
В реальных проектах мы должны соединить все выводы матрицы. Так как их шестнадцать, то кроме цифровых портов нам нужно задействовать и аналоговые, которые могут работать как цифровые. В этом случае порт A0 становится 14, A1 — 15 и т.д. Соединив все выводы матрицы, можно включить нужный светодиод, подавая HIGH на вывод ряда и LOW на вывод столбца. Включим светодиод из второй строки и первой колонки.
07.Display: RowColumnScanning
В состав Android IDE входит пример для светодиодной матрицы File | Examples | 07.Display | RowColumnScanning. Суть в следующем — с помощью двух потенциометров считываем показания с аналоговых выводов в интервале от 0 до 7. Показания от первого потенциометра указывают на вывод из ряда, а от второго на вывод из колонки матрицы. Таким образом, мы можем крутить ручки двух потенциометров и выбирать, какой светодиод из матрицы следует включить.
Я предлагаю упростить пример. Уберём потенциометры и удалим функцию readSensors() из скетча. Теперь, чтобы включить любой светодиод, нужно указать номер ряда и номер колонки в двумерном массиве и подать на него LOW.
Включим светодиоды по диагонали.

Бегущие огни
Модифицируем скетч, чтобы создать анимацию бегущих огней (источник).
Создаём битовую карту для символов
Можно заранее подготовить некоторые наборы включённых и выключенных светодиодов для отображения символов. Сделаем карту для символов A, B, C, D, E.
Управление через сдвиговый регистр
Отдельное подключение каждого вывода матрицы к отдельным выводам платы не слишком удобно. Поэтому применяют сдвиговые регистры. Это тема отдельного разговора.
Находим выводы 1 и 16 с помощью мультиметра

Если у вашей LED-матрицы нет маркировки, то определить выводы 1 и 16 можно с помощью мультиметра. Включите его в режим прозвонки диодов и приставьте щупы к крайним выводам в разных комбинациях. Одна из комбинаций включит светодиод (5 ряд, 8 столбец). Красный щуп укажет на первый вывод, чёрный — на 16.
Матрица с драйвером MAX7219
Существует более удобный вариант матрицы с драйвером MAX7219 в виде отдельного модуля. Есть полностью готовые модули, а есть вариант, когда детали поставляются в разобранном виде и нужно самостоятельно паять.

Благодаря применению SPI модуль имеет только пять выводов с двух сторон: питание, земля и три цифровых вывода.
Модули можно соединять между собой, получая большое табло.
Сначала попробуем вариант включения любого светодиода матрицы вручную. В коде используются несколько функций. Для одиночного модуля вызываем функцию maxSingle(). Если используется несколько модулей, то уберите комментарии с вызовов функций maxAll(), maxOne().
При вызове функции maxSingle() в первом аргументе указываем номер ряда, во втором число в степени двойки — 1, 2, 4, 8 и т.д.
Драйвер MAX7219 и библиотека LedControl
Управлять светодиодной матрицей можно не только самостоятельно, но и с помощью различных библиотек. Одна из таких библиотек LedControl (не обновляется с 2015 года). Библиотека доступна через менеджер библиотек (LedControl by Eberhard Fahle Version 1.0.6).
Основные функции библиотеки: setLed(), setRow(), setColumn().
Синтаксис функции setLed():
В параметре add указывается адрес матрицы. Если матрица одна, то значение должно быть равно 0.
Параметр row отвечает за ряд, параметр col за столбец. Параметр state отвечает за состояние светодиода: true или 1 включает его, а false или 0 — выключает.
Функции setRow(addr, row, value) и setCol(addr, column, value) работают непосредственно с рядами или столбцами.
Скетч с применением библиотеки. Будет запущена небольшая анимация.
Хотя в предыдущем примере использовались порты 2, 3 и 4, принято для матрицы использовать порты 9 (CS), 11 (DIN), 13 (CLK) или другие варианты. Ещё один скетч, который будет поочерёдно выводить смайлики трёх видов: грустный, нейтральный, весёлый.
Дополнительные материалы для изучения библиотеки доступны на отдельном сайте.
Визуальный редактор
Рассмотрим ещё один пример создания бегущей строки со словами «Я ❤ кота». Символы для фразы уже подготовлены. Вы можете создать собственные символы и добавить в код.
Редактор для создания собственных символов для матрицы с драйвером MAX7219
Подключение светодиодных матриц на MAX7219

В этой статье я расскажу про вывод символов на светодиодную панель, собранную из нескольких матриц на основе драйвера MAX7219. Ранее, в статье про подключение драйвера, я упоминал готовые модули с матрицами 8×8, которые можно соединять друг с другом, и тем самым получить панель различной длины. Драйверы при этом соединяются каскадно, при загрузке данные смещаются от одного драйвера к другому.

Модули можно заказать тут . Я приобрел 5 модулей в виде конструктора, спаял их и соединил вместе. Также в продаже имеется цельная панель на 4 матрицы . Схема одного модуля представлена на картинке ниже:
Способ вывода данных на матрицы
При каскадном включении, выход DOUT предыдущего драйвера соединяется с входом DIN следующего драйвера, группы выводов CS и CLK соединяются параллельно. При загрузке данных информация сдвигается побитно, сначала загружаются данные предназначенные для последнего драйвера в цепочке, затем остальные по очереди. Для одного драйвера пакет состоит из 2 байт, это адресный байт и байт данных.

Печатная плата модуля спроектирована так, что данные загружаемые в регистры драйвера Digit0-Digit7 отображаются в строках матрицы (горизонтально), ниже приведена поясняющая картинка:
Для вывода символов я решил взять стандартную таблицу со шрифтом 5×7, которую использовал для графического дисплея Nokia 5110. Но в этой таблице байты символов упакованы по-другому, каждый байт предназначен для вертикального отображения в столбец, таким образом, просто передавать байты на драйвер не получится. Можно конечно переписать всю таблицу символов, но это слишком утомительно. В данном случае необходимо переворачивать символы, извлекая данные побитно.
Данные проще записать за один сеанс, предварительно подготовив пакеты байтов для всех матриц, то есть сразу заполнить одну строку на всю длину панели, затем остальные строки в последующих сеансах (всего 8 сток). Для 5-ти матриц за сеанс передается 10 байт данных, для всей панели соответственно получим 80 байт.
Можно конечно использовать пустой регистр No-Op (адрес 0x00), предназначенный для обращения к отдельному драйверу в цепочке, но при этом также придется отправлять байты на всю длину строки. В этом случае только один пакет будет записан в конкретный драйвер, для остальных драйверов данные запишутся в регистры No-Op, не повлияв на их функционирование. Такой способ нельзя назвать рациональным, так как увеличивается количество передаваемых данных, что замедляет процесс вывода информации.
Подключение матриц MAX7219 к микроконтроллеру

Я подключил светодиодную панель из 5 матриц к микроконтроллеру PIC16F628A, схема представлена на следующей картинке:
Часть кода программы приведена ниже (полный код в конце статьи):
Гайд по адресным светодиодным матрицам
В этом гайде речь пойдёт о матрицах из адресных светодиодных лент. Если вы не в курсе про адресные ленты, то рекомендую изучить вот эту статейку. Фишка адресной ленты в том, что мы можем управлять любым из подключенных светодиодов. Если уложить ленту так, чтобы светодиоды образовывали ровную сетку, то мы получим матрицу, у которой можно зажечь любой “пиксель”, а зажечь можно одним из 16,7 миллионов цветов и оттенков! (светодиоды RGB, яркость каждого цвета имеет 256 градаций (8 бит), соответственно для трёх цветов у нас 256*256*256=16,7 лямов, что есть привычные 24 бита цветовой глубины). То есть по сути получаем полноценный 24 битный дисплей сверхнизкого разрешения! Зачем такое разрешение в 2к18 году? Спроси у своего папы, во что он играл в детстве =)
Начнём с компонентов. Матрицу можно склеить самому, для этого понадобится адресная светодиодная лента, например самая популярная на чипах WS2812b. Да, сейчас есть уже более новая WS2813, но для наших целей она преимуществ не имеет. Целесообразно брать ленту с плотностью пикселей 60 светодиодов на метр для маленьких матриц (ячейка 1.7×1.7 см) и 30 светодиодов на метр для больших матриц (ячейка 3.3×3.3 см). Также есть светодиодные модули по типу “гирлянды”, их можно брать для ОЧЕНЬ БОЛЬШИХ матриц (ячейка 12×12 см). Рассмотрим матрицу 20×10 светодиодов: из ленты 60 LED на метр размер матрицы будет 34×17 см, из 30 LED на метр – 66×33 см, и из модулей – 240×120 см.
Также хитрые китайцы уже продают готовые матрицы нескольких размеров, причём очень выгодно: матрица 16×16 стоит 1500р, она состоит из 256 диодов с плотностью 100 штук на метр. Лента такой же плотности стоит 1000р за метр (за 100 светодиодов). Для склейки матрицы размером 16×16 понадобится 2.5 метра ленты, то есть 2500р. А готовая матрица стоит на 1000р дешевле. Абсолютно то же самое касается матрицы 32×8 пикселей. Есть ещё готовая матрица 8×8, она стоит 300р. И вот она выходит уже не так выгодно =) Для питания матрицы нужен блок питания на 5V, по току расскажу дальше. Ссылок оставляю несколько, ищите выгодные предложения и скидки (P.S. Я закупаюсь в BTF-Lighting)
ВАЖНО! Чем больше матрица, тем больше места занимает прошивка в памяти. Для прошивки GyverMatrixOS:
- В Arduino Nano/UNO/Pro Mini при использовании всех эффектов и режимов очень впритык вмещается матрица 16х16 (256 диодов), возможны зависания и перебои в работе;
- В Arduino Leonardo/Micro/Pro Micro вмещается около 400 светодиодов (матрица 20×20);
- В Arduino Mega вмещается около 1700 светодиодов (матрица 40×42)
- В ESP8266/NodeMCU/Wemos вмещается ГОРАЗДО больше светодиодов, но нужно понимать, что скорость обновления ленты зависит от количества светодиодов, и при 500 диодах будет 60 кадров в секунду (fps), при 1000 будет 30 fps, при 2000 будет 15 fps, т.е. ощутимые глюки в быстрых эффектах.
СБОРКА
Начнём с типов соединения матрицы, их всего два: последовательный и параллельный, + совмещённый вариант по питанию. Плюсы и минусы указаны на рисунке, для больших матриц предпочтительнее использовать параллельный тип, так гораздо лучше организуется питание. Но вот с ответвлениями силовых проводов придётся повозиться. Если делать матрицу из гирлянды модулей, то естественно проще сделать её зигзагом. Но обязательно проверить на разной яркости и убедиться, что тока хватает дальним светодиодам (при просадке напряжения заданный белый цвет уходит в желтизну (небольшая просадка) или в красный (сильная просадка напряжения). В этом случае питание нужно будет продублировать толстыми проводами к каждому отрезку ленты (к каждой строке матрицы).



Матрица подключается к Arduino согласно гайду об адресной ленте, далее идёт выжимка из него. Важные моменты:
- Логический пин Arduino соединён с пином DIN ленты (матрицы) через резистор с номиналом 220 Ом (можно брать любой в диапазоне 100 Ом – 1 кОм). Нужен для защиты пина Ардуино от перегрузки, т.е. ограничить ток в цепи (см. закон Ома);
- GND (земля, минус) ленты обязательно соединяется с пином GND Arduino даже при раздельном питании;
- Электролитический конденсатор по питанию Arduino нужен для фильтрации резких перепадов напряжения, которые создаёт лента при смене цветов. Напряжение конденсатора от 6.3V (чем больше, тем крупнее и дороже кондер), ёмкость – в районе 470 мкФ, можно больше, меньше не рекомендуется. Можно вообще без него, но есть риск нарушения стабильности работы!
- Конденсатор по питанию ленты нужен для облегчения работы блока питания при резких изменениях яркости матрицы. Опять же можно вообще без него, но есть риск нарушения стабильности работы!
- Мощность (и максимальный отдаваемый ток) блока питания выбирается исходя из размера матрицы и режимов, в которых она будет работать. Смотрите табличку и помните о китайских амперах, т.е. блок питания нужно брать с запасом по току на 10-20%! В таблице приведены значения тока потребления ленты.
- В прошивке GyverMatrixOS версии 1.2 и выше настраивается ограничение тока системы. Как это работает: в настройках скетча есть параметр CURRENT_LIMIT, который задаёт максимальный ток потребления матрицы в миллиамперах. Ардуино будет делать расчёт на основе цветов и яркостей светодиодов и автоматически уменьшать яркость всей матрицы, чтобы не допустить превышения установленного лимита по току на особо “жрущих” режимах. Это очень крутая функция!
Чтобы матрица выглядела как мечта любителя 8-ми битной классики, нужно сделать следующее:
- Разграничить светодиоды объёмной решёткой (собрать из дерева/пластика/напечатать на 3D принтере)
- Поверх решётки положить рассеиватель (калька/бумага для запекания/полупрозрачный пластик)
- Затемнить “экран” матрицы (мусорный пакет/светлая тонировочная плёнка для окон)
2 и 3 пункт можно заменить матовым полупрозрачным тёмным плексигласом, рекламщики используют его как раз для создания светодиодных дисплеев!
Посмотреть на мою реализацию корпуса можно в видео про матрицу, файлы для 3D печати есть в архиве с проектом.
