Как позвонить адресный светодиод

Данный гайд посвящен адресной светодиодной ленте применительно к использованию с микроконтроллерами (Arduino, esp8266). Рассмотрены базовые понятия, подключение, частые ошибки и места для покупки.

Набор GyverKIT
Лента есть в нашем Arduino наборе GyverKIT (1 метр), а в документации к набору есть краткий гайд по работе с адресной лентой на Arduino при помощи библиотеки FastLED

КУПИТЬ АДРЕСНУЮ ЛЕНТУ


  • Black PCB / White PCB — цвет подложки ленты, чёрная / белая
  • 1m/5m — длина ленты в метрах
  • 30/60/74/96/100/144 — количество светодиодов на 1 метр ленты
  • IPXX – влагозащита
    • IP30 лента без влагозащиты
    • IP65 лента покрыта силиконом
    • IP67 лента полностью в силиконовом коробе
  • ECO – “экономная” версия ленты, менее качественная и яркая чем обычная

ТИПЫ АДРЕСНЫХ ЛЕНТ


Сейчас появилось несколько разновидностей адресных светодиодных лент, они основаны на разных светодиодах. Рассмотрим линейку китайских чипов с названием WS28XX.

Чип Напряжение Светодиодов на чип Кол-во дата-входов Купить в РФ
WS2811 12-24V 3 1 30 led, 60 led
WS2812 3.5-5.3V 1 1 30 led, 60 led, 144 led
WS2813 3.5-5.3V 1 2 (дублирующий) 30 led, 60 led
WS2815 9-13.5V 1 2 (дублирующий) 30 led, 60 led
WS2818 12/24V 3 2 (дублирующий) 60 led

У двухпиновых лент из линейки WS28XX достаточно подключить к контроллеру только пин DI, пин BI подключать не нужно. При соединении кусков ленты нужно соединять все пины!

blank

WS2811 (WS2818) и WS2812


Сейчас популярны два вида ленты: на чипах WS2812b и WS2811 (и новая WS2818). В чём их разница? Чип WS2812 размещён внутри светодиода, таким образом один чип управляет цветом одного диода, а питание ленты – 5 Вольт. Чип WS2811 и WS2818 размещён отдельно и от него питаются сразу 3 светодиода, таком образом можно управлять цветом только сегментами по 3 диода в каждом. А вот напряжение питания у таких лент составляет 12-24 Вольта!

ЧТО ТАКОЕ АДРЕСНАЯ ЛЕНТА


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

Обычная светодиодная лента представляет собой ленту с напаянными светодиодами и резисторами, на питание имеет два провода: плюс и минус. Напряжение бывает разное: 5 и 12 вольт постоянки и 220 переменки. Да, в розетку. Для 5 и 12 вольтовых лент нужно использовать блоки питания. Светит такая лента одним цветом, которой зависит от светодиодов.

RGB светодиодная лента. На этой ленте стоят ргб (читай эргэбэ – Рэд Грин Блю) светодиоды. Такой светодиод имеет уже 4 выхода, один общий +12 (анод), и три минуса (катода) на каждый цвет, т.е. внутри одного светодиода находится три светодиода разных цветов. Соответственно такие же выходы имеет и лента: 12, G, R, B. Подавая питание на общий 12 и любой из цветов, мы включаем этот цвет. Подадим на все три – получим белый, зелёный и красный дадут жёлтый, и так далее. Для таких лент существуют контроллеры с пультами, типичный контроллер представляет собой три полевых транзистора на каждый цвет и микроконтроллер, который управляет транзисторами, таким образом давая возможность включить любой цвет. И, как вы уже поняли, да, управлять такой лентой с ардуино очень просто. Берем три полевика, и ШИМим их analogWrit’ом, изи бризи.

Адресная светодиодная лента, вершина эволюции лент. Представляет собой ленту из адресных диодов, один такой светодиод состоит из RGB светодиода и контроллера. Да, внутри светодиода уже находится контроллер с тремя транзисторными выходами! Внутри каждого! Ну дают китайцы блэт! Благодаря такой начинке у нас есть возможность управлять цветом (то бишь яркостью r g b) любого светодиода в ленте и создавать потрясающие эффекты. Адресная лента может иметь 3-4 контакта для подключения, два из них всегда питание (5V и GND например), и остальные (один или два) – логические, для управления.

Лента “умная” и управляется по специальному цифровому протоколу. Это означает, что если просто воткнуть в ленту питание не произойдет ровным счётом ничего, то есть проверить ленту без управляющего контроллера нельзя. Если вы потрогаете цифровой вход ленты, то скорее всего несколько светодиодов загорятся случайными цветами, потому что вы вносите случайные помехи, которые воспринимаются контроллерами диодов как команды. Для управления лентой используются готовые контроллеры, но гораздо интереснее рулить лентой вручную, используя, например, платформу ардуино, для чего ленту нужно правильно подключить. И вот тут есть несколько критических моментов:

ОСОБЕННОСТИ ПОДКЛЮЧЕНИЯ


1) Команды в ленте передаются от диода к диоду, паровозиком. У ленты есть начало и конец, направление движение команд на некоторых моделях указано стрелочками. Для примера рассмотрим ws2812b, у нее три контакта. Два на питание, а вот третий в начале ленты называется DI (digital input), а в конце – DO (digital output). Лента принимает команды в контакт DI! Контакт DO нужен для подключения дополнительных кусков ленты или соединения матриц.

2) Если в схеме возможна ситуация, при которой на ленту не будет подаваться питание 5V, но будет отправляться сигнал с микроконтроллера – лента начнёт питаться от дата-пина. В этом случае может сгореть как первый светодиод в ленте, так и пин контроллера. Не испытывайте удачу, поставьте резистор с сопротивлением 200-500 Ом. Точность резистора? Любая. Мощность резистора? Любая. Да, даже 1/4.

2.1) Если между лентой и контроллером (Arduino) большое расстояние, т.е. длинные провода (длиннее 50 см), то сигнальный провод и землю нужно скрутить в косичку для защиты от наводок, так как протокол связи у ленты достаточно скоростной (800 кГц), на него сильно влияют внешние наводки, а экранирование земляной скруткой поможет этого избежать. Без этого может наблюдаться такая картина: лента не работает до тех пор, пока не коснёшься рукой сигнального провода.

2.2) При подключении ленты к микроконтроллерам с 3.3V логикой (esp8266, ESP32, STM32) появляется проблема: лента питается от 5V, а сигнал получает 3.3V. В даташите указана максимальная разница между питанием и управляющим сигналом, если её превысить – лента не будет работать или будет работать нестабильно, с артефактами. Для исправления ситуации можно:

3) Самый важный пункт, который почему то все игнорируют: цифровой сигнал ходит по двум проводам, поэтому для его передачи одного провода от ардуины мало. Какой второй? Земля GND. Как? Контакт ленты GND и пин GND Ардуино (любой из имеющихся) должны быть обязательно соединены. Смотрим два примера.

blank

blank

4) Питание. Один цвет одного светодиода при максимальной яркости кушает 12 миллиампер. В одном светодиоде три цвета, итого ~36 мА на диод. Пусть у вас есть метр ленты с плотностью 60 диод/метр, тогда 60*36 = 2.1 Ампера при максимальной яркости белого цвета, соответственно нужно брать БП, который с этим справится. Также нужно подумать, в каком режиме будет работать лента. Если это режимы типа «радуга», то мощность можно принять как половину от максимальной. Подробнее о блоках питания, а также о связанных с ними глюках читай здесь.

5) Продолжая тему питания, хочу отметить важность качества пайки силовых точек (подключение провода к ленте, подключение этого же провода к БП), а также толщину проводов. Как показывает мой опыт, брать нужно провод сечением минимум 1.5 квадрата, если нужна полная яркость. Пример: на проводе 0.75 кв.мм. на длине 1.5 метра при токе 2 Ампера падает 0.8 вольта, что критично для 5 вольт питания. Первый признак просадки напряжения: заданный программно белый цвет светит не белым, а отдаёт в жёлтый/красный. Чем краснее, тем сильнее просело напряжение!

6) Мигающая лента создаёт помехи на линию питания, а если лента и контроллер питаются от одного источника – помехи идут на микроконтроллер и могут стать причиной нестабильной работы, глюков и даже перезагрузки (если БП слабый). Для сглаживания таких помех рекомендуется ставить электролитический конденсатор 6.3V ёмкостью 470 мкФ (ставить более ёмкий нет смысла) по питанию микроконтроллера, а также более “жирный” конденсатор (1000 или 2200 мкФ) на питание ленты. Ставить их необязательно, но очень желательно. Если вы заметите зависания и глюки в работе системы (Ардуино + лента + другое железо), то причиной в 50% является как раз питание.

7) Слой меди на ленте не очень толстый (особенно на модели ECO), поэтому от точки подключения питания вдоль ленты напряжение начинает падать: чем больше яркость, тем больше просадка. Если нужно сделать большой и яркий кусок ленты, то питание нужно дублировать медным проводом 1.5 (или больше, надо экспериментировать) квадрата через каждый метр.

КАК ДЕЛАТЬ НЕЛЬЗЯ


Как мы уже поняли, для питания ленты нужен источник 5 Вольт с достаточным запасом по току, а именно: один цвет одного качественного светодиода на максимальной яркости потребляет 0.012 А (12 мА), соответственно весь светодиод – 0.036 А (36 мА) на максимальной яркости. У китайцев есть “китайские” ленты, которые потребляют меньше и светят тускло. Я всегда закупаюсь в магазине BTF lighting (ссылки в начале статьи), у них ленты качественные. Я понимаю, что порой очень хочется запитать ленту напрямую от Ардуино через USB, либо используя бортовой стабилизатор платы. Так делать нельзя. В первом случае есть риск выгорания защитного диода на плате Arduino (в худшем случае – выгорания USB порта), во втором – синий дым пойдёт из стабилизатора на плате. Если всё-таки очень хочется, есть два варианта:

  • Не подключать больше количества светодиодов, при котором ток потребления будет выше 500 мА, а именно 500/32 ~ 16 штук
  • Писать код на основе библиотеки FastLED, где можно ограничить ток специальной функцией. НО! В случае отключения пина Din от источника сигнала есть риск случайного включения ленты, и никакие программные ограничения не спасут от выгорания железа.

Вы наверное спросите: а как тогда прошивать проект с лентой? Ведь судя по первой картинке так подключать нельзя! Оч просто: если прошивка не включает ленту сразу после запуска – прошивайте. Если включает и есть риск перегрузки по току – подключаем внешнее питание на 5V и GND.

blank

blank

ПОДКЛЮЧЕНИЕ 12V ЛЕНТ


Если вы вдруг купили ленту на чипах WS2811/15/18, подключить её можно вот по этим двум схемам. Но следует помнить, что в прошивке нужно указать втрое меньшее количество светодиодов, так как каждый чип на этой ленте управляет тремя диодами, задаёт им один и тот же цвет!

blank

blank

ОТ ЧЕГО ПИТАТЬ ЛЕНТУ


Сетевые источники питания:

  • Адаптер 12V 2A – купить в РФ
  • Адаптер 12V 6A – купить в РФ
  • Адаптер 5V 3A – купить в РФ
  • Блок питания 5V 12A – купить в РФ
  • Блок питания 5V 20A – купить в РФ
  • Блок питания 5V 40A – купить в РФ
  • Мощные блоки питания aliexpress, aliexpress, искать

  • Блоки питания aliexpress, aliexpress, искать

Самый простой и понятный вариант – мощный блок питания на 5 Вольт. Если рядом есть источник постоянки 12 Вольт – можно взять понижайку и настроить её на 5 Вольт. Но часто возникает желание сделать “беспроводной” девайс с бортовым источником питания. Как быть в этом случае? Согласно даташиту на WS2812b светодиод будет работать от напряжения 3.5-5.5 Вольт, собственно как и сама Arduino. Помним, что при питании ленты от напряжения ниже 5 Вольт будет уменьшаться максимальная яркость. Отсюда имеем следующие варианты:

  • Powerbank 5V – берём провод с USB штекером и подключаем по схемам выше. Через Ардуино не питаем, нельзя. Ёмкость паурбанков очень высокая, сами знаете. По току обычно можно снять 2 Ампера, есть паурбанки на 3 А
  • Батарейки – можно взять обычные АА батарейки, 3 штуки полностью заряженных (дадут 4,5 Вольт), либо 4 штуки чуть разряженных (дадут 5.5 Вольт). Ёмкость батареек очень небольшая. По току можно снять 1-2 Ампера (алкалин, литий. Солевые сразу в помойку)
  • Никелевые аккумуляторы – имеют напряжение ~1.4В после зарядки, можно смело поставить 4 штуки (~5.5 Вольт). Ёмкость сборки весьма достойная (до 2700 ма*ч), по току можно снять 2-3 Ампера
  • Литиевые аккумуляторы – напряжение в процессе разряда меняется с 4.2 до 3.0 Вольт, значит ленту можно питать, но светить будет на 10-30% менее ярко. Также нельзя забывать следить за напряжением, литий боится переразряда. Ёмкость – параллельно можно поставить много банок, по току – с обычных банок можно снять 3 Ампера (если стоят в параллель – то с каждой)

Вот здесь описаны проблемы дешёвых блоков питания и как с ними бороться.

  • Литиевый акум + повышайка – отличный способ сохранить полную яркость при небольшом количестве светодиодов, у китайцев есть куча повышаек с лития (3-4.2В) до 5 Вольт с максимальным током до 2 Ампер. Считай тот же powerbank, но можно более компактно разместить

ПОЧЕМУ НЕ РАБОТАЕТ?


Убедись, что земля ленты соединена с землёй ардуино КАК НА СХЕМЕ

  • Убедись, что сигнальный провод идёт в начало ленты (контакт DI) КАК НА СХЕМЕ
  • Убедись, что не перепутал 5в и GND. КАК НА СХЕМЕ
  • Цвет отдаёт в красный? У тебя слабый БП, некачественная пайка линии питания или слишком тонкие провода питания
  • Подключил без резистора и теперь не работает даже с резистором? Пин ардуино отбросил ласты, подключай в другой
  • Лента глючит и иногда показывает артефакты? У вас беды с питанием, читать гайд на форуме.

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


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

  • FastLED обладает гигантским набором инструментов и позволяет делать сложные эффекты, краткий гайд и частичная документация на русском языке есть на сайте набора GyverKIT.
  • microLED – моя библиотека, она гораздо проще, имеет подробнейшую документацию на русском языке, занимает меньше места в памяти Ардуино, а также обновляет ленту быстрее FastLED.

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

Бегущая радуга (microLED)

#define STRIP_PIN 2     // пин ленты
#define NUMLEDS 100     // кол-во светодиодов
#include <microLED.h>   // подключаем библу
microLED < NUMLEDS, STRIP_PIN, -1, LED_WS2812, ORDER_GRB > strip;

void setup() {
  strip.setBrightness(60);  // яркость
}

void loop() {
  static byte counter = 0;
  for (int i = 0; i < NUMLEDS; i++) {
    strip.set(i, mWheel8(counter + i * 255 / NUMLEDS));   // counter смещает цвет
  }
  counter += 3;   // counter имеет тип byte и при достижении 255 сбросится в 0
  delay(30);      // 30 кадров в секунду
}

Бегущая радуга (FastLED)

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

На чтение 9 мин Просмотров 2.7к. Опубликовано 14.01.2021
Обновлено 14.01.2021

Содержание

  1. Адресные LED-ленты
  2. Устройство адресной ленты
  3. Устройство элемента светильника
  4. Соединение элементов
  5. Управление свечением
  6. «Бегущий огонь»
  7. Схема подключения светильника и типичные ошибки
  8. Проверка исправности адресной ленты

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

Адресные LED-ленты

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

Особенности подключения и управления адресной светодиодной лентой

Возможности адресной LED-ленты.

Устройство адресной ленты

Базой для построения таких осветительных приборов стали адресные светодиоды. Они содержат собственно полупроводниковый светоизлучающий элемент и индивидуальный драйвер ШИМ. В зависимости от типа адресного элемента, RGB LED может располагаться внутри общего корпуса или быть вынесенным и подключаться к выводам драйвера. В качестве светоизлучателя могут применяться раздельные светодиоды или RGB-сборка. Напряжение питания также может быть различным. Сравнительные характеристики распространенных микросхем, применяемых для управления цветными светодиодами, приведены в таблице.

Драйвер ШИМ U питания, В Подключение LED Примечание Потребляемый ток
WS2811 12-24 Внешнее Встроенный стабилизатор напряжения на 12 В. Быстрый и медленный режимы В зависимости от примененных LED
WS2812B 5 Встроенный Форм-фактор LED — 5050 До 60 мА на один элемент (при максимальной яркости)
WS2813 5 Встроенный Форм-фактор LED — 5050 До 60 мА на один элемент (при максимальной яркости)
WS2815 12 Встроенный Форм-фактор LED — 5050 До 60 мА на один элемент (при максимальной яркости)
WS2818 12/24 Внешний Напряжение управляющего входа – до 9 В.

Дополнительный управляющий вход

В зависимости от примененных LED

Устройство элемента светильника

Каждый адресный светодиод содержит минимальное количество выводов:

  • U питания (VDD);
  • общий провод (GND);
  • вход данных (DIN);
  • выход данных (DOUT).

Это позволяет элементы со встроенными излучателями размещать в корпусах с 4 выводами (WS2812B).

WS2812B

Расположение выводов WS2812B.

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

Цоколевка WS2818 с дополнительным выходом данных.

Цоколевка WS2818 с дополнительным выходом данных.

Так, проектанты микросхемы WS2811 задействовали свободный вывод под переключатель скорости, а WS2818 – под резервный вход данных (BIN).

Соединение элементов

Все элементы, расположенные на полотне, соединены по питанию параллельно, а по шине данных – последовательно. Выход управления одной микросхемы соединяется со входом другой. Управляющий сигнал с контроллера подается на вывод DIN крайнего левого по схеме драйвера.

Схема соединений элементов на полотне.

Схема соединений элементов на полотне.

Питание светодиодов и микросхем лучше выполнить от отдельного блока, особенно, если лента питается напряжением, отличным от 5 В. Общий провод контроллера и источника напряжения надо соединить.

Особенности подключения и управления адресной светодиодной лентой

Внешний вид отрезка ленты на WS2812B.

Управление свечением

Управляются элементы адресной ленты по последовательной шине. Обычно такие шины строятся по двухпроводной схеме – линия строба и линия данных. Существуют и такие ленты, но они получили меньшее распространение. А описываемые приборы управляются по однопроводной схеме. Это позволило упростить полотно, удешевить его. Но оплачено это низкой помехоустойчивостью LED-прибора. Любую наведенную помеху с достаточной амплитудой драйверы могут интерпретировать как данные и непредсказуемо засветиться. Поэтому при монтаже надо предпринимать дополнительные меры для защиты от помех.

Протокол управления содержит команды из 24 бит. Ноль и единица кодируются в виде импульсов одинаковой частоты, но разной длительности. Каждый элемент записывает («защелкивает») свою команду, после паузы определенной длительности передается команда для следующей микросхемы и так по цепочке. После паузы повышенной длительности происходит сброс всех элементов и передача следующей серии команд. Недостатком такого принципа построения шины управления является то, что выход из строя одной микросхемы прерывает передачу команд далее по цепочке. У драйверов последних поколений (WS2818 и т.п.) имеется дополнительный вход (BIN), позволяющий избежать данной проблемы.

Читайте также

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

«Бегущий огонь»

Отдельного рассмотрения заслуживает так называемая SPI-лента, которую в быту называют «бегущий огонь» из-за самого распространенного светового эффекта, который на ней строят. Отличие такой ленты от рассмотренных типов в том, что шина данных содержит две линии – для данных и для тактовых импульсов. Для таких приборов можно приобрести изготовленный промышленно контроллер с набором эффектов, включая упомянутый «бегущий огонь». Также можно управлять свечением и от обычных контроллеров PIC или AVR (включая Arduino). Их преимуществом является повышенная помехозащищенность, а недостатком – необходимость задействования двух выходов контроллера. Это может послужить ограничением для построения сложных световых систем. Также для таких приборов характерна более высокая стоимость.

Особенности подключения и управления адресной светодиодной лентой

SPI-лента с двухпроводной шиной управления.

Схема подключения светильника и типичные ошибки

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

  1. Из-за повышенного энергопотребления адресной ленты запитывать ее от платы Ардуино нельзя (если используются небольшие отрезки – нежелательно). В общем случае для организации питания потребуется отдельный источник (в некоторых случаях он может быть один, но цепи питания для светодиодов и контроллера должны быть выполнены раздельно). Но общие провода (GND) цепей питания и платы Arduino должны быть соединены. В противном случае система будет неработоспособной.Особенности подключения и управления адресной светодиодной лентой
  2. Из-за пониженной помехоустойчивости проводники, соединяющие выход контроллера и вход полотна, должны быть как можно короче. Крайне желательно, чтобы они были не длиннее 10 см. Также далеко не лишним будет подключение на линию питания конденсатора С на напряжение, превышающее напряжение питания ленты, и емкостью от 1000 мкФ. Устанавливать конденсатор надо в непосредственной близости от ленты, в идеале – на контактных площадках.
  3. Отрезки ленты можно соединять последовательно. Выход DOUT надо подключать к входу DIN следующего куска. Но при общей длине, превышающей 1 метр, последовательное соединение применять нельзя – проводники линий питания полотна не рассчитаны на большой ток. И в этом случае надо применить параллельное соединение отрезков.
  4. Если соединить выход контроллера и вход DIN напрямую, при возникновении нештатной ситуации в светильнике выход контроллера может выйти из строя. Чтобы этого избежать, в разрыв провода надо поставить резистор сопротивлением до нескольких сотен Ом.

Читайте также

Как подключить светодиод к плате Arduino

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

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

Если имеется полотно с однопроводной шиной управления, можно проверить адресную светодиодную ленту прикосновением пальца к контактной площадке, на которую подается управляющий сигнал (при поданном на ленту питании). Это может вызвать свечение одного или нескольких LED.

Стариков Михаил

Стариков Михаил

Старший инженер-электроник

Задать вопрос

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

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

Спасибо тебе, трехцветный светодиод! Тебе было достаточно всего три пина Ардуино с ШИМ, чтобы светить нам любым цветом, в рамках своих технических характеристик, разумеется. Ты славно служил нам еще с доцифровой эпохи, но теперь твое время, кажется, уходит…

Содержание:

  • Назначение и принцип работ
  • Разновидности
  • Технические характеристики WS2812B
  • Подключение к Ардуин 
  • Примеры использования
  • Недостатки и ограничения
  • Выводы
  • FAQ

Назначение и принцип работы

Спасибо тебе, трехцветный светодиод! Тебе было достаточно всего три пина Ардуино с ШИМ, чтобы светить нам любым цветом, в рамках своих технических характеристик, разумеется. Ты славно служил нам еще с доцифровой эпохи, но теперь твое время, кажется, уходит…

led-3.jpg

Хотя нет, останься, ты еще пригодишься в качестве равноправного компонента светодиода адресного. А в боевые товарищи дадим тебе чип WS2811!

Итак, что изменилось и какое преимущество дает присвоение каждому RGB-светодиоду индивидуального контроллера? Во-первых, контроллер главный (в нашем случае Ардуино), освобождается от недостойной его задачи формировать по три  ШИМ-сигнала для каждого светодиода, теперь этим займется WS2811. Прежде чем озвучить “во-вторых”, давайте, для примера, представим что нам необходимо сделать игрушечный светофор из трех светодиодов с плавным переключением сигналов. Потребуется 9 пинов, из которых на UNO ШИМом обладает всего 6. То есть для такой простой задачи уже готовим целую MEGA. Если же нам захочется чуть большего, то проблемы вырастут до размеров, недоступных для решения одним контроллером. Давайте теперь представим минимальный цветной светодиодный куб 4х4х4. 64 светодиода, 192 управляющих сигнала, не считая питания, жгут из проводов толщиной в два пальца, дополнительные генераторы ШИМ или, что еще страшнее, ЦАПы, охапка резисторов, горсть прочих радиодеталей, невероятная программа, чтобы этим всем управлять и так далее. Такой куб больше будет похож на ворох проводов, сквозь которые едва пробивается свет. Вот теперь скажу “во-вторых”. В-вторых, адресные светодиоды могут подключаться “паровозиком” один к другому и всего тремя проводами, включая питание. Собираться в цепочки до нескольких сотен штук, при этом каждый будет самостоятельно светить своим собственным цветом, который ему, между прочими делами, назначит Ардуино. И в-третьих, для передачи команд всей этой цепочке от Ардуино потребуется всего один пин. Причем, любой, а не только из шести генерирующих широтно-импульсную модуляцию. К другому пину может подключаться следующая цепочка и так далее, один контроллер, при необходимости, может одновременно управлять несколькими независимыми лентами. Такие возможности позволяют легко использовать светодиоды в качестве пикселей и формировать цветную картинку, переливающуюся гирлянду, создавать художественную подсветку и LED-экраны любого размера. Применений можно придумать тысячи.

Хорошим подспорьем в расширении возможностей является высокая скорость обновления информации. Цепочка из 100 адресных светодиодов получает данные всего за 3 мс, то есть, в теории, может работать с частотой до 300 кадров в секунду. Это позволяет не только формировать любые цветные изображения, но и запросто анимировать их.

Svetodiodnaya-lenta-Arduino-12.gif

Адресные светодиоды бывают разные, о чем вкратце расскажу чуть позже, но принцип работы у них схожий. Рассмотрим самый распространенный вариант — WS2812b.

ws2812b.jpg

Две ножки питания, вход и выход. Команда приходит на входную ножку в виде последовательности 24 битов, по 8 на каждый цвет. Так как синхроимпульс отсутствует, ноль и единица отличаются длительностью: 0,4 мкс — ноль, 0,85 — единица. На один бит тратится 1,25 мкс, на один светодиод команда передается, соответственно, за 30 мкс. Скорость передачи, таким образом, составляет 800 кбит/с. В каждом чипе, в качестве конкретно ему адресованной команды, остается последние перед завершением передачи 24 бита, все предыдущие он транслирует на выход, передавая информацию по цепочке дальше. Окончанием пакета данных является пауза на низком уровне в течение 50 мкс, после чего каждый чип формирует сигналы на своих светодиодных ножках согласно “замершей” в нем информации. Цвет установлен и будет сохраняться до приема следующей команды.

Вот так в реальности выглядит передача данных на один светодиод:

one_pixel.jpg

24 бита и пауза. Данные можно расшифровать даже невооруженным глазом: 010110.. и так далее. Вот так все просто.


Разновидности

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

По типу:

  • WS2811 — отдельный чип без собственно светодиода в корпусе soic-8. К нему можно припаять старый добрый трехцветный светодиод или что-нибудь другое, что управляется ШИМ сигналом. Редко используется любителями ввиду сложности сборки на его основе.

ws2811.jpg

  • WS2812B — пожалуй, самый популярный адресник на данный момент. Именно о нем мы будем говорить в этой статье и на нем работать с примерами. Размер 5х5 мм, частота ШИМ 400Гц. Подробнее в следующем разделе.

  • WS2812S — отличается от предыдущего раздельным питанием чипа и светодиода. Рекомендуется для особо длинных цепочек, так как напряжение на чипе не снижается так сильно от расстояния и не зависит от яркости свечения цепочки.

  • WS2812B-Mini — уменьшенная до размера 3,5х3,5 мм и менее яркая версия WS2812B.

  • WS2813 — улучшенная версия 2812, отличается повышенной до 2кГц частотой ШИМ и возможностью передавать сигналы по цепочке дальше даже через вышедший из строя чип. Рекомендуется для труднодоступных мест и изделий с повышенной надежностью.

  • SK6812-RGBW — светодиод состоит не из 3-х, а из 4-х компонентов, к красному, синему и зеленому добавлен белый. Такому светодиоду в сигнале требуется не 24, а 32 бита данных. Отличается более ярким свечением за счет мощного белого излучателя. Рекомендуется для освещения и подсветки больших объектов.

sk6812.jpg

По исполнению:

  • В виде лент, плотностью от 30 до 144 светодиодов на метр и в разном защитном исполнении: IP30, IP65, IP67, IP68. Все, кроме первого, могут использоваться на улице почти в любых погодных условиях.

vidi_lent.jpg

Ленты особенно удобны для создания подсветки, габаритных форм и угловатых фигур. Например, часов любого размера и формы.

chasi.jpg

  • В виде отдельных “пикселей”, что нужно для различных тонких художественных применений, так как не ограничивают творца прямыми линиями.

pixeli.jpg serdechko.jpg heart.gif

  • В виде стандартных, привычных глазу светодиодов диаметром 5 мм. Они излучают равномерно во все стороны, что особо ценится любителями праздничных гирлянд, 3Д-кубов и прочих объемных предметов.

LED.jpg


Технические характеристики WS2812B

  • Размер — 5х5 мм
  • Частота ШИМ — 400Гц
  • Напряжение питания — 5В
  • Потребление при нулевой яркости — 1 мА на светодиод
  • Потребление при максимальной яркости — 60 мА на светодиод
  • Цветность: RGB, 256 оттенков на канал, 16 миллионов цветов
  • Размер данных — 24 бита на светодиод
  • Скорость передачи данных — 800 кГц

Подключение WS2812B к Arduino

shema podkluchenia.jpg

Схема проста до скуки. Важно лишь знать и соблюдать следующие правила:

  • Адресники довольно энергоемкие, блок питания должен быть рассчитан на максимальную мощность и даже чуть превышать ее. Один светодиод, напомню, потребляет до 60 мА. Для примера, лента со 100 диодами потребует 6 А, а лучше 8 А и более.
  • Ленты, длиннее пары десятков светодиодов, рекомендуется запитывать с двух сторон, а еще лучше в нескольких точках по всей длине, чтобы избежать падения напряжения с расстоянием и перегрева дорожек.
  • Ардуино и лента могут быть запитаны из разных источников, но “земля” у них должна быть едина.
  • Резистор на управляющем пине не обязателен, но очень желателен для защиты контроллера, иначе в случае даже кратковременного обрыва питания ленты пин моментально выгорит.

Примеры использования

Задача вывода информации на светодиоды непростая, требуется отправить одним пакетом много данных на большой скорости и с большой точностью. Даже при отключенных таймерах и прерываниях с этой частью работы успешно справляется лишь программа, написанная на ассемблере, то есть максимально близкая к машинному уровню. Поэтому без готовых библиотек любителю обойтись довольно сложно. Библиотек существует несколько, самыми известными из которых  являются NeoPixel и FastLed. Споры о том, какая из них лучше ведутся давно, выбирайте на свой вкус. Мне больше нравится NeoPixel, она ощутимо компактнее во флеше и занимает гораздо меньше динамической памяти контроллера. В примерах будем пользоваться именно ей.

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

#define PIXEL_PIN    6  // номер управляющего пина
#define PIXEL_COUNT 16  // количество пикселей (светодиодов) в ленте
// объявление объекта:
Adafruit_NeoPixel strip(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
// Argument 1 = количество пикселей (светодиодов)
// Argument 2 = номер управляющего пина
// Argument 3 = тип светодиода по порядку и количеству цветов, а также скорости передачи данных:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
//   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)

Первая строка — номер пина, вторая — количество светодиодов, третья — установка этих данных плюс выбор типа ленты и скорости передачи. По умолчанию назначена лента с цветностью RGB и скоростью 800 кГц, это подходит для WS2812B. Для SK6812 выбираем NEO_RGBW.

Загружаем стандартный пример от библиотеки simple или strandtest_wheel, проверяем настройки, запускаем, любуемся.

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

kolco_24.jpg

Итак, первый пример. Выводим на кольцо три основных цвета RGB.

#include <Adafruit_NeoPixel.h>
#define PIN 6
Adafruit_NeoPixel strip = Adafruit_NeoPixel(24, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();              // начинаем
  strip.setBrightness(50);    // делаем яркость 50 (максимум 254)
  strip.show();               // ощищаем экран (рекомендуется при запуске для отключения случайных пикселей
  strip.setPixelColor(0, 0xFF0000);   // красный
  strip.setPixelColor(1, 0x00FF00);   // зеленый
  strip.setPixelColor(2, 0x0000FF);   // синий
  strip.show();               // выводим
}

void loop() {
}

Результат:

RGB.jpg

Немного комментариев.

Команда setBrightness(50); устанавливает, можно так сказать, масштаб шкалы яркости. Максимальная яркость любого цвета (0xFF), используемая после этой команды, будет ограничена данным параметром, промежуточные значения уменьшаются пропорционально. Можно ей не пользоваться вовсе, но иногда это удобно, например, если требуется приглушить цвета оптом, не выискивая и меняя их во всей программе. В примере я установил яркость 50, чтобы цвета хорошо отображались, не ослепляя камеру.

Команда setPixelColor(i, 0x00RRGGBB); также может принимать вид setPixelColor(i, R, G, B), где i — номер светодиода в ленте (начиная с 0), R, G, B — соответственно, яркость красного, зеленого и синего цвета по шкале от 0 до 254 в десятичном виде или от 0x00 до 0xFF в шестнадцатиричном. Примечание: первый вариант записи допускает только шестнадцатиричный вид, это 32-битное число (uint32_t), первые незначащие нули для лент RGB можно опустить. В примере я написал эту команду трижды с разными параметрами, тем самым присвоил каждому пикселю один из основных цветов.

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

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

Следующий пример. Построим шкалу яркости, поднимая накал по десятке на каждый следующий светодиод.


#include <Adafruit_NeoPixel.h>
#define PIN 6
Adafruit_NeoPixel strip = Adafruit_NeoPixel(24, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();              // начинаем
  strip.setBrightness(50);    // делаем яркость 50 (максимум 254)
  strip.show();               // очищаем экран (рекомендуется при запуске для отключения случайных пикселей
  for (byte i = 0; i < 24; i++) {
    strip.setPixelColor(i, i * 10, 0, 0); // увеличиваем яркость каждого следующего светодиода на 10
  }
  strip.show();               // выводим
}

void loop() {
}

red.jpg

Как видим, все прекрасно работает, разница заметна. Первый светодиод не горит, на нем 0, на последнем 230. Кстати, снимок не передает цветность полностью, в реальности разница еще заметнее.

Заменяем строку внутри цикла на такую:

strip.setPixelColor(i, i * 10, 240 - i * 10, 0); // плавно переливаемся от зеленого в красный

Результат:

green-red.jpg

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

Наконец, простейшая анимация — бегущая по кругу точка.


#include <Adafruit_NeoPixel.h>
#define PIN 6
Adafruit_NeoPixel strip = Adafruit_NeoPixel(24, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();              // начинаем
  strip.setBrightness(50);    // делаем яркость 50 (максимум 254)
  strip.show();               // ощищаем экран (рекомендуется при запуске для отключения случайных пикселей
}

void loop() {
  static byte i = 0;                      // адрес "бегущей" точки
  static byte old_i = 23;                 // предыдущий адрес "бегущей" точки
  strip.setPixelColor(i, 0xFF, 0, 0xFF);  // выводим новую точку
  strip.setPixelColor(old_i, 0, 0, 0);    // стираем старую точку
  strip.show();     
  i < 23 ? i++ : i = 0;                   // сдвигаем положение точки
  i == 0 ? old_i = 23 : old_i = i - 1;
  delay(100);                             // задержка между кадрами
}

begushaya_tochka.gif

Немного поколдовав с кодом можно сделать эффект интереснее:

kolco_2.gif

Из кусочков ленты собрать модные очки.

ochki.gif

Добавив акселерометр, изготовить динамическую подсветку для колеса.

koleso.gif

И даже имитацию открытого огня.

ogon.gif

Как видим, области применения в DIY адресных светодиодов ограничивается лишь некоторыми техническими особенностями и фантазией.


Недостатки и ограничения

К сожалению или к счастью, в мире нет ничего идеального и адресные светодиоды не исключение. Какие проблемы могут возникнуть при работе с ними и можно ли с этим жить? Попробуем разобраться.

Помехоустойчивость. Высокая скорость передачи данных без синхронизации и обратной связи проста, но имеет оборотную сторону — любая микроскопическая помеха портит весь пакет данных, превращая изображение в случайный набор пятен. При длине проводов от Ардуино до первого светодиода и между светодиодами более 10 см помехи начинают появляться просто “из воздуха” от наводок, статики и прочего электромагнитного шума. Частично этот эффект можно уменьшить, экранируя провода или просто скрутив в жгут сигнал и “землю”, но вероятность сбоев останется и будет расти с каждым лишним сантиметром. Совет: размещать пиксели как можно ближе.

Температура. Зимой, при морозе от -15 градусов и ниже чипы WS2811 начинают “сходить с ума” и вовсе перестают работать, вероятно, из-за замерзания тактового генератора. Совет: при использовании на открытом воздухе заранее позаботиться о подогреве.

Глубина цвета. Разница между максимально ярким и максимально тусклым светодиодом не так велика, как этого хотелось бы. Кроме того, светиться диоды начинают примерно с уровня 6-8 и сразу довольно ярко, то есть получить глубоких оттенков темных цветов на адресниках не получится. Совет: не ожидать качественного полноцвета и применять там, где этого не требуется.

Цветопередача. Проблема, родственная предыдущей — не всегда получаемый цвет полностью соответствует ожидаемому. Особенно это заметно при попытках вывести на экран из адресников реальные фотографии. Смешение цветов при небольшой глубине цвета происходит не всегда корректно, да и “чистые” цвета могут плавать от модели к модели и даже от партии к партии. Совет тот же.

Однако нужно понимать, что прогресс не стоит на месте, наверняка скоро мы увидим новые, более совершенные варианты этого устройства.


Выводы

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


FAQ

 

1. Можно ли управлять одним контроллером несколькими независимыми светодиодными лентами?

Конечно, нужно лишь создать экземпляры класса Adafruit_NeoPixel, присвоив каждому свой индивидуальный пин. Рекомендую таким образом разбивать на части слишком длинные ленты.


Adafruit_NeoPixel strip_1 = Adafruit_NeoPixel(24, PIN_1, NEO_GRB + NEO_KHZ800);


Adafruit_NeoPixel strip_2 = Adafruit_NeoPixel(24, PIN_2, NEO_GRB + NEO_KHZ800);


Adafruit_NeoPixel strip_3 = Adafruit_NeoPixel(24, PIN_3, NEO_GRB + NEO_KHZ800);

  2. Как управлять лентой с дополнительным белым цветом?

Точно так же. Разница лишь в инициализации и дополнительном байте цвета.


Инициализация:


Adafruit_NeoPixel strip = Adafruit_NeoPixel(24, PIN, NEO_GRBW + NEO_KHZ800);


Выставление цвета пикселя:


strip.setPixelColor(0, 0xRRGGBBWW);

 

3. Что означает класс защиты светодиодной ленты?

Цитируем стандарт:

IP30. Защита от проникновения твердых объектов размером более 12 мм, пальцев рук или других предметов длиной не более 80 мм, или твердых предметов.

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

IP67: Полная защита от проникновения пыли и случайного проникновения. Защита от попадания воды при временном погружении в воду. Вода не вызывает порчи оборудования при определенной глубине и времени погружения.

Нас часто спрашивают о адресной светодиодной ленте (иногда ее называют «умная лента» или «пиксельная лента»).Первое, что большинство людей хотят знать, это то, что делает Адресная светодиодная лента и чем она отличается от стандартной ленты RGB LED. Кроме того, существуют пиксельные светодиодные модули

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

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

Что такое адресная светодиодная лента?

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

В отличие от стандартной ленты RGB, каждый светодиод имеет свою собственную микросхему, которая позволяет управлять им для индивидуальной реакции (например, изменение цвета, выключение и т. Д.). Пиксельная лента все еще может делать все, что может делать стандартная лента RGB… только больше.

Адресуемый светодиод

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

В интернет-магазинах можно встретить адресные светодиодные ленты, когда в одном метре умещается до 144 штук.

Стоит учесть, что один светодиод потребляет при полной яркости всего 60-70 мА, при подключении ленты, например, на 90 светодиодов, потребуется мощный блок питания с током не менее 5 ампер. Ни в коем случае не питайте светодиодную ленту через контроллер, иначе он перегреется и сгорит от нагрузки. Используйте внешние источники питания.

Адресная светодиодная лента WS2801.

Серия чипов WS первой будет WS2801. Это интересный в своем роде драйвер-микросхема для RBGW-светодиодов с поддержкой последовательного интерфейса SPI.

С применением отдельного контроллера нет необходимости занимать несколько выходов микроконтроллера, можно ограничиться лишь одним сигнальным выводом. Микроконтроллер подает сигнал на вход «Data» управляющего контроллера светодиода WS2801.

В таком сигнале содержится 24-битная информация о яркости цвета (3 канала по 8 бит на каждый цвет), а также информация для внутреннего сдвигового регистра. Именно сдвиговый регистр позволяет определять, к какому светодиоду информация применяется. Таким образом можно соединять несколько светодиодов последовательно, при этом использовать все так же один вывод микроконтроллера.

У WS2801 было 4 контакта: +5v, GND (минус), DI (Digital input) и CO (тактовая линия). Таких лент сегодня практически уже не найти, на их место пришли WS2811 и WS2812B, более компактные модели с последовательным однолинейным интерфейсом. Теперь за данные отвечает только один контакт, обычно обозначаемый как DI (digital input) и с другой стороны DO (digital output).

Провода и разъемы

Цифровая лента на конце имеет минимум не два, а три провода.

V+ (5V или 12V)

V- (GND)

управляющий провод

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

DI (Digital Input) или цифровой вход в начале ленты

DO (Digital Output) цифровой выход

При наличии таких разъемов подключить ленту неправильной стороной у вас не получится. Второй конец DO требуется при наращивании длины световой конструкции.

Ошибка №4

А вот без таких разъемов начало и конец ленты можно и перепутать.

В этом случае ничего гореть и светиться у вас не будет.

Ошибка №5

Слишком длинные провода питания от контроллера.

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

В этом случае попробуйте их скрутить косичкой. В некоторых ситуациях помогает.

Адресная светодиодная лента WS2811 и WS2812.

Основные отличия адресной светодиодной ленты ws2811 от ws2812b:

  • Драйвер WS 2811 гораздо больше чем его потомок WS 2812b, поэтому он припаян прямо на подложку ленты перед каждым диодом (черный прямоугольник на фото выше).
  • У 2812B чип установлен внутрь диода (темная точка в диоде на фото ниже).
  • Адресная светодиодная лента WS 2811, в основном, рассчитана на напряжение 12 вольт.
  • Если Адресная светодиодная лента WS 2811 на 12v, у нее один чип управляет группой из трех диодов одновременно, а не по одному (как в WS2812b).
  • Адресная светодиодная лента WS 2811 на напряжение 12v гораздо дешевле, чем ws 2812b (разница в цене 30 %)
  • Благодаря низкой цене на Адресную светодиодную ленту WS 2811 – напряжением 12v наиболее распространена. Тем не менее, ее сменила более совершенная модель WS 2812В. Все же в один SMD корпус интегрированны как драйвер, так и сами светодиоды. Кроме того, каждый диод управляется отдельно.

Новогодняя гирлянда на ws2812b

Идею этой новогодней гирлянды я нашел в интернете, на одном известном сайте. Там же, вы так же можете скачать все драйвера и файлы предназначенные для программирования Arduino Nano V 3.0, и инструкцию для программирования. Ленту я заказал с доставкой по России, это удобно и приходит она быстрее, но так же ее можно заказать и на китайских сайтах. Эта адресная гирлянда специальная, она предназначена для гирлянд и праздничных занавесок.

Елка с гирляндой

Ссылки для заказа находятся в конце статьи.

Адресная гирлянда ws2812b 50 led – это 50 адресных светодиодов с чипом ws2812b, припаянных к проводу длиной 6 метров. По сравнению с адресной лентой обладает большей гибкостью, позволяющей сделать такие проекты как гирлянда на елку или, например на окно. Следует учитывать, что ее яркость не сравнится в обычной адресной лентой из-за низкой плотности расположения диодов (в среднем – 8,3 диода на метр).

Гирлянда адресная

Мощность гирлянды 2.5 ватта на метр. Длина 6 метров, отсюда следует, что мощность всей ленты по закону ома будет – 2.5 умножаем на 6 равно 15 ватт. Напряжение ленты 5 вольт. 15 / 5 = 3, то есть ток потребляемый лентой 3 ампера.

Блок питания для ленты

Поэтому берем блок питания на 3 ампера. Меньше не желательно, долго не прослужит. Можно и мощнее взять блок питания, но это цена вопроса, стоит он в три раза дороже, если хотите переплачивать, то пожалуйста. Я взял простой блок питания 5 вольт 3 ампера 15 ватт. Он вполне справляется со своей задачей и стоит не дорого.

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

  • Подключайте к адресной светодиодной ленте (между линиями питания) конденсатор, вплоть до 1000 мкФ
  • В разрыв линии данных (от Контроллера к адресной светодиодной ленте) добавляйте резистор 300 — 500 Ом, устанавливая его ближе к ленте.
  • Кабельная линия данных от контроллера до адресной светодиодной ленты, требуется делать как можно коротким.
  • При подключении адресной светодиодной ленты, подключайте «землю» первой (отключайте последней).
  • Не допускайте разрядов статического электричества при монтаже адресной светодиодной ленты.
  • Используйте преобразователь уровня, если адресная светодиодная лента и устройство управления подключены от источников питания с разным напряжением.
  • Максимальный ток каждого пикселя составляет 60мА (при полной яркости белого цвета). Если Вы не планируете использовать ленту WS2812B как источник света (для этого лучше взять обычную светодиодную ленту с белыми светодиодами), принято считать, что, усреднено, каждый пиксель потребляет 20мА.

минимальный ток Драйвера = 20мА*количество_пикселей. максимальный ток Драйвера = 60мА*количество_пикселей

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

Подключение более 5 метров.

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

Когда количество пикселей на контроллере позволяет подключить большую длину, вы без проблем стыкуете коннекторы DI и DO между собой. Но вот питание (5В или 12В), все равно придется тянуть отдельно (параллельно).

Есть контроллеры с дополнительными проводами под “лишнее” питание на такой случай.

Ошибка №6

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

Например, взять три куска ws2812b (5м+5м+5м) и подать на них в самом начале ленты 15 вольт, рассчитывая при этом на последовательное падение напряжения.

как правильно паять паяльником

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

Ошибка №7

Лента вместо белого светится с оттенком желтоватого или красного цвета.

Скорее всего дело здесь в неправильно подобранном сечение проводов. Всегда берите минимум 1,5мм2.

Недостаток цвета – это первый признак просадки напряжения. Уход в красноту объясняется тем, что для синего и зеленого цветов на чипе 2812b требуется порядка 3,5В, а вот для красного достаточно и 2В.

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

Варианты управления адресной светодиодной лентой.

Есть несколько способов управлять адресной светодиодной лентой:

  • Аппаратный при помощи контроллера SPI

На эту тему вы можете почитать нашу специальную статью. В этой статье мы максимально подробно описали принципы управления по протоколу SPI.

SPI контроллер и SPI RGB лента

  • Аппаратный при помощи UART-интерфейса

На эту тему вы можете почитать нашу специальную статью. В этой статье мы максимально подробно описали принципы управления с помощью UART.

Светодиодная лента Ардуино

  • Программный

Достоинство первых двух способов – это возможность освободить драйвер от части работы по передаче бит информации о цвете пикселю. Недостатки этих способов – во-первых, ограниченное количество линий управления пикселями, во-вторых, требуется дополнительное разбитие байтов информации о цвете на пачки битов (что частично съедает свободное время контроллера в моменты аппаратной передаче бит).

Что нужно еще сделать

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

Гирлянда на бабине

Если все сделали правильно, то все будет работать отлично.

Термоусадочная трубка

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

Термоусадка нарезанная

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

Так же я подключил Arduino Nano V 3.0 с такой же прошивкой к другой адресной ленте, которую использовал в проекте цветомузыка. И получился довольно таки неплохой эффект. И из него можно тоже что то сделать. Я например приклеил ее к столу и сделал подсветку стола, смотрится так же довольно не плохо. Об этом посмотрите в видео на youtube внизу статьи.

Лента адресная

Адресная светодиодная лента DMX 512.

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

DMX ленты, производятся с записанными при производстве DMX адресами. По умолчанию, адресация пикселей каждой катушки ленты начинается с 1-го драйвера и 1-го адреса и нумеруется по порядку до последнего пикселя. Если в последствии в одну линию соединяется несколько катушек или отрезков, требуется произвести запись DMX адресов заново.

При записи адресов используется DMX кабель, обозначенный ADR (ADI, ADIN). После выполнения записи, при воспроизведении световых программ, вход ADI драйверов не используется. Если Ваш контроллер не имеет встроенного редактора адресов и не имеет выхода для подключения провода ADI, этот провод должен быть соединен с общим проводом GND, что предотвратит воздействие на него внешних помех и наводок.

Стоит сказать, что адресных светодиодных лент DMX 512 – Драйвер WS2821, гораздо больше преимуществ перед SPI.

  • Длинна линии управления до 300 м. против 100 м. у SPI.
  • При выходе из строя диода или группы диодов линия освещения продолжает работать.

Но есть и недостатки.

  • Требует Большое количество DMX адресов – отсюда высокая стоимость оборудования для управления этой системой.

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

В простой RGB-ленте обычно устанавливаются RGB-светодиоды типа 5050, которые состоят фактически из трёх кристаллов (красного, зелёного и синего) расположенных в одном корпусе.

В адресной ленте также используются светодиоды в корпусе 5050, но отличающимся тем, что у них 4, а не 6 выводов. В самом же корпусе расположены светоизлучающие кристаллы и микрочип, управляющий их свечением, на иллюстрации на него указывает красная стрелка.

По питанию все светодиоды в ленте соединены параллельно, а линии управления соединяются последовательно. Распиновка адресной ленты следующая: контакты +5V и GND отвечают за питание, контакт DO – выход управляющего сигнала, а DI – вход.

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

Наиболее распространены две модели с разными контроллерами, это ws2812b и ws2811. Главное их отличие в том, что изделия с чипами ws2811 питаются от 12 Вольт, а сам чип находится не внутри светодиода, а отдельно и управляет сегментом из трёх светодиодов. Так в моделях с ws2811 возможно управление не каждым светодиодом, а каждым сегментом из 3 светодиодов сразу, что несколько ограничивает применение.

Принцип управления не слишком сложный:

  • Сигнал управления посылается на ленту небольшими «пачками» цифровых импульсов длиной в 24 бита. Контроллер принимает этот сигнал и выдаёт на светодиоды определенное напряжение для получения нужного цвета.
  • Напомню, что в случае с WS2812b контроллер встроен в светодиод и управляющий сигнал управляет каждым светодиодом отдельно, а в случае с WS2811 контроллер общий для сегмента из трёх светодиодов. То есть возможно задать параметры свечения для каждого отдельного сегмента.
  • При этом первый контроллер принимает первую пачку из 24-бит, вторая 24-битная команда принимается вторым чипом и так далее. Каждая последующая 24-битная команда посылается на каждый следующий контроллер, нумерация пачек при этом совпадает с нумерацией контроллеров.
  • Таким образом, управляют индивидуально каждым контроллером. Если один из блоков неисправен, например, второй, то горит только первый светодиод. Остальные светиться не будут, так как не будет проходить управляющий сигнал.

При создании уникальных эффектов используют не готовые контроллеры, а различные микроконтроллеры. К тому же в сети много проектов под управлением Arduino (микроконтроллеры семейства AVR). Схема подключения к ней элементарна, на примере с контроллерами WS2812b изображена ниже.

Но желательно подавать сигал управления через резистор номиналом в 200-400 Ом, для защиты пина Ардуино.

Устройство представляет программируемый микроконтроллер семейства AVR, с уже разведенной платой, питанием и схемой для программирования через USB. С помощью записи в него различных программ можно получить не ограниченное количество цветовых сочетаний и чередований. Что позволяет создать неограниченное количество вариантов для подсветки. Широкое распространение ограничивается относительно высокой стоимостью в отличие от обычных диодов.

Как рассчитать количество адресов для ленты DMX 512

DMX (RGB)

• 1 пиксель = 3 канала DMX (RGBW) • 1 пиксель = 4 канала DMX (RGBW)

Имея разную плотность светодиодов на ленте и разную длину, вы можете умножить все это вместе и получить различные результаты.

Например:

• (8PL30) 30 светодиодов RGB / м ленты x 5 метровой катушки = 150 пикселей (150 пикселей х 3) = 450 каналов • (8PL60) 60 светодиодов RGB / м ленты x 5 метровой бобины = 300 пикселей (300 пикселей х 3) = 900 каналов • (8PL144) 144 светодиода RGB / м ленты x 2 метра = 288 пикселей (288 пикселей x 3) = 864 канала • (8PX30) 30 светодиодов RGBW / м ленты 5 м = 150 пикселей (150 пикселей x 4) ) = 600 каналов • (8PX60) 60 светодиодов RGBW / м лента x 4-метровая катушка = 240 пикселей (240 пикселей x 4) = 960 каналов

Удобно запомнить:

• 170 пикселей RGB = 510 каналов DMX = 1 вселенная DMX • 128 пикселей RGBW = 512 каналов DMX = 1 вселенная DMX

STM Урок 119. WS2812B. Лента на умных светодиодах RGB. Часть 1

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

Таким светодиодом является WS2712B от компании WORLDSEMI.

Чтобы понять, что из себя представляет данный светодиод, посмотрим его предшественника — WS2811. Это была просто микросхема, к которой подключался RGB-светодиод. Делалось это, например, вот таким образом

Это светодиодная гирлянда, в каждом фонарике которой находится RGB-светодиод, подключенный к микросхеме WS2811, расположенной на небольшой плате.

Давайте посмотрим назначение выводов микросхемы WS2811

Кроме ножки питания и общего провода мы видим здесь контакты для подключения ножек RGB-светодиода раздельно для каждого цвета, а также ножку цифрового входа DIN и ножку цифрового выхода DO. Также есть ещё одна ножка SET, которая требуется для включения режима пониженной скорости.

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

Аналогичным образом устроен и наш светодиод, рассматриваемый в данном занятии, — WS2712B. Только в нём уже светящийся элемент сразу подсоединён к чипу. Наружу выведены ножки питания, общей шины, а также цифровой вход и выход

Вот назначение его ножек вместе с размерами

Ко мне в руки чудесным образом попала вот такая ленточка, выполненная на данных умных светодиодах (нажмите на картинку для увеличения изображения)

Подобных лент существует огромное множество. Они различаются по цвету, плотности светодиодов (количеству светодиодов на 1 метре ленты), а также по степени защиты. Данная лента чёрного цвета, плотность — 144 светодиода на метр, а защита — самая малая. Обычная бумажная лента с посаженными на неё и соединёнными светодиодами. Я брал именно такую в целях экспериментов и не планировал её использование в местах, не защищённых от атмосферных воздействий. К тому же за защиту надо платить и с более высокой степенью защиты ленты стоят дороже. Длина моей ленты всего 1 метр, поэтому, соответственно, и светодиодов на ней всего 144. Вот с этими 144 светодиодами мы и будем работать.

Также мы видим, что из обоих концов данной ленты выведены по 5 проводов

Назначение каждого провода.

Красный провод в колодке — питание, белый в колодке — общий, зелёный в колодке — сигнальный.

Красный отдельный — высокотоковое питание, чёрный — высокотоковый общий провод.

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

Вот так вот выглядят вблизи светодиоды на моей ленте

Кроме светодиодных лент на светодиодах WS2812B существуют также матрицы. Они бывают разной размерности — 8х8, 32х32 и т.д. Также можно приобрести такие светодиоды по отдельности. Это требуется обычно либо для сборки каких-то своих схем, либо для того, чтобы заменить светодиод, вышедший из строя. Определить такой светодиод не сложно, так как все исправные светодиоды, расположенные по ленте либо матрице до него, будут исправно работать, а данный светодиод светиться не будет и также не будут светиться светодиоды, расположенные после него.

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

А протокол у данного управляющего сигнала, оказывается не такой уж и сложный.

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

Как-то непривычно (не R+G+B), но ничего страшного, справимся.

Теперь посмотрим, как передаётся каждый бит. Под каждый бит отводится определённое время — 1,25 микросекунды.

Если мы передаём ноль, то сначала мы устанавливаем высокий уровень сигнала, держим его в таком состоянии 0,35 микросекунды (допускается отклонение 150 наносекунд или 0,15 микросекунды). По прошествии данного времени мы устанавливаем на ножке низкий уровень и держим его до передачи следующего бита 0,9 микросекунды (допускается такое же отклонение — 150 наносекунд)

Единица передаётся наоборот. Мы также устанавливаем высокий уровень, ждём 0,9 микросекунды (отклонение то же), затем опускаем уровень, ждём 0,35 микросекунды (отклонение такое же — 150 наносекунд)

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

И, так как время передачи одного бита у нас постоянное, то несложно посчитать скорость передачи данных. Она получится равной 800 килобит в секунду. Также несложно подсчитать, что для передачи 24 бит, необходимых и достаточных для информации, требуемой для одного светодиода, потребуется 30 микросекунд. Соответственно, для всех 144 светодиодов потребуется 4,32 милисекунд. Вполне неплохая скорость.

Теперь немного об электрических параметрах данных светодиодов.

Питается светодиод от 3,5 до 5,3 вольт.

Потребление тока при полном свечении светодиода белым светом (все 24 бита в единицах) мы также можем посчитать. При данном цвете заявлена потребляющая мощность — 0,3 ватта. Поэтому, если мы будем питать ленту напряжением 5 вольт, то это будет 60 милиампер. А если мы зажжём все наши 144 светодиода полностью белым цветом на всю яркость (единицы во всех битах во всех светодиодах), то мы получим потребление тока всей нашей лентой целых 8,64 ампера. Чтобы нам не получить такой огромный ток, то мы не будем наши светодиоды никогда зажигать таким полным светом, а будем зажигать их определёнными цветами, и то не более половины их свечения, поэтому мы вполне обойдёмся 3-амперным DC-DC преобразователем который мы подключим к силовым проводам ленты

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

То есть, мы будем стараться, чтобы при нашем тестировании светодиоды горели максимум в 1/6 часть максимального их свечения. Например, чтобы светодиод засветился зелёным цветом, то мы интенсивность RGB зададим как 0,128,0. А если нам надо включить оранжевый цвет, а это одновременно и красный и жёлтый, то мы уже включим 64,0,64. То есть суммарное число у нас не будет превышать 128, а это и будет 1/6 часть свечения, поэтому суммарный ток потребления ленты у нас не превысит 1,5 ампера. Поэтому можно ничего не бояться. И даже при таком свечении при такой плотности светодиодов на ленте она будет светиться очень ярко.

Микроконтроллер мы будем использовать народный — STM32F103C8T6, расположенный на очень дешёвой отладочной плате. Программатор мы будем использовать тоже дешёвый, поэтому материально мы насчёт контроллера ленты почти не пострадаем. Управляться будет лента от одной ножки при помощи PWM, включенном в настройках определённого таймера. Также будет использован DMA для ускорения процесса. Заодно и поучимся пользоваться DMA в PWM. Вот так выглядит наша плата, подключенная к ленте (нажмите на картинку для увеличения изображения)

Отладочная плата будет питаться от программатора ST-Link, поэтому к ленточке мы от неё ведём только общий и сигнальный провод. От какой именно ножки мы его ведём, мы увидим, когда будем настраивать таймер.

В следующей части нашего урока мы создадим проект, изучим работу таймера в режиме PWM с использованием DMA и попробуем зажечь определённые светодиоды различными цветами.

Предыдущий урок Программирование МК STM32 Следующая часть

Отладочную плату STM32F103C8T6 можно приобрести здесь STM32F103C8T6

Программатор недорогой можно купить здесь ST-Link V2

Ленты светодиодные WS2812B разные можно приобрести здесь WS2812B

Логический анализатор 16 каналов можно приобрести здесь

Смотреть ВИДЕОУРОК (нажмите на картинку)

Post Views: 14 246

Общие сведения:

Trema-модуль NeoPixel — это 4 RGB-светодиода со встроенными драйверами в одном корпусе, установленные на одном модуле. Эти модули можно соединять в ленты NeoPixel, используя всего одну линию данных, а их «адресность» позволяет управлять цветом каждого светодиода на одной линии.

В этой статье речь пойдёт о модулях NeoPixel, построенных на адресных светодиодах WS2812B.

Видео:

Спецификация:

  • Входное напряжение питания модуля: 5 В
  • Ток потребляемый драйвером каждого светодиода: < 1 мкА
  • Ток потребляемый каждым светодиодом: < 45 мА (по 15 мА на полную яркость свечения каждого цвета светодиода)
  • Уровень логической «1» на входе IN: > 0,7 Vcc
  • Уровень логического «0» на входе IN: < 0,3 Vcc
  • Входная ёмкость: 15 пФ
  • Задержка передачи данных: < 300 нс
  • Время передачи одного бита данных: 1,25 мкс
  • Длительность импульса для передачи бита «1»: 900 нс (±150 нс)
  • Длительность импульса для передачи бита «0»: 350 нс (±150 нс)
  • Время простоя линии данных перед применением новых цветов > 50 мкс
  • Длина световой волны: 620 … 630 нм (для красного цвета)
  • Длина световой волны: 515 … 530 нм (для зелёного цвета)
  • Длина световой волны: 465 … 470 нм (для синего цвета)
  • Рабочая температура: -25 … 80 °C
  • Температура хранения: -55 … 150 °C
  • Габариты: 30х30х30 мм (с учётом колодки выводов)
  • Вес: 9 г

Все модули линейки «Trema» выполнены в одном формате

Подключение:

Модули NeoPixel подключаются входом (IN) к любому выводу Arduino.

Модуль удобно подключать 2 способами, в зависимости от ситуации:

Способ — 1 :  Используя проводной шлейф и Piranha UNO

Используя провода «Папа — Мама», подключаем  напрямую к контроллеру Piranha UNO.

Способ — 2 :  Используя проводной шлейф и Shield

Используя 3-х проводной шлейф, к  Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.

При подключении нескольких модулей их можно соединить друг с другом (выход OUT каждого модуля со входом IN следующего), а вход IN первого модуля к любому выводу Arduino. Или подключить вход IN каждого модуля к своему выводу Arduino.

Подключение модуля NeoPixel к Arduino

Нумерация (адрес) светодиодов является сквозной и начинается от ближайшего к выводу Arduino. Например, если Вы подключили к одному выводу Arduino два модуля из 4 светодиодов, то первый светодиод первого модуля будет иметь адрес 0, а первый светодиод второго модуля будет иметь адрес 4.

Питание:

Входное напряжение 5 В постоянного тока, подаётся на выводы Vcc и GND модуля NeoPixel.

Подробнее о модуле:

Адресные светодиоды WS2812B это три светодиода RGB (Red — красный, Green — зелёный и Blue — синий) и драйвер (микросхема) для управления этими светодиодами, в одном SMD (Surface Mounted Device — прибор монтируемый поверхностно) корпусе.

Корпус каждого светодиода имеет 4 вывода: два вывода данных (IN — вход и OUT — выход) и два вывода питания (Vcc и GND). В модулях NeoPixel выходы (OUT) предыдущих светодиодов соединены со входами (IN) следующих создавая цепочку светодиодов. Но и сами модули NeoPixel также имеют 4 вывода: два вывода данных (IN, OUT) и два вывода питания (Vcc, GND), и модули также можно соединять в цепочку. Таким образом к одному выводу Arduino можно подключить «неограниченное» количество модулей NeoPixel.

Цвет каждого адресного светодиода задаётся 3 байтами (каждый байт указывает яркость одного цвета: 1-G, 2-R, 3-B). После того как первый адресный светодиод получил на вход (IN) первые 3 байта, он сохраняет их в своей ОЗУ, а остальные байты пропускает со входа (IN) на выход (OUT). Второй адресный светодиод сохранит в своей ОЗУ следующие 3 байта а остальные пропустит и т.д. Если в линию данных перестали поступать биты (на линии установлен уровень логического «0» дольше 50 мкс), светодиоды установят свои цвета. Каждый бит данных имеет длительность 1,25 мкс и состоит из импульса и паузы. Бит «0» отличается от бита «1» длительностью импульса: • бит «0» — импульс 350 нс, пауза 900 нс; • бит «1» — импульс 900 нс, пауза 350 нс.

Для работы с модулем предлагаем воспользоваться библиотекой iarduino_NeoPixel, которая позволяет работать с модулями NeoPixel если суммарное количество адресных светодиодов WS2812B не превышает 65534 шт.

Подробнее про установку библиотеки читайте в нашей инструкции..

Примеры:

Установка цвета для каждого из 4 светодиодов модуля NeoPixel:

#include <iarduino_NeoPixel.h>                      //  Подключаем библиотеку iarduino_NeoPixel для работы со светодиодами NeoPixel
iarduino_NeoPixel led(7,4);                         //  Объявляем объект LED указывая (№ вывода Arduino к которому подключён модуль NeoPixel, количество используемых светодиодов)
void setup(){
    led.begin();                                    //  Инициируем работу с модулем NeoPixel
}
void loop(){
    led.setColor(0, 255,0,0);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
    led.setColor(1, 0,255,0);                       //  Устанавливаем зелёный цвет для 2 светодиода (2,R,G,B)
    led.setColor(2, 0,0,255);                       //  Устанавливаем синий   цвет для 2 светодиода (2,R,G,B)
    led.setColor(3, 0xFFFF00);                      //  Устанавливаем жёлтый  цвет для 3 светодиода (3,RGB)
    led.write();                                    //  Записываем
    delay(2000);                                    //  Ждём 2 секунды, чтоб увидеть четыре разных цвета
    led.setColor(NeoPixelAll, 255,255,255);         //  Устанавливаем белый цвет для всех светодиодов (все,RGB)
    led.write();                                    //  Записываем
    delay(2000);                                    //  Ждём 2 секунды, чтоб увидеть белый цвет
}

Перелив всех цветов радуги на модуле NeoPixel из 4 светодиодов:

#include <iarduino_NeoPixel.h>                       //  Подключаем библиотеку iarduino_NeoPixel для работы со светодиодами NeoPixel
iarduino_NeoPixel led(7,4);                          //  Объявляем объект LED указывая (№ вывода Arduino к которому подключён модуль NeoPixel, количество используемых светодиодов)
      uint8_t j;                                     //  Объявляем переменную для хранения значения сдвига спектра цветов для всех светодиодов (от 0 до 255)
      uint8_t k;                                     //  Объявляем переменную для хранения положения сдвига спектра цвета для каждого светодиода на спектре j (зависит от количества светодиодов)
      uint8_t r, g, b;                               //  Объявляем переменную для хранения цветов RGB для каждого светодиода
const uint8_t z=5;                                   //  Определяем константу указывающую задержку в мс (чем выше значение, тем медленнее перелив цветов) 
void setup(){
    Serial.begin(9600);                              //  Инициируем передачу данных в монитор последовательного порта
    if(led.begin()) {Serial.println("Ok");}          //  Инициируем работу со светодиодами и выводим сообщение об успешной инициализации
    else            {Serial.println("Err");}         //  Если инициализация невозможна (не хватает памяти для хранения цветов всех светодиодов), то выводим сообщение об ошибке
}
void loop(){
    j++;                                             //  Смещаем спектр цветов для всех светодиодов
    for(uint16_t i=0; i<led.count(); i++){           //  Проходим по всем светодиодам
        k=((uint16_t)(i*256/led.count())+j);         //  Определяем положение очередного светодиода на смещённом спектре цветов
        if(k<85) {        b=0; r=k*3; g=255-r;}else  //  Перелив от зелёного к красному, через жёлтый
        if(k<170){k-=85;  g=0; b=k*3; r=255-b;}else  //  Перелив от красного к синему  , через фиолетовый
                 {k-=170; r=0; g=k*3; b=255-g;}      //  Перелив от синего   к зелёному, через голубой
        led.setColor(i, r,g,b);                      //  Устанавливаем выбранный цвет для очередного светодиода
    }   led.write();                                 //  Записываем цвета всех светодиодов
    delay(z);                                        //  Устанавливаем задержку
}

Данный пример может работать и с модулями на большее количество светодиодов, тогда Вам нужно указать их количество во второй строке скетча. Скорость перелива зависит от значения константы z, чем больше её значение, тем медленнее перелив.

Описание основных функций библиотеки:

Подключение библиотеки:

#include <iarduino_NeoPixel.h>                              //  Подключаем библиотеку iarduino_NeoPixel для работы с модулями NeoPixel
iarduino_NeoPixel led( №_ВЫВОДА , КОЛИЧЕСТВО_СВЕТОДИОДОВ ); //  Объявляем объект led для работы с модулями подключёнными к указанному выводу

Функция begin();

  • Назначение: Инициализация работы с модулями NeoPixel.
  • Синтаксис: begin();
  • Параметры: Нет.
  • Возвращаемые значения: bool, 1 (успешная инициализация) или 0 (отказ инициализации, не хватает памяти).
  • Примечание: Вызывается 1 раз в коде setup.
  • Пример:
if(led.begin()) {Serial.println("Ok" );} //  Инициируем работу с модулями NeoPixel и выводим сообщение об успешной инициализации
else            {Serial.println("Err");} //  Не хватает памяти для хранения цветов всех светодиодов, выводим сообщение об ошибке

Функция setColor();

  • Назначение: Указание цвета для адресного светодиода.
  • Синтаксис: setColor( №_СВЕТОДИОДА , ЦВЕТ [ , ЯРКОСТЬ ] );
  • Параметры:
    • №_СВЕТОДИОДА — число от 0 до 65534, или NeoPixelAll если требуется установить цвет сразу всем светодиодам.
    • ЦВЕТ — можно указать одним числом (как в графических редакторах), например: 0xFF00FF — фиолетовый. А можно указать тремя параметрами (числами) через запятую, R, G, B, например: 0xFF, 0xFF, 0x00 — жёлтый.
    • ЯРКОСТЬ — необязательный параметр от 0 до 255. Если указать 127 — то указанный цвет не претерпит изменений. Чем ближе число к 0, тем темнее будет указанный цвет, а чем ближе число к 255, тем светлее будет указанный цвет (вплоть до белого).
  • Возвращаемые значения: Нет.
  • Примечание: Функция устанавливает цвет в массиве цветов, но их запись в модули осуществляется функцией write().
  • Пример:
led.setColor(0, 0xFF00FF);              // Установить фиолетовый цвет для 0 светодиода
led.setColor(1, 0xFF, 0x00, 0xFF);      // Установить фиолетовый цвет для 1 светодиода
led.setColor(2, 0xFF, 0x00, 0xFF, 200); // Установить фиолетовый цвет для 2 светодиода, но сделать его более светлым
led.setColor(NeoPixelAll, 0, 255, 0);   // Установить зелёный цвет для всех светодиодов

Функция write();

  • Назначение: Запись (применение) всех установленных цветов в модули NeoPixel.
  • Синтаксис: write();
  • Параметры: Нет.
  • Возвращаемые значения: Нет.
  • Примечание: Если для светодиода новый цвет не установлен, то он сохранит старый цвет.
  • Пример:
led.write(); // Запись всех установленных цветов в модули NeoPixel

Функция count();

  • Назначение: Получение количества используемых светодиодов.
  • Синтаксис: count();
  • Параметры: Нет.
  • Возвращаемые значения: Количество светодиодов, от 0 до 65534.
  • Примечание: Функция возвращает число светодиодов, которое было указано при объявлении объекта библиотеки. Эту функцию можно использовать для создания циклов. Если Вы пожелаете изменить количество светодиодов, то Вам будет достаточно сделать это в строке объявления объекта, а не править весь скетч.
  • Пример:
for(uint16_t i=0; i<led.count(); i++){ // Цикл для прохода по всем светодиодам
...
}

Необязательная функция getPointer();

  • Назначение: Получение указателя на массив цветов светодиодов.
  • Синтаксис: getPointer();
  • Параметры: Нет.
  • Возвращаемые значения: uint8_t*, Указатель на массив цветов светодиодов.
  • Примечание: Это необязательная функция которая возвращает указатель на массив цветов светодиодов. Используя этот массив Вы сами можете формировать цвета в обход функции setColor(). А так же можете считывать ранее установленные цвета.
    • байты 0, 1, 2 массива, это цвета 0 светодиода (G-зелёный, R-красный, B-синий).
    • байты 3, 4, 5 массива, это цвета 1 светодиода (G-зелёный, R-красный, B-синий) и т.д.
    • размер массива зависит от количества светодиодов указанных при объявлении объекта библиотеки.
  • Пример:
uint8_t *ptrLED = led.getPointer();          // Получаем указатель на массив цветов светодиодов
ptrLED[0]=255; ptrLED[1]=0;   ptrLED[2]=0;   // Устанавливаем зелёный цвет для 0 светодиода
ptrLED[3]=0;   ptrLED[4]=255; ptrLED[5]=0;   // Устанавливаем красный цвет для 1 светодиода
ptrLED[6]=0;   ptrLED[7]=0;   ptrLED[8]=255; // Устанавливаем синий   цвет для 2 светодиода
led.write();                                 // Записываем установленные цвета в модули.

Применение:

  • Декоративное освещение;

Ссылки:

  • NeoPixel (4 адресных светодиода) (Trema-модуль).
  • Библиотека iarduino_NeoPixel, позволяющая работать с адресными светодиодами и модулями NeoPixel.
  • Wiki — Установка библиотек в Arduino IDE

Инструкция по подключению Arduino к адресной светодиодной ленте

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

Для начала необходимо разобраться с потреблением светодиодной ленты. Дело в том, что каждый светодиод в пикселе потребляет до 20 мА, в зависимости от яркости его свечения. Напомню, что яркость свечения задаем мы сами из программы. Итого получается, что каждый пиксель может потреблять до 60 мА. Это довольно много, если учитывать, что мы можем использовать несколько метров ленты. Но в рамках данной статьи я буду экспериментировать с отрезком на 5 пикселей. И по этой причине запитаю адресную ленту прямо от Arduino Nano . Хотя я бы сам не рекомендовал так делать, лучше всего ставить отдельный блок питания и подключить ленту к нему, а с МК реализовать только управление.

Как мы помним из прошлых статей, управление будет осуществлено любым из цифровых выходов с D 2 по D 13. В данном случае я решил использовать D 5 (просто для примера, Вы можете использовать любой). Итак, подключаем ленту к Arduino Nano . GND к GND , +5 V к +5 V и D — input к D 5 на плате Nano . Я не стал ничего придумывать и просто припаял. Визуально выглядит адресная лента подключенная к Ардуино:

А вот схема подключения адресной ленты к Arduino:

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

Следующим действием предлагаю подключить плату Адруино к компьютеру и уже заняться написанием нашей первой программы под адресную светодиодную ленту.

Пишем программу для управления адресной светодиодной лентой через Arduino. Установка библиотеки

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

Для начала давайте откроем IDE Arduino . Это программа, которую мы установили в одной из прошлых статей.

Получилось? Отлично! Далее нам необходимо установить библиотеку. Это нужно, чтобы управлять адресной лентой. Дело в том, что лента принимает определенный набор команд, но нам, как молодым разработчикам, пока не интересно, что это за команды и как они устроены. Мы просто хотим управлять цветами. И библиотека управления адресной лентой поможет нам сделать это максимально просто и быстро. Мы будем сообщать программе, где какой цвет хотим видеть, а программа, с помощью библиотеки, будет формировать наборы команд, понятные для микросхем адресной ленты. На самом деле все достаточно просто и очевидно, нужно только привыкнуть. Поэтому нажимаем «Скетч» -> «Подключить библиотеку» — > «Управлять библиотеками».

После этого появится окно «Менеджер библиотек». Кстати, данному окну нужно немного времени чтобы прогрузиться, поэтому пару секунд оно будет не активным, нужно подождать.

На данный момент мы будем использовать библиотеку « Adafruit NeoPixel ». Проще всего будет воспользоваться поиском. Как видно, в списке есть похожие название, нужно быть внимательным и не перепутать.

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

Пишем программу для управления лентой через Ардуино

И теперь мы приступаем к следующему этапу — написанию программы. Начнем с чего-то простого и потом будем постепенно совершенствовать. Наша первая программа будет выглядеть следующим образом:

#define LED_COUNT 5

#define LED_PIN 5

Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

strip.begin(); //Инициализируем ленту.

strip.setPixelColor(i, strip.Color(255, 0, 0)); // Красный цвет.

strip.setPixelColor(i, strip.Color(0, 0, 0)); // null

На первый взгляд это может показаться немного не понятным. Сейчас мы пройдемся по коду и используемые нами команды приобретут смысл.

Начнем с первой строчки. Тут мы объявляем библиотеку. Дело в том, что перед этим мы только ее скачали, а чтобы использовать в программе, необходимо ее объявить. Для этого используется директива # include <>. Где в скобках указано имя файла, который будет использоваться при компиляции, как часть кода. В нашем случае это название библиотеки. Кстати да, библиотека – это файл с программой.

Вторая и третья строчки, — тут мы задаем кол-во пикселей в нашей ленте и номер вывода, с которого будет организовано управление.

Обратите внимание: речь идет именно о количестве пикселей, то есть чипов в ленте, а не о количестве светодиодов. В некоторых адресных лентах, например с чипом ws2811 и ws2818 управление происходит кратно 3 диодам, поэтому лента с 60 диодами на метр будет управляться всего 20 пикселями. Если у вас адресная лента ws2812b, ws2813 или ws2815, то управление происходит кратно одному диоду, то есть количество пикселей = количество светодиодов.

Идем далее. Директива # define определяет идентификатор и последовательность символов, которой будет замещаться данный идентификатор при его обнаружении в коде. Давайте разберем вторую строку более подробно «#define LED_COUNT 5». «LED_COUNT» — это идентификатор, которому соответствует символ «5». Это позволит нам в теле программы (везде, где нужно) написать «5», писать «LED_COUNT». Возможно, это звучит немного непотяно, но подумайте вот о чем: нам пришло в голову изменить кол-во пикселей в ленте и тогда нам придется во всем коде менять их кол-во. Но благодаря # define , мы имеем возможность поменять всего лишь последовательность символов в идентификаторе. Понятное дело, в нашей программе возможно заменить все значения, потому что тут всего 2-а десятка строк. Но бывают и очень большие программы, где действия по замене потребуют огромного количества времени и терпения.

В пятой строке мы объявляем экземпляр класса Adafruit_NeoPixel и передаем его конструктору значения о длине ленты, выводе управления и типу адресной ленты. В данной статье мы не будем разбирать само понятие классов, поэтому предлагаю просто принять данную строчку как должное, где в скобках мы передаем необходимые параметры. Скажу только одно: тут мы создали объект под именем « strip ». И этот объект полностью отвечает за работу подключенной ленты.

В теле функции setup () мы сообщаем компилятору, что данный объект « strip » у нас будет использован. По сути, эту команду инициализации пока тоже нужно принять как необходимый минимум.

А дальше у нас уже идет самое интересное — основная часть программы, в которой и происходит волшебство, она находится в теле функции loop (). Но перед этим необходимо ввести новое понятие – цикл.

Цикл — это определенный блок программы, выполняющийся по кругу. Даже сама функция loop () является циклом. Циклы бывают конечными и бесконечными и у циклов так же, как и у функций, есть тело, где написаны повторяющиеся команды. В данной программе мы использовали цикл – for . Если данный цикл описан правильно, то он, как правило, конечен. Цикл for имеет 3 параметра «for(int i = 0; i Первый параметр задает начальное значение для переменной i . Кстати, в данном случае переменная i инициализируется при начале работы цикла и забывается при окончании работы цикла. Второй параметр – это условие, при котором цикл продолжает выполняться. В нашем случае цикл выполняется до тех пор, пока i меньше 5. И третий параметр прибавляет единицу к i , при каждом повторе цикла. Сейчас ограничимся этим коротким объяснением. В дальнейшем у меня выйдет короткая статья, посвящённая программированию.

Итак, вернемся к программе. С 13-ой по 17-ую строку у нас расположен цикл, цикл на 5 повторений, где i меняется от 0 до 4 включительно.

В 14-ой строке мы вызываем метод setPixel , объекта strip и передаем ему два параметра. Где i это номер пикселя на адресной ленте, а « s trip.Color(255, 0, 0)» его цвет. Про то, как задается цвет по системе RGB мы уже говорили ранее. Скажу только очевидную вещь, «255, 0, 0» — это максимально красный цвет.

Получается, когда мы объявили объект strip и передали ему, что в нашей адресной ленте будет 5 пикселей, то в памяти было зарезервировано 5 ячеек, предназначенные для хранения цвета. И теперь в данном цикле мы их заполняем.

В 15-ой строке расположена команда, которая выводит на ленту цвета из памяти в МК (микроконтроллер). То есть последовательность такая: сначала пишем цвета в память, потом разом выводим их на адресную ленту. Изначально пока мы еще не успели заполнить память, там хранятся нулевые цвета «0, 0, 0».

И в 16-ой строке у нас стоит задержка в 300 млс.

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

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

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

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

Источник

Arduino и адресная светодиодная лента

Описание

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

В наборе GyverKIT есть 1 метр адресной светодиодной ленты WS2812b. При желании ленту можно докупить в том же магазине, где продаётся набор – Giant4.

Подключение

  • GND ленты соединяется с GND микроконтроллера, так как все сигналы ходят относительно “земли”
  • У любого отрезка ленты есть вход, а есть выход: у входа средний пин называется DI, а у выхода – DO. К Arduino подключается именно вход ленты, то есть пин DI
  • DI подключается на любой цифровой пин. Если лента питается отдельно от Arduino – DI нужно подключать через резистор 100-500 Ом, чтобы избежать питания ленты через пин, что приведёт к выходу из строя пина Arduino или первого светодиода в ленте. Лучше ставить резистор в любом случае, чтобы исключить такую возможность
  • 5V ленты подключается к питанию. Питание может быть общим с Arduino
  • Лента потребляет большой ток, поэтому питать её от Arduino, подключенной к USB – нельзя. В наборе GyverKIT есть сетевой адаптер на 5V, ленту нужно питать от него

В рассмотренных выше схемах Arduino питается от USB. Для работы от адаптера можно подключить питание с него на пин 5V платы:

При наличии на ленте штекера можно подключать управление и питание следующим образом:

Примечание:

  • Ленту можно питать напрямую от Arduino (при подключении к USB), если ток потребления не будет превышать 500 мА. В библиотеке FastLED можно настроить программное ограничение тока: FastLED.setMaxPowerInVoltsAndMilliamps(5, 500); – 5V 500mA
  • Ленту можно подключать без резистора, если исключена возможность наличия сигнала на ленту без подключенного питания, т.е. когда лента питается от одного источника с микроконтроллером

При работе с Wemos есть особенность: у него логический уровень 3.3V, чего не всегда хватает для передачи сигнала на ленту. При возникновении “артефактов” в эффектах можно подключить питание по следующей схеме: питать Wemos через диод (есть в наборе GyverKIT):

Библиотеки

Самой функциональной и известной библиотекой является FastLED, можно установить через диспетчер библиотек по названию FastLED. В библиотеке ОЧЕНЬ много возможностей, см. официальную вики-документацию, а также полный список модулей, классов и функций.

Как работать с FastLED

Коротко рассмотрим как работать с библиотекой FastLED и самые основные инструменты.

Логика работы с адресной лентой сводится к следующему: лента представляется в виде одномерного массива, каждый элемент – светодиод, точнее его цвет. Цвет светодиода кодируется тремя байтами, то есть 256 значений на каждый канал: красный, зелёный, синий. В программе можно производить различные манипуляции с этим массивом, то есть задавать цвета светодиодам при помощи различных инструментов библиотеки. Как только построение “кадра” закончено – массив можно отправить на ленту и светодиоды включатся соответственно заданным цветам.

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

Создаём массив цветов, он имеет тип данных CRGB . Размер – сколько светодиодов в ленте, то есть наша константа. Пусть массив будет глобальным, чтобы доступ к нему был у всей программы:

В блоке setup нам нужно передать в библиотеку информацию о подключенной ленте, а также подключить созданный выше массив. Чтобы программа знала, откуда брать информацию о цветах. По порядку указывается тип ленты, пин, порядок цветов. В круглых скобках – имя нашего массива, а также его размер – длину ленты:

Отлично! Всё настроено и готово к работе.

Общие функции

Помимо задания цветов в массиве, существуют следующие управляющие функции:

  • FastLED.show() – выводит массив на ленту, т.е. обновляет её текущими цветами
  • FastLED.clear() – очищает ленту, буквально обнуляет все цвета в массиве, задаёт “чёрный” цвет. Для применения нужно вызвать show()
  • FastLED.setBrightness(0-255) – устанавливает яркость всей ленты. Не меняет значения в массиве светодиодов, просто “приглушает” итоговую отображаемую яркость. Для применения нужно вызвать show()
  • FastLED.setMaxPowerInVoltsAndMilliamps(вольты, миллиамперы) – включает автоматическое ограничение яркости по настроенному току и напряжению. Полезно для длинных лент и/или слабых блоков питания
  • FastLED.showColor(CRGB цвет) – залить всю ленту указанным цветом

Тип данных CRGB

Библиотека организована так, что переменной типа CRGB можно задать значение несколькими способами. Рассмотрим задание цвета первому светодиоду в нашей ленте, то есть элемент массива под номером ноль: leds[0]

Подробнее про цветовые модели RGB и HSV можно почитать вот здесь.

Примеры

Итак, с базовыми понятиями разобрались, переходим к практике. Для начала зальём всю ленту статичной радугой. Для этого покрасим светодиоды в цикле, задав цвет от 0 до 255 от первого до последнего светодиода в ленте. Конструкция i * 255 / LED_NUM позволяет получить значения от 0 до 255 при изменении i от 0 до LED_NUM:

Можно сделать подвижную радугу, это будет уже полноценная анимация. Для этого ленту нужно постоянно обновлять новыми цветами, например 30 раз в секунду. Чтобы плавно менять цвет – добавим к нему счётчик, который будет меняться от 0 до 255 и так по кругу.

Можно сделать один бегающий светодиод: каждый раз очищать ленту и красить светодиод под номером, который задаётся счётчиком. Изменение счётчика закольцевать от 0 до количества светодиодов:

И таких эффектов можно придумать очень много! Займёмся этим уже в блоке проектов

Источник

Содержание

  1. Что такое адресная светодиодная лента
  2. Устройство адресной ленты
  3. Энергопотребление
  4. Технические характеристики
  5. Плотность размещения светодиодов на ленте
  6. Какие бывают адресные светодиодные ленты
  7. Отличие обычной RGB ленты от адресной светодиодной ленты
  8. Отличие лент ws2812, ws2812b, ws2811
  9. Достоинства и недостатки адресных светодиодных лент
  10. Сфера применения
  11. Соединение элементов
  12. Как подключается адресная светодиодная лента
  13. Ардуино – принцип действия
  14. Синтаксис команд
  15. Способы управления светодиодами через Ардуино
  16. Выбор RGB ленты
  17. Подключение светодиодной ленты к Ардуино
  18. Через реле
  19. С помощью биполярного транзистора
  20. С помощью полевого транзистора
  21. С помощью плат расширения
  22. Код Arduino и последовательная связь
  23. Программная часть
  24. Виды транзисторных ключей
  25. Модули управления Ардуино
  26. Схема контроллера RGB подсветки на ардуино

Что такое адресная светодиодная лента

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

Адресная светодиодная лента

Как и любая светодиодная лента, адресная светодиодная лента требует стабилизированного источника питания с высоким током отдачи.

Устройство адресной ленты

Адресные светодиоды стали основой для создания таких осветительных приборов. Они содержат сам полупроводниковый световой элемент и единственный драйвер ШИМ. В зависимости от типа адресуемого элемента светодиод RGB может быть размещен внутри общего корпуса или удален и подключен к выводам драйвера. В качестве излучателя света могут использоваться отдельные светодиоды или группы RGB. Напряжение питания тоже может быть разным. Сравнительные характеристики распространенных микросхем, используемых для управления цветными светодиодами, приведены в таблице.

Драйвер ШИМ Электропитание U, В Подключение светодиодов Примечание Потребление энергии
WS2811 12-24 Внешний Встроенный стабилизатор напряжения 12 В. Быстрый и медленный режим В зависимости от используемого светодиода
WS2812B 5 Интегрированный Форм-фактор LED — 5050 До 60 мА на ячейку (при максимальной яркости)
WS2813 5 Интегрированный Форм-фактор LED — 5050 До 60 мА на ячейку (при максимальной яркости)
WS2815 12 Интегрированный Форм-фактор LED — 5050 До 60 мА на ячейку (при максимальной яркости)
WS2818 24 декабря Внешний Управляющее входное напряжение — до 9 В.

Дополнительный вход управления

В зависимости от используемого светодиода

Ток потребления одного метра с адресной ленты довольно велик, так как мощность расходуется не только на свечение pn переходов, но и на коммутационные потери драйверов ШИМ.

Энергопотребление

В каждом участке ленты последовательно подключено 3 светодиода, поэтому блок питания на 5В работать не будет. Напряжение питания должно быть 12 В, но может подаваться напряжение и 9 В, но светодиоды не будут гореть так ярко.

Сегментная светодиодная линия потребляет около 20 мА при питании от 12 В. Если вы включите белый цвет (т.е красный 100%, зеленый 100% и синий 100%), потребляемая мощность секции составит около 60 мА.

Теперь вы можете легко рассчитать энергопотребление всей ленты. Таким образом, длина ленты составляет 1 метр. Лента состоит из 10 отрезков (по 10 см). Потребление белой ленты будет 60мА * 10 = 600мА или 0,6А. Используя эффект затухания ШИМ между цветами, можно вдвое снизить энергопотребление.

Технические характеристики

Адресная светодиодная лента состоит из светодиодов RGB в корпусе SMD 5050 и микрочипа драйвера ШИМ. В настоящее время наиболее популярны адресуемые светодиодные ленты на микросхемах WS2811 и WS2812B. Модификация WS2811 представляет собой интегральную схему (ИС) в корпусе DIP-8 (9,2×6,4 мм) или SOP-8 (5,1×4,0 мм). Этот трехканальный драйвер имеет следующую конфигурацию контактов:
распиновка

  • 1 — выход с ШИМ-регулированием (красный);
  • 2 — выход с ШИМ-регулированием (зеленый);
  • 3 — выход с ШИМ-регулированием (синий);
  • 4 — общий;
  • 5 — вывод передачи данных;
  • 6 — вход передачи данных;
  • 7 — выбор режима работы;
  • 8 — питание + 5В.

В адресной полосе, использующей микросхему WS2811 и источник питания на 5 В, микросхема драйвера расположена в непосредственной близости от каждого светодиода SMD 5050 RGB, рядом с которыми также есть токоограничивающие резисторы и конденсатор, защищающий от помех. Но на данный момент такие модели морально устарели и встречаются крайне редко. Сегодня адресные светодиодные ленты на базе микросхем WS2811 продаются только с питанием +12 В. В этом случае микросхема WS2811 управляет не одним светодиодом, а группой из 3 штук.
LED-WS2811
По мере роста популярности микросхемы WS2811 ее место заняла более совершенная модель WS2812B. Этот тип ШИМ-драйвера намного компактнее и располагается непосредственно в корпусе светодиода SMD 5050. Если присмотреться, можно увидеть миниатюрный черный прямоугольник с позолоченными проводниками, выходящими из-под прозрачного люминофора.
LED-WS2812B
Эта унификация позволила значительно упростить сборку адресных светодиодных лент и модулей, а сам WS2812B имеет всего 4 контакта:

  • 1 — блок питания (+ 3,5… + 5,3 В);
  • 2 — выход передачи данных;
  • 3 — общий;
  • 4 — вход передачи данных.

Микросхема драйвера потребляет не более 1 мкА, а максимальный ток адресуемого светодиода составляет 60 мА. Диапазон рабочих температур: от -25 до + 80 ° C.

При выборе адресной светодиодной ленты важным критерием является степень защиты от влаги и пыли. Для использования вне помещений подходят только модели с IP65 и IP67.

Плотность размещения светодиодов на ленте

Яркость светодиодной ленты зависит от типа установленных светодиодов и их количества. Единицей измерения считается количество установленных светодиодов на метр длины ленты. Больше светодиодов — больше светового потока. Количество светодиодов на метр длины ленты варьируется от 30 до 120 штук.

Но следует учитывать, что чем больше светодиодов на метр длины светодиодной ленты, тем мощнее будет блок питания. К выбору этого параметра нужно подходить с позиции «необходимого и достаточного».

Какие бывают адресные светодиодные ленты

Микросхемы WS2811 и WS2812B могут использоваться для управления светодиодами адресных светодиодных лент. Микросхема WS2811 производится в корпусе DIP-8 или SOP-8 и крепится непосредственно к светодиодной ленте. Если светодиодная лента рассчитана на напряжение 5В, то такая интегральная схема устанавливается рядом с каждым светодиодом RGB. При использовании блока питания 12 В в такую ​​микросхему устанавливается один из трех светодиодов.

Адресная светодиодная лента с микросхемой WS2811 и WS2812B
Светодиод RGB с микросхемой WS2812B

Новый чип WS2812B настолько мал, что помещается непосредственно в корпусе светодиода RGB. Такие светодиоды на ленте расположены гораздо плотнее, а для питания используется источник 5 В.

Адресная светодиодная лента с микросхемой WS2813

В адресных (пиксельных) светодиодных лентах светодиоды подключены параллельно, при питании от 5В, но данные от драйвера к драйверу передаются последовательно. В этом есть серьезный недостаток: при выходе из строя одного из ШИМ-регуляторов все светодиоды, следующие за ним, перестанут работать. Для решения этой проблемы была выпущена следующая серия микросхем WS2813, которая позволяет использовать дублирующую четвертую дорожку для передачи данных. С микросхемами WS2813 все рабочие светодиоды будут работать, даже если некоторые в цепи выйдут из строя.

Отличие обычной RGB ленты от адресной светодиодной ленты

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

Разные цвета светодиодов в одной пиксельной светодиодной ленте

Чаще всего управляемые светодиоды RGB в адресуемой светодиодной ленте подключаются к источнику питания 5 В, и в этом случае на такой адресной светодиодной ленте все светодиоды подключаются параллельно. В последних современных версиях таких лент стали использовать последовательное соединение трех светодиодов на секцию, что дало возможность подключать их к источнику питания 12 В.

В отличие от традиционных цветных светодиодных лент RGB, адресуемые светодиодные ленты не будут работать без команд внешнего процессора управления. Даже если они подключены к источнику питания, ни один из светодиодов не загорится, пока не будет получена соответствующая команда включения питания.

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

Отличие лент ws2812, ws2812b, ws2811

Наиболее распространенные модели на кристалле имеют маркировку WS2812 или WS2812b. С внешними — WS2811.

разница между лентами WS2812 и WS2811

Чем ws2812 отличается от ws2812b? Первый имеет 6 контактов (ПИН) для управления, а второй, на букву «б» — всего четыре.

разница между микросхемой ws2812b и ws2812

В 2812 питание светодиода и микросхемы раздельное. В 2812b питание встроенного драйвера и светодиода переведено на PIN (VDD).

ws2812b и ws2812 - технические характеристики

В чем основные различия между ws2812b и ws2811?

  • ws2812b — питание от 5в

лента 2812b

  • ws2811 — блок питания 12 в (последние модели 5 в были сняты с производства в 2015 году)

ws2811 12 v умная лента

WS2812 управляет кластером с одним диодом в каждом, WS2811 одновременно управляет тремя светодиодами.

Существенным недостатком диодов ws2812 является то, что при перегорании хотя бы одного из них в цепи все остальные светодиоды после этого сразу перестают работать.

Достоинства и недостатки адресных светодиодных лент

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

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

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

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

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

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

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

Соединение элементов

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

Схема соединения элементов на полотне.
Схема соединения элементов на полотне.

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

Особенности подключения и управления адресной светодиодной лентой
Внешний вид ленты, разрезаемой на WS2812B.

Как подключается адресная светодиодная лента

Для подключения современной адресной светодиодной ленты требуется три контакта, два из которых предназначены для питания, а третий — для управления. Контакты питания, обозначенные GND, + 5V или + 12V, в зависимости от версии, подключаются к источнику питания. Третий вывод DIN предназначен для передачи управляющих данных на контроллеры (цифровой вход), он подключается к контроллеру, которым чаще всего является Arduino. Для передачи данных контакты GND адресуемой светодиодной ленты и контроллера управления должны быть соединены.

Драйверы ШИМ могут принимать в качестве управляющего сигнала любые помехи по цепи питания и, чтобы во время работы ничего не мешало правильному прохождению сигнала по каналу управления, в цепи питания светодиодной ленты установлены электролитические конденсаторы и большая емкость Arduino. Например, если все питается напряжением 5 В, то вам нужно установить конденсатор 6,3 В 1000 мкФ в цепи питания светодиодной ленты и конденсатор 6,3 В 470 мкФ в цепи питания Arduino. Вывод DIN подключается к Arduino через резистор от 200 до 500 Ом.

Питание Arduino и светодиодных лент от одного блока питания

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

Ардуино – принцип действия

Пульт дистанционного управления Arduino, светодиодный

Плата Arduino — это устройство, на котором установлен программируемый микроконтроллер. К нему подключаются различные датчики, элементы управления или энкодеры и по определенному эскизу (программе) плата управляет двигателями, светодиодами и другими исполнительными механизмами, в том числе другими платами Arduino, использующими протокол SPI. Устройством можно управлять с помощью пульта ДУ, модуля Bluetooth, HC-06, Wi-Fi, ESP или Интернета и кнопок. Одними из самых популярных плат являются Arduino Nano и Arduino Uno, а также Arduino Pro Mini, устройство на базе микроконтроллера ATmega 328

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

Синтаксис команд

Цифровой выход:

pinMode (12, ВЫХОД); — установить порт 12 как порт вывода данных;
digitalWrite (12, ВЫСОКИЙ); — прикладываем логическую единицу к дискретному выводу 12, включив светодиод.

Аналоговый выход:

analogOutPin = 3; — мы устанавливаем вентиль 3 для вывода аналогового значения;
analogWrite (3, значение); — формируем на выходе сигнал с напряжением от 0 до 5В. Значение представляет собой рабочий цикл сигнала от 0 до 255. При значении 255 максимальное напряжение.

Способы управления светодиодами через Ардуино

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

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

Выбор RGB ленты

Для этого проекта нам понадобится именно светодиодная лента RGB, с четырьмя контактами.

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

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

Варианты с пятью и шестью выводами — это ленты RGBW и RGBWW. Как вы уже догадались, буква W обозначает дополнительный припаянный белый светодиод, а WW — два белых светодиода, такие полоски используются в тех случаях, когда белый цвет должен светить намного ярче, чем другие цвета.

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

Подключение светодиодной ленты к Ардуино

Через реле

Реле подключается к устройству для цифрового выхода. Управляемая с его помощью полоска имеет всего два состояния: включено и выключено. Для управления красно-сине-зеленой лентой требуется три реле. Ток, которым может управлять такое устройство, ограничен мощностью катушки (катушка малой мощности не может создавать большие контакты). Группы реле используются для подключения более высокой мощности.

С помощью биполярного транзистора

Ардуино, светодиод

Биполярный транзистор может использоваться для усиления выходного тока и напряжения. Подбирается по току и напряжению нагрузки. Ток привода не должен превышать 20 мА, поэтому он подается через токоограничивающий резистор 1-10 кОм.

лучше использовать транзистор npn с общим эмиттером. Для большего усиления используется многоэлементная схема или группа транзисторов (микросхема усилителя).

С помощью полевого транзистора

Помимо биполярных транзисторов, для управления полосами используются полевые транзисторы. Другое название этих устройств — МОП или МОП-транзисторы.

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

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

С помощью плат расширения

Arduino, платы расширения

Помимо реле и транзисторов используются уже готовые блоки и платы расширения.

Это может быть Wi-Fi или Bluetooth, драйвер мотора, например, модуль L298N или эквалайзер. Они предназначены для управления нагрузками разной мощности и напряжения. Такие устройства одноканальные — они могут управлять только монохроматическими и многоканальными лентами — предназначены для устройств RGB и RGBW, а также ленты со светодиодами WS 2812.

Код Arduino и последовательная связь

Загрузите следующий эскиз в Arduino с помощью USB-кабеля.

Важно! Не забудьте выключить модуль HC-06 перед загрузкой скетча!

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

Во-первых, мы объявили несколько констант (константа, которую нельзя будет изменить позже) для всех трех цветов (красный, зеленый, синий)

В setup () мы запустили последовательное соединение со скоростью 9600 бод и установили все контакты ленты на ВЫХОД.

В loop (), если Serial что-то получает, проанализируйте полученные данные как целое число (важно на следующем шаге)

Если он получает символ новой строки (‘ n’), он сначала ограничивает значения диапазоном 0-255 из-за диапазона ШИМ (широтно-импульсной модуляции (ШИМ)), а затем вносит изменения в цифровые выводы, используя метод analogWrite().

Программная часть

Установите Arduino IDE на свой компьютер, если она еще не установлена. Узнайте больше о том, как начать работу с Arduino, в этой статье.

Код и библиотеки можно скачать здесь.

Распаковать архив, скопировать библиотеки из папки lib в папку C: Program Files (x86) Arduino libraries.

Затем откройте файл SUP_V1.0.ino и посмотрите настройки:

Все работает из коробки, но если вы внесли какие-либо изменения в схему или хотите что-то исправить, все максимально подробно прописано в комментариях к коду.

Далее подключаем ардуино к компьютеру и вводим код. После сообщения «загрузка завершена» вы можете проверить работоспособность вашего устройства.

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

Яркость регулируется для двух режимов, с активированным датчиком движения и без него. Регулировка для каждого режима производится в том состоянии датчика, в котором вы хотите настроить яркость.

Виды транзисторных ключей

  • Биполярный;
  • Поле;
  • Композитный (сборка Дарлингтона).

Способы подключения нагрузки

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

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

Биполярное зрение не позволяет регулировать мощные нагрузки. Ток, протекающий через него, ограничен 0,1-0,3 А.

Полевые транзисторы работают с более мощными нагрузками с током до 2А. Для еще более мощной нагрузки используются полевые транзисторы Mosfet с током до 9 А и напряжением до 60 В.

Полевой транзистор Мосфет

Вместо полевого эффекта можно использовать сборку биполярных транзисторов Дарлингтона на микросхемах ULN2003, ULN2803.

Микросхема ULN2003 и принципиальная схема электронного переключателя напряжения:

Микросхема ULN2003

Модули управления Ардуино

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

Инфракрасный контроль
ИК-контроль

Модуль позволяет запрограммировать до 20 команд.

Дальность сигнала составляет примерно 8 метров.

Стоимость набора 6 долларов США.

Дистанционное управление
По радио

Четырехканальный блок с дальностью действия до 100 м

Стоимость набора 8 у.е.

Позволяет включать освещение даже при приближении к квартире.

Бесконтактный контроль
Бесконтактный

Датчик расстояния может увеличивать и уменьшать яркость освещения движением руки.

Дальность действия до 5м.

Стоимость модуля — 0,3 доллара США.

Схема контроллера RGB подсветки на ардуино


Схема контроллера ленты RGB

Как видите, ничего особо сложного.

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

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

Управление клавишами осуществляется с помощью ШИМ-сигнала, подробнее об этом можно прочитать здесь.

Используются три канала Arduino PWM.

О чем это я и для кого?
Я хочу рассказать как быстро и просто можно оживить ленту на базе «умных» светодиодов типа WS2811(12), SK6812, INK1003 и других без лишних затрат, имея только ардуино, библиотеку Adafruit NeoPixel, кусок ленты и час свободного времени, чтобы получить подобную занятную иллюминацию или что то еще в соответствии с вашей целью. Моя цель — не эта гирлянда или готовый скетч. Весь код в тексте и в прилагаемом скетче служит только для того, чтобы показать возможности сторонней библиотеки от компании Adafruit, накидан на скорую руку, и никак не является образцом для подражания или пособием по программированию. Он всего лишь работает с кусочком ленты и демонстрирует несложные эффекты. Вам не нужно ничего тупо повторять. Считайте это подробным справочником по нескольким функциям NeoPixel с примерами их использования в коде СИ. Посему просьба оставить мокрые тапки для своих котов)
Для кого обзор? Конечно для тех, кто только начинает знакомство со смарт-лентами и имеет представление о том, как работает ардуино и как пишется под него код.

ссылка на скетч из видео

Теперь поехали)
Достаточно популярными «умные ленты» стали уже давно. Среди них существует множество китайских клонов, собранных как на обычных диодах RGB и внешними управляющими регистрами, так и «полноценные», с использованием ws2812 со встроенным в корпус 5050 контроллером. Принцип работы практически одинаков для всех лент и матриц с SPI (последовательным) интерфейсом. Это относится к WS2811(12), SK6812, INK1003 и другим подобным драйверам. На вход первого контроллера ленты передается непрерывный поток данных, в каждом пакете которого содержится 3 или 4 (для RGBW пикселей)байта со значением цвета для каждого из 3 или 4 светодиодов в пикселе. Контроллер первого пикселя «откусывает» себе первые 3(4) байта, устанавливает свой цвет в соответствии с содержимым, а остальной поток пропускает к следующим пикселям, где происходит аналогичное «откусывание» и дальнейшая передача «из рук в руки» до тех пор, пока в потоке не возникнет пауза в 50 мкс, означающая что пора принимать данные с начала)В зависимости от типа контроллера, тактовая частота может составлять 400 или 800 кГц. Это позволяет не видеть глазу переходных процессов при реализации достаточно сложных световых эффектов. В различных контроллерах может быть разной тактовая частота, разное кодирование 0 и 1 Lo-Hi уровнями и наоборот, разное следование цвета в пакете и другие мелочи, значительно усложняющие жизнь нормальным людям при выборе средств реализации задуманной елочной гирлянды или пересвета днища в 14-ке) Ленты могут иметь и 4 вывода — два питающих, один управляющий, и один тактируемый. В моем примере лента имеет три вывода — питание 12В и управление. Так же есть моменты, связанные с питанием ленты — это опять же напряжение — 5 или 12В и ток потребления на метр. Я использовал отдельный блок питания 12В. При этом нужно учитывать, что питание ленты и ардуино никак не должны между собой быть связаны, если у вас разные напряжения питания! Только по общему проводу для передачи данных. С ардуинки нужно подключить вывод GND к минусовому проводу ленты и управляющий пин 6 (или какой назначите) ко входу ленты D in. +12В подается на ленту от своего
источника питания, ардуинка питается от своего (либо от USB).

Капиталисты из Adafruit рекомендуют сигнальный провод подключать через резистор порядка нескольких сот Ом, а на саму ленту перед первым контроллером вешать по питанию электролит 1000-2000uF, но у меня все прекрасно работает и напрямую, и через килоОмный резистор при длине шлейфа около 0,5 метра и без каких либо кондеров на ленте. Все страхи актуальны имхо при гораздо бОльших отрезках ленты, чем мой)
С подключением в общем то ничего хитрого нет. Рассмотрим программную часть.
Для управления ws2812 настоящие true-программисты напишут true-код на ассемблере и прошьют true-контроллер от фирмы майкрочип, но для простых смертных выход тоже есть! Добрые дяди из Adafruit написали замечательную библиотеку, заточенную под ардуино, при помощи которой можно на простом cи из г.на и костылей (как в моем случае) соорудить вполне себе работающий г.но код и не заботиться об организации интерфейса и не заглядывать в даташиты контроллеров лент. Об этом уже позаботились авторы библиотеки и нам не нужно ничего знать, кроме ее функций и конфигурирования двух строк в привычной среде.
Что еще следует понимать — каждый пиксель — это память. И она не бесконечна. Например ардуинка uno R3 потянет не более 500 пикселей.

С мегой можно развернуться и пошире)
А пока хочу немного рассказать после пары дней экспериментов про использование возможностей библиотеки, назначение ее функций и конфигурирование в привязке к типу ленты и количества пикселей в ней. Сам к ардуине подключал unoR3 и отрезок ленты с INK1003 всего на 6 пикселей (каждый из 3-х отдельных RGB диодов 5050?, бывает и такое в Китае). Но об этом немного позже, а сейчас начнем с самого начала — установки.
Устанавливается библиотека просто — в программной среде для ардуино в меню «Скетч» выбираем «Подключить библиотеку» —> «Управлять библиотеками».
Откроется окно со списком библиотек, которые уже установлены. В форме поиска вводим «Adafruit NeoPixel», находим, скачиваем и устанавливаем.
Теперь остается до функциии void setup()прописать заголовок библиотеки — #include <adafruit_NeoPixel.h>, несколько строк конфигурации и можно начинать кодить)
Чтобы лучше понять, что мы получили, давайте посмотрим, что содержат файлы библиотеки)
Каталог Adafruit_NeoPixel/examples/ — содержит несколько примеров использования библиотеки:
RGBWstrandtest — не интересен, так как моя лента просто RGB)
buttoncycler — демонстрирует переключение 3-х эффектов нажатием кнопки
simple.ino показывает как покрасить ленту зеленым
strandtest.ino — те же три эффекта, но без нажатия кнопок
Примеры очень полезные и интересные, но лучше пойдем дальше и сделаем что то свое, пусть и не так красиво).
Нужно условиться, что дальше по тексту под словом «пиксель» я подразумеваю три (или 4) разных светодиода в одном корпусе. Поэтому «красный цвет пикселя» и «красный цвет диода» — понятия совершенно разные. Первый — это совокупность цветов. Второй — восьмибитная яркость отдельного красного светодиода из этой совокупности — от 0 до 255.
Идем дальше, файл — Adafruit_NeoPixel.cpp
Содержит функции, с которыми мы будем работать. Желающие ознакомиться с оригинальным (на английский езыке) руководством можно здесь — learn.adafruit.com/adafru…?view=all#arduino-library, а для ленивых продолжу излагать своим языком как умею)
Кстати — по ссылке много интересных проектов для ардуины с описанием и кодом не только для ленточных изделий)
Первая чуть ли не самая важная функция — strip.setPixelColor(n, red, green, blue, white); Она устанавливает цвет каждого диода (красного-зеленого-синего) в n-пикселе в соответствии с переданными функции параметрами.
Т.е. n здесь — номер пикселя в ленте, следующие за ним три или четыре параметра — цвета диодов от 0 до 255. Если используем ленту с дополнительным белым диодом в пикселе — мы задаем 4 параметра (32 бита информации, по байту на цвет) или 3 (24 бита информации), как в моем случае.
Например, strip.setPixelColor(45, 255, 0, 0); задаст красный цвет 46-му пикселю в ленте (нужно помнить, что в программе первый пиксель — это «0»).
Альтернативно — strip.setPixelColor(n, color); Здесь n так же — номер пикселя в ленте, но уже 32 битный цвет, например — uint32_t magenta = strip.Color(255, 0, 255);
Еще одна функция strip.Color(255, 0, 255); — как раз конвертирует в одно 32 битное значение три разных параметра цвета для отдельных диодов — RGB. В этом примере (255, 0, 255)- одинаковые по яркости красный и синий диоды. Теперь если мы вызовем strip.setPixelColor с 32 битным параметром magenta, которому ранее присвоили значение функцией strip.Color, мы зададим 46 пикселю этот цвет одним значением: strip.setPixelColor(45, magenta); Итого — всего два параметра) Просто вместо трех восьми битных имеем один 32 битный с местом под значение четвертого диода, даже если его в пикселях ленты нет.
Но как и сколько бы мы не задавали цвет, с лентой ничего не произойдет. Передачу каждого пакета данных с заданными цветами каждого диода в каждом пикселе нужно инициализировать. Поэтому ваш код должен быть как можно эффективнее, ибо для вывода сложных эффектов нужна максимальная частота обновления пикселей, а выполнение вашего кода тоже требует процессорного времени. Допустим, вы назначили каждому пикселю набор цветов. Пора вызывать функцию поважнее «сет_пиксел_колора» — strip.show(); Она вызывается без параметров и обновляет все пиксели ленты, один за другим с частотой 400 или 800 кГц). Теперь изменения можно увидеть). Эта же функция является обязательной в разделе void setup(). Перед ней в этом разделе так же обязан находится вызов функции strip.begin(), т.е. примерно так:
void setup()
{
strip.begin();
strip.show(); // Здесь эта функция ничего не «засветит, а наоборот -принудительно выключит все пиксели.
}

Продолжим по функциям, нужным для комфортного кодинга) Раз уж есть функция, «запихивающая» три байта в одно значение, логичным будет и обратный процесс. Но увы, его нет.
Есть только возможность средствами библиотеки извлечь тот же 32-битный цвет из конкретного пикселя. Занимается этим делом uint32_t color = strip.getPixelColor(11); Хотя при необходимости и желании можно уже «вручную» вытащить нужные цвета и определить каждый по своему байту)
Например так —
//—————————————
long i = strip.getPixelColor(15); //Получаем цвет 16-го пикселя
uint8_t r = (uint8_t)((i >> 16) & 0xff), //Первый байт — красный цвет
uint8_t g = (uint8_t)((i >> 8) & 0xff), //Второй байт — зеленый цвет
uint8_t b = (uint8_t)(i & 0xff); //Третий байт — синий цвет
strip.setPixelColor(16, r, g, b); //Назначаем полученные значения отдельным диодам 17-го пикселя
//—————————————

Это желательно оформить в свою отдельную функцию и для своего же удобства и упрощения кода. Хотя и необязательно.
Здесь важно понимать один момент — несмотря на название getPixelColor, функция не выполняет физического обращения к ленте для получения цвета заданного вами номера пикселя. Это невозможно в SPI, работающего по принципу ниппеля — только «туда». Но при первом же вызове setPixelColor в массив pixels[n] для значений пикселей записываются по порядку все устанавливаемые цвета всех диодов в 32-битном значении и хранятся там до следующего вызова этой же функции, которая опять обновит и ленту, и массив. В промежутке можно извлечь из этого массива 32-битный цвет из нужного пикселя с помощью getPixelColor. Это значит, что вы можете в любой момент в любом месте кода выполнять любые действия, не связанные с управлением лентой, и затем вернуться к установленным и включенным хоть 5 минут назад цветам в совсем другой функции и продолжить с ними работать «с того же места».
Можно легко задать (установить) или изменить полученный 32-битный цвет в HEX формате. В качестве аргумента мы можем передать параметр цвета пикселя как 0xFF9C00 и функция это так же переварит.
Здесь то же самое, только FF — это красный диод с диапазоном значений от 0x00 до 0xFF, 9C — зеленый, и 00 — синий.
Аналогично «вытаскиванию» восьмибитных десятичных значений каждого цвета мы можем побайтно изменить исходную величину.
Для этого я набросал небольшую функцию, которая изменяет HEX представление цвета SummColor на передаваемые значения RGB —
HEX_R, HEX_G, HEX_B.

uint32_t HEX_Math(uint32_t SummColor, uint32_t HEX_R, uint32_t HEX_G, uint32_t HEX_B)
{
SummColor+=((HEX_R << 16)|(HEX_G << 8)|(HEX_B));
return SummColor;
}

Если мы имели 0x9000FE и 0x03, 0x02, 0x01, функция вернет значение 9302FF.
Следующая «штатная» функция — uint16_t n = strip.numPixels(); — возвращает задекларированное количество пикселей в ленте. Полезна в тех случаях, когда у вас гора кода и своих функций, а применяться код будет к разным лентам с разным количеством пикселей в них. Чтобы не перебивать все в коде, следует заранее использовать в счетчиках этот вызов.
strip.setBrightness(100); — устанавливает яркость всей ленты, вызывается в setup() единожды. В коде использовать нельзя, для этого задавайте параметры яркости значениями RGB. (55,0,0) — тоже красный, но не такой яркий как (255,0,0). Полезность этого для себя нашел в том, что неудобно отлаживать код, когда рядом на столе бьет в глаз в разнобой разный злой колор с уровнями 200-255). А так — установил временно strip.setBrightness(30) и работай себе спокойно. Выше этого значения ни один диод не прыгнет, как бы вы не задавали уровень в коде. Просто все итоговые цвета пикселей будут пропорционально пересчитаны для этого значения, как самого яркого.
Подключение нескольких лент к разным выходам ардуины — тоже не вопрос. Пишем в заголовке еще одну ленту с нужным количеством пикселей и пин управления.
Adafruit_NeoPixel strip_a = Adafruit_NeoPixel(24, 5);
Adafruit_NeoPixel strip_b = Adafruit_NeoPixel(45, 6);

Я этим не пользовался, но сложного в этом ничего не вижу.
Остается файл Adafruit_NeoPixel.h — заголовок библиотеки, но в нем нам искать нечего. Там прописаны конфигурации пинов, смещения цветов для RGB и RGBW, частоты для разных типов лент, объявлены уже рассмотренные нами функции а так же различные типы и константы.
keywords.txt содержит перечень имен функций и констант.
Это собственно все, что нам дает библиотека Adafruit NeoPixel — вполне достаточно для написания чего нибудь светящегося, мерцающего и переливающегося)
Теперь, имея некий «справочник» можно прописать параметры и начать кодить что нибудь свое, родное)

Вот пример готового скетча, в котором нужно только поправить параметры Adafruit_NeoPixel(12, PIN, NEO_GRB + NEO_KHZ800); под свою ленту.

//***********************************************************************************************
#include <adafruit_NeoPixel.h> // подключаем библиотеку, здесь все просто. копи-паст.
#define PIN 6 // назначаем управляющий лентой пин. Пусть будет шестой, как в примере оригинальной статьи.
Adafruit_NeoPixel strip = Adafruit_NeoPixel(12, PIN, NEO_GRB + NEO_KHZ800); // здесь нужно указать параметры своей ленты.
// 12 — количество пикселей в ленте. У меня в отрезке было 6, хотя физически диодов было 18.
// Просто один контроллер INK1003 управлял одновременно тремя 5050 RGB сборками.
// NEO_GRB — порядок следования цветов. У меня обычный — RGB. Если у вас так же — меняйте этот параметр на NEO_RGB
// В любом случае с лентой страшного ничего не произойдет, просто будут перепутаны красный с зеленым, исправит никогда не поздно)
// NEO_KHZ800 — частота работы контроллеров пикселей. Смотрите или в даташите к вашей ленте или опять же методом научного тыка.
// Так как варианта всего два — запутаться сложно. Либо светит, либо нет.

//***********************************************************************************************
void setup() //Это мы уже рассмотрели выше, забежав малость вперед, зато теперь все ясно и понятно —
{
strip.begin();
strip.show();
strip.setBrightness(55); // Выше писал для чего и как)
// В процессе кодинга-отладки полезными окажутся:
Serial.begin(9600); // Это для вывода значений переменных в порт. Интерфейс тут — «Инструменты» —> «Монитор порта».
// Пишем в коде Serial.print(Count);, ставим код на паузу delay(5000), и 5 секунд зрим значение
// переменной Count и осознаем почему у нас она не считает что либо или считает не так)
randomSeed(analogRead(0)); // инициализация аналогового входа для получения с него псевдослучайных значений.
// Тоже может пригодиться
}
//***********************************************************************************************
void loop() // Здесь непосредственно будет выполняться код и вызываться функции, код которых вы напишите за пределами петли
{
SetMyColor(0, 0, 155); // Давай покрасим эту ленту в синий цвет) — вызываем функцию 1
delay(3000);
TurnOffSecondPixel(); // И погасим каждый второй) — вызываем функцию 2
delay(3000);
}
//***********************************************************************************************
void SetMyColor(uint8_t r, uint8_t g, uint8_t b) //Тело функции 1
{
for(uint8_t i=0; i<strip.numPixels(); i++) //В цикле считаем пиксели
strip.setPixelColor(i, r, g, b); //И красим их
strip.show(); //За циклом включаем цвета
}
//***********************************************************************************************
void TurnOffSecondPixel() //Тело функции 2
{
for(uint8_t i=0; i<strip.numPixels(); i++) //В цикле считаем пиксели
{
if(i%2)strip.setPixelColor(i, 0, 0, 0); //И тушим каждый второй (0,0,0)
}
strip.show(); //За циклом включаем что осталось
}

//***********************************************************************************************
По ссылке под видео скетч содержит больше десятка функций, реализованных с помощью библиотеки Adafruit NeoPixel. Кроме этого в примерах к библиотеке так же есть несколько интересных реализаций, на основе которых можно строить свои занятные вещи.

Отличие лент ws2812, ws2812b, ws2811

Наиболее распространенные модели со встроенными микросхемами имеют маркировку WS2812 или WS2812b. С внешними – WS2811.

Чем модель ws2812 отличается
от ws2812b? Первые имеют 6
контактов (PIN) для управления, а вторые, с буковкой “b” –
всего четыре.

На 2812 питание светодиода и чипа разнесены. У 2812b питание
интегрированного драйвера и светодиода вынесено на один PIN (VDD).

А в чем главные отличия между ws2812b и ws2811?

ws2812b – работает от 5v

ws2811 – питание 12v (в 2015г прекращен выпуск последних моделей на 5в)

WS2812 управляет кластерами по одному
диоду, WS2811 управляет тремя светодиодами
одновременно.

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

Проверка блока питания

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

Чтобы понять рабочая светодиодная лента или нет, достаточно подать на нее требуемые 12-24-36В. Даже паять провода при этом не надо.

Два проводника подсоединяете к выходным клеммам блока, а их кончиками просто прикасаетесь к крайним медными площадками в начале ленты. Если свечение равномерное и не тусклое, то все исправно.

А вот когда ничего не загорается, то нужно искать причину. Самый главный помощник в этом – мультиметр.

В первую очередь проверьте, а выходит ли с блока питания необходимое напряжение? Может быть все дело именно в нем.

Проверять нужно между контактами «+V» и «-V».

Либо «+V» и «COM».

Если напряжение в норме (+ — 10%), то ищите по цепочке дальше.

Если нет мультиметра, можно провести проверку по косвенным признакам. Однако полагаться на них все же не стоит:

после подачи напряжения 220В на блоке должен загореться зеленый светодиод

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

Когда этого нет, то можно предположить, что блок не исправен. После чего, все равно придется искать прибор для замера выходного напряжения и подтверждения своих догадок.

Провода и разъемы

Цифровая лента на конце имеет минимум не два, а три провода.

V+ (5V или 12V)

V- (GND)

управляющий провод

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

DI (Digital Input) или цифровой вход в начале ленты

DO (Digital Output) цифровой выход

При наличии таких разъемов подключить ленту неправильной стороной у вас не получится. Второй конец DO требуется при наращивании длины световой конструкции.

Ошибка №4

А вот без таких разъемов начало и конец ленты можно и перепутать.

В этом случае ничего гореть и светиться у вас не будет.

Ошибка №5

Слишком длинные провода питания от контроллера.

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

В этом случае попробуйте их скрутить косичкой. В некоторых ситуациях помогает.

Мигание светодиодами NeoPixel в ленте

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

Arduino

#include <Adafruit_NeoPixel.h>

#define PIN 6
#define NUMPIXELS 7

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void NeoBlink(int num, int wait)
{
for (int i = 0; i < num; i++)
{
pixels.setPixelColor(i, 35, 35, 35);
}
pixels.show();
delay(wait);
for (int j = 0; j < num; j++)
{
pixels.setPixelColor(j, 0, 255, 0);
}
pixels.show();
delay(wait);
}

void setup()
{
pixels.begin();
pixels.setBrightness(50);
}

void loop()
{
NeoBlink(7, 500);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

#include <Adafruit_NeoPixel.h>

  #define PIN        6
#define NUMPIXELS 7

Adafruit_NeoPixelpixels(NUMPIXELS,PIN,NEO_GRB+NEO_KHZ800);

voidNeoBlink(intnum,intwait)

{

for(inti=;i<num;i++)

{

pixels.setPixelColor(i,35,35,35);

}

pixels.show();

delay(wait);

for(intj=;j<num;j++)

{

pixels.setPixelColor(j,,255,);

}

pixels.show();

delay(wait);

}
 

voidsetup()

{

pixels.begin();

pixels.setBrightness(50);

}
 

voidloop()

{

NeoBlink(7,500);

}

Как подобрать контроллер для светодиодной ленты?

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

Признаки, по которым можно различить контроллер для светодиодной ленты:

  • Тип управления;
  • Сенсорные или кнопочные;
  • Выходная мощность;
  • Прошивка программы.

Все возможные схемы подключения контроллера для управления светодиодной ленты известные на данный момент.

Типы управления контроллерами

  1. Без пульта дистанционного управления.

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

  1. Инфракрасный пульт управления. 

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

  1. Радиопульт. 

Управлять светодиодной лентой можно на расстоянии до сотни метров. Устройство получит сигнал даже через стены и преграды на пути к пульту, так как в этом случае не используется инфракрасный луч.

  1. Wi-Fi.

Перечень доступных функций такой же, как у моделей с радио- и ИК-пультом. Различия заключаются лишь в том, что управление производится со смартфона, планшета или персонального компьютера. Также существуют приборы с вмонтированным модулем Wi-Fi или регулируемые с определенного маршрутизатора, контролирующего одновременно несколько светодиодных лент. В специальном приложении на iOS или Android можно настроить каждый диод, установить ему собственный оттенок и определить скорость переливания.

  1. Звуковой.

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

Сенсорные или кнопочные

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

Кнопочные пульты являются самым популярным вариантом на современном рынке. Программа динамики светодиодов назначается определенной кнопкой. Товар отличается простотой эксплуатации и относительно низкой ценой.

Разделение регуляторов по системе программирования

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

Протокол

Теперь, когда мы разобрались, как подключить нашу ленту к 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 сообществе, а это значит, что нам не придётся вдаваться в такие сложности, и достаточно выбрать одно из понравившихся решений.

Будет интересно Маркировка SMD транзисторов

Лампа на светодиодной ленте с красивыми эффектами

Сразу скажу, что проект не мой, а является немного доработанной версией лампы от Alex Gyver, за что ему большое спасибо!

Вот ссылка на оригинальный проект: огненный светильник.

Из изменений:

  • корпус напечатан на 3D-принтере (файлы для печати ниже)
  • разъем для подключения блока питания
  • не сенсорная а обычная кнопка, размещенная сбоку внизу

Лампу делал не с целью улучшения, а в подарок, но решил все-таки добавить описание на сайт – вдруг кому-то пригодится.

Подготовка

Итак, для реализации проекта использовался все тот же плафон из Леруа-мерлен “плафон цилиндр”:

Все остальное можно заказать у китайцев:

  • Arduino Nano:
  • Адресная RGB-лента WS2812B:
  • Блок питания на 5 вольт (3А, но хватит и 2A):
  • Кнопка (использовал самую большую):
  • Резистор на 220 Ом:
  • Разъем питания использовал такой:

Были использованы следующие инструменты:

  • Паяльник (пользуюсь таким давно, идеальный по соотношения цена/качество):
  • 3D-принтер (закрытый корпус, можно печатать и PLA, и ABS без проблем): ,
  • Инструмент для зачистки и обжима проводов (фирменный китайский LAOA): ,

Сборка

Файлы для печати верхней и нижней части: lamp.zip.

При печати следует учесть, что, хоть размеры подгонялись под конкретный плафон, все же могут быть небольшие расхождения в размерах. Зависит от того, на каком 3D-принтере вы печатаете, с какими настройками и каким пластиком. Поэтому для плотного прилегания плафона к напечатанным частям может понадобится чуть подкорректировать размер моделей и перепечатать, либо применить изоленту/напильник.

Для лампы я использовал 4 куска светодиодной ленты по 10 светодиодов на каждом. У вас может быть другое количество светодиодов, в зависимости от типа ленты. Главное: лента должна быть именно адресная WS2812B.

После печати нижней части можно приступать к сборке. В модели предусмотрено гнездо для кнопки. Сажаем ее туда, приклеив на любой подходящий клей (я использовал клеевой пистолет). Предварительно нужно отломать 2 из 4 ножек, а 2 оставшиеся должны пропускать ток при нажатии (они расположены рядом). Просовываем их в отверстие сверху от углубления. И вставляем разъем питания.

Ну и наклеиваем куски ленты

Обратите внимание на то, что наклеивать их нужно одинаково, контактами DO вниз. Так как при использовании ленты она нагревается, я после всей остальной сборки закрепил ленту небольшими хомутами, через каждые 2 светодиода, чтобы она не отклеилась. Далее – спаиваем 4 части адресной ленты – контакты 5v, gnd и сигнальный

Как именно – подробно показано в видео на странице оригинального проекта. Если вы только учитесь паять – не следует бояться паять адресную ленту, паяется все она очень легко. Единственный совет – я использую жидкий флюс ЛТИ-120. Он в разы лучше, чем твердая канифоль. Наносить его удобнее всего кисточкой от лака для ногтей. Также он не является активным, поэтому после его применения не нужно очищать контакты

Далее – спаиваем 4 части адресной ленты – контакты 5v, gnd и сигнальный. Как именно – подробно показано в видео на странице оригинального проекта. Если вы только учитесь паять – не следует бояться паять адресную ленту, паяется все она очень легко. Единственный совет – я использую жидкий флюс ЛТИ-120. Он в разы лучше, чем твердая канифоль. Наносить его удобнее всего кисточкой от лака для ногтей. Также он не является активным, поэтому после его применения не нужно очищать контакты.

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

Программная часть

Код и библиотеки можно скачать здесь.

SUP_v1.0Скачать

Распаковываем архив, копируем библиотеки из папки lib в папку C:Program Files (x86)Arduinolibraries.

После чего открываем файл SUP_V1.0.ino и видим настройки:

Далее подключаем ардуино к компьютеру и заливаем код. После сообщения «загрузка завершена» можно проверять работоспособность устройства.

Короткие клики по кнопке меняют цвет ленты согласно прописанному массиву цветов, длинные нажатия увеличивают или снижают яркость поочерёдно.

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

Это был домашний вариант подсветки, а теперь покажу вам автомобильный:

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

В простой RGB-ленте обычно устанавливаются RGB-светодиоды типа 5050, которые состоят фактически из трёх кристаллов (красного, зелёного и синего) расположенных в одном корпусе.

В адресной ленте также используются светодиоды в корпусе 5050, но отличающимся тем, что у них 4, а не 6 выводов. В самом же корпусе расположены светоизлучающие кристаллы и микрочип, управляющий их свечением, на иллюстрации на него указывает красная стрелка.

По питанию все светодиоды в ленте соединены параллельно, а линии управления соединяются последовательно. Распиновка адресной ленты следующая: контакты +5V и GND отвечают за питание, контакт DO – выход управляющего сигнала, а DI – вход.

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

Наиболее распространены две модели с разными контроллерами, это ws2812b и ws2811. Главное их отличие в том, что изделия с чипами ws2811 питаются от 12 Вольт, а сам чип находится не внутри светодиода, а отдельно и управляет сегментом из трёх светодиодов. Так в моделях с ws2811 возможно управление не каждым светодиодом, а каждым сегментом из 3 светодиодов сразу, что несколько ограничивает применение.

Принцип управления не слишком сложный:

  • Сигнал управления посылается на ленту небольшими «пачками» цифровых импульсов длиной в 24 бита. Контроллер принимает этот сигнал и выдаёт на светодиоды определенное напряжение для получения нужного цвета.
  • Напомню, что в случае с WS2812b контроллер встроен в светодиод и управляющий сигнал управляет каждым светодиодом отдельно, а в случае с WS2811 контроллер общий для сегмента из трёх светодиодов. То есть возможно задать параметры свечения для каждого отдельного сегмента.
  • При этом первый контроллер принимает первую пачку из 24-бит, вторая 24-битная команда принимается вторым чипом и так далее. Каждая последующая 24-битная команда посылается на каждый следующий контроллер, нумерация пачек при этом совпадает с нумерацией контроллеров.
  • Таким образом, управляют индивидуально каждым контроллером. Если один из блоков неисправен, например, второй, то горит только первый светодиод. Остальные светиться не будут, так как не будет проходить управляющий сигнал.

При создании уникальных эффектов используют не готовые контроллеры, а различные микроконтроллеры. К тому же в сети много проектов под управлением Arduino (микроконтроллеры семейства AVR). Схема подключения к ней элементарна, на примере с контроллерами WS2812b изображена ниже.

Но желательно подавать сигал управления через резистор номиналом в 200-400 Ом, для защиты пина Ардуино.

Устройство представляет программируемый микроконтроллер семейства AVR, с уже разведенной платой, питанием и схемой для программирования через USB. С помощью записи в него различных программ можно получить не ограниченное количество цветовых сочетаний и чередований. Что позволяет создать неограниченное количество вариантов для подсветки. Широкое распространение ограничивается относительно высокой стоимостью в отличие от обычных диодов.

Как рассчитать количество адресов для ленты DMX 512

DMX (RGB)

• 1 пиксель = 3 канала DMX (RGBW) • 1 пиксель = 4 канала DMX (RGBW)

Имея разную плотность светодиодов на ленте и разную длину, вы можете умножить все это вместе и получить различные результаты.

Например:

• (8PL30) 30 светодиодов RGB / м ленты x 5 метровой катушки = 150 пикселей (150 пикселей х 3) = 450 каналов • (8PL60) 60 светодиодов RGB / м ленты x 5 метровой бобины = 300 пикселей (300 пикселей х 3) = 900 каналов • (8PL144) 144 светодиода RGB / м ленты x 2 метра = 288 пикселей (288 пикселей x 3) = 864 канала • (8PX30) 30 светодиодов RGBW / м ленты 5 м = 150 пикселей (150 пикселей x 4) ) = 600 каналов • (8PX60) 60 светодиодов RGBW / м лента x 4-метровая катушка = 240 пикселей (240 пикселей x 4) = 960 каналов

Удобно запомнить:

• 170 пикселей RGB = 510 каналов DMX = 1 вселенная DMX • 128 пикселей RGBW = 512 каналов DMX = 1 вселенная DMX

Готовые наборы для подсветки потолков

Соберем подсветку персонально под ваш потолок. Качественно!

Доставим до двери в любой город России.

Подробнее >>

Чтобы управлять цветом RGB ленты нужно установить контроллер, который устанавливается между блоком питания и RGB лентой. Также в отличие от одноцветной ленты RGB лента имеет вместо двух проводов коммутации, четыре провода.

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

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

Схема подключения RGB-контроллера для светодиодной ленты

Какой бы контроллер вы не выбрали для подсветки, он всегда подключается по одной и той же схеме. Питание контроллера осуществляется через разъем “V+” и “V-”.

На блоке питание тоже есть обозначения “V+” и “V-”. Для подключения контроллера к блоку питания Вам нужно соединить проводом “V+” контроллера с “V+” блока питания и “V-” контроллера с “V-” блока питания. RGB ленту подключают к разъемам контроллера, которые обозначены следующим образом:

  1. R (red)-управление красным цветом
  2. G (green)-управление зеленым цветом
  3. B (blue)-управление синим цветом
  4. “V+” общий провод. Будьте внимательно не перепутайте , цвета RGB ленты и цвета RGB контроллера.

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

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

  • Подключайте к адресной светодиодной ленте (между линиями питания) конденсатор, вплоть до 1000 мкФ
  • В разрыв линии данных (от Контроллера к адресной светодиодной ленте) добавляйте резистор 300 — 500 Ом, устанавливая его ближе к ленте.
  • Кабельная линия данных от контроллера до адресной светодиодной ленты, требуется делать как можно коротким.
  • При подключении адресной светодиодной ленты, подключайте «землю» первой (отключайте последней).
  • Не допускайте разрядов статического электричества при монтаже адресной светодиодной ленты.
  • Используйте преобразователь уровня, если адресная светодиодная лента и устройство управления подключены от источников питания с разным напряжением.
  • Максимальный ток каждого пикселя составляет 60мА (при полной яркости белого цвета). Если Вы не планируете использовать ленту WS2812B как источник света (для этого лучше взять обычную светодиодную ленту с белыми светодиодами), принято считать, что, усреднено, каждый пиксель потребляет 20мА.

минимальный ток Драйвера = 20мА*количество_пикселей. максимальный ток Драйвера = 60мА*количество_пикселей

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

Что такое адресная светодиодная лента?

В первую очередь давайте рассмотрим, что вообще такое цифровая Led лента, как она устроена и как работает? По-другому ее еще называют адресной, умной или лентой “бегущий огонь”.

Главное отличие от обычных изделий заключается в присутствии на плате микросхем. Причем они могут быть как встроенными в сам светодиод.

Так и внешними.

Они позволяют управлять режимами работы каждого сегмента по отдельности. Таким образом можно напрямую запускать и отключать свечение любого светодиода или пикселя.

В данном случае пикселем называют ячейку из одного или нескольких светодиодов сразу (обычно по 3 штуки).

Вы сможете управлять как яркостью, так и цветом любого диода в ленте и при этом создавать совершенно потрясающие световые эффекты:

для автомобиля

для аквариума

на фасаде дома

на ёлке

Многообразие вариантов будет зависеть только от вашей фантазии.

Где купить?

На фото ниже изображена WS2812B, которую я купил для себя. Ее длина составляет 5 метров, а светодиоды спрятаны за водонепроницаемым силиконом. То есть ее можно спокойно оставить там, где может быть дождливо или даже пыльно.

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

Светодиоды в ленте WS2812B подключены друг к другу последовательно. Кроме того, каждый светодиод оснащен собственным чипом, что позволяет управлять лентой через 1-проводной интерфейс. Это значит, что вы можете управлять всеми светодиодами на ленте, используя лишь один цифровой контакт Arduino.

На фото ниже показан чип, которым оснащен каждый светодиод. Кроме того, каждый светодиод – это RGB-светодиод.

Светодиодные ленты такого типа – очень гибкие. Их даже можно разрезать, чтобы получить куски нужной длины. На рисунке ниже видно, что лента состоит из сегментов, и каждый сегмент состоит из одного RGB-светодиода.

Разрез нужно делать в специальном месте, которое помечено черной полоской.

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

Светодиодная лента Ардуино – написание кода.

Подключите плату Arduino к компьютеру через USB и откройте Arduino IDE. Убедитесь, что у вас правильный номер платы и порта, выбранный для вашей платы, в меню «Сервис»> «Сервис и инструменты»> «Порт». Откройте новый эскиз и сохраните его с соответствующим именем. Этот эскиз затухает с одноцветными огнями, держит их в таком состоянии в течение нескольких секунд, а затем исчезает, пока они не погаснут снова.

Вы можете сделать эскиз самостоятельно или просто загрузить готовый код из GitHub (https://gist.github.com/anonymous/d4fa3719478c3c5a9c321cc372e9540).

Начните с определения штырей, которые будут использоваться для управления МОП-транзисторами.

#define RED_LED 6 #define BLUE_LED 5 #define GREEN_LED 9

Затем вам понадобятся переменные. Создайте общую переменную яркости вместе с переменной для яркости каждого цвета. Мы будем использовать только основную переменную яркости для выключения светодиодов, поэтому установите здесь максимальное значение 255. Вам также потребуется создать переменную, чтобы контролировать скорость замирания.

int brightness = 255; int gBright = 0; int rBright = 0; int bBright = 0; int fadeSpeed = 10;

В вашей настройке мы установим выводы Arduino. Мы также будем вызывать пару функций с задержкой в 5 секунд. Этих функций еще не существует, но не беспокойтесь, мы доберемся до них.

void setup() { pinMode(GREEN_LED, OUTPUT); pinMode(RED_LED, OUTPUT); pinMode(BLUE_LED, OUTPUT);

TurnOn(); delay(5000); TurnOff(); } Теперь создайте метод TurnOn (): void TurnOn() { for (int i = 0; i < 256; i++) { analogWrite(RED_LED, rBright); rBright +=1; delay(fadeSpeed); } for (int i = 0; i < 256; i++) { analogWrite(BLUE_LED, bBright); bBright += 1; delay(fadeSpeed); } for (int i = 0; i < 256; i++) { analogWrite(GREEN_LED, gBright); gBright +=1; delay(fadeSpeed); } }

Эти три цикла for полностью увеличивают яркость каждого цвета за время, указанное значением fadeSpeed. Наконец, вам нужно создать метод TurnOff (): void TurnOff() { for (int i = 0; i < 256; i++) { analogWrite(GREEN_LED, brightness); analogWrite(RED_LED, brightness); analogWrite(BLUE_LED, brightness); brightness -= 1; delay(fadeSpeed); }}void loop() {} Этот метод применяет нашу переменную яркости ко всем трем цветным выводам и уменьшает их до нуля в течение определенного периода времени. Нам также нужен метод пустого цикла, чтобы избежать ошибок компиляции.

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

Плавное включение светодиодной ленты на Ардуино

Теперь вы должны увидеть, что ваша светодиодная лента Ардуино наращивает яркость, удерживая белый оттенок в течение 5 секунд, а затем равномерно исчезает до нуля:

Если у вас возникли трудности, дважды проверьте свою проводку и код.

Ардуино и адресная светодиодная лента

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

Теперь, когда мы рассмотрели схему с обычной светодиодной лентой, перейдем к адресным светодиодным лентам  SPI RGB лента.

Светодиодная лента Ардуино – Яркие идеи.

Эти ленты требуют меньшего количества компонентов для запуска, и есть некоторая свобода в отношении именно того, какие значения компонентов вы можете использовать. Конденсатор в этой цепи гарантирует, что светодиоды 5v получают постоянный источник питания. Резистор становится гарантом того, что сигнал данных, полученный от Arduino, не загружен всяческими помехами.

Вам понадобится:

● Светодиодная лента 5v WS2811/12/12B; Все три модели имеют встроенные микросхемы и работают одинаково.

● 1 x Arduino Uno или аналогичная совместимая плата;

● 1 x резистор 220-440 Ом;

● 1 x конденсатор microFarad 100-1000 (все, что между этими двумя значениями, отлично подойдет);

● Макет и монтажные провода;

● Блок питания 5 В.

Настройте схему, как показано на рисунке:

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

На этот раз мы задействуем Arduino, используя источник питания 5 В. Это позволит устройству работать автономно

Вы можете понять, какая сторона прикрепляется к рейке земля, ища знак минуса (-) на корпусе конденсатора. На этот раз мы задействуем Arduino, используя источник питания 5 В. Это позволит устройству работать автономно.

Во-первых, убедитесь, что ваша плата может работать с 5 В, прежде чем присоединить ее к источнику питания. Почти все платы работают на 5V через USB-порт, но штыри питания на некоторых могут иногда пропускать регуляторы напряжения и превращать их в поджаренные тосты.

Кроме того, рекомендуется убедиться, что несколько отдельных источников питания не подключены к Arduino – отсоединяйте USB-кабель всякий раз, когда используете внешний источник питания.

Светодиодная лента Ардуино – Бегущий огонь или световая волна

Чтобы безопасно запрограммировать нашу плату, отсоедините линию VIN от линии электропередач. Вы подключите ее позже обратно.

Присоедините свой Arduino к компьютеру и откройте Arduino IDE. Убедитесь, что у вас правильный номер платы и порта, выбранный в меню «Сервис»> «Сервис и инструменты»> «Порт».

Мы будем использовать библиотеку FastLED для тестирования нашей установки. Вы можете добавить библиотеку, нажав на Эскиз> Включить библиотеку> Управление библиотеками и поиск FastLED. Нажмите «Установить», и библиотека будет добавлена в среду IDE.

В разделе «Файл»> «Примеры»> «FastLED» выберите эскиз DemoReel100. В этом эскизе задействованы различные эффекты, которые можно сделать с помощью светодиодных полос WS2812, и невероятно легко настроить.

Все, что вам нужно изменить, — это переменная DATA_PIN, чтобы она соответствовала значку 13 и переменной NUM_LEDS для определения количества светодиодов, находящихся в полосе, которую вы используете. В этом случае я применяю только небольшую линию из 10 светодиодов, вырезанных из более длинной полосы.

Используйте большее количество для красивейшего светового шоу!

Загрузите эскиз на свою плату, отсоедините USB-кабель и включите источник питания 5 В.

Наконец, подключите VIN Arduino к линии электропередач и наслаждайтесь представлением.

Светодиодная лента Ардуино – Безграничные возможности

Демо-эскиз демонстрирует некоторые из многих возможных комбинаций эффектов, которые могут быть достигнуты с помощью светодиодных лент. Наряду с тем, что они являются украшением интерьера, их также можно использовать для практических целей. Хорошим проектом будет создание вашей собственной атмосферы для медиацентра или рабочего места.
Хотя эти полосы определенно функциональнее, чем SMD5050, пока не списывайте со счетов стандартные 12-вольтовые светодиодные полосы. Они являются непревзойденными с точки зрения цены. Плюсом будет то, что существует огромное количество приложений для светодиодных лент.

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

Понравилась статья? Поделить с друзьями:
  • Как позвонить адресную ленту
  • Как позвонить администрации вконтакте
  • Как позвонить администратору теле2
  • Как позвонить администратору такси максим
  • Как позвонить администратору сайта одноклассники