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

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

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

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

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

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

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

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

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

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

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

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

Светодиодная лента на базе WS2812B

Отличие адресной LED-ленты от стандартной RGB заключается в том, что яркость и соотношение цветов каждого элемента регулируются отдельно. Это позволяет получить световые эффекты, принципиально недоступные для других типов осветительных приборов. Управление свечением адресной LED-ленты производится известным способом – с помощью широтно-импульсной модуляции. Особенностью системы является оснащение каждого светодиода своим собственным ШИМ-контроллером. Микросхема WS2812B представляет собой трехцветный светоизлучающий диод и схему управления, объединенные в одном корпусе.


Внешний вид светодиода с драйвером.

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


Внешний вид адресной ленты.

Шина управления микросхемы WS2812B состоит из одной линии – по ней передаются данные

Данные кодируются в виде импульсов постоянной частоты, но с разной скважностью. Один импульс – один бит. Длительность каждого бита составляет 1,25 мкс, нулевой бит состоит из высокого уровня длительностью 0,4 мкс и низкого 0,85 мкс

Единица выглядит, как высокий уровень в течение 0,8 мкс и низкий 0,45 мкс. Каждому светодиоду отправляется посылка из 24 бит (3 байт), дальше следует пауза в виде низкого уровня в течение 50 мкс. Это означает, что дальше будут передаваться данные для следующего LED, и так для всех элементов цепочки. Завершается передача данных паузой в 100 мкс. Это означает, что цикл программирования ленты завершен, и можно отправлять следующий набор пакетов данных

Длительность каждого бита составляет 1,25 мкс, нулевой бит состоит из высокого уровня длительностью 0,4 мкс и низкого 0,85 мкс. Единица выглядит, как высокий уровень в течение 0,8 мкс и низкий 0,45 мкс. Каждому светодиоду отправляется посылка из 24 бит (3 байт), дальше следует пауза в виде низкого уровня в течение 50 мкс. Это означает, что дальше будут передаваться данные для следующего LED, и так для всех элементов цепочки. Завершается передача данных паузой в 100 мкс. Это означает, что цикл программирования ленты завершен, и можно отправлять следующий набор пакетов данных.


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

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

Технические характеристики элементов WS2812B

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

Габариты LED5×5 мм
Частота модуляции ШИМ400 Гц
Потребляемый ток на максимальной яркости60 мА на один элемент
Напряжение питания5 вольт

Arduino и WS2812B

Популярная в мире платформа Ардуино позволяет создавать скетчи (программы) для управления адресными лентами. Возможности системы достаточно широки, но если их на каком-то уровне перестанет хватать, полученных навыков будет достаточно, чтобы безболезненно перейти на С++ или даже на ассемблер. Хотя начальные знания проще получить на Arduino.

Difference between WS2801, WS2811 and WS2812

Before we start, we should probably identify the differences between the WS2801, WS2811 and WS2812 based strips (also called “strands”).
Most projects and descriptions out there discus these sometimes mixed, and for one who dives into LED strips for the first time, these models numbers might be confusing.

The model numbers WS2801, WS2811 and WS2812 actually refer to different “things”.

The WS2801 and WS2811 are LED driver IC’s (Integrated Circuits).
These IC’s can control up to 3 LEDs, typically Red, Green and Blue. Positioned close together, so you as a viewer will see the mixed color result.
The WS2801 used to be quite popular but the WS2812/WS2811 appears to be taking over the reigns.

The WS2812 however is a WS2811 placed inside a 5050 LED package.
The 5050 LED is a very common 3 LED (Red, Green, Blue) package, in one 5mm x 5mm case.
A WS2812 is the same package but with an additional WS2811 LED driver IC on board.

In the illustration below you’ll see the difference:
On the left a 5050 RGB LED, on the right a WS2812 which combines a 5050 RGB LED with a WS2811 controller.
Note how the layout of the “silver” tracks are almost identical in both images, yet the black (IC) block and the tiny wires are different (right).

5050 RGB LED (left) and WS2812 (right)

Where the WS2801 strips needed 4 wires, the WS2811/WS2812 strips only needs 3 wires. The WS2801 uses a separate clock line, which can be seen as an advantage, whereas the WS2811/WS2812 does not. The WS2811/WS2812 depends on sending data matching a very tight timing. The advantage of the WS2812 though, is that production of these combo’s in strips is easier and therefor cheaper, and each RGB LED takes much less space on strips.

Your selection here depends on what type of microcontroller you’ll be using and which of these are supported by the application or library you intend to use.

For example, Arduino based projects work fine with any of these, since everything runs real-time.
When using a Raspberry Pi however, using a WS2811/WS2812 can be a little bit more challenging due to the strict timing needs. A Raspberry Pi typically runs Linux, which is not a so-called Real-time Operating System, where intended timing might be disrupted by other background activities.

In my little Arduino project I’ll be using the WS2812.

Specifications

I have made the spec sheets of the 5050 LED, WS2801, WS2811 and WS2812 available as PDF:

– WS2801 Spec Sheet
– WS2811 Spec Sheet
– WS2812 Spec Sheet
– 5050 LED Spec Sheet

These spec sheets can also be downloaded with all 4 PDF’s bundled in a single ZIP file:

Filename: LED-Specification-sheets.zip
Platform: Undefined
Version: 
File size: 1.1 MB
Date: 2014-01-03
 Download Now 
Send me a cup of Coffee    

Теперь тайминги

Изначально на ножке стоит лог. единица. Для перевода светодиода в режим получения сигнала необходимо подать логический ноль в течение 5 мс. После этого идут биты данных: для передачи «нулевого» символа необходимо подать логическую единицу, и сразу подать логический ноль. Для передачи «единичного» символа необходимо подать логическую единицу, подождать 3 мкс и подать логический ноль. Интервал между сигналами от 6 до 20 мкс. Временные интервалы можете увидеть на осциллограммах в разных временных развертках.(рис3, рис2, рис1).

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

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

Пока с проблемой справился таким образом: в исходном состоянии стоит лог. единица, даю сигнал инициализации (5 мс), 24 бита — пакет данных для первого светодиода, жду 30 мкс, снова даю сигнал инициализации (5 мс), и отправляю информационные биты для всех светодиодов.

Случайный режим свечения светодиодов

В этом примере мы будем использовать функцию random(num1, num2) чтобы сгенерировать случайное число в интервале от num1 и num2 и на основе этого выбрать цвет и светодиод.

Arduino

#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);
}

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_NeoPixelpixels(NUMPIXELS,PIN,NEO_GRB+NEO_KHZ800);

 
#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels
 

voidsetup(){

pixels.begin();

}
 

voidloop(){

pixels.clear();

pixels.setPixelColor(random(,7),random(,255),random(,255),random(,255));

pixels.show();

delay(500);

}

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

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

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

Ремонт системы освещения светодиодной RGB лентой

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

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

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

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

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

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

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

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

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

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

Arduino для начинающих. Урок 1. Мигающий светодиод

Обратите внимание, что конденсатор должен быть правильной ориентации. Вы можете понять, какая сторона прикрепляется к рейке земля, ища знак минуса (-) на корпусе конденсатора. На этот раз мы задействуем Arduino, используя источник питания 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 светодиодов, вырезанных из более длинной полосы.

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

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

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

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

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

Проверка отдельного светодиода в ленте

Как прозвонить светодиодную ленту, точнее каждый отдельный диод – порядок действий:

  1. Подготовить тестер – мультиметр, переведя его в режим «Проверка диодов».
  2. С соблюдением полярности прикоснуться щупами прибора к контактным дорожкам светодиода.
  3. При касании диод засветится, но немного, не сильно ярко. При отсутствии свечения надо взглянуть на экран мультиметра, где будет показано, какое напряжение поступает.

Мультиметр

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

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

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

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

Временная диаграмма управления модулем WS2812B

Если аппаратные соединения между модулями WS2812B просты – питание (5 В и GND) и данные (выходной сигнал одного модуля идет на вход следующего модуля), – то о протоколе связи этого сказать нельзя. В модулях WS2812B используется однопроводный интерфейс с протоколом NRZ. Пакет данных, содержащих значения RGB, посылается со скоростью 800 Кбит/с.

Рисунок 2.Представление «0» и «1» в коде
NRZ для модуля WS2812B.

Пакет передается после периода сброса (RET или RES), когда сигнал данных удерживается на низком уровне более 50 мкс. Как видно из Рисунка 2, и «0», и «1» начинаются с «лог. 1», а разница между ними заключается в относительной длительности состояний высокого (TxH) и низкого (TxL) уровней (Таблица 1).

Таблица 1.Временные соотношения сигналов передачи данных
T0HКод 0, длительность высокого уровня0.35 мкс±150 нс
T1HКод 1, длительность высокого уровня0.9 мкс±150 нс
T0LКод 0, длительность низкого уровня0.9 мкс±150 нс
T1LКод 1, длительность низкого уровня0.35 мкс±150 нс
Время передачи данных (TxH + TxL = 1.25 мкс ± 150 нс)
СБРОСДлительность низкого уровняБолее 50 мкс 

Поскольку цвет каждого RGB светодиода задается с использованием 8 бит, для определения цвета каждого модуля WS2812B требуется 24 бита. На Рисунке 3 показана 24-битная последовательность, адресованная одному модулю WS2812B. Данные посылаются в порядке G-R-B, причем младший значащий бит передается первым.

Рисунок 3.24-битный пакет данных для модуля WS2812B. Младший значащий бит зеленого
цвета (G7) передается первым.

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

Сравнение первой версии часов с данной реализацией.

Подобные часы я уже собирал около года назад, но допустил ряд ошибок:

  • Напечатал пластиком PLA.И буквально через месяц пластик начал трескаться, и часы потеряли свою привлекательность. Данную версию напечатал пластиком PETG.
  • Размер матрицы не позволяла водить время в формате 24 часа, что было исправлено в данном весе часов.
  • В первой версии не было фальш – панелей, которые прикрывают провода. Что исправлено данной версии.
  • В данной версии также реализовал вывод температуры со встроенного датчика модуля часов DS3231.Данные не очень точные, это связано с тем, что модуль установлен в корпус. И реагировать на изменение температуры будет медленно. Но в помещении нет резких перепадов температуры, и данной точности будет достаточно.
  • Покрасил корпус часов матовым серым цветом, что делать часы более красивыми.

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

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

Понравился проект Часы – матрица на Arduino и адресных светодиодах WS2812B? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу , в группу на .

Спасибо за внимание!

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Скачивая материал, я соглашаюсь с
Правилами скачивания и использования материалов.

Код часов на Arduino и светодиодах WS2812B.ino11 Kb 2255 Скачать

библиотека FastLED .zip331 Kb 1326 Скачать

библиотека DS3232RTC .zip48 Kb 1315 Скачать

Файлы для печати .zip958 Kb 1270 Скачать

RGB лента длиной 15-20 метров

Если нужно подключить 15, 20 метров или более, такой вариант только с одним контроллером уже не подойдет. Есть два выхода:

использовать два контроллера

использовать RGB усилитель

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

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

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

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

Выбор контроллера для адресной ленты

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

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

Что касается выбора мощности блока питания, то здесь
ориентируйтесь на следующий показатель. Один светодиод для моделей sw2812b – это
примерно 60мА при белом свете.

Считайте их общее количество в ленте, берите запас в 30% и подбирайте подходящий блок.

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

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

Протокол

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

Будет интересно Что такое биполярный транзистор

Поделитесь в социальных сетях:FacebookX
Напишите комментарий