Светодиодные матрицы для "чайников" (часть 1)

Дружок, присаживайся поудобнее, расскажу тебе что такое матрицы из адресных светодиодов.

Светодиодные матрицы для "чайников" (часть 1) Arduino, Программирование, Длиннопост, Светодиоды, Видео, Без звука

Итак, адресный RGB светодиод отличается от обычного трехцветного наличием встроенного контроллера, вон тот черный прямоугольник на картинке. Эта чудесная микросхема принимает со входа Din пакет данных, откусывает от него первые 24 бита и отправляет оставшиеся данные на выход Dout. А откушенный кусочек превращает в прекрасное свечение определенного цвета.

На мой взгляд, определение “адресный” не совсем подходит для этого контекста, так как адреса и нет вовсе, а есть только порядковый номер диода в конкретной конструкции. Если снесут дом на улице, остальные дома останутся при своих номерах, а если убрать на светодиодной ленте первый диод, то второй станет первым.

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

CRGB leds[NUM_LEDS];
leds[0] = CRGB::Red;
FastLED.show();

И все, мы зажгли первый светодиод на ленте красным цветом.

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

Большинство эффектов для светодиодных конструкций представляют собой некую функцию определяющую цвет светодиода в текущий момент времени по его координатам в конструкции.

С лентами вроде все понятно, одномерный объект, одна координата равная порядковому номеру диода на ленте.

А как быть с матрицами? Они уже двумерные, там у каждого диода есть две координаты - столбец и строка. Не паникуй, оказывается среднестатистическая матрица это та же лента уложенная рядочками. Так что, технически, обращение к конкретному диоду выполняется все так же, по его номеру. Слышу твое возмущение, и ты конечно же прав, матрица двумерная и обращаться к диодам хотелось бы по понятным двум координатам. Выручит небольшая функция, которая будет пересчитывать две координаты в номер диода. В общем случае, для прямоугольной матрицы размером WIDTH х HEIGHT, получится как-то так:

int XY( int x, int y ) {
return y * WIDTH + x;
}

Это преобразование обычно называют мэппингом ( mapping )

Ты уже подпрыгиваешь на месте и хочешь собрать что-то сверкающее и красивое? Не вижу причин отказывать тебе в этом, погнали.

Берем самую распространенную китайскую матрицу 16х16 с диодами WS2812, первый диод в левом верхнем углу, там же и начало координат. Все координаты и индексы начинаются с нуля. Цепляем матрицу по схемам из интернета к контроллеру и пишем первую программу.

#include <FastLED.h>
#define DATA_PIN 12
#define WIDTH 16
#define HEIGHT 16
#define NUM_LEDS WIDTH * HEIGHT

CRGB leds[NUM_LEDS];

byte XY( byte x, byte y ) {
return y * WIDTH + x;
}

void setup() {
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
FastLED.clear();
for ( byte y = 0; y < HEIGHT; y++ ) {
for ( byte x = 0; x < WIDTH; x++ ) {
leds[XY(x,y)] = CRGB::Red;
FastLED.show();
delay(100);
}
}
}

void loop() {
}

Компилируем, прошиваем. Работает!!!

Так, стоп! У нас цикл для X идет по возрастанию от 0 до 15, почему же тогда каждая вторая строка матрицы заполняется в обратном порядке?
Помнишь я говорил что матрица это лента уложенная рядочками? Так вот ленту удобнее укладывать змейкой, что производители и делают) Раскладка так и называется - serpentine ( aнгл. змеевидный ).

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

byte XY( byte x, byte y ) {
if ( y%2 == 0 ) {
return y * WIDTH + x;
} else {
return ( y + 1 ) * WIDTH - x - 1;
}
}

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

Теперь все ок.

С адресацией матрицы разобрались, можем творить красоту.

(Продолжение следует. Stay tuned)

Arduino & Pi

1.4K пост20.6K подписчиков

Добавить пост

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

Вы смотрите срез комментариев. Показать все
Автор поста оценил этот комментарий

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

раскрыть ветку (8)
Автор поста оценил этот комментарий

В этом https://www.youtube.com/watch?v=pMjhJ9kcaU4, не менее познавательном видео, утверждается что используется сплав золота и серебра. Не уверен, конечно, что в бюджетных сериях так же шикуют

Предпросмотр
YouTube19:58
раскрыть ветку (7)
Автор поста оценил этот комментарий

Вот это и интересно. В бюджетных что. А то накопилось уже с пол кило разных светодиодов, уже без выводов. И думаю, стоит ли заморачиваться с переработкой, или еще пособирать. Там правда 99% - это пластик, который нужно еще как то убрать. То ли жечь, то ли в электролите кипятить.

раскрыть ветку (6)
1
Автор поста оценил этот комментарий

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

раскрыть ветку (3)
Автор поста оценил этот комментарий

Если только светодиоды, думаю вы правы. А если микс? Думаю уже можно попробовать. Чисто ради хобби, а не ради больших прибылей (их не будет, я знаю).

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

Иллюстрация к комментарию
раскрыть ветку (2)
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

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

Насчет законности: наказуем именно аффинаж, то есть доведение до состояния практически чистого, а если просто удалить все лишнее (пластик, припой, железо и сплавы, в общем все, что можно спалить огнем и серной кислотой (электролитом, который продается свободно), а потом сдать официально на аффинажный завод, тот же красцветмет, то почему бы и нет? Тем более они работают с мелкими партиями сырья, и спокойно заключают договор и ИП-шниками, я узнавал. Ну и повторюсь, я рассматриваю это больше как хобби. А так то я компы починяю помаленьку.

Автор поста оценил этот комментарий

Диаметр проводника 20 микрон. Насколько целесообразна переработка?)

раскрыть ветку (1)
Автор поста оценил этот комментарий

Все зависит от количества. И при условии, что электронный лом достается бесплатно (отходы профессиональной деятельности). А насколько целесообразна переработка - самому интересно.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку