Stm урок 119. ws2812b. лента на умных светодиодах rgb. часть 1

Что нужно для подключения RGB ленты

Разберемся как правильно подключить светодиодную RGB ленту. Для полноценной схемы освещения нам понадобится:

  • Светодиодная лента;
  • блок питания;
  • RGB-контроллер с пультом управления;
  • RGB-усилитель (опционально).

Блок питания

Питание для светодиодной ленты нужно подбирать с учетом предполагаемой нагрузки и его будущего места расположения. Рассмотрим на примере SMD5050 60 led. Потребляемая мощность – 14,4 Вт/м.

При длине в 5 метров, необходимая мощность БП будет:

5м * 14,4Вт * 1,25 (коэффициент запаса) = 90Вт


Разновидности блоков питания для led

Если длина 15 метров, то БП соответственно нужен в 3 раза мощнее – 270W. Если длина ленты 20, 25 и больше метров – целесообразно устанавливать несколько БП меньшей мощности.

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

Подробнее про расчет блока питания для светодиодной ленты.

RGB контроллер

Управление светом осуществляется через специальный контроллер. Он подключается между блоком питания и светодиодами, снабжается проводным или беспроводным пультом.


RGB контроллер

Контроллер, как и блок питания, подбирается в зависимости от суммарной мощности ленты. С тем отличием, что к необходимой мощности БП добавляют 25-30% запаса, а контроллер подбирают впритык по мощности.

Например. Нужно подключить 10 метров SMD5050 60 led. Мощность 1 метра – 14,4 Вт, соответственно нам нужен контроллер на 144 Вт.

По принципу управления различают: проводные – чаще монтируются на стену; беспроводные с управлением через:

  • Инфракрасный порт (ИК) – пульт должен находиться в зоне прямой видимости;
  • радио-канал – позволяет пользоваться в пределах дома;
  • Wi-Fi – позволяют как управлять с пульта, так и с приложения на смартфоне.


Управление освещением со смартфона После установки и подключения, вы сможете:

  1. Устанавливать цвет вручную. Доступны как чистые цвета, так и смешанные оттенки.
  2. Регулировать яркость – аналогично обычному диммеру (подробнее про диммеры).
  3. Автоматические режимы. К ним относится переключение цветов, быстрое мерцание, плавное изменение, плавные затухания и другие алгоритмы.

А если мощности RGB контроллера не хватает, чтобы подключить все освещение (больше 20 метров)? Можно установить 2 контроллера, но управлять светом одной комнаты придется с двух пультов, что не удобно и дорого. Второй (правильный) вариант — использовать RGB усилитель.

RGB усилитель (led amplifier)

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


Rgb усилитель (led amplifier)

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

Наглядный пример. Нужно подключить 20м SMD 3528 (14,4 Вт/м), общей мощностью 288 Вт. В наличии у нас только контроллер с мощностью 216 Вт и блок питания на 300W. Соответственно нужен усилитель:

288 Вт — 216 Вт = 72 Вт

Мощность БП 300 Вт, его достаточно для питания контроллера и усилителя. В случае если мощности БП недостаточно (например 250W), нужен отдельный БП для усилителя.

Рекомендуемые светодиодные ленты для Cleanflight

Функции для работы со светодиодами в Cleanflight в первую очередь рассчитаны на ленты с индивидуально адресуемыми светодиодами. Рекомендуемый тип WS2812. Эти светодиоды идут собранные в ленты, так что вы можете просто отрезать необходимую длину или нужное количество светодиодов. Им требуется всего 1 провод для управления и питание 5В.

Я использую светодиоды WS2811, они почти идентичны WS2812, и отлично работают. Они у меня остались от моих проектов TV Ambilight (англ.) и фонаря для велосипеда (англ.), это очень яркие светодиоды. Поддерживается управление 32 светодиодами, т.е. Cleanflight может менять цвет и яркость каждого отдельного светодиода.

Работа с ИК пультом

Для передачи данных в нем используется стандартный NEC Infrared Transmission Protocol. Ноль здесь кодируется наличием сигнала в течение 562.5µs и паузой в течение 562.5µs. Единица — 562.5µs и 1.6875ms соответственно. Начало передачи — 9ms сигнал и 4.5ms пауза. А последний импульс в течение 562.5µs обозначает окончание передачи.

Весь пакет данных состоит из: стартовой последовательности (9ms сигнал и 4.5ms пауза), 8 бит адреса принимающего устройства, 8 бит — побитовая инверсия этого адреса, 8 бит — команда, 8 бит ее побитовая инверсия и 562.5µs импульс окончания передачи. Все данные передаются в формате LSB-first.

Пример передачи пакета данных посредством NEC Infrared Transmission протокола:

Сфера применения

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

  • создание полноцветных модулей;
  • конструирование световых приборов типа «soft
    lights»;
  • в оформлении участков интерьера, декора фасадов
    или иных элементов;
  • в рекламных конструкциях;
  • для создания LED экранов. Которые популярны при оформлении мероприятий
    шоу-бизнеса или рекламных кампаний.

Адресные светодиоды относительно
дороги, что заметно снижает распространение и востребованность таких
конструкций. Кроме того, необходимость использования дополнительных устройств
(контроллер), загрузки в них программного обеспечения и прочие сложности
отпугивают массового пользователя.

Основные технические характеристики

Чтобы понять, подойдёт ли данный тип LED-ленты для решения поставленных задач, необходимо узнать её параметры. Для этого предлагаем рассмотреть основные технические характеристики светодиодной ленты SMD 5050.

Напряжение питания

Значительная часть светодиодных лент рассчитана на работу от сети постоянного тока напряжением 12 В, что обусловлено несколькими факторами:

  • +12 В – это стандарт, применяемый для многих видов аккумуляторов, включая автомобильные;
  • +12 В позволяет запитать группу из 3-х последовательно включенных светодиодов любого цвета с минимальными потерями на ограничивающем резисторе;
  • +12 В является наиболее безопасным напряжением для человека.

Светодиодная лента SMD 5050 на 12 В – это оптимальный вариант для конструирования подсветки в домашних условиях, т.к. для её подключения можно воспользоваться не только готовым блоком питания, но и блоком питания от компьютера или аккумулятором от ИБП.

Также в продаже можно найти светодиодные ленты SMD 5050 на 24 В и 36 В, подключаемые к соответствующему БП постоянного тока, и с питанием от сети переменного тока 220 В, подключаемые через диодный выпрямитель. Модели с таким напряжением не пользуются большой популярностью по разным причинам, в т.ч. из-за большой кратности резки. Для адресной ленты SMD 5050 напряжение питания составляет 5 В.

Степень защиты от влаги и пыли

Важным параметром при выборе светодиодной ленты является степень защиты от внешнего воздействия твёрдых предметов и воды (IPXX). Пренебрегать этим параметром нельзя, т.к. он влияет на стоимость и на способность изделия противостоять негативному влиянию внешних факторов в процессе эксплуатации. Как правило, внешняя оболочка светодиодных лент SMD 5050 имеет следующий класс защиты:

  1. IP20 – от твёрдых предметов диаметром более 12,5 мм и никак не препятствует попаданию воды. Такое изделие не имеет никакого покрытия и может применяться только внутри сухих помещений (гостиные, спальни, офисы).
  2. IP33 – от твёрдых предметов диаметром более 2,5 мм и от капель воды. В данном случае покрытие выполнено из тонкого слоя лака. Кроме сухих помещений, лента может применяться для подсветки кухни, где существует вероятность попадания на неё водяных капель.
  3. IP54 – с частичной защитой от пыли и брызг воды в виде силиконового слоя только со стороны элементов. Как и в предыдущем варианте, такая лента предназначена для оформления интерьера кухонь и прочих помещений с временно повышенной влажностью.
  4. IP65 – с полной защитой от пыли и струй воды. В данном случае защитный слой – это силиконовое покрытие со всех сторон. Светодиодная лента с IP выше 65 вполне подходит для уличной подсветки и ванных комнат.
  5. IP67 – выдерживает кратковременное нахождение под водой. Визуально от изделий с IP65 отличается типом оболочки (ПВХ профиль и силикон сверху). Она прекрасно подходит для авто- и вело- тюнинга.
  6. IP68 – наивысшая степень пыле и влагозащиты. Такая LED-лента размещена внутри ПВХ-трубки и способна длительно без повреждений выдерживать воздействие воды под давлением. Сфера её применения – украшение бассейнов и фонтанов.

Плотность светодиодов

Этот параметр указывает на количество светодиодов в одном погонном метре ленты и может принимать значения: 30, 60, 120 и 240 шт./м. Чем выше плотность монтажа, тем больше световой поток и мощность потребления светодиодной ленты SMD 5050. Чтобы не допустить деградации светодиодов, ленту с плотностью 120 и 240 светодиодов на метр необходимо клеить на алюминиевый профиль.

Иногда вместо плотности (шт./м.) на бобине можно увидеть надпись «количество – 300 шт.» Это значит, что производитель указал общее количество светодиодов в ленте длиной 5 метров. Соответственно плотность такой ленты стандартная – 60 шт./м.

Световой поток

Для монохромных и RGB светодиодных лент SMD 5050 результирующая величина светового потока зависит от цвета свечения. Известно, что глаз человека лучше всего воспринимает зелёный свет. Поэтому RGB лента, включённая в режиме зелёного света, кажется наиболее яркой. Также не стоит забывать о том, что световой поток LED-ленты «Эконом» класса примерно на 30% ниже, чем у «Премиум» класса. Причём существенная разница в качестве может наблюдаться даже у одного производителя. Например:

  • Foton SMD5050-30led/m-RGB-IP20-Econom – 180 lm;
  • Foton SMD5050-30led/m-RGB-IP20-Premium – 270 lm.

На световой поток белой светодиодной ленты SMD5050 влияет цветовая температура (оттенок). Для чипа SMD 5050 нейтрального света (4500-5500°K) нормой считается световой поток 18 лм; тёплого света (3000-4000°K) – 16 лм; холодного света (6000-7500°K) – 20 лм. Умножая данные значения на плотность, получим суммарное количество люмен, испускаемых одним метром светодиодной ленты.

Принцип работы

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

Общие контакты для подключения ленты – не более 4, но не менее 3. Один общий контакт – «масса» – служит заземлением на корпус драйвера. Второй – подаёт положительное напряжение питания в 5 вольт. Третий (и четвёртый) – посылает программные сигналы от общей платы микроконтроллера.

Адресная лента управляется с помощью цифровых данных. Работа без общего контроллера не даст никаких результатов. В лучшем случае вы получили бы непрерывно светящиеся светодиодные триады, излучающие холодный беловатый (синюшный) свет. Если пользователь пальцем прикоснётся к цифровой шине посылке сигналов, то контроллер примет эту помеху за команду и зажжёт все светодиоды либо несколько из них. Напряжение питания на каждом сегменте составляет 5 или 12 вольт.

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

Зажигаем светодиодную ленту на базе WS2811 при помощи ПЛИС

Всем привет. Уже почти два года назад я приобрел на aliexpress китайский набор, состоящий из отладочной платы EasyFPGA A2.2, с Cyclone IV EP4CE6E22C8N на борту, ИК пульта SE-020401, программатора, пары USB проводов и шлейфов. Долгое время все это добро лежало у меня без дела, т.к. я никак не мог придумать для себя какой-то интересной и не слишком затратной по времени задачи.

Еще в прошлом году на том-же aliexpress я заказал RGB светодиодную ленту на базе всем известных WS2811 микросхем. Перед покупкой, посмотрев обзор в YouTube на специфический протокол этих микросхем, я решил, что будет интересно написать свой драйвер для них под ПЛИС. А т.к. вышеупомянутая плата на борту имеет фотоприемник, то еще и добавить возможность пощелкать режимы пультиком из комплекта. Такой себе предновогодний проект выходного дня.

УПРАВЛЕНИЕ С ARDUINO

ВНИМАНИЕ! Во время загрузки и выполнения этого примера должно быть подключено внешнее питание! Иначе выгорит защита по току (диод) на плате Ардуино!

Для управления лентой можно выделить три библиотеки: FastLED, Adafruit NeoPixel и LightWS2812, из всех трёх рекомендую FastLED. Ниже привожу пример кода, который сначала показывает 3 цвета ленты на одном куске, плавно включая диоды. А потом ещё 3 цвета. Ну и ещё что-то, смотрите скетч.

ПРИМЕР 1

#define PIN 13        // пин DI  #define NUM_LEDS 16   // число диодов    #include "Adafruit_NeoPixel.h"  Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);    void setup() {    strip.begin();    strip.setBrightness(50);    // яркость, от 0 до 255      strip.clear();                          // очистить    strip.show();                           // отправить на ленту  }  void loop() {    // заливаем трёмя цветами плавно    for (int i = 0; i < NUM_LEDS / 3; i++ ) {   // от 0 до первой трети      strip.setPixelColor(i, 0xff0000);     // залить красным      strip.show();                         // отправить на ленту      delay(100);    }      for (int i = NUM_LEDS / 3; i < NUM_LEDS * 2 / 3; i++ ) {   // от 1/3 до 2/3      strip.setPixelColor(i, 0x00ff00);     // залить зелёным      strip.show();                         // отправить на ленту      delay(100);    }      for (int i = NUM_LEDS * 2 / 3; i < NUM_LEDS; i++ ) {   // от 2/3 до конца      strip.setPixelColor(i, 0x0000ff);     // залить синим      strip.show();                         // отправить на ленту      delay(100);    }      delay(1000);      // заливаем белым    for (int i = 0; i < NUM_LEDS; i++ ) {   // всю ленту      strip.setPixelColor(i, 0xffffff);     // залить белым      strip.show();                         // отправить на ленту      delay(10);    }      delay(1000);      // заливаем чёрным    for (int i = 0; i < NUM_LEDS; i++ ) {   // всю ленту      strip.setPixelColor(i, 0x000000);     // залить чёрным      strip.show();                         // отправить на ленту      delay(10);    }    delay(1000);      // включаем случайные диоды жёлтым    for (int i = 0; i < 50; i++ ) {         // 50 раз      strip.setPixelColor(random(0, NUM_LEDS), 0xffff00);     // залить жёлтым      strip.show();                         // отправить на ленту      delay(500);    }  }

Пример с бегущей радугой

ПРИМЕР 2

// пример с "бегущей радугой" для библиотеки FastLED    #define NUM_LEDS 144  #include "FastLED.h"  #define PIN 6  CRGB leds;  byte counter;    void setup() {    FastLED.addLeds(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );    FastLED.setBrightness(50);    pinMode(13, OUTPUT);  }    void loop() {    for (int i = 0; i < NUM_LEDS; i++ ) {         // от 0 до первой трети      leds = CHSV(counter + i * 2, 255, 255);  // HSV. Увеличивать HUE (цвет)      // умножение i уменьшает шаг радуги    }    counter++;        // counter меняется от 0 до 255 (тип данных byte)    FastLED.show();    delay(5);         // скорость движения радуги  }

Протокол

Теперь, когда мы разобрались, как подключить нашу ленту к Arduino, нам надо понять, как ею управлять, для этого в даташите есть описание протокола, который мы сейчас и рассмотрим. Каждый светодиод WS2812B имеет один вход (DIN) и один выход (DO). Выход каждого светодиода подключается ко входу следующего. Подавать сигналы же надо на вход самого первого светодиода, таким образом, он запустит цепь, и данные будут поступать от первого ко второму, от второго к третьему и т. д. Команды светодиодам передаются пачками по 24 бита (3 байта, один байт на каждый цвет, первым передается байт для зеленого, потом для красного, и заканчивает байт для синего светодиода.

Вывеска из светодиодной ленты.

Порядок бит – от старшего к младшему). Перед каждой пачкой идет пауза в 50 мкс. Пауза больше 100 мкс воспринимается как окончание передачи. Все биты, будь то 0 или 1, имеют фиксированное время 1.25 мкс. Бит 1 кодируется импульсом в 0.8 мкс, после чего идет пауза в 0.45 мкс. Бит 0 кодируется импульсом в 0.4 мкс, после чего идет пауза в 0.85 мкс. Собственно, наглядная диаграмма на фото ниже. Так же допускаются небольшие погрешности в 0-150 нс на каждый фронт. Ну и следует учесть, что подобное необходимо повторить для каждого светодиода на ленте, после чего сделать паузу минимум в 100 мкс. Потом можно повторить передачу.

Глядя на все эти цифры, становится ясно, что сделать все это, используя стандартные функции digitalWrite, delay и тому подобные – попросту невозможно, ввиду их долгой работы и неточности. Реализовать подобный протокол можно только использовав специальные библиотеки вроде CyberLib или написав собственную на чистом Си или, того хуже для нынешнего программиста, на Ассемблере. Но не все так плохо, как кажется. Светодиоды WS2812B довольно таки популярны в Arduino сообществе, а это значит, что нам не придётся вдаваться в такие сложности, и достаточно выбрать одно из понравившихся решений.

Как подключить адресную ленту к Ардуино

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • лента WS2812B;
  • макетная плата;
  • 1 резистор от 100 до 500 Ом;
  • провода «папа-папа».

WS2812B светодиоды довольно энергоемкие, один светодиод потребляет до 60 мА при максимальной яркости. Для ленты со 100 диодами потребуется блок питания на 6 и более Ампер. Микроконтроллер Arduino и светодиодная лента могут быть подключены к разным источникам питания, но «земля» должна быть общая. Дело в том, что пин GND тоже участвует в управлении адресной лентой от платы Ардуино Уно.


Схема подключения адресной ленты 5 Вольт к Ардуино

WS2812B Arduino Uno Arduino Nano Arduino Mega
GND GND GND GND
5V 5V 5V 5V
DO 10 10 10

Для работы с лентой используются три популярные библиотеки — FastLED, AdafruitNeoPixel и LightWS2812. Все библиотеки доступны для скачивания на нашем сайте здесь. Работать с библиотеками FastLED и Adafruit NeoPixel просто, отличаются они в функциональности и объеме занимаемой памяти. После сборки этой простой схемы и установки библиотек, загрузите скетч для адресной светодиодной ленты.

Скетч. Тестирование адресной ленты WS2812

#include <Adafruit_NeoPixel.h> // подключаем библиотеку

#define PIN  10              // указываем пин для подключения ленты
#define NUMPIXELS 3  // указываем количество светодиодов в ленте

// создаем объект strip с нужными характеристиками
Adafruit_NeoPixel strip (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
   strip.begin();                     // инициализируем ленту
   strip.setBrightness(50);  // указываем яркость светодиодов (максимум 255)
}

void loop() {
   strip.setPixelColor(0, strip.Color(255, 0, 0));   // включаем красный цвет на 1 светодиоде
   strip.show();   // отправляем сигнал на ленту
   delay(500);
   strip.clear();   // выключаем все светодиоды

   strip.setPixelColor(1, strip.Color(0, 0, 255));   // включаем синий цвет на 2 светодиоде
   strip.show();   // отправляем сигнал на ленту
   delay(500);
   strip.clear();   // выключаем все светодиоды

   strip.setPixelColor(2, strip.Color(255, 255, 255));   // включаем белый цвет на 3 светодиоде
   strip.show();   // отправляем сигнал на ленту
   delay(500);
   strip.clear();   // выключаем все светодиоды

}

Пояснения к коду:

  1. нумерация светодиодов в ленте начинается с нуля, поэтому если мы хотим включить первый светодиод, то указывать надо «0».


Схема подключения адресной ленты 12 Вольт к Ардуино

Если у вас лента на 12 Вольт, то ее нужно подключать по схеме, размещенной выше. Резистор на цифровом пине защищает его от выгорания (если питание к ленте будет отключено, то она начнет питаться от цифрового пина, при этом пин может выгореть. Также не стоит подключать питание ленты к плате Ардуино, иначе может выгореть защитный диод на Ардуино или USB порт на компьютере (в худшем случае).

Скетч. Управление адресной лентой Ардуино

#include <Adafruit_NeoPixel.h> // подключаем библиотеку

#define PIN  10              // указываем пин для подключения ленты
#define NUMPIXELS 3  // указываем количество светодиодов в ленте

// создаем объект strip с нужными характеристиками
Adafruit_NeoPixel strip (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
   strip.begin();                     // инициализируем ленту
   strip.setBrightness(50);  // указываем яркость светодиодов (максимум 255)
}

void loop() {

   // поочередно включаем красный цвет
   for (int i = -1; i < NUMPIXELS; i++) {
      strip.setPixelColor(i, strip.Color(255, 0, 0));
      strip.show();
      delay(100);
   }

   // поочередно включаем зеленый цвет
   for (int i = -1; i < NUMPIXELS; i++) {
      strip.setPixelColor(i, strip.Color(0, 255, 0));
      strip.show();
      delay(100);
   }

   // поочередно включаем синий цвет
   for (int i = -1; i < NUMPIXELS; i++) {
      strip.setPixelColor(i, strip.Color(0, 0, 255));
      strip.show();
      delay(100);
   }

}

Пояснения к коду:

  1. с помощью библиотеки Adafruit NeoPixel довольно просто управлять адресной лентой. В примерах к библиотеке можно найти много различных эффектов. Мы продемонстрировали простой вариант с циклом for для включения ленты.

Заключение. В этом обзоре мы рассмотрели лишь подключение и возможность управления адресной лентой от Ардуино. Так как возможности работы с библиотеками FastLED, AdafruitNeoPixel довольно разнообразны. Больше интересных примеров на Arduino и WS2812B размещено в разделе Проекты на Ардуино, где представлены проекты с бегущей строкой на адресной ленте и другие световые эффекты.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Электрик в доме
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: