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

Что такое NeoPixel?

RGB светодиод способен излучать любой цвет, комбинируя в нужной пропорции 3 основных базовых цвета – красный, зеленый и синий. Например, красного и синего цвета формирует фиолетовый цвет. То есть если каждым из базовых цветов управлять с помощью соответствующих им значений от 0 до 255, то можно сформировать любой цвет. Например, фиолетовый (magenta) цвет в этом случае будет формироваться совокупностью значений 255 0 255 (в шестнадцатеричном коде – 2550255 = # FF00FF). RGB светодиоды формируют множество цветов, основываясь на этой модели.

Для управления RGB светодиодом необходимо 3 цифровых контакта микроконтроллера (платы Arduino). То есть, к примеру, если мы хотим управлять 60 RGB светодиодами (причем цвет каждого из них настраивать независимо от других), то нам для этой цели понадобится 180 цифровых контактов. Естественно, подобный подход очень неудобен, поэтому для управления большой совокупностью RGB светодиодов, объединенных, к примеру, в ленту, стали использовать адресацию.

Адресуемые (адресные) светодиоды (addressable LEDs) – это новое поколение светодиодов, включающих помимо RGB светодиоды также микросхему (контроллер) управления им. В настоящее время для управления подобными светодиодами наиболее часто используется контроллер WS2812, который позволяет получить доступ к множеству светодиодов с помощью одного цифрового контакта по интерфейсу one wire (1-wire), используя адреса светодиодов.

Но в отличие от обычных светодиодов данные светодиоды не включаются просто при подаче на них напряжения, для управления ими необходим микроконтроллер. NeoPixel – это марка (наименование) компании Adafruit для адресуемых светодиодов.

Признаки и симптомы ВПЧ 45 у женщин

Признаками папилломавируса 45 типа у женщин являются остроконечные генитальные бородавки. Они появляются на малых и больших половых губах, но чаще – во влагалище и шейке матки, поэтому обнаружить их может только гинеколог или дерматовенеролог во время осмотра. Дискомфорт кондиломы начинают доставлять, когда увеличиваются в размерах и сливаются в большие конгломераты.

Папилломавирус 45 не имеет характерных признаков, но заподозрить инфекцию можно по следующим симптомам:

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

Когда инфекция, вызванная вирусом папилломы человека, переходит в 3 стадию (после которой развивается рак), у представителей обоих полов появляются головокружения, слабость, снижается аппетит, сексуальная активность.

Раздельное управление светодиодами NeoPixel

В этом примере программы мы включаем светодиоды в ленте и управляем цветом и интенсивностью свечения каждого светодиода по отдельности использую плату Arduino UNO.

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.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();
}

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

 
#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels (время паузы в миллисекундах между пикселами)
 

voidsetup(){

pixels.begin();

}
 

voidloop(){

pixels.clear();

pixels.setBrightness(10);

pixels.setPixelColor(,pixels.Color(255,255,255));

pixels.setPixelColor(1,pixels.Color(255,,));

pixels.setPixelColor(2,pixels.Color(,255,));

pixels.setPixelColor(3,pixels.Color(,,255));

pixels.setPixelColor(4,pixels.Color(255,,255));

pixels.setPixelColor(5,pixels.Color(255,255,));

pixels.setPixelColor(6,pixels.Color(,255,255));

pixels.show();

}

Адресная лента ws2813

Поэтому прогресс не стоял на месте и позже были разработаны более совершенные ленты – ws2813 (5V), ws2815 (12V).

У таких лент добавлена четвертая дублирующая дорожка. По ней передаются данные, если какой-то из диодов сгорел и вышел из строя.

Как это работает? Сигнал в нормальном состоянии поступает на Data Input (DIN) и выходит с чипа на Data Out (DO). По такой цепочке данные проходят по всей ленте.

Когда первый чип выходит из строя и данные перестают выходить с DO, благодаря дублирующей дорожке сигнал продолжает поступать на разъем BIN.

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

Самое главное, чтобы при выходе из строя первого диода не произошло замыкания между VDD и GND.

Ошибка №1

Никогда не используйте подсветку на чипах типа WS2812b при съемке видео.

Если захотите снимать кино или видеоклип с такой подсветкой, то применяйте только ленту WS2813, не меньше.

Дело здесь в частоте регенерации. У старых моделей она всего 400Гц.

Для человеческого глаза это может быть и незаметно, а вот камера вам такой ошибки не простит.

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

Результат на пойманом стопкадре.

Надо заметить, что это всего лишь один подключенный светодиод 2812b и 2813, а не несколько их штук в одном ряду.

Управление через смартфон

Управление современными адресными лентами легко
осуществляется через смартфон и Wi-fi.
Последовательность здесь следующая.

устанавливаете на телефон специальное приложение

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

регистрируетесь и добавляете свое устройство

в настройках wi-fi на телефоне находите его

При первом подключении настраиваете девайс. Выбираете
последовательность свечения RGB (GBR, BRG), а
также тип ленты (ws2811, ws2812 и
т.п.)

Обязательно указываете количество пикселей. После этого
можно переходить к выбору эффектам свечения:

таймер (время вкл. и откл. ленты)

динамический режим (с регулировкой скорости и изменения эффектов)

Таких прописанных по умолчанию режимов может быть
несколько сотен!

яркость подсветки

Не понравились заводские настройки? Можете создать свою
собственную программу расцветки через ручную настройку динамического режима.

Более подробно с пошаговой установкой и настройкой множества других режимов работы можете ознакомиться из ролика ниже.

Помимо прочего такие умные контроллеры могут иметь
музыкальный процессор.

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

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

При выборе такого контроллера обратите особое внимание, что есть дешевые модели, которые при работе через wi-fi могут блокировать вам интернет. Поэтому заранее интересуйтесь у продавца о такой функции и покупайте только модели с одновременной работой интернета и управлением подсветкой

Поэтому заранее интересуйтесь у продавца о такой функции и покупайте только модели с одновременной работой интернета и управлением подсветкой.

Проектирование

Пиксельное разрешение

Первое, о чём нужно было подумать – разрешение этого табло. Так как я планировал выводить на него, в первую очередь, текстовую и числовую информацию, я сразу прикинул, каким должно быть разрешение, то есть, количество пикселей (светодиодов) по вертикали. Я начал прикидывать в уме изображение всех арабских цифр: для них полностью хватало высоты в 5 строк. С буквами, конечно, было посложнее, тем не менее все, как минимум, заглавные буквы русского и английского алфавитов также более менее умещались в этот формат, за исключением таких букв, как Ё и Й.

Так как у меня оставалось всего 198 светодиодов, нетрудно было подсчитать, что табло должно было получиться с разрешением 39×5 пикселей.

Управление

Так как у меня отсутствовал модуль Ethernet, да и программирование на голом C меня не особо-то и радовало, я решил оставить на Arduino лишь базовые функции – часы, яркость и способность удалённого управления каждым пикселем с компьютера по USB, а уже на компьютере написать ПО (или драйвер, если будет так угодно), которое бы устанавливало время, получало текущую песню и выводило любую информацию на табло. У такого подхода есть как минусы (зависимость работы дополнительных функций от компьютера), так и неоспоримые плюсы:

  • Можно сделать удобный редактор шрифта и менять варианты начертания каждого символа “на лету”, не перепрошивая каждый раз микроконтроллер.
  • Можно придумать любое количество шрифтов / символов без ограничения встроенной памяти микроконтроллера (хотя надо очень постараться, чтобы для этого не хватило 32х килобайт Atmega328P)
  • Более высокоуровневый язык программирования означает повышенную простоту и уменьшенное время разработки любых решений.
  • Возможность выводить не только инфу, полученную из внешних источников, но и какие-либо данные с самого компьютера (не реализовал за ненадобностью).

Лента на базе ws2812b


Лента на базе ws2812b Лента на чипе ws2812b является более совершенствованной, чем ее предшественник. ШИМ драйвер в адресной ленте компактен, и размещается прямо в корпусе светоизлучающего диода.

Основные преимущества ленты на основе ws2812b:

  • компактные размеры;
  • легкость управления;
  • управление осуществляется всего по одной линии + провода питания;
  • количество включенных последовательно светодиодов не ограничено;
  • невысокая стоимость – покупка отдельно трех светодиодов и драйвера к ним выйдет значительно дороже.

Лента оснащена четырьмя выходами:

  • питание;
  • выход передачи данных;
  • общий контакт;
  • вход передачи данных.

Максимальный ток одного адресного светодиода равняется 60 миллиамперам. Рабочие температуры лежат в пределах от -25 до +80 градусов. Напряжение питания составляет 5 В +-0,5.

ШИМ драйверы ленты 8-мибитные – для каждого цвета возможно 256 градация яркости. Для установки яркости нужно 3 байта информации – по 8 бит с каждого светодиода. Информация передается по однолинейному протоколу с фиксированной скоростью. Нули и единицы кодируются высоким и низким уровнем сигнала по линии.

1 бит передается за 1,25 мкс. Весь пакет из 24 бит для одного светодиода передается за 30 мкс.

Лампа на светодиодной ленте с красивыми эффектами

Сразу скажу, что проект не мой, а является немного доработанной версией лампы от Alex Gyver, за что ему большое спасибо!

Вот ссылка на оригинальный проект: огненный светильник.

Из изменений:

  • корпус напечатан на 3D-принтере (файлы для печати ниже)
  • разъем для подключения блока питания
  • не сенсорная а обычная кнопка, размещенная сбоку внизу

Лампу делал не с целью улучшения, а в подарок, но решил все-таки добавить описание на сайт – вдруг кому-то пригодится.

Подготовка

Итак, для реализации проекта использовался все тот же плафон из Леруа-мерлен “плафон цилиндр”:

Все остальное можно заказать у китайцев:

  • Arduino Nano:
  • Адресная RGB-лента WS2812B:
  • Блок питания на 5 вольт (3А, но хватит и 2A):
  • Кнопка (использовал самую большую):
  • Резистор на 220 Ом:
  • Разъем питания использовал такой:

Были использованы следующие инструменты:

  • Паяльник (пользуюсь таким давно, идеальный по соотношения цена/качество):
  • 3D-принтер (закрытый корпус, можно печатать и PLA, и ABS без проблем): ,
  • Инструмент для зачистки и обжима проводов (фирменный китайский LAOA): ,

Сборка

Файлы для печати верхней и нижней части: lamp.zip.

При печати следует учесть, что, хоть размеры подгонялись под конкретный плафон, все же могут быть небольшие расхождения в размерах. Зависит от того, на каком 3D-принтере вы печатаете, с какими настройками и каким пластиком. Поэтому для плотного прилегания плафона к напечатанным частям может понадобится чуть подкорректировать размер моделей и перепечатать, либо применить изоленту/напильник.

Для лампы я использовал 4 куска светодиодной ленты по 10 светодиодов на каждом. У вас может быть другое количество светодиодов, в зависимости от типа ленты. Главное: лента должна быть именно адресная WS2812B.

После печати нижней части можно приступать к сборке. В модели предусмотрено гнездо для кнопки. Сажаем ее туда, приклеив на любой подходящий клей (я использовал клеевой пистолет). Предварительно нужно отломать 2 из 4 ножек, а 2 оставшиеся должны пропускать ток при нажатии (они расположены рядом). Просовываем их в отверстие сверху от углубления. И вставляем разъем питания.

Ну и наклеиваем куски ленты

Обратите внимание на то, что наклеивать их нужно одинаково, контактами DO вниз. Так как при использовании ленты она нагревается, я после всей остальной сборки закрепил ленту небольшими хомутами, через каждые 2 светодиода, чтобы она не отклеилась. Далее – спаиваем 4 части адресной ленты – контакты 5v, gnd и сигнальный

Как именно – подробно показано в видео на странице оригинального проекта. Если вы только учитесь паять – не следует бояться паять адресную ленту, паяется все она очень легко. Единственный совет – я использую жидкий флюс ЛТИ-120. Он в разы лучше, чем твердая канифоль. Наносить его удобнее всего кисточкой от лака для ногтей. Также он не является активным, поэтому после его применения не нужно очищать контакты

Далее – спаиваем 4 части адресной ленты – контакты 5v, gnd и сигнальный. Как именно – подробно показано в видео на странице оригинального проекта. Если вы только учитесь паять – не следует бояться паять адресную ленту, паяется все она очень легко. Единственный совет – я использую жидкий флюс ЛТИ-120. Он в разы лучше, чем твердая канифоль. Наносить его удобнее всего кисточкой от лака для ногтей. Также он не является активным, поэтому после его применения не нужно очищать контакты.

Вся остальная сборка делается по инструкции оригинального проекта, там все подробно показано, а также есть схема, что и как спаять. Разница только в использовании механической кнопки, припаять ее нужно к разъемам gnd (земле) и любому цифровому пину платы.

ОТ ЧЕГО ПИТАТЬ ЛЕНТУ?

Самый простой и понятный вариант – мощный блок питания на 5 Вольт. Если рядом есть источник постоянки 12 Вольт – можно взять понижайку и настроить её на 5 Вольт. Но часто возникает желание сделать “беспроводной” девайс с бортовым источником питания. Как быть в этом случае? Согласно даташиту на WS2812b светодиод будет работать от напряжения 3.5-5.5 Вольт, собственно как и сама Arduino. Помним, что при питании ленты от напряжения ниже 5 Вольт будет уменьшаться максимальная яркость. Отсюда имеем следующие варианты:

  • Powerbank 5V – берём провод с USB штекером и подключаем по схемам выше. Через Ардуино не питаем, нельзя. Ёмкость паурбанков очень высокая, сами знаете. По току обычно можно снять 2 Ампера, есть паурбанки на 3 А
  • Батарейки – можно взять обычные АА батарейки, 3 штуки полностью заряженных (дадут 4,5 Вольт), либо 4 штуки чуть разряженных (дадут 5.5 Вольт). Ёмкость батареек очень небольшая. По току можно снять 1-2 Ампера (алкалин, литий. Солевые сразу в помойку)
  • Никелевые аккумуляторы – имеют напряжение ~1.4В после зарядки, можно смело поставить 4 штуки (~5.5 Вольт). Ёмкость сборки весьма достойная (до 2700 ма*ч), по току можно снять 2-3 Ампера
  • Литиевые аккумуляторы – напряжение в процессе разряда меняется с 4.2 до 3.0 Вольт, значит ленту можно питать, но светить будет на 10-30% менее ярко. Также нельзя забывать следить за напряжением, литий боится переразряда. Ёмкость – параллельно можно поставить много банок, по току – с обычных банок можно снять 3 Ампера (если стоят в параллель – то с каждой)
  • Литиевый акум + повышайка – отличный способ сохранить полную яркость при небольшом количестве светодиодов, у китайцев есть куча повышаек с лития (3-4.2В) до 5 Вольт с максимальным током до 2 Ампер. Считай тот же powerbank, но можно более компактно разместить

УПРАВЛЕНИЕ С ARDUINO

ВНИМАНИЕ! Во время загрузки и выполнения этого примера должно быть подключено внешнее питание! Иначе выгорит защита по току (диод) на плате Ардуино!

Для управления лентой можно выделить три библиотеки: FastLED, Adafruit NeoPixel и LightWS2812, из всех трёх рекомендую FastLED. Ниже привожу пример кода, который сначала показывает 3 цвета ленты на одном куске, плавно включая диоды. А потом ещё 3 цвета. Ну и ещё что-то, смотрите скетч.

ПРИМЕР 1

#define PIN 13        // пин DI  #define NUM_LEDS 16   // число диодов    #include "Adafruit_NeoPixel.h"  Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);    void setup() {    strip.begin();    strip.setBrightness(50);    // яркость, от 0 до 255      strip.clear();                          // очистить    strip.show();                           // отправить на ленту  }  void loop() {    // заливаем трёмя цветами плавно    for (int i = 0; i < NUM_LEDS / 3; i++ ) {   // от 0 до первой трети      strip.setPixelColor(i, 0xff0000);     // залить красным      strip.show();                         // отправить на ленту      delay(100);    }      for (int i = NUM_LEDS / 3; i < NUM_LEDS * 2 / 3; i++ ) {   // от 1/3 до 2/3      strip.setPixelColor(i, 0x00ff00);     // залить зелёным      strip.show();                         // отправить на ленту      delay(100);    }      for (int i = NUM_LEDS * 2 / 3; i < NUM_LEDS; i++ ) {   // от 2/3 до конца      strip.setPixelColor(i, 0x0000ff);     // залить синим      strip.show();                         // отправить на ленту      delay(100);    }      delay(1000);      // заливаем белым    for (int i = 0; i < NUM_LEDS; i++ ) {   // всю ленту      strip.setPixelColor(i, 0xffffff);     // залить белым      strip.show();                         // отправить на ленту      delay(10);    }      delay(1000);      // заливаем чёрным    for (int i = 0; i < NUM_LEDS; i++ ) {   // всю ленту      strip.setPixelColor(i, 0x000000);     // залить чёрным      strip.show();                         // отправить на ленту      delay(10);    }    delay(1000);      // включаем случайные диоды жёлтым    for (int i = 0; i < 50; i++ ) {         // 50 раз      strip.setPixelColor(random(0, NUM_LEDS), 0xffff00);     // залить жёлтым      strip.show();                         // отправить на ленту      delay(500);    }  }

Пример с бегущей радугой

ПРИМЕР 2

// пример с "бегущей радугой" для библиотеки FastLED    #define NUM_LEDS 144  #include "FastLED.h"  #define PIN 6  CRGB leds;  byte counter;    void setup() {    FastLED.addLeds(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );    FastLED.setBrightness(50);    pinMode(13, OUTPUT);  }    void loop() {    for (int i = 0; i < NUM_LEDS; i++ ) {         // от 0 до первой трети      leds = CHSV(counter + i * 2, 255, 255);  // HSV. Увеличивать HUE (цвет)      // умножение i уменьшает шаг радуги    }    counter++;        // counter меняется от 0 до 255 (тип данных byte)    FastLED.show();    delay(5);         // скорость движения радуги  }

Адресуемый светодиод

Это RGB-светодиод, только с интегрированным контроллером WS2801 непосредственно на кристалле. Корпус светодиода выполнен в виде SMD компонента для поверхностного монтажа. Такой подход позволяет расположить светодиоды максимально близко друг другу, делая свечение более детализированным.

Стоит учесть, что один светодиод потребляет при полной яркости всего 60-70 мА, при подключении ленты, например, на 90 светодиодов, потребуется мощный блок питания с током не менее 5 ампер. Ни в коем случае не питайте светодиодную ленту через контроллер, иначе он перегреется и сгорит от нагрузки. Используйте внешние источники питания.

КАК ДЕЛАТЬ НЕЛЬЗЯ

Как мы уже поняли, для питания ленты нужен источник 5 Вольт с достаточным запасом по току, а именно: один цвет одного качественного светодиода на максимальной яркости потребляет 0.02 А (20 мА), соответственно весь светодиод – 0.06 А (60 мА) на максимальной яркости. У китайцев есть “китайские” ленты, которые потребляют меньше и светят тускло. Я всегда закупаюсь в магазине BTF lighting (ссылки в начале статьи), у них ленты качественные. Я понимаю, что порой очень хочется запитать ленту напрямую от Ардуино через USB, либо используя бортовой стабилизатор платы. Так делать нельзя. В первом случае есть риск выгорания защитного диода на плате Arduino (в худшем случае – выгорания USB порта), во втором – синий дым пойдёт из стабилизатора на плате. Если всё-таки очень хочется, есть два варианта:

  • Не подключать больше количества светодиодов, при котором ток потребления будет выше 500 мА, а именно 500/60 ~ 8 штук
  • Писать код на основе библиотеки FastLED, где можно ограничить ток специальной функцией. НО! В случае отключения пина Din от источника сигнала есть риск случайного включения ленты, и никакие софтварные ограничения не спасут от выгорания железа

Вы наверное спросите: а как тогда прошивать проект с лентой? Ведь судя по первой картинке так подключать нельзя! Оч просто: если прошивка не включает ленту сразу после запуска – прошивайте. Если включает и есть риск перегрузки по току – подключаем внешнее питание на 5V и GND.

2Управление светодиодами WS2812B (или WS2812)

Если просто подать на светодиодную ленту напряжение, ничего не произойдёт. Светодиоды ждут определённый сигнал, который будет ими управлять. Для управления используется последовательный однопроводный интерфейс. Биты “0” и “1” кодируются импульсами различной длины.

Коды нуля, единицы и сброса светодиода WS2812B

На диаграмме обозначены:

  • T0H – время выдержки высокого уровня при передаче кода логического нуля;
  • T0L – время выдержки низкого уровня при передаче кода логического нуля;
  • T1H – время выдержки высокого уровня при передаче кода логической единицы;
  • T1L – время выдержки низкого уровня при передаче кода логической единицы;
  • Treset – время сигнала оповещения об окончании управляющей последовательности.

Причём временные допуски заданы весьма жёстко. Так, для WS2812B время T0H = T1L и составляет 0,35 мкс, а время T1H = T0L и составляет 0,9 мкс. Для светодиода WS2812 временные параметры более изощрённые: T0H = 0,35 мкс, T1H = 0,7 мкс, T0L = 0,8 мкс, T1L = 0,6 мкс. Но длительность передачи одного бита и там, и там составляет 1,25 мкс.

Для указания цвета светодиода используется 24-битная схема RGB: под каждый из трёх каналов отводится по 8 бит. И расположены цвета в следующем порядке:

Кодирование цвета в пространстве RGB для светодиода WS2812B

То есть для того чтобы выставить желаемый цвет на первом светодиоде в цепочке, необходимо сформировать 24-битный код и подать его на вход DIN цепочки. Если мы хотим выставить цвет на двух светодиодах, необходимо сформировать уже 48-битный сигнал и так же подать его на вход DIN цепочки. И так далее. Чем больше светодиодов в цепочке – тем более длинную последовательность мы должны подать на её вход. Получив управляющий сигнал, контроллер светодиода берёт из неё первые 24 бита и выставляет тот цвет, который указан в этих 24 битах. Затем он отбрасывает эти 24 бита, а оставшуюся часть последовательности передаёт дальше. Там ситуация повторяется. Когда вся последовательность обработана или когда приходит сигнал сброса Reset, светодиоды запоминают состояние и не меняют его, пока не придёт новый управляющий сигнал.

Осталось дело за малым: передать цепочке светодиодов WS2812B осмысленную управляющую последовательность.

На этот счёт есть такая идея. По сути нам необходимо передавать 24-битные значения цвета в соответствии с положением светодиода в матрице 10 на 10. Аналогичным образом данные хранятся в графических файлах формата *.BMP. Только у них в начале файла ещё присутствует заголовок, который содержит дополнительную информацию: размер изображения, сколько бит приходится на один пиксель, есть ли сжатие и т.д. Вот как в деталях устроен формат BMP:

Внутреннее устройство формата BMP

Можно в любом графическом редакторе (например, Paint .NET) нарисовать изображение размером 10 на 10 пикселей (или такого, какой размерности у вас светодиодная панель), сохранить его в 24-битном формате, а затем взять массив байтов из раздела Image Data Pixel Array с данной схемы, и таким образом мы получим управляющий массив для загрузки светодиодной панели.

Обратите внимание, что в массиве данных о точках изображения BMP содержатся заполнители (Padding), которые дополняют строку байтов до числа, кратного 4. Т.е., например, в нашем случае строка содержит 10 пикселей по 24 бита на цвет (3 байта)

Соответственно, строка будет содержать 3×10=30 байтов. Но 30 не кратно 4. Ближайшее число, кратное 4, это 32. Соответственно, в файле BMP будет на каждую строку изображения на 2 байта заполнителя больше. Байты-заполнители нужно пропускать и не включать в управляющий массив.

Ах, да, чуть не забыл. В файле изображения BMP данные о цвете хранятся в формате R-G-B, а светодиод WS2812 принимает цвет в формате G-R-B. Необходимо поменять местами цвета, иначе все изображения будут совсем не тех цветов, которые мы ожидаем.

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

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

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

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

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

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

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

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

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

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

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

● Блок питания 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 светодиодов, вырезанных из более длинной полосы.

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

Загрузите эскиз на свою плату, отсоедините USB-кабель и включите источник питания 5 В.

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

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

Демо-эскиз демонстрирует некоторые из многих возможных комбинаций эффектов, которые могут быть достигнуты с помощью светодиодных лент. Наряду с тем, что они являются украшением интерьера, их также можно использовать для практических целей. Хорошим проектом будет создание вашей собственной атмосферы для медиацентра или рабочего места.
Хотя эти полосы определенно функциональнее, чем SMD5050, пока не списывайте со счетов стандартные 12-вольтовые светодиодные полосы. Они являются непревзойденными с точки зрения цены. Плюсом будет то, что существует огромное количество приложений для светодиодных лент.

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

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

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

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

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

Ошибка №6

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

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

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

Ошибка №7

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

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

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

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

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