Светодиодные RGB ленты WS2811 популярны благодаря своим индивидуально адресуемым светодиодам RGB, позволяющим создавать захватывающие световые эффекты в различных проектах, включая домашний декор, художественные инсталляции и электронику своими руками. В данной статье мы рассмотрим внутреннее устройство светодиодной ленты WS2811 и принципы ее работы, а также познакомим вас с процессом подключения и управления светодиодными лентами WS2811 с помощью платы Arduino.
Кратко принцип работы нашего проекта вы можете посмотреть в следующем видео.
Ранее на нашем сайте мы рассматривали создание аркадной игры на Arduino и светодиодной ленте WS2811, а также подключение адресной цветной светодиодной ленты Neopixel к Arduino и подключение к Arduino светодиодной ленты WS2812.
Необходимые компоненты
- Светодиодная лента WS2811 (купить на AliExpress).
- Плата Arduino Nano (купить на AliExpress).
Что такое RGB светодиод
RGB LED означает красный, зеленый и синий светоизлучающий диод. Это тип светодиода, который содержит три отдельных светодиода в одном корпусе, каждый из которых способен излучать красный, зеленый или синий свет независимо. Комбинируя различную интенсивность этих основных цветов, светодиод RGB может создавать широкий спектр цветов, включая полный спектр оттенков.
Распиновка светодиода RGB
Анодное соединение: Самый длинный контакт RGB-светодиода с общим анодом — это анодный (+). Он подключается к источнику положительного напряжения, обычно 5 В. Этот анодный вывод используется всеми тремя цветными светодиодами.
Катодное соединение: имеется три более коротких контакта, каждый из которых представляет катодное (-) соединение отдельных цветных светодиодов (красного, зеленого и синего). Эти катодные выводы независимы и не связаны друг с другом.
Типы RGB-светодиодов
Существует три основных типа RGB-светодиодов.
RGB-светодиод с общим анодом: в этом типе анодная (+) клемма красного, зеленого и синего светодиодов соединена вместе и используется как общий контакт. Каждая катодная (-) клемма отдельных светодиодов подключена к отдельному контакту. Для свечения определенного цвета общий вывод подключается к положительному напряжению, а нужные катоды светодиода подключаются к земле (GND) через соответствующие резисторы.
RGB-светодиод с общим катодом. В этом типе катодная (-) клемма красного, зеленого и синего светодиодов соединена вместе и используется как общий вывод. Каждая анодная (+) клемма отдельных светодиодов подключена к отдельному контакту. Для свечения определенного цвета общий вывод подключается к земле (GND), а аноды нужных светодиодов подключаются к положительному напряжению через соответствующие резисторы.
Адресный светодиод RGB: также известный как индивидуально адресуемый или цифровой светодиод RGB. Этот тип включает в себя встроенные микросхемы (интегральные схемы) в каждом корпусе светодиодов. Эти микросхемы позволяют управлять каждым светодиодом независимо, что позволяет создавать сложные световые эффекты и узоры. Адресные светодиоды RGB обычно управляются через линию передачи данных, например протоколы WS2811, WS2812 или APA102.
Принцип работы RGB-светодиода
Управление цветами: чтобы зажечь определенный цвет, вам необходимо создать путь тока от общего анода (+) к нужным катодным контактам (R, G, B). Подключив катодные контакты к земле (GND) через соответствующие токоограничивающие резисторы, вы можете контролировать интенсивность каждого цветного светодиода в составе RGB светодиода.
Чтобы включить красный светодиод, вам необходимо подключить катод красного светодиода (R) к земле (GND), активировав соответствующий вывод GPIO вашего микроконтроллера или Arduino.
Аналогичным образом вы можете управлять зеленым светодиодом (G) и синим светодиодом (B), подключив их соответствующие катодные контакты к земле (GND) через контакты GPIO.
Смешивание цветов: регулируя интенсивность каждого цвета светодиода, вы можете создавать различные цветовые комбинации. Изменение тока, протекающего через каждый катодный вывод, позволяет смешивать разные уровни красного, зеленого и синего света, в результате чего получается широкий диапазон цветов.
Например, если вы хотите создать фиолетовый цвет, вы должны активировать красный (R) и синий (B) светодиоды, подключив их катоды к земле (GND), оставив при этом зеленый (G) светодиод неактивным.
Контролируя состояние включения/выключения и интенсивность каждого катодного соединения, вы можете добиться разных цветов, включая белый (все три светодиода горят), разные оттенки красного, зеленого, синего и различные комбинации между ними.
Распиновка драйвера светодиода WS2811
GND - этот контакт подключается к земле (GND) или опорному сигналу 0 В источника питания.
DATA - этот контакт является входом данных для драйвера WS2811. Он получает управляющие данные от микроконтроллера или Arduino, обычно через цифровой выходной контакт.
VCC - этот контакт подключается к положительному напряжению питания (VCC) источника питания. WS2811 обычно работает при напряжении 5 В, поэтому этот контакт обычно подключается к источнику питания +5 В.
R-OUT - этот контакт является выходом канала красного цвета адресуемого светодиода RGB. Он подключен к аноду (+) красного светодиода в корпусе светодиодов RGB.
G-OUT - этот контакт является выходом канала зеленого цвета адресуемого светодиода RGB. Он подключен к аноду (+) зеленого светодиода в корпусе светодиодов RGB.
B-OUT - этот контакт является выходом канала синего цвета адресуемого светодиода RGB. Он подключен к аноду (+) синего светодиода в корпусе светодиодов RGB.
DOUT - этот контакт является выходом данных для последовательного подключения нескольких микросхем WS2811. Это позволяет передавать управляющие данные на следующую микросхему WS2811 в цепочке.
Принципиальная схема драйвера WS2811
В этой схеме источник питания 5 В используется для обеспечения постоянного выходного тока примерно 18,5 мА на выходной контакт драйвера WS2811. Это обеспечивает постоянную люминесценцию и цветовую температуру светодиода RGB. Неполяризованный конденсатор емкостью 104 (0,1 мкФ) действует как развязывающий конденсатор для фильтрации компонентов переменного тока в шине питания. Два дополнительных резистора сопротивлением 33 Ом соответствуют импедансу порта данных. На схеме показана конфигурация RGB-светодиода с общим анодом.
Принципы работы светодиодного драйвера WS2811
Драйвер WS2811 получает данные в определенном формате, который представляет желаемый цвет и интенсивность для каждого светодиода. Управляющие данные передаются последовательно, и каждый светодиод в цепочке интерпретирует соответствующий сегмент данных для определения своего цветового выхода.
Каждый бит данных, отправляемый драйверу WS2811, состоит из высокого (high) или низкого (low) уровня сигнала, который представляет интенсивность цвета для конкретного светодиода. Время достижения этих высоких и низких уровней имеет решающее значение. WS2811 использует определенную длительность, чтобы различать бит «0» и «1». Например, короткий импульс high, за которым следует длинный импульс low, может представлять бит «0», тогда как длинный импульс high, за которым следует короткий импульс low, может представлять бит «1».
Драйвер WS2811 ожидает, что данные будут передаваться в кадрах, где каждый кадр состоит из серии битов, представляющих желаемые цвета для всех подключенных светодиодов. Время между кадрами важно для отделения одного кадра от другого и обеспечения правильной синхронизации. Обычно короткий сигнал low используется для обозначения конца одного кадра и начала следующего.
Драйверу WS2811 требуется импульс сброса для инициализации процесса приема данных. Этот импульс сброса должен иметь длительность более 50 мкс, чтобы гарантировать, что микросхема WS2811 находится в правильном состоянии для начала приема данных.
Требования к синхронизации драйвера WS2811 весьма строгие, а для надежной работы время сигнала должно находиться в определенных пределах. Отклонения времени за пределы этих допусков могут привести к повреждению данных и неточному отображению цвета.
Смешение цветов: драйвер WS2811 управляет адресными светодиодами RGB (красный, зеленый, синий). Чтобы добиться разных цветов, он изменяет интенсивность каждого цветового канала, регулируя рабочий цикл ШИМ-сигнала. Комбинируя разные уровни красного, зеленого и синего цветов, драйвер может создавать широкий спектр цветов. Например, смешивание полной интенсивности красного и зеленого дает желтый цвет, а смешивание полной интенсивности красного и синего дает пурпурный цвет.
ШИМ-управление : ШИМ (широтно-импульсная модуляция) — это метод, который модулирует ширину импульсов цифрового сигнала для управления средней мощностью или интенсивностью соответствующего выходного сигнала. Драйвер WS2811 использует ШИМ для управления яркостью каждого светодиода. Он быстро включает и выключает светодиод с определенной частотой, регулируя продолжительность включенного состояния (рабочий цикл) для управления воспринимаемой яркостью. Изменяя рабочий цикл ШИМ-сигнала для каждого цветового канала, драйвер WS2811 может создавать разные уровни интенсивности для красного, зеленого и синего цветов, обеспечивая точное управление цветом.
Компоненты светодиода WS2811
Базовая схема WS2811 состоит из следующих компонентов:
- Микросхема WS2811: Сама микросхема WS2811 является сердцем схемы. Он объединяет схемы управления и схемы драйвера, необходимые для управления светодиодами RGB.
- Светодиоды RGB: WS2811 предназначен для управления светодиодами RGB, которые содержат три отдельных светодиодных элемента: один для красного, один для зеленого и один для синего цвета. Каждый светодиод может управляться независимо для получения широкого спектра цветов.
Микросхемы WS2811 подключаются последовательно, то есть выход данных одной микросхемы подключается к входу данных следующей микросхемы, что позволяет последовательно управлять несколькими светодиодами.
Распиновка светодиодной ленты WS2811
Как вы можете видеть из представленного рисунка, у контактов ленты WS2811 есть "мужское" и "женское" окончание. Женское окончание можно соединить с другим мужским окончанием, удлиняя таким образом длину ленты.
Но как бы вы ни хотели удлинить ленту WS2811 до бесконечности, используя только плату Arduino, но регулятор напряжения Arduino допускает максимальный ток до 1 А. Поэтому мы предлагаем использовать внешний источник питания 5 В.
Схема проекта
Схема подключения светодиодной ленты WS2811 к плате Arduino представлена на следующем рисунке.
В схеме вам необходимо сделать следующие соединения. Подключите положительную клемму источника питания 5 В к выводу +5 В светодиодной ленты WS2811. Подключите отрицательную клемму источника питания 5 В к контакту GND светодиодной ленты. Подключите вывод данных светодиодной ленты к цифровому контакту 5 платы Arduino. Запишите номер контакта для дальнейшего использования в программе.
Настройка программного обеспечения
Откройте Arduino IDE и в ней установите библиотеку FastLED, выбрав в ArduinoIDE пункт меню: Sketch -> Include Library -> Manage Libraries -> Search for "FastLED" -> Install.
После этого загрузите в вашу плату Arduino один из представленных ниже скетчей (кодов программ).
Коды программ (скетчи) для 5 шаблонов мигания светодиодной ленты
Код для шаблона 1:
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 |
#include <FastLED.h> #define LED_PIN 5 // Replace with the pin number you used for DATA connection #define NUM_LEDS 50 // Replace with the number of LEDs in your strip #define DELAY_TIME 20 // Delay between LED movements (in milliseconds) CRGB leds[NUM_LEDS]; void setup() { FastLED.addLeds<WS2811, LED_PIN, RGB>(leds, NUM_LEDS); } void loop() { // Turn off all LEDs for (int i = 0; i < NUM_LEDS; i++) { leds[i] = CRGB::Black; } // Move the LED chaser for (int i = 0; i < NUM_LEDS; i++) { leds[i] = CRGB::Blue; // Set the current LED to blue FastLED.show(); // Update the LED strip delay(DELAY_TIME); // Delay between LED movements } // Move the LED chaser in reverse for (int i = NUM_LEDS - 1; i >= 0; i--) { leds[i] = CRGB::Green; // Set the current LED to green FastLED.show(); // Update the LED strip delay(DELAY_TIME); // Delay between LED movements } } |
Код для шаблона 2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <FastLED.h> #define LED_PIN 5 // Replace with the pin number you used for DATA connection #define NUM_LEDS 50 // Replace with the number of LEDs in your strip #define DELAY_TIME 50 // Delay between color changes (in milliseconds) CRGB leds[NUM_LEDS]; void setup() { FastLED.addLeds<WS2811, LED_PIN, RGB>(leds, NUM_LEDS); } void loop() { static uint8_t hue = 0; // Hue value for color shifting // Set all LEDs to the current hue for (int i = 0; i < NUM_LEDS; i++) { leds[i] = CHSV(hue, 255, 255); } FastLED.show(); // Update the LED strip delay(DELAY_TIME); // Delay between color changes // Shift the hue for the next frame hue++; } |
Код для шаблона 3:
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 |
#include <FastLED.h> #define LED_PIN 5 // Replace with the pin number you used for DATA connection #define NUM_LEDS 50 // Replace with the number of LEDs in your strip #define FADE_DELAY 1 // Delay between brightness changes (in milliseconds) #define MAX_BRIGHTNESS 255 // Maximum brightness value CRGB leds[NUM_LEDS]; void setup() { FastLED.addLeds<WS2811, LED_PIN, RGB>(leds, NUM_LEDS); } void loop() { // Increase brightness for (int brightness = 0; brightness <= MAX_BRIGHTNESS; brightness++) { setBrightness(brightness); delay(FADE_DELAY); } // Decrease brightness for (int brightness = MAX_BRIGHTNESS; brightness >= 0; brightness--) { setBrightness(brightness); delay(FADE_DELAY); } } void setBrightness(int brightness) { for (int i = 0; i < NUM_LEDS; i++) { leds[i] = CRGB(brightness, brightness, brightness); } FastLED.show(); // Update the LED strip } |
Код для шаблона 4:
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 <FastLED.h> #define LED_PIN 5 // Replace with the pin number you used for DATA connection #define NUM_LEDS 50 // Replace with the number of LEDs in your strip #define GRADIENT_DELAY 50 // Delay between gradient color changes (in milliseconds) #define MOVEMENT_DELAY 20 // Delay between LED movements (in milliseconds) CRGB leds[NUM_LEDS]; void setup() { FastLED.addLeds<WS2811, LED_PIN, RGB>(leds, NUM_LEDS); } void loop() { // Set the initial color gradient CRGB startColor = CRGB::Red; CRGB endColor = CRGB::Blue; // Calculate color step values int colorStepsR = (endColor.r - startColor.r) / NUM_LEDS; int colorStepsG = (endColor.g - startColor.g) / NUM_LEDS; int colorStepsB = (endColor.b - startColor.b) / NUM_LEDS; // Move the gradient effect across the LED strip for (int i = 0; i < NUM_LEDS; i++) { CRGB gradientColor = CRGB(startColor.r + (colorStepsR * i), startColor.g + (colorStepsG * i), startColor.b + (colorStepsB * i)); // Shift the gradient by moving the LEDs for (int j = 0; j < NUM_LEDS; j++) { int index = (i + j) % NUM_LEDS; leds[index] = gradientColor; } FastLED.show(); // Update the LED strip delay(MOVEMENT_DELAY); // Delay between LED movements } // Shift the colors for the next frame startColor = endColor; endColor = CRGB::Green; } |
Код для шаблона 5:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include <FastLED.h> #define LED_PIN 5 // Replace with the pin number you used for DATA connection #define NUM_LEDS 50 // Replace with the number of LEDs in your strip #define FLICKER_DELAY 20 // Delay between flicker changes (in milliseconds) CRGB leds[NUM_LEDS]; void setup() { FastLED.addLeds<WS2811, LED_PIN, RGB>(leds, NUM_LEDS); } void loop() { // Set the initial color for the candle flame CRGB flameColor = CRGB::Red; // Create a flickering effect for (int i = 0; i < NUM_LEDS; i++) { // Randomly flicker the LEDs if (random(10) < 5) { leds[i] = flameColor; } else { leds[i] = CRGB::Black; } } FastLED.show(); // Update the LED strip delay(FLICKER_DELAY); // Delay between flicker changes } |
Какой вывод управления WS2811? У Вас на схеме пин 5-DIn, 6-DOut
А по даташит наоброт пин 6 - DIn, 5- DOut
http://www.world-semi.com/ws2811-family/307.html
Возможно, у меня опечатка. В таких вопросах лучше, конечно, ориентируйтесь на даташит именно той модификации ленты, которую вы приобрели
Ещё не делали MPPT на ардуинке?
К сожалению еще нет