Как да свържете адресируема LED лента WS2812B към Arduino
Развитието на осветителните технологии, базирани на светодиоди, продължава бързо. Само вчера управляваните от контролер RGB ленти, чиято яркост и цвят могат да се регулират с помощта на дистанционно управление, изглеждаха като чудо. Днес на пазара се появиха лампи с още повече функции.
LED лента на базата на WS2812B
Разликата между адресируемата LED лента и стандартната RGB нещо е яркостта и съотношението на цветовете на всеки елемент се регулират отделно. Това ви позволява да получите светлинни ефекти, които са принципно недостъпни за други видове осветителни устройства. Светенето на адресируемата LED лента се управлява по познат начин - с помощта на широчинно-импулсна модулация. Характеристика на системата е да оборудва всеки светодиод със собствен PWM контролер. Чипът WS2812B е трицветен диод, излъчващ светлина и управляваща верига, комбинирани в един пакет.
Елементите се комбинират в захранваща лента паралелно и се управляват чрез серийна шина - изходът на първия елемент е свързан към контролния вход на втория и т.н. В повечето случаи серийните шини са изградени на две линии, едната от които предава стробове (тактови импулси), а другата - данни.
Контролната шина на чипа WS2812B се състои от една линия - през нея се предават данни. Данните се кодират като импулси с постоянна честота, но с различни работни цикли. Един импулс - един бит. Продължителността на всеки бит е 1,25 µs, нулевият бит се състои от високо ниво с продължителност 0,4 µs и ниско ниво от 0,85 µs. Устройството изглежда като високо ниво за 0,8 µs и ниско ниво за 0,45 µs. Към всеки светодиод се изпраща 24-битов (3-байтов) пакет, последван от пауза на ниско ниво за 50 µs. Това означава, че ще се предават данни за следващия светодиод и така нататък за всички елементи от веригата. Прехвърлянето на данни завършва с пауза от 100 µs. Това показва, че цикълът на програмиране на лентата е завършен и следващият набор от пакети данни може да бъде изпратен.
Такъв протокол дава възможност за преминаване с една линия за предаване на данни, но изисква точност при поддържане на интервали от време. Разминаването е разрешено не повече от 150 ns. Освен това шумоустойчивостта на такъв автобус е много ниска. Всяка интерференция с достатъчна амплитуда може да бъде възприета от контролера като данни. Това налага ограничения върху дължината на проводниците от управляващата верига. От друга страна, това го прави възможно проверка на състоянието на лентата без допълнителни устройства.Ако включите захранването на лампата и докоснете контактната подложка на контролната шина с пръст, някои светодиоди може да светнат произволно и да изгаснат.
Спецификации на елементите WS2812B
За да създадете осветителни системи на базата на адресна лента, трябва да знаете важните параметри на елементите, излъчващи светлина.
Размери на LED | 5x5 мм |
Честота на PWM модулация | 400 Hz |
Консумация на ток при максимална яркост | 60 mA на клетка |
Захранващо напрежение | 5 волта |
Arduino и WS2812B
Популярната в света платформа Arduino ви позволява да създавате скици (програми) за управление на адресни ленти. Възможностите на системата са достатъчно широки, но ако вече не са достатъчни на някакво ниво, придобитите умения ще бъдат достатъчни за безболезнено преминаване към C ++ или дори към асемблер. Въпреки че първоначалните знания са по-лесни за получаване на Arduino.
Свързване на лента WS2812B към Arduino Uno (Nano)
На първия етап са достатъчни прости платки Arduino Uno или Arduino Nano. В бъдеще по-сложни платки могат да се използват за изграждане на по-сложни системи. При физическо свързване на адресируемата LED лента към платката Arduino трябва да се спазват няколко условия:
- поради ниска устойчивост на шум, свързващите проводници на линията за данни трябва да са възможно най-къси (трябва да се опитате да ги направите в рамките на 10 см);
- трябва да свържете проводника за данни към свободния цифров изход на платката Arduino - след това той ще бъде посочен програмно;
- поради висока консумация на енергия, не е необходимо да захранвате лентата от платката - за целта са предвидени отделни захранвания.
Общият захранващ проводник на лампата и Arduino трябва да бъдат свързани.
WS2812B Основи за управление на програмата
Вече беше споменато, че за да се управляват микросхемите WS2812B, е необходимо да се генерират импулси с определена дължина, като се поддържа висока точност. Има команди на езика Arduino за формиране на кратки импулси забавяне микросекунди и микро. Проблемът е, че разделителната способност на тези команди е 4 микросекунди. Тоест няма да работи за формиране на времеви закъснения с дадена точност. Необходимо е да преминете към инструментите C ++ или Assembler. И можете да организирате контрола на адресируемата LED лента чрез Arduino, като използвате библиотеки, специално създадени за това. Можете да започнете запознанството си с програмата Blink, която кара светлинните елементи да мигат.
бърз светодиод
Тази библиотека е универсална. В допълнение към лентата с адреси, той поддържа различни устройства, включително ленти, контролирани от SPI интерфейса. Има широки възможности.
Първо, библиотеката трябва да бъде включена. Това се прави преди блока за настройка и редът изглежда така:
#include <FastLED.h>
Следващата стъпка е да създадете масив за съхраняване на цветовете на всеки светодиод. Тя ще има лента с име и размер 15 - по броя на елементите (по-добре е да зададете константа на този параметър).
CRGB лента[15]
В блока за настройка трябва да посочите с коя лента ще работи скицата:
void setup() {
FastLED.addLeds< WS2812B, 7, RGB> (лента, 15);
intg;
}
Параметърът RGB задава реда на цветовата последователност, 15 означава броя на светодиодите, 7 е номерът на изхода, назначен за управление (също по-добре е да зададете константа на последния параметър).
Блокът на цикъла започва с цикъл, който последователно записва във всяка секция от масива Red (червено сияние):
за (g=0; g<15; g++)
{strip[g]=CRGB::Red;}
След това образуваният масив се изпраща към лампата:
FastLED.show();
Закъснение 1000 милисекунди (секунда):
забавяне (1000);
След това можете да изключите всички елементи по същия начин, като напишете черно в тях.
за (int g=0; g<15; g++)
{strip[g]=CRGB::Черно;}
FastLED.show();
забавяне (1000);
След компилиране и качване на скицата, лентата ще мига с период от 2 секунди. Ако трябва да управлявате всеки цветен компонент поотделно, тогава вместо линията {strip[g]=CRGB::Red;} се използват няколко реда:
{
лента[g].r=100;// задайте нивото на светене на червения елемент
лента[g].g=11;// същото за зелено
лента[g].b=250;// същото за синьото
}
NeoPixel
Тази библиотека работи само с NeoPixel Ring LED пръстени, но е по-малко ресурсоемка и съдържа само най-важното. На език Arduino програмата изглежда така:
#include <Adafruit_NeoPixel.h>
Както в предишния случай, библиотеката е свързана и обектът lenta се декларира:
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// където 15 е броят на елементите, а 6 е зададеният изход
В блока за настройка лентата се инициализира:
void setup() {
lenta.begin()
}
В блока на цикъла всички елементи са маркирани в червено, променливата се предава към канала и се създава забавяне от 1 секунда:
за (int y=0; y<15; y++)// 15 - броят на елементите в лампата
{lenta.setPixelColor(y, lenta.Color(255,0,0))};
tape.show();
забавяне (1000);
Сиянието спира с черен запис:
за (int y=0; y< 15; y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))};
tape.show();
забавяне (1000);
Видео урок: Образци на визуални ефекти, използващи адресни ленти.
След като се научите как да мигате светодиодите, можете да продължите да учите как да създавате цветни ефекти, включително популярните Rainbow и Aurora Borealis с плавни преходи. Адресируемите светодиоди WS2812B и Arduino предоставят почти неограничени възможности за това.