Как да свържете адресируема LED лента WS2812B към Arduino
Развитието на технологията за осветление на базата на светодиоди продължава с бързи темпове. До вчера управляваните с контролер RGB ленти, чиято яркост и цвят могат да се регулират с дистанционно управление, изглеждаха като чудо. Днес на пазара има нови осветителни тела с още повече възможности.
LED лента на базата на WS2812B
Разликите между адресируемите LED ленти и стандартните RGB е Яркостта и съотношението на цветовете на всеки елемент се регулират поотделно. Това дава възможност за получаване на светлинни ефекти, които не са възможни при други видове осветителни тела. Адресируемата LED лента се управлява по добре познатия начин - чрез широчинно-импулсна модулация. Особеност на системата е, че всеки светодиод е оборудван със собствен ШИМ контролер. Чипът 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
За да създадете осветителни системи с адресируеми ленти, трябва да знаете важните параметри на светлоизлъчващите елементи.
Размери на светодиодите | 5х5 мм |
Честота на ШИМ модулацията | 400 Hz |
Консумация на ток при максимална яркост | 60mA на елемент |
Захранващо напрежение | 5 волта |
Arduino и WS2812B
Популярната в цял свят платформа Arduino позволява създаването на скици (програми) за управление на адресируеми ленти. Възможностите на системата са достатъчно широки, но ако на някое ниво те вече не са достатъчни, придобитите умения ще са достатъчни, за да се премине безпроблемно към C++ или дори асемблер. Въпреки че е по-лесно да се придобият основни знания от Arduino.
Свързване на лента на базата на WS2812B към Arduino Uno (Nano)
На първо време е достатъчна обикновена платка Arduino Uno или Arduino Nano. По-късно по-сложните платки могат да се използват за изграждане на по-сложни системи. При физическото свързване на адресируемата LED лента към платката Arduino трябва да се уверите, че са изпълнени няколко условия:
- Поради ниската шумоустойчивост проводниците за свързване на линията за данни трябва да са възможно най-къси (опитайте се да ги направите на разстояние до 10 cm);
- Свържете линията за данни към свободен цифров изход на платката Arduino - той ще бъде посочен по-късно от софтуера;
- Поради високата консумация на енергия не е необходимо лентата да се захранва от платката - за тази цел са предвидени отделни захранвания.
Трябва да се свърже общият захранващ кабел между лентата и Arduino.
Основи на софтуерното управление на WS2812B
Вече беше споменато, че за да се управлява чипът WS2812B, е необходимо да се генерират импулси с определена дължина и висока точност. В езика на Arduino има команди за формиране на кратки импулси delayMicroseconds и микроскопи. Проблемът е, че разделителната способност на тези команди е 4 микросекунди. Това означава, че не е възможно да се формират времевите закъснения с определена точност. Необходимо е да се използват инструменти на C++ или Assembler. Възможно е също така да управлявате светодиодната лента чрез Arduino с помощта на специално създадени за целта библиотеки. Въведението започва с Blink - програма, която кара светлинните елементи да мигат.
FastLed .
Тази библиотека е многофункционална. В допълнение към адресируемата лента, тя поддържа много устройства, включително ленти, управлявани от SPI. Тя е много мощна.
Първо трябва да свържете библиотеката. Това се прави преди блока за настройка и низът изглежда по следния начин:
#include
Следващата стъпка е да се създаде масив за съхранение на цветовете на всеки светодиод. Той ще има името strip и размер 15 - по броя на елементите (по-добре е да зададете константа на този параметър).
CRGB лента [15]
В блока за настройка трябва да посочите групата, с която ще работи скриптът:
void setup() {
FastLED.addLeds< WS2812B, 7, RGB>(strip, 15);
int g;
}
Параметърът RGB задава реда на редуване на цветовете, 15 означава броя на светодиодите, 7 е номерът на изхода, определен за управление (добре е да зададете константа и на последния параметър).
Блокът с цикъла започва с цикъл, който последователно записва във всяка секция на масива Red (червено светене):
for (g=0; g< 15;g++)
{strip[g]=CRGB::Red;}
След това генерираният масив се изпраща към осветителното тяло:
FastLED.show();
Забавяне 1000 милисекунди (една секунда):
забавяне(1000);
След това всички елементи могат да бъдат изключени по един и същи начин, като се изпишат с черно в тях.
for (int g=0; g< 15;g++)
{strip[g]=CRGB::Black;}
FastLED.show();
забавяне(1000);
След компилиране и зареждане на скицата лентата ще мига с период от 2 секунди. Ако искате да управлявате всеки цветен компонент поотделно, вместо низ {strip[g]=CRGB::Red;} използват се няколко низа:
{
strip[g].r=100;// задаване на нивото на луминесценция на червения елемент
strip[g].g=11;// същото за зелено
strip[g].b=250;// същото за синьото
}
NeoPixel
Тази библиотека работи само с пръстеновидните светодиоди NeoPixel, но е по-малко ресурсоемка и съдържа само най-необходимото. На езика на Arduino програмата изглежда по следния начин:
#include
Както и в предишния случай, библиотеката е включена и обектът lenta е деклариран:
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// Където 15 е броят на елементите, а 6 е зададеният изход
Лента се инициализира в блока за настройка:
void setup() {
lenta.begin ()
}
В блока на цикъла всички елементи светват в червено, към лентата се предава променлива и се създава закъснение от 1 секунда:
for (int y=0; y<15;y++)// 15 - брой елементи в лентата
{lenta.setPixelColor(y, lenta.Color(255,0,0))};
{lenta.show();
забавяне(1000);
Лента спира да свети в черно:
for (int y=0; y< 15;y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))};
lenta.show();
забавяне(1000);
Видео урок: Образци на визуални ефекти с помощта на адресируеми ленти.
След като научите как да мигате със светодиоди, можете да продължите да се учите как да създавате цветни ефекти, включително популярните Rainbow и Northern Lights с плавни преходи. Адресируемите светодиоди WS2812B и Arduino предоставят почти неограничени възможности за това.