В настоящее время адресные светодиодной ленты (NeoPixel LEDs) на базе светодиодов WS2812 находят широкое применение в различных областях. В данной статье мы рассмотрим подключение подобной ленты к плате Arduino и научимся управлять ею в различных режимах.
Ранее на нашем сайте применение адресной светодиодной ленты (NeoPixel LEDs) рассматривалось в следующих проектах:
- комнатный термометр на Arduino Nano;
- связь двух плат Arduino на расстоянии 3 км с помощью Lora E32.
Теперь тайминги
Изначально на ножке стоит лог. единица. Для перевода светодиода в режим получения сигнала необходимо подать логический ноль в течение 5 мс. После этого идут биты данных: для передачи «нулевого» символа необходимо подать логическую единицу, и сразу подать логический ноль. Для передачи «единичного» символа необходимо подать логическую единицу, подождать 3 мкс и подать логический ноль. Интервал между сигналами от 6 до 20 мкс. Временные интервалы можете увидеть на осциллограммах в разных временных развертках.(рис3, рис2, рис1).
После подачи последнего информационного бита на шину необходимо подать логическую единицу. Установленные таким образом цвета будут светиться пока вы не выключите питание или не обновите цветовой рисунок новым пакетом данных.
И последний нюанс — на моей ленте при таком управлении светодиодами, если долго не отправлялись данные, и при попытке начала передачи нового пакета данных первый светодиод принимает 24 бита, дальнейшие биты начинает передавать на следующие светодиоды, но свой цвет не меняет.
Пока с проблемой справился таким образом: в исходном состоянии стоит лог. единица, даю сигнал инициализации (5 мс), 24 бита — пакет данных для первого светодиода, жду 30 мкс, снова даю сигнал инициализации (5 мс), и отправляю информационные биты для всех светодиодов.
Схема соединения
Схема соединения компонентов SoftBox
Под каждый светодиод в памяти ардуины отводится 3 байта. В мой противень влезает кусок ленты из 16 светодиодов. Двадцать таких кусочков образует экран разрешением 16 х 20 пикселей.
Соответственно под видеобуфер в оперативке ардуино нужно выделить 16 х 20 х 3 = 960 байт. В проекте использована arduino nano с микроконтроллером ATmega328p. Она имеет всего 2048 байт, соответственно, только этот видеобуфер «сожрет» половину «рамы». Вторую половину «дожирают» библиотеки, среда и динамические эффекты. В общем, я выжал максимум из этой версии arduino, а более мощный SoftBox придется строить уже на esp8266 или stm32.
Виды транзисторных ключей
- Биполярный;
- Полевой;
- Составной (сборка Дарлингтона).
При подаче высокого логического уровня (digitalWrite(12, HIGH);) через порт вывода на базу транзистора через цепочку коллектор-эмиттер потечет опорное напряжение на нагрузку. Таким образом можно включать и отключать светодиод.
Аналогичным образом работает и полевой транзистор, но поскольку у него вместо «базы» сток, который управляется не током, а напряжением, ограничительный резистор в этой схеме необязателен.
Биполярный вид не позволяет регулировать мощные нагрузки. Ток через него ограничен на уровне 0,1-0,3А.
Полевые транзисторы работают с более мощными нагрузками с током до 2А. Для ещё более мощной нагрузки используют полевые транзисторы Mosfet с током до 9А и напряжением до 60В.
Вместо полевых можно использовать сборку Дарлингтона из биполярных транзисторов на микросхемах ULN2003, ULN2803.
Микросхема ULN2003 и принципиальная схема электронного коммутатора напряжения:
Полезные советы
- Чтобы смягчить ток, идущий от источника питания, между питающим контактом и контактом GND
можно подключить конденсатор номиналом
от 100 до 1000 мкФ
. - Чтобы ослабить шум на линии, соединяющей выходной цифровой контакт Arduino и входной контакт светодиодной ленты, между ними можно подключить резистор номиналом от 220 до 470 Ом
. - Чтобы минимизировать потерю напряжения, сделайте провода между Arduino, источником питания и светодиодной лентой как можно короче.
- Если лента не работает, проверьте, исправен ли первый светодиод. Если исправен, отрежьте его, снова припаяйте штырьковые контакты, и все должно заработать.
Установка электроники в корпус часов.
Подготовил всю необходимую электронику.Нарезал провода нужной длины. На необходимые проводники установил разъём Dupont. Загрузил прошивку в Arduino Pro Mini. Как это сделать, читайте в статье: «Прошивка Arduino Pro Mini с помощью конвертера PL2303HX». И после чего приступим к пайке.
Схема подключения часов на Arduino Pro Mini и светодиодах WS2812B.
Паяем электронику по схеме.
Вот такой результат получился, осталось уложить все в корпус часов.
Чтобы Arduino Pro Mini и DS-3231 не стучали об корпус, приклеил их на двухсторонний вспененный скотч.
А сейчас немного о прошивке часов.
Код часов на Arduino и светодиодах WS2812B.
Для начала необходимо установить 2 библиотеки: DS3232RTC –для работы с модулем реального времени DS3231 и FastLED – для управления адресными светодиодами WS2812B.
Внимание! При установке библиотеки FastLED будьте внимательны нужно ставить версию, не больше, чем 3.3.2. Если у вас уже установлена более поздняя версия библиотеки, её нужно переустановить.. Установить эти библиотеки можно из файла
Скачать их можно внизу статьи в разделе “”.
Установить эти библиотеки можно из файла. Скачать их можно внизу статьи в разделе “”.
Также установить данные библиотеки можно через менеджер библиотек. Для этого в Arduino IDE переходим в пункт меню Скетч > Подключить библиотеку > Управлять библиотеками …
Подождите, пока диспетчер библиотек загрузит индекс библиотек и обновит список установленных библиотек.
DS3232RTC
FastLED FastLED
Выбираем версию 3.3.2. и устанавливаем. Если у вас была установлена более новая версия, её нужно переустановить что можно сделать через менеджер – библиотека. Аналогичным образом.Выбрать нужную версию и нажать, установить. Ваша версия библиотеки будет переустановлена на ту версию, которую вы выбрали.
Модуль DS-3231 подключён по шине I2C, по этому контакт SDA подключаем к пину А4 Arduino и SCL подключаем к A5.
#define LED_PIN 6 // Пин поключения ленты 6
Контакт данных ленты подключаем к 6 пину Arduino. Тактовые кнопки подключаем к 3 и 4 пинам Arduino.
byte button_1 = 4; // кнопка byte button_2 = 3; // кнопка
Данные настройки можно оставить без изменений, но про них нужно знать.
После чего можно приступить к загрузке скетча в Arduino. Код мы рассмотрели, тут ничего сложного нет, а сейчас приступим к сравнению предыдущей версии часов с текущей.
Скетч и Библиотеки
Скетч найдёте на странице проекта на GitHub. Я переработал исходники от проекта Гайвер лампы, кое-что оптимизировал, чтобы всё влезло в ардуино нано и добавил пару своих фишек.
Скетч и библиотеку для управления кнопкой от AlexGyver скачиваем по ссылке:
- Скетч и библиотека GyverButton
- Библиотеку FastLED скачиваем из репозитория среды Arduino IDE
Подключаем ардуино к компу и заливаем скетч.
ВНИМАНИЕ! Заливать скетч можно только при отключенной матрице. При первой прошивке у меня матрица была подключена к ардуино, при этом блок питания был выключен. Матрица включилась, и через маленькую ардуинку пошел большой ток. Прах малышки был развеян над жерлом мусорного бака ;(
Временная диаграмма управления модулем 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 светодиодами.
Код
Чтобы управлять светодиодной лентой WS2812B, вам понадобится библиотека «FastLED»
. Чтобы установить ее, проделайте следующее:
- Кликните здесь, чтобы скачать ZIP-архив с библиотекой. В итоге он должен загрузиться в папку «Загрузки».
- Распакуйте скачанный ZIP-архив. В итоге у вас должна появиться папка «FastLED-master»
. - Переименуйте ее на «FastLED»
. - Переместите папку «FastLED»
в папку
«libraries»IDE Arduino
. - Перезапустите IDE Arduino
.
Установив библиотеку «FastLED»
, загрузите в
IDE Arduino
скетч, показанный ниже. Его можно просто скопировать и вставить, а можно кликнуть в
IDE Arduino
на
Файл > Примеры > FastLED > ColorPalette (File > Examples > FastLED > ColorPalette)
, т.к. этот скетч идет в комплекте с библиотекой FastLED, установленной вами ранее.
1 #include 2 3 #define LED_PIN 5 4 #define NUM_LEDS 14 5 #define BRIGHTNESS 64 6 #define LED_TYPE WS2811 7 #define COLOR_ORDER GRB 8 CRGB leds[NUM_LEDS]; 9 10 #define UPDATES_PER_SECOND 100 11 12 // Этот скетч демонстрирует, как при помощи библиотеки FastLED 13 // создавать и использовать цветовые палитры. 14 // 15 // Пользоваться палитрами на практике – это гораздо проще, 16 // чем читать о них в теории. Поэтому просто запустите скетч 17 // и понаблюдайте за поведением светодиодов, попутно читая код. 18 // Этот скетч умеет создавать восемь (или больше) разных палитр, 19 // но его скомпилированная версия на AVR составляет всего 6,5 Кб. 20 // 21 // В библиотеку FastLED уже встроено несколько палитр. Кроме того, 22 // функционал библиотеки позволяет без особого труда создавать 23 // собственные палитры. 24 // 25 // Теорию того, как работают так называемые «компактные палитры» 26 // библиотеки FastLED, читайте в самом конце скетча. 27 28 CRGBPalette16 currentPalette; 29 TBlendType currentBlending; 30 31 extern CRGBPalette16 myRedWhiteBluePalette; 32 extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM; 33 34 void setup() { 35 delay( 3000 ); // небольшая задержка для того, чтобы цепь 36 // «устаканилась» после включения питания 37 38 FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip ); 39 FastLED.setBrightness( BRIGHTNESS ); 40 41 currentPalette = RainbowColors_p; 42 currentBlending = LINEARBLEND; 43 } 44 45 46 void loop() 47 { 48 ChangePalettePeriodically(); 49 50 static uint8_t startIndex = 0; 51 startIndex = startIndex + 1; // скорость движения 52 53 FillLEDsFromPaletteColors( startIndex); 54 55 FastLED.show(); 56 FastLED.delay(1000 / UPDATES_PER_SECOND); 57 } 58 59 void FillLEDsFromPaletteColors( uint8_t colorIndex) 60 { 61 uint8_t brightness = 255; 62 63 for( int i = 0; i < NUM_LEDS; i++) { 64 leds = ColorFromPalette( currentPalette, colorIndex, brightness, currentBlending); 65 colorIndex += 3; 66 } 67 } 68 69 // Этот фрагмент скетча демонстрирует несколько разных 70 // цветовых палитр. В библиотеку FasLED уже встроено несколько 71 // палитровых шаблонов: RainbowColors_p, RainbowStripeColors_p, 72 // OceanColors_p, CloudColors_p, LavaColors_p, ForestColors_p и 73 // PartyColors_p. 74 // 75 // Кроме того, вы можете создавать собственные палитры или даже 76 // написать код, создающий палитры прямо на ходу. 77 // Ниже продемонстрировано, как все это сделать. 78 79 void ChangePalettePeriodically() 80 { 81 uint8_t secondHand = (millis() / 1000) % 60; 82 static uint8_t lastSecond = 99; 83 84 if( lastSecond != secondHand) { 85 lastSecond = secondHand; 86 if( secondHand == 0) { currentPalette = RainbowColors_p; currentBlending = LINEARBLEND; } 87 if( secondHand == 10) { currentPalette = RainbowStripeColors_p; currentBlending = NOBLEND; } 88 if( secondHand == 15) { currentPalette = RainbowStripeColors_p; currentBlending = LINEARBLEND; } 89 if( secondHand == 20) { SetupPurpleAndGreenPalette(); currentBlending = LINEARBLEND; } 90 if( secondHand == 25) { SetupTotallyRandomPalette(); currentBlending = LINEARBLEND; } 91 if( secondHand == 30) { SetupBlackAndWhiteStripedPalette(); currentBlending = NOBLEND; } 92 if( secondHand == 35) { SetupBlackAndWhiteStripedPalette(); currentBlending = LINEARBLEND; } 93 if( secondHand == 40) { currentPalette = CloudColors_p; currentBlending = LINEARBLEND; } 94 if( secondHand == 45) { currentPalette = PartyColors_p; currentBlending = LINEARBLEND; } 95 if( secondHand == 50) { currentPalette = myRedWhiteBluePalette_p; currentBlending = NOBLEND; } 96 if( secondHand == 55) { currentPalette = myRedWhiteBluePalette_p; currentBlending = LINEARBLEND; } 97 } 98 } 99 100 // Эта функция заполняет палитру совершенно случайными цветами. 101 102 void SetupTotallyRandomPalette() 103 { 104 for( int i = 0; i < 16; i++) { 105 currentPalette = CHSV( random8(), 255, random8()); 106 } 107 } 108 109 // Эта функция делает палитру из черных и белых линий. 110 // Поскольку палитра – это, в сущности, массив 111 // из шестнадцати CRGB-цветов, для ее создания можно использовать 112 // различные функции fill_* – вроде fill_solid(), fill_gradient(), 113 // fill_rainbow() и т.д. 114 115 void SetupBlackAndWhiteStripedPalette() 116 { 117 // сначала делаем все фрагменты черными… 118 fill_solid( currentPalette, 16, CRGB::Black); 119 // …а потом делаем каждый четвертый фрагмент белым: 120 currentPalette[0] = CRGB::White; 121 currentPalette[4] = CRGB::White; 122 currentPalette[8] = CRGB::White; 123 currentPalette[12] = CRGB::White; 124 125 } 126 127 // Эта функция заполняет палитру фиолетовыми и зелеными полосами. 128 129 void SetupPurpleAndGreenPalette() 130 { 131 CRGB purple = CHSV( HUE_PURPLE, 255, 255); 132 CRGB green = CHSV( HUE_GREEN, 255, 255); 133 CRGB black = CRGB::Black; 134 135 currentPalette = CRGBPalette16( 136 green, green, black, black, 137 purple, purple, black, black, 138 green, green, black, black, 139 purple, purple, black, black ); 140 } 141 142 // Фрагмент кода ниже показывает, как создать статичную палитру, 143 // хранящуюся в памяти PROGMEM (т.е. во flash-памяти). 144 // Этот тип памяти, как правило, просторней, чем RAM. 145 // Статичная палитра вроде той, создание которой показано ниже, 146 // занимает, как правило, 64 байта flash-памяти. 147 148 const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM = 149 { 150 CRGB::Red, 151 CRGB::Gray, // белый – слишком яркий свет 152 // по сравнению с красным и синим 153 CRGB::Blue, 154 CRGB::Black, 155 156 CRGB::Red, 157 CRGB::Gray, 158 CRGB::Blue, 159 CRGB::Black, 160 161 CRGB::Red, 162 CRGB::Red, 163 CRGB::Gray, 164 CRGB::Gray, 165 CRGB::Blue, 166 CRGB::Blue, 167 CRGB::Black, 168 CRGB::Black 169 }; 170 171 // Теперь немного теории о том, как работают компактные палитры 172 // библиотеки FastLED. 173 // 174 // В компьютерной графике, как правило, палитра 175 // (или «справочная таблица цветов») состоит из 256 фрагментов, 176 // которые содержат 256 разных 24-битных RGB-цветов. Соответственно, 177 // вы можете обратиться к нужному вам цвету при помощи простого 178 // 8-битного (т.е. 1-байтного) значения. 179 // Но 256-фрагментная палитра занимает 768 байт RAM-памяти, 180 // и для Arduino это, как правило, слишком много. 181 // 182 // FastLED поддерживает эти традиционные 256-фрагментные палитры — 183 // на тот случай, если RAM-память вашей сборки в состоянии потянуть 184 // необходимые 768 байт. 185 // 186 // Но в библиотеке FastLED есть и более компактная альтернатива. 187 // Эта функция называется «компактной палитрой» и состоит 188 // из 16 фрагментов. Впрочем, доступ к ней осуществляется так, 189 // будто на самом деле в ней 256 фрагментов, и это выполняется за счет 190 // интерполяции между имеющимися 16 фрагментами. Другими словами, 191 // между каждыми двумя смежными фрагментами генерируется пятнадцать 192 // виртуальных промежуточных фрагментов. 193 // 194 // К примеру, если для первого фрагмента компактной таблицы задать 195 // зеленый цвет (0,255,0), а для второго – синий (0,0,255), 196 // а затем запросить первые шестнадцать цветов, то библиотека вернет 197 // зеленый цвет, а следом – пятнадцать цветов, формирующих плавный 198 // градиент от зеленого к синему.
Примечание:
Поменяйте значение в строчке
#define NUM_LEDS 14
на количество светодиодов, имеющихся в вашей ленте. В моем случае их было
«14»
.
Сфера применения
Адресные светодиоды используются там, где обычные виды линейных светильников оказываются несостоятельны и справиться с поставленной задачей не могут. Основная сфера использования:
- создание полноцветных модулей;
- конструирование световых приборов типа «soft lights»;
- в оформлении участков интерьера, декора фасадов или иных элементов;
- в рекламных конструкциях;
- для создания LED экранов. Которые популярны при оформлении мероприятий шоу-бизнеса или рекламных кампаний.
Адресные светодиоды относительно дороги, что заметно снижает распространение и востребованность таких конструкций. Кроме того, необходимость использования дополнительных устройств (контроллер), загрузки в них программного обеспечения и прочие сложности отпугивают массового пользователя.
Светодиодная лента Ардуино — Подключение
Настройте свою схему следующим образом:
1. Подключите контакты Arduino 9, 6 и 5 к концам затвора трех МОП-транзисторов и подключите резистор 10 кОм в соответствии с заземлением. 2. Подключите ножки источника к заземлению. 3. Подключите дренажные опоры к разъемам Green, Red и Blue на светодиодной ленте. 4
Подключите шину питания к разъему +12v светодиодной полосы (обратите внимание, что на изображении выше провод питания черный, чтобы соответствовать цветам разъемов на моей светодиодной полосе). 5
Подключите заземление Arduino. 6. Подключите стабилизатор питания 12 В в сеть. Большинство светодиодных полосок имеет разъемы Dupont, к которым легко подключиться. Если у вас нет таких, вам понадобится припаять провода к диодной ленте. Не паникуйте, если вы новичок в пайке — это легкая работа. В интернете есть множество руководств по началу работы с паяльником, с которыми можно ознакомиться, если пайка доставляет вам трудности. Для этого проекта мы будем управлять нашей платой Arduino по USB . Вы можете выбрать питание платы с помощью вывода VIN, но перед этим убедитесь, что вы знаете ограничения мощности для своего устройства.
Плюсы и минусы
В адресной светодиодной ленте Arduino яркость и режим работы каждого диода задаются отдельно.
У таких устройств масса достоинств.
- Их можно использовать для «умного» освещения. Не составит труда собрать динамическую подсветку, бегущую строку или сделать так, чтобы свет включался по расписанию. Подключите дополнительные модули, например, датчик движения, и когда вы зайдете в комнату, начнется светопреставление. А еще их работой можно управлять дистанционно с пульта и смартфона.
- Простота настройки. Вы можете самостоятельно написать программы для работы или воспользоваться готовыми шаблонами.
- Светодиодные полосы надежны и долговечны. Они не нагреваются и не требуют больших затрат на энергию.
- Доступность – еще один плюс. Диодные ленты широко распространены на рынке, выбрать нужную не составит труда. Самые бюджетные стоят 200 руб. за метр, более яркие – от 500 руб.
Но есть и недостатки.
- Нужен отдельный источник питания на 5 или 12 В. Блок Arduino может дать только 800 мА тока, которого хватит только на 13 пикселей (один пиксель потребляет 40-60 мА).
- Соединения требовательны к качеству пайки.
Если вы умеете хорошо паять, то собрать схему не составит труда. А если не умеете, то самое время научиться. Так что смело приступайте к выбору светотехники.
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. Необходимо поменять местами цвета, иначе все изображения будут совсем не тех цветов, которые мы ожидаем.
Подключение более 5 метров.
Если вам нужно подключить более 5 м смарт-ленты, для ее равномерного свечения нельзя просто последовательно включать подсветку. В основном это про еду!
Когда количество пикселей на контроллере позволяет подключить большую длину, вы можете легко соединить разъемы DI и DO вместе. А вот блок питания (5В или 12В) все равно нужно тянуть отдельно (параллельно).
Для такого случая есть контроллеры с дополнительными кабелями для «лишнего» питания.
Ошибка n. 6 Невозможно соединить несколько отрезков ленты последовательно и в то же время изначально обеспечить им более высокое натяжение.
Например, возьмите три куска ws2812b (5 м + 5 м + 5 м) и подайте на них 15 вольт в начале ленты, рассчитывая на постоянное падение напряжения.
В этом случае вам придется ставить свой контроллер для каждого сегмента и даже как-то обеспечивать одинаковое потребление сегментов.
Ошибка n. 7 Лента вместо белого загорается желтоватым или красным оттенком.
Скорее всего дело здесь в неправильно подобранном сечении провода. Всегда берите минимум 1,5 мм2.
Отсутствие цвета — первый признак падения напряжения. Покраснение объясняется тем, что для синего и зеленого цветов на микросхеме 2812b нужно около 3,5В, а для красного достаточно 2В.
Поэтому при понижении напряжения на светодиодах зеленый и синий кристаллы гаснут, а красный остается включенным до последнего.
Адресная светодиодная лента Ардуино
Адресные ленты отличаются плотностью — от 30 до 144 светодиодов на метр, изготавливаются разном защитном исполнении: IP30, IP65, IP67, IP68. Все варианты исполнения, кроме IP30, могут применяться на улице в диапазоне температур от -25 до +80°C. Еще одна, более надежная лента — WS2813 отличается возможностью передавать сигналы дальше по цепочке даже через сгоревший чип.
Светодиодная лента WS2812B характеристики
- Размер светодиода — 5 х 5 мм
- Частота ШИМ — 400 Гц
- Скорость передачи данных — 800 кГц
- Размер данных — 24 бита на светодиод
- Напряжение питания — 5 Вольт
- Потребление при нулевой яркости — 1 мА на светодиод
- Потребление при максимальной яркости — 60 мА на светодиод
- Цветность: RGB, 256 оттенков на канал, 16 миллионов цветов
Характеристики WS2812B адресной светодиодной ленты
Адресная светодиодная лента ws2812b — это вершина эволюции лент. Каждый светодиод в ленте состоит из обычного RGB светодиода и контроллера с тремя транзисторными выходами. Благодаря этому есть возможность управлять цветом любого светодиода и создавать потрясающие цветовые и световые эффекты. Именно поэтому устройство пользуется популярностью, несмотря на высокую стоимость.
Как проверить адресную ленту без Ардуино
При подключении обращайте внимание на направление стрелок
Многих интересует, как включить адресную ленту без Ардуино и проверить ее на работоспособность. Если просто подключить питание к ленте, то ничего не произойдет — проверить ленту без контроллера нельзя. Если задеть цифровой вход адресной ленты, то могут загореться несколько светодиодов из-за случайных помех, которые воспринимаются контроллерами ws2812b светодиодов, как команды.
Если под рукой нет платы Ардуино, то можно использовать для проверки специальный контроллер. В крайнем случае, просто потрогать цифровой провод, чтобы понять будут гореть светодиоды на ленте или нет. Другого надежного способа проверить работу ws2812b ленты нет, поэтому рассмотрим далее управление и программирование адресной светодиодной ленты на микроконтроллере Ардуино Нано или Уно.
Что нужно заказать для данного проекта
Так выглядела моя посылка с пятьюдесятью кусками диодной ленты
▸ Первое и самое важное – это адресные светодиоды. Чтобы паять меньше проводов и диодов, чем в прошлом году, предлагаю сразу купить диоды на ленте.
Отлично подойдут ленты с плотностью 30 диодов на метр. Расстояние между ними на ленте составляет примерно 3 см, значит крепить такие ленты на окно лучше всего с шагом 3 см. Так получится равномерная матрица с правильными пропорциями картинки.
Исходя из этих данных рассчитываем необходимое количество лент для заказа. Покупаем самую доступную ленту WS1218B на белой основе с классом влагозащиты IP30.
Более защищенная и дорогая лента нам не нужна, крепить ее мы будем внутри помещения. Метровый кусок такой ленты стоит 100 рублей.
Учитывая большое количество заказываемых лент и всевозможные купоны мы неплохо сэкономим.
Не экономьте на блоке питания, берите с запасом мощности
▸ Чтобы запитать такую матрицу потребуется мощный блок питания. Рассчитать запас мощности можно исходя из приведенной таблицы.
Закладывайте минимум 3A на каждые 100 диодов. При построении матрицы на 1000 диодов выбирайте блок на 5В 30А, а лучше сразу на 40А с запасом.
Такой адаптер питания обойдется от 990 рублей.
Wemos D1 mini и комбинированный модуль времени + кардридер
▸ Для управления матрицей понадобится плата на базе микроконтроллера ESP8266 NodeMCU или Wemos D1 mini. Ни одна модель Arduino такую матрицу не потянет.
Плата NodeMcu – от 145 руб.
Плата Wemos D1 mini – от 85 руб.
▸ Для пайки компонентов подойдет паяльник SH72 – от 976 руб.
▸ Не забывайте про канифоль и олово для пайки – от 270 руб.
Подключение к Arduino
Прямое подключение светодиодной ленты к Arduino уместно только в случае применения слабых LED-диодов. Для светодиодной ленты между ней и платой необходимо установить дополнительные электротехнические элементы.
Через реле
Подключите реле к плате Arduino через цифровой выход. Управляемая полоса может иметь одно из двух состояний — включения или выключения. Если нужно организовать управление RGB-лентой, понадобятся три реле.
Значение тока, контролируемое данным устройством, ограничивается мощностью катушки. Если мощность слишком мала, элемент не сможет замыкать большие контакты. Для наиболее высоких мощностей примените релейные сборки.
С помощью биполярного транзистора
Если нужно повысить ток или напряжение на выходе, подключите биполярный транзистор. При его выборе ориентируйтесь на ток нагрузки. Ток управления не превышает 20 мА, поэтому добавьте резистор на 1 – 10 кОм для ограничения тока за счет сопротивления.
С помощью полевого транзистора
Вместо биполярных транзисторов для управления светодиодными лентами возьмите полевые (сокращенно — МОП). Разница между ними связана с принципом управления: биполярные изменяют ток, полевые — напряжение на затворе. Благодаря этому небольшой ток затвора управляет большой нагрузкой (десятками ампер).
С помощью плат расширения
Если нет желания использовать реле и транзисторы, можно купить целые блоки — платы расширения. К ним относятся Wi-Fi, Bluetooth, эквалайзер, драйвер и т. д., которые необходимы для управления нагрузкой разных мощностей и напряжений. Это могут быть как одноканальные элементы, которые подойдут монохромным лентам, так и многоканальные (для управления цветными RGB-лентами).
Режимы работы Софтбокса
Софтбокс умеет выполнять свои непосредственные обязанности: давать мягкий рассеянный свет с регулировкой яркости. Два дополнительных регулятора позволяют менять цветовой тон и насыщенность. Т.е. Можно светить любым цветом задавая его в цветовой модели HSV (HSB — Hue, Saturation, Brightness — тон, насыщенность, яркость). Но это всего ли режим 1 из 7 возможных. Полный список режимов такой:
- Статический HSB — тон, насыщенность, яркость
- Динамический HSB — тон автоматически меняется от минимально к максимальному значению
- Радуга
- Светляки
- Радужный шум
- Облачный шум
- Лавовый шум
Все динамические эффекты имеют возможность регулировки яркости, динамики и масштаба.
Принцип работы транзистора для плавного управления светодиодной лентой
Транзистор работает как водопроводный кран, только для электронов. Чем выше напряжение, подаваемое на базу биполярного транзистора либо сток полевого, тем меньше сопротивление в цепочке эмиттер-коллектор, тем выше ток, проходящий через нагрузку.
Подключив транзистор к аналоговому порту Ардуино, присваиваем ему значение от 0 до 255, изменяем напряжение, подаваемое на коллектор либо сток от 0 до 5В. Через цепочку коллектор-эмиттер будет проходить от 0 до 100% опорного напряжения нагрузки.
Для управления светодиодной лентой arduino необходимо подобрать транзистор подходящей мощности. Рабочий ток для питания метра светодиодов 300-500мА, для этих целей подойдет силовой биполярный транзистор. Для большей длины потребуется полевой транзистор.
Схема подключения LED ленты к ардуино:
Это интересно: Выбираем потолочные люстры с вентилятором
Механическая сборка
Края лучше изолировать, чтобы не коротнуть ленту на корпус. Клеить ленту нужно зигзазагом, а не а бы как. Для софтбокса лучше использовать ленту с белой подложкой, а не с черной как у меня.
Линии питания оптимально разместить отступая примерно треть от центра матрицы. Это сократит среднее расстояние до каждого светодиода и уменьшит потери энергии и перегрев девайса.
Пожалуй, запихну «мозги» и элементы управления внутрь блока питания. Подключаем силовой провод 230 вольт: фаза, ноль и защитное заземление.
Перед включением рекомендую еще раз проверить все линии на предмет замыкания на корпус.
Настройка приложения Blynk
Blynk – это приложение, которое может работать на мобильных операционных системах Android и IOS и позволяет с помощью смартфона управлять различными устройствами, поддерживающими концепцию интернета вещей (Internet of Things, IoT). При использовании данного приложения нам сначала необходимо создать в нем графический интерфейс пользователя (Graphical User Interface, GUI). Из этого графического интерфейса данные будет передаваться в облако Blynk. На приемной стороне мы имеет плату Arduino, подключенную к компьютеру по USB кабелю. Таким образом, компьютер запрашивает эти данные из облака Blynk и потом эти данные передаются в плату Arduino для дальнейшей обработки.
Создание нового проекта
Послу успешной установки и регистрации в приложении Blynk вы увидите на его главной странице кнопку “New Project” (новый проект). Нажмите ее и у вас в приложении откроется новое окно, в котором необходимо будет ввести такие параметры проекта как имя, плату и тип соединения. Для нашего проекта выберите плату “Arduino UNO”, тип соединения “USB” и нажмите на кнопку “Create” (создать).
После успешного создания проекта вам на электронную почту (с которой вы регистрировались в приложении) придет ваш идентификатор подлинности (Authenticate ID). Сохраните его – он нам пригодится в дальнейшем.
Создание графического интерфейса пользователя (GUI)
Откройте проект в приложении Blynk, в нем нажмите на значок “+” – после этого вы получите доступ к виджетам (графическим элементам), которые вы можете использовать в своем проекте. В нашем случае нам будет нужен RGB Color Picker который назван как “zeRGBa”, как показано на следующем рисунке.
Установка виджета
После перетаскивания (dragging) виджета в наш проект нам необходимо установить его параметры, которые будет необходимы для передачи значений цветов плате Arduino UNO.
Нажмите на ZeRGBa, после чего откроется экран с его настройками (ZeRGBa setting). Установите в нем Output option (настройка выхода) в положение “Merge”, а контакт “V2” установите в положение, показанное на следующем рисунке:
Ардуино и адресная светодиодная лента
Этот проект – простой способ начать работу, но идеи, которые он охватывает, могут быть расширены для действительно эффектного освещения. С помощью всего лишь нескольких компонентов вы можете создать свой собственный восход солнца. Если у вас есть стартовый комплект с Arduino, вы можете использовать любую кнопку или датчик для запуска светодиодов при входе в комнату, например:
Светодиодная лента Ардуино – Яркие идеи.
Эти ленты требуют меньшего количества компонентов для запуска, и есть некоторая свобода в отношении именно того, какие значения компонентов вы можете использовать. Конденсатор в этой цепи гарантирует, что светодиоды 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-кабель всякий раз, когда используете внешний источник питания.
Немного теории
Если вы не имеете совершенно никакого представления о том, как работает светодиодная лента, стоит познакомиться с самим принципом ее работы. Ее основной элемент, дающий свет, – это полупроводниковый прибор, состоящий из двух кристаллов. В атомной структуре одного из них преобладают отрицательно заряженные ионы (электроны), а в другом – положительные (так называемые дырки). Если этот кристаллический «бутерброд» подключить к гальванической батарее, то при совпадении полюсов – плюс к элементу с «дырками», а минус к тому, где преобладают электроны – через него потечет ток. Он и вызовет свечение на стыке материалов.
Заметьте, что эффект свечения возникает только при совпадении плюсов и минусов. То есть, если вы подключите светодиод к источнику переменного тока, то он начнет моргать. Но и это еще не все. Кристаллы эти довольно малы – не более пяти миллиметров в диаметре. Если через них пропустить бытовой ток в 15 А, то они попросту сгорят. По этой причине светодиодные ленты подключают к особым источникам питания, понижающим напряжение и выпрямляющим его.
В источнике питания обязательно есть выпрямляющий диодный мост и RC-фильтр на входе, сглаживающий пульсации (нестабильность) питающего напряжения. От этого фильтра и зависит качество блока питания. В самых надежных и дорогих использованы стабилизаторы тока на микросхемах. В простых – те самые RC-фильтры.
Промышленностью выпускаются светодиодные ленты, питающиеся как от 24-х, так и от 12-ти вольт. Выходное напряжение блока питания должно соответствовать этому номиналу.
Электрическая схема БП светодиодных лент похожа на те, что используются для питания осветительных ламп того же типа.