В настоящее время адресные светодиодной ленты (NeoPixel LEDs) на базе светодиодов WS2812 находят широкое применение в различных областях. В данной статье мы рассмотрим подключение подобной ленты к плате Arduino и научимся управлять ею в различных режимах.
Ранее на нашем сайте применение адресной светодиодной ленты (NeoPixel LEDs) рассматривалось в следующих проектах:
Также у нас теперь на сайте есть более подробная статья про подключение подобной ленты к плате Arduino, но в ней использована более сложная библиотека для работы с данной лентой, но зато позволяющая создать более «навороченные» режимы цветовых схем ленты.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Адресная светодиодная лента (WS2812 RGB LED Ring Module) (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158
Что такое NeoPixel?
После своего изобретения в 1962 году светодиоды стали неотъемлемой частью нашей жизни. В большинстве электронных проектов используются светодиоды одного цвета, но использование светодиодов разных цветов выглядело настолько привлекательно, что следом за обычными светодиодами появились трехцветные светодиоды (RGB LEDs) – их еще называют полноцветными или многоцветными светодиодами. На нашем сайте можно прочитать статью о подключении подобного светодиода к плате Arduino.
RGB светодиод способен излучать любой цвет, комбинируя в нужной пропорции 3 основных базовых цвета – красный, зеленый и синий. Например, красного и синего цвета формирует фиолетовый цвет. То есть если каждым из базовых цветов управлять с помощью соответствующих им значений от 0 до 255, то можно сформировать любой цвет. Например, фиолетовый (magenta) цвет в этом случае будет формироваться совокупностью значений 255 0 255 (в шестнадцатеричном коде — 2550255 = # FF00FF). RGB светодиоды формируют множество цветов, основываясь на этой модели.
Адресуемые (адресные) светодиоды (addressable LEDs) – это новое поколение светодиодов, включающих помимо RGB светодиоды также микросхему (контроллер) управления им. В настоящее время для управления подобными светодиодами наиболее часто используется контроллер WS2812, который позволяет получить доступ к множеству светодиодов с помощью одного цифрового контакта по интерфейсу one wire (1-wire), используя адреса светодиодов.
Почему NeoPixel?
Способность управлять отдельно каждым светодиодом в адресной светодиодной ленте дает вам возможность создать уникальные визуальный эффекты для своих проектов. Но помните о том, что если вам требуются очень высокие скорости переключения светодиодов, то использование подобной адресной светодиодной ленты нежелательно. Еще одним достоинством адресной светодиодной ленты NeoPixel является ее низкая цена по сравнению с другими типами адресуемых светодиодов. Светодиоды NeoPixel доступны в форме колец, лент, прямоугольников и поверхностей круглой формы – вы можете выбрать любой ее тип для своих проектов.
Схема проекта
Схема подключения адресной светодиодной ленты WS2812 к плате Arduino представлена на следующем рисунке.
Примечание: если вы используете адресную светодиодную ленту с большим количеством светодиодов, то в этом случае рекомендуется подключать конденсатор большой емкости (приблизительно 1000 мкФ) параллельно + и – источника питающего напряжения.
Объяснение программы Arduino для работы с адресной светодиодной лентой
Прежде чем начинать работу с адресной светодиодной лентой в Arduino необходимо скачать и установить библиотеку для нее — NeoPixel Adafruit library.
1 |
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); |
Эта функция определяет число светодиодов и контакт Arduino для управления ими.
1 |
pixels.begin(); |
Эта функция инициализирует адресную светодиодную ленту.
1 |
pixel.setBrightness(b); |
Функция, устанавливающая яркость свечения светодиодов. 1 – минимальная яркость, 255 – максимальная.
1 |
pixels.setPixelColor(Wich LED,Wich color(Red,Green,Blue)); |
Эта функция задает цвет свечения светодиода с помощью системы RGB, при этом задается номер светодиода (от 0 до NUMPIXELS-1).
1 |
pixels.show(); |
Функция, которая активирует заданные настройки, то есть включает светодиоды с заданными ранее настройками.
Теперь рассмотрим примеры программ, позволяющие реализовать различные варианты управления светодиодами в адресной светодиодной ленте.
Раздельное управление светодиодами NeoPixel
В этом примере программы мы включаем светодиоды в ленте и управляем цветом и интенсивностью свечения каждого светодиода по отдельности использую плату Arduino UNO.
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 <Adafruit_NeoPixel.h> #define PIN 6 // контакт для управления светодиодами #define NUMPIXELS 7 // столько светодиодов в сборке Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); #define DELAYVAL 500 // Time (in milliseconds) to pause between pixels (время паузы в миллисекундах между пикселами) void setup() { pixels.begin(); } void loop() { pixels.clear(); pixels.setBrightness(10); pixels.setPixelColor(0, pixels.Color(255, 255, 255)); pixels.setPixelColor(1, pixels.Color(255, 0, 0)); pixels.setPixelColor(2, pixels.Color(0, 255, 0)); pixels.setPixelColor(3, pixels.Color(0, 0, 255)); pixels.setPixelColor(4, pixels.Color(255, 0, 255)); pixels.setPixelColor(5, pixels.Color(255, 255, 0)); pixels.setPixelColor(6, pixels.Color(0, 255, 255)); pixels.show(); } |
Мигание светодиодами NeoPixel в ленте
В этом примере мы установим мигающий режим светодиодов в ленте NeoPixel – для этого все светодиоды должны включаться и выключаться одновременно, при этом цвет светодиодов может быть различный.
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_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); } |
Постепенное затухание свечения светодиодов в ленте
Постепенное затухание свечения светодиодов (fading) – это еще один из замечательных эффектов светодиодов NeoPixel. Чем медленнее происходит затухание, тем более впечатляющим является этот эффект.
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 |
#include <Adafruit_NeoPixel.h> #define PIN 6 #define NUMPIXELS 7 Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); #define DELAYVAL 500 // Time (in milliseconds) to pause between pixels void NeoFade(int FadeSpeed) { int fspeed; for (int i = 0; i < NUMPIXELS; i++) { pixels.setPixelColor(i, 165, 242, 243); } for (int j = 255; j > 0; j=j-2) { pixels.setBrightness(j); pixels.show(); delay(FadeSpeed); } } void setup() { pixels.begin(); } void loop() { NeoFade(100); } |
Случайный режим свечения светодиодов
В этом примере мы будем использовать функцию random(num1, num2) чтобы сгенерировать случайное число в интервале от num1 и num2 и на основе этого выбрать цвет и светодиод.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <Adafruit_NeoPixel.h> #define PIN 6 #define NUMPIXELS 7 Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); #define DELAYVAL 500 // Time (in milliseconds) to pause between pixels void setup() { pixels.begin(); } void loop() { pixels.clear(); pixels.setPixelColor(random(0, 7), random(0, 255), random(0, 255), random(0, 255)); pixels.show(); delay(500); } |
Режим радуги для светодиодов NeoPixel
В сети есть интересный инструмент для удобного создания различных эффектов для адресной светодиодной ленты NeoPixel — NeoPixel Effects Generator. В нем вы можете задать число светодиодов и контакт платы Arduino для управления ими и после создания в этом генераторе необходимых эффектов для вашей ленты вы можете в этом генераторе сформировать готовый код для платы Arduino.
Для этого выполните следующую последовательность шагов.
1. На сайте генератора нажмите Add Led Strip (добавить светодиодную ленту).
2. Задайте количество светодиодов в ленте и номер контакта Arduino, с которого будет осуществляться управление ими.
3. После этого нажмите на Add Effect (добавить эффект) и выберите желаемый эффект.
4. Задайте цвет свечения светодиодов.
5. Нажмите на “generate Arduino code” и после этого для вас будет сформирован код программы для Arduino, который вы можете непосредственно вставить в Arduino IDE.
8 ответов к “Подключение адресной светодиодной ленты WS2812 (NeoPixel LEDs) к Arduino”
Здравствуйте. Подскажите, можно на адресной светодиодной ленте управлять каждым светодиодом отдельно?
Например с/диод №1 — красный цвет, с/диод №2 — мигает синий 1 Гц, с/диод №3 — мигает зеленый 0,5 Гц?
Добрый день. Да, конечно, в приведенной статье рассмотрено же индивидуальное управление каждым светодиодом с помощью функции pixels.setPixelColor. Для вашего примера нужно просто задать различные временные задержки включения/выключения необходимых вам светодиодов
Здравствуй, спасибо за статью и то, что указано на классный конструктор эффектов, сделал себе радугу со своими цветами, скоростью и т.д, но есть проблема, может подскажете. Не могу изменить яркость, шпарит очень ярко и сильно, куда только не пытался впихнуть pixel.setBrightness(); не получается и все, может знаете как уменьшить яркость, спасибо.
Добрый вечер. Попробуйте поуправлять и изменять яркость светодиодов ленты с помощью другой библиотеки для работы с ней, пример использования которой приведен в данной статье.
Просто я в конструкторе сделал нужный эффект, а он работает на неопикселе, но нет ни строчки про яркость, как будто она только в макс. яркость выведена, а фаст лед или микро лед не получается эффект такой замутить (ну туповат в этом). Просто если б как то забить строчку яркости и все в принципе
А вы проверяли, может есть какая то аппаратная неисправность в регулировки яркости вашей светодиодной ленты? Именно для этой цели и можно попробовать ее регулировать с помощью другой библиотеки.
Есть и более кардинальный способ — вырезать из библиотеки кусок кода, отвечающий за регулировку яркостью, и вставить его в свою программу
Могу конечно ошибаться, но попробуйте задать цвет не 255, а 230 или меньше, по идее тусклее должно быть
Да, это тоже должно помочь