Нам уже приходилось программировать RGB светодиод через Arduino, но для проектов одного светодиода будет мало. Значит нам нужно увеличивать количество и тут ничего сложного. Самым дешевым вариантом будет RGB светодиодная лента, которая работает так же как и один RGB светодиод. Единственным отличием будет наличие дополнительного источника питания, т.к. в зависимости от количества подключаемых светодиодов Arduino может не справится с подпиткой ленты. И хотя мы имеем большое количество светодиодов, которые могут гореть различными цветами, но только одним из них на всей длине ленты. После небольшой практики и радости от первого запуска придет уныние, потому что интересных эффектов на такой ленте не добиться.

Но эта проблема уже давно решена. Адресная светодиодная лента отличается от RGB светодиодной ленты не только меньшим количеством контактов, но и наличием в каждом светодиоде собственного контролера. Таким образом мы уже можем управлять каждым светодиодом с помощью специальных библиотек подачи сигнала. На просторе интернета можно найти два вида адресных светодиодных лент: 12В и 5В. Отличие их только в том, какой блок питания придется покупать. Но Arduino, как мы знаем, работает от питания на 5В, поэтому выбор ленты очевиден, если вы хотите независимую от USB кабеля систему.

Теперь решим первый вопрос, который встает при покупке ленты. На какой ток рассчитывать от блока питания? Адресные светодиодные ленты продаются с разным показателем тока на один светодиод. Но в среднем берем 20 мА на один цвет в светодиоде или 60 мА на один светодиод и тогда получаем простую формулу:

60мА * количство диодов в ленте = ток блока питания

И посмотрим на пример работы ленты в случае правильно рассчитанного питания и обратная этому ситуация:

 

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

Вспоминаем, что с платы без риска можно снять 500 мА и получаем, что к плате мы можем подключить 500/60 = 8 диодов, что можно использовать для практики, но никак не для освещения комнаты. Правда говоря о 60 мА, мы подразумеваем, что диод будет гореть белым на максимальной яркости. Но зачем нам это от цветной ленты? Поэтому возможно допущение в 20 мА на один светодиод, если нет возможности взять запас по мощности, но тогда нужно быть более осторожным с программированием цвета и яркости или уменьшаем количество рабочих светодиодов, чтобы не получать глюки с видео.  Если вы покупаете открытый блок питания, то не забываем следить за тем, какой шнур питания мы используем. Потому что сопротивление обратно пропорционально площади сечения шнура и прямо пропорционально длине. Значит при большой длине и малом сечении при большом токе мы будем иметь резистор в виде провода, который будет забирать на себя часть напряжения, что может стать критичным, т.к. лента сильно отзывается из за потерянного напряжения. Длину уменьшить может быть сложно, значит берем шнур питания с достаточной площадью сечения. В среднем хватает 1,5 кв. мм, но проще всего взять ненужный шнур питания с вилкой, на которой уже написано на какой ток этот шнур рассчитан без просадки по напряжению.  В случае глюков и подозрения в питании: первым делом пробуем подключится к индивидуальной розетке, после меняем шнур питания, если блок собирался вами, и на последок уменьшаем количество работающих светодиодов. Все равно проблемы? Подключаем ленту к Arduino, включая контакты питания и включаем 8 светодиодов, если они горят правильно, то пытаемся менять весь блок питания. Не пугаемся, если ничего не горит при подключении питания без сигнального контакта. Пока не будет подан сигнал на контролер диода он гореть не будет, поэтому без управляющего блока такая лента бесполезна.

Функция резистора — смягчение помех на ленту, т.к. лента чувствительна к малейшим помехам в сигнале. Поэтому можно и без него, если у вас таковых помех не присутствует.

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

  1. FastLED
  2. Adafruit NeoPixel

Существуют и другие библиотеки, но эти две лучше всего работают с нашей платой. Мы будем рассматривать программирование с помощью библиотеки FastLED. 

Для начала подключим библиотеку и зададим основные данные

    #include 
    #define NUM_LEDS 60    //количество диодов в вашей ленте
    #define DATA_PIN 6     //pin к которому мы подключили сигнальный шнур 

После создаем массив для записи данных каждого светодиода:

CRGB leds[NUM_LEDS];

Мы задали основные данные и теперь нужно подключить саму ленту:

void setup() { 
       FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
   }

Вместо NEOPIXEL вбиваем свою модель светодиодной ленты, скорее всего у вас будет WS2812B. Теперь разберем основные команды.

FastLED.show(); // Вывести массив диодов на ленту

FastLED.clear(); // очистить массив данных для ленты

leds[i] = CRGB::Red; // задание красного цвета на i-ый светодиод, Blue — синий, Green — зелены, Black — отключить

leds[i].setRGB(255, 65, 154); //задание для i-ого диода своего цвета, задавая различную мощность на каждый цвет, где мощность меняется в диапазоне от 0 до 255

leds[i].setHSV( 123, 255, 180); // задание цвета, но теперь первое значение отвечает за цвет, второе за насыщенность, третье за яркость, везде диапазон от 0 до 255