Светодиодные матрицы: устройство, виды и подключение к Arduino

Светодиодные матрицы: устройство, виды и подключение к Arduino

Как устроена светодиодная матрица, чем различаются её разновидности и как управлять матрицей 8х8 напрямую с Arduino через динамическую индикацию.

От сегментного индикатора к матрице

Объединив несколько светодиодов в систему, из них можно складывать осмысленные изображения. Самый знакомый пример — цифровой сегментный индикатор: зажигая нужные сегменты, получают любую цифру и часть букв. Увеличение числа сегментов усложняет подключение, но свободы в рисовании почти не добавляет.

Цифровой сегментный индикатор
Индикатор с увеличенным числом сегментов

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

Светодиодная матрица из отдельных пикселей

Какие бывают матрицы

Принцип работы у всех матриц общий: включая и выключая отдельные светодиоды, формируют двухмерное изображение. Различаются они характеристиками и исполнением. В простейших матрицах несколько десятков элементов; в любительских проектах особенно распространены размеры 5х8 и 8х8. Верхней границы по количеству точек фактически нет.

Одноцветная светодиодная матрица 8х8
  • Одноцветные: каждый пиксель либо светится одним цветом, либо погашен.
  • Многоцветные: в каждой точке два и более разноцветных кристалла, цвета получают смешением. Каждый дополнительный цвет удваивает количество входных контактов, растут требования к памяти и вычислительной нагрузке контроллера.
  • На адресных светодиодах: пиксели соединены цепочкой, «змейкой». Для управления нужен один пин, матрица полноцветная и быстрая, её можно собрать из светодиодной ленты любого размера и формы. Среди недостатков называют высокую цену, чувствительность элементов, слабую помехоустойчивость и высокую нагрузку на контроллер.

Способы подключения

Если соединить каждый светодиод матрицы 8х8 с отдельным выводом контроллера, понадобится 64 пина. Такое по силам разве что плате на Atmega2560. Гораздо экономнее динамическая индикация: в каждый момент времени светится только один столбец (или строка), а столбцы перебираются по кругу настолько быстро, что глаз видит цельную картинку. Число задействованных выводов при этом сокращается с 64 до 16.

В рассматриваемом примере 8 столбцов подключены к анодам (C), 8 строк — к катодам (R). На все аноды подаётся плюс, кроме активного — на нём минус. На катодах плюс выставляется там, где пиксель должен светиться; так формируется один столбец изображения, после чего очередь переходит к следующему. Для трёхцветной матрицы количество выводов при такой схеме снова становится чрезмерным.

Когда свободных пинов мало, матриц несколько или они крупные, применяют дополнительные микросхемы:

  • Сдвиговые регистры 74HC595. У каждого 8 выходов, поэтому на матрицу 8х8 нужны два регистра, соединённые каскадом. Контроллеру достаточно трёх пинов, а при удлинении каскада на тех же трёх пинах можно добавлять новые матрицы.
  • Специализированная микросхема для одноцветных матриц 8х8 (в источнике она обозначена как MAX7219). Она имеет все 16 выводов, сама поддерживает динамическую индикацию и тоже соединяется в каскад при трёх управляющих пинах. На её основе выпускают готовые модули из одной и более матриц, для которых есть библиотеки, упрощающие вывод надписей и эффектов вроде бегущей строки.

Матрица 8х8 напрямую от Arduino

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

В скетче строки назначены на пины A0–A5, 10 и 11, столбцы — на пины 2–9.

Кадр хранится в двухмерном массиве 8х8 из нулей и единиц, расположенных так же, как светодиоды: единица — пиксель горит, ноль — погашен. Картинку удобно рисовать прямо в тексте программы. Функция вывода вызывается в основном цикле и не чаще раза в миллисекунду гасит предыдущий столбец, выставляет на строках значения очередного столбца и включает его. В примере заданы два кадра, крест и рожица, но на матрицу выводится только один массив.

Анимация и экономия памяти

Частое обновление кадров при динамической индикации позволяет легко перейти к анимации. В качестве примера матрицу превращают в вывеску аптеки: раз в секунду чередуются крест и стрелка, указывающая на вход.

Программа при этом становится компактнее. Каждый кадр записывается одномерным массивом из 8 байт, где отдельный бит отвечает за один пиксель, так что тратить на точку целый байт не нужно. Функция вывода получает указатель на массив с активным кадром, а отдельная функция раз в секунду подменяет этот указатель. Благодаря этому одна функция обслуживает любое количество кадров, и чередовать их можно с любой скоростью.

Яркость, игры и объёмные конструкции

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

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

← Все статьи