Как изменить яркость светодиодной ленты на ардуино

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

Обычные светодиоды


Светодиод – простейший индикатор, который можно использовать для отладки кода: его можно включить при срабатывании условия или просто подмигнуть. Но для начала его нужно подключить.

Подключение светодиода


Светодиод – это устройство, которое питается током, а не напряжением. Как это понимать? Яркость светодиода зависит от тока, который через него проходит. Казалось бы, достаточно знания закона Ома из первого урока в разделе, но это не так!

  • Светодиод в цепи нельзя заменить “резистором”, потому что он ведёт себя иначе, нелинейно.
  • Светодиод полярен, то есть при неправильном подключении он светиться не будет.
  • Светодиод имеет характеристику максимального тока, на котором может работать. Для обычных 3 и 5 мм светодиодов это обычно 20 мА.
  • Светодиод имеет характеристику падение напряжения (Forward Voltage), величина этого падения зависит от излучаемого цвета. Цвет излучается кристаллом, состав которого и определяет цвет. У красных светодиодов падение составляет ~2.5 вольта, у синих, зелёных и белых ~3.5 вольта. Более точную информацию можно узнать из документации на конкретный светодиод. Если документации нет – можно пользоваться вот этой табличкой, тут даны минимальные значения:

blank Если питать светодиод напряжением ниже его напряжения падения, то яркость будет не максимальная, и здесь никаких драйверов не нужно. То есть красный светодиод можно без проблем питать от пальчиковой батарейки. В то же время кристалл может деградировать и напряжение уменьшится, что приведёт к росту тока. Но это редкий случай. Как только мы превышаем напряжение падения – нужно стабилизировать питание, а именно – ток. В простейшем случае для обычного светодиода ставят резистор, номинал которого нужно рассчитать по формуле: R = (Vcc - Vdo) / I, где Vcc это напряжение питания, Vdo – напряжение падения (зависит от светодиода), I – ток светодиода, а R – искомое сопротивление резистора. Посчитаем резистор для обычного 5 мм светодиода красного цвета при питании от 5 Вольт на максимальной яркости (2.5 В, 20 мА): (5-2.5)/0.02=125 Ом. Для синего и зелёного цветов получится 75 Ом. Яркость светодиода нелинейно зависит от тока, поэтому “на глаз” при 10 мА яркость будет такая же, как на 20 мА, и величину сопротивления можно увеличить. А вот уменьшать нельзя, как и подключать вообще без резистора. В большинстве уроков и проектов в целом для обычных светодиодов всех цветов ставят резистор номиналом 220 Ом. С резистором в 1 кОм светодиод тоже будет светиться, но уже заметно тусклее. Таким образом при помощи резистора можно аппаратно задать яркость светодиода. Как определить плюс (анод) и минус (катод) светодиода? Плюсовая нога длиннее, со стороны минусовой ноги бортик чуть срезан, а сам электрод внутри светодиода – крупнее: blank

Мигаем


Мигать светодиодом с Ардуино очень просто: подключаем катод к GND, а анод – к пину GPIO. Очень многие уверены в том, что “аналоговые” пины являются именно аналоговыми, но это не так: это обычные цифровые пины с возможностью оцифровки аналогового сигнала. На плате Nano пины A0-A5 являются цифровыми и аналоговыми одновременно, а вот A6 и A7 – именно аналоговыми, то есть могут только читать аналоговый сигнал. Так что подключимся к A1, настраиваем пин как выход и мигаем! blank

void setup() {
  pinMode(A1, OUTPUT);
}
void loop() {
  digitalWrite(A1, HIGH);
  delay(500);
  digitalWrite(A1, LOW);
  delay(500);
}

Как избавиться от delay() в любом коде я рассказывал вот в этом уроке.

Мигаем плавно


Как насчёт плавного управления яркостью? Вспомним урок про ШИМ сигнал и подключим светодиод к одному из ШИМ пинов (на Nano это D3, D5, D6, D9, D10, D11). Сделаем пин как выход и сможем управлять яркостью при помощи ШИМ сигнала! Читай урок про ШИМ сигнал. Простой пример с несколькими уровнями яркости:

void setup() {
  pinMode(3, OUTPUT);
}
void loop() {
  analogWrite(3, 10);
  delay(500);
  analogWrite(3, 100);
  delay(500);
  analogWrite(3, 150);
  delay(500);
  analogWrite(3, 200);
  delay(500);
  analogWrite(3, 255);
  delay(500);
}

Подключим потенциометр на A0 и попробуем регулировать яркость с его помощью: blank

void setup() {
  pinMode(3, OUTPUT);
}
void loop() {
  // analogRead(0) / 4 == 0... 255
  analogWrite(3, analogRead(0) / 4);  
  delay(100);
}

Как вы можете видеть, все очень просто. Сделаем ещё одну интересную вещь: попробуем плавно включать и выключать светодиод, для чего нам понадобится цикл из урока про циклы.

void setup() {
  pinMode(3, OUTPUT);
}
void loop() {
  for (int i = 0; i < 255; i++) {
    analogWrite(3, i);
    delay(20);
  }
  for (int i = 255; i > 0; i--) {
    analogWrite(3, i);
    delay(20);
  }
}

Плохой пример! Алгоритм плавного изменения яркости блокирует выполнение кода. Давайте сделаем его на таймере аптайма.

void setup() {
  pinMode(3, OUTPUT);
}

uint32_t tmr;
int val = 0;
bool dir = true;
void loop() {
  if (millis() - tmr >= 20) {
    tmr = millis();
    if (dir) val++; // увеличиваем яркость
    else val--;     // уменьшаем
    if (val >= 255 || val <= 0) dir = !dir; // разворачиваем
    analogWrite(3, val);
  }
}

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

Светодиод будет мигать не очень плавно: яркость будет нарастать слишком резко и практически не будет меняться. Связано это с тем, что человеческий глаз воспринимает яркость нелинейно, а мы управляем ей линейно. Для более плавного ощущения яркости используется коррекция по CRT гамме, которая переехала из этого урока в отдельный урок по миганию светодиодом по CRT гамме в блоке алгоритмов. Изучи обязательно!

Ещё один момент: если подключить светодиод наоборот, к VCC, то яркость его будет инвертирована: 255 выключит светодиод, а 0 – включит, потому что ток потечет в другую сторону: blank

Светодиодные ленты


Светодиодная лента представляет собой цепь соединённых светодиодов. Соединены они не просто так, например обычная 12V лента состоит из сегментов по 3 светодиода в каждом. Сегменты соединены между собой параллельно, то есть на каждый приходят общие 12 Вольт. Внутри сегмента светодиоды соединены последовательно, а ток на них ограничивается общим резистором (могут стоять два для более эффективного теплоотвода):   Таким образом достаточно просто подать 12V от источника напряжения на ленту и она будет светиться. За простоту и удобство приходится платить эффективностью. Простая математика: три белых светодиода, каждому нужно по ~3.2V, суммарно это 9.6V. Подключаем ленту к 12V и понимаем, что 2.5V у нас просто уходят в тепло на резисторах. И это в лучшем случае, если резистор подобран так, чтобы светодиод горел на полную яркость.

Подключаем к Arduino


Здесь всё очень просто: смотрите предыдущий урок по управлению нагрузкой постоянного тока. Управлять можно через реле, транзистор или твердотельное реле. Нас больше всего интересует плавное управление яркостью, поэтому продублирую схему с полевым транзистором:   blank Конечно же, можно воспользоваться китайским мосфет-модулем! Пин VCC кстати можно не подключать, он никуда не подведён на плате. blank

Управление


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

Питание и мощность


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

  • Яркость. Максимальная мощность будет потребляться на максимальной яркости.
  • Напряжение питания (чаще всего 12V). Также бывают 5, 24 и 220V ленты.
  • Качество, тип и цвет светодиодов: одинаковые на вид светодиоды могут потреблять разный ток и светить с разной яркостью.
  • Длина ленты. Чем длиннее лента, тем больший ток она будет потреблять.
  • Плотность ленты, измеряется в количестве светодиодов на метр. Бывает от 30 до 120 штук, чем плотнее – тем больший ток будет потреблять при той же длине и ярче светить.

Лента всегда имеет характеристику мощности на погонный метр (Ватт/м), указывается именно максимальная мощность ленты при питании от номинального напряжения. Китайские ленты в основном имеют чуть меньшую фактическую мощность (в районе 80%, бывает лучше, бывает хуже). Блок питания нужно подбирать так, чтобы его мощность была больше мощности ленты, т.е. с запасом как минимум на 20%.

  • Пример 1: нужно подключить 4 метра ленты с мощностью 14 Ватт на метр, лента может работать на максимальной яркости. 14*4 == 56W, с запасом 20% это будет 56*1.2 ~ 70W, ближайший блок питания в продаже будет скорее всего на 100W.
  • Пример 2: берём ту же ленту, но точно знаем, что яркость во время работы не будет больше половины. Тогда можно взять блок на 70 / 2 == 35W.

Важные моменты по току и подключению:

  • Подключение: допустим, у нас подключено ленты на 100W. При 12 Вольтах это будет 8 Ампер – весьма немаленький ток! Ленту нужно располагать как можно ближе к блоку питания и подключать толстыми (2.5 кв. мм и толще) проводами. Также при создании освещения есть смысл перейти на 24V ленты, потому что ток в цепи будет меньше и можно взять более тонкие провода: если бы лента из прошлого примера была 24-Вольтовой, ток был бы около 4 Ампер, что уже  не так “горячо”.
  • Дублирование питания: лента сама по себе является гибкой печатной платой, то есть ток идёт по тонкому слою меди. При подключении большой длины ленты ток будет теряться на сопротивлении самой ленты, и чем дальше от точки подключения – тем слабее она будет светить. Если требуется максимальная яркость на большой длине, нужно дублировать питание от блока питания дополнительными проводами, или ставить дополнительные блоки питания вдоль ленты. Дублировать питание рекомендуется каждые 2 метра, потому что на такой длине просадка яркости становится заметной уже почти на всех лентах.
  • Охлаждение: светодиоды имеют не 100% КПД, плюс ток в них ограничивается резистором, и как результат – лента неслабо греется. Рекомендуется приклеивать яркую и мощную ленту на теплоотвод (алюминиевый профиль). Так она не будет отклеиваться и вообще проживёт гораздо дольше.

Видео


Полезные страницы


  • Набор GyverKIT – большой стартовый набор Arduino моей разработки, продаётся в России
  • Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress у проверенных продавцов
  • Подборка библиотек для Arduino, самых интересных и полезных, официальных и не очень
  • Полная документация по языку Ардуино, все встроенные функции и макросы, все доступные типы данных
  • Сборник полезных алгоритмов для написания скетчей: структура кода, таймеры, фильтры, парсинг данных
  • Видео уроки по программированию Arduino с канала “Заметки Ардуинщика” – одни из самых подробных в рунете
  • Поддержать автора за работу над уроками
  • Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])

Содержание:

  • 1 Принцип управления нагрузкой через Ардуино
    • 1.1 Синтаксис команд
    • 1.2 Способы управления светодиодами через Ардуино
  • 2 Виды  транзисторных ключей
  • 3 Принцип работы транзистора для плавного управления светодиодной лентой
  • 4 Управление RGB лентой с помощью Andurino
    • 4.1 Скетч управления яркостью светодиодной ленты Arduino
  • 5 Модули управления Ардуино

Ардуино идеально подходит для управления любыми устройствами. Микропроцессор ATmega с помощью программы-скетча манипулирует большим количеством дискретных выводов, аналогово-цифровых входов/выводов и ШИМ-контроллерами.

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

Принцип управления нагрузкой через Ардуино

Управление светодиодной лентой при помощи Аrduino

Плата Ардуино имеет два типа портов вывода: цифровой и аналоговый (ШИМ-контроллер). У цифрового порта возможно два состояния – логический ноль и логическая единица. Если подключить к нему светодиод он либо будет светиться, либо не будет.

Аналоговый выход представляет собой ШИМ-контроллер, на который подаётся сигнал частотой около 500Гц с регулируемой скважностью. Что такое ШИМ-контроллер и принцип его работы можно найти в интернете. Через аналоговый порт  возможно не только включать и выключать нагрузку, а и изменять напряжение (ток) на ней.

Синтаксис команд

Цифровой вывод:

pinMode(12, OUTPUT); — задаём порт 12 портом вывода данных;
digitalWrite(12, HIGH); — подаём на дискретный выход  12 логическую единицу, зажигая светодиод.

Аналоговый вывод:

analogOutPin = 3; – задаём порт 3 для вывода аналогового значения;
analogWrite(3, значение); – формируем на выходе сигнал с напряжением от 0 до 5В. Значение – скважность сигнала от 0 до 255. При значении 255 максимальное напряжение.

Способы управления светодиодами через Ардуино

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

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

Виды  транзисторных ключей

  • Биполярный;
  • Полевой;
  • Составной (сборка Дарлингтона).

При подаче высокого логического уровня (digitalWrite(12, HIGH);) через порт вывода  на базу транзистора через цепочку коллектор-эмиттер потечет опорное напряжение на нагрузку. Таким образом можно включать и отключать светодиод.

Аналогичным образом работает и полевой транзистор, но поскольку у него вместо «базы» сток, который управляется не током, а напряжением, ограничительный резистор в этой схеме необязателен.

Биполярный вид не позволяет регулировать мощные нагрузки. Ток через него ограничен на уровне 0,1-0,3А.

Полевые транзисторы работают с более мощными нагрузками с током до 2А. Для ещё более мощной нагрузки используют полевые транзисторы Mosfet с током до 9А и напряжением до 60В.

Полевой транзистор Mosfet

Вместо полевых можно использовать сборку Дарлингтона из биполярных транзисторов на микросхемах ULN2003, ULN2803.

Микросхема ULN2003 и принципиальная схема электронного коммутатора напряжения:

Микросхема ULN2003

Принцип работы транзистора для плавного управления светодиодной лентой

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

Принцип работы транзистора

Подключив транзистор к аналоговому порту Ардуино, присваиваем ему значение от 0 до 255, изменяем напряжение, подаваемое на коллектор либо сток от 0 до 5В. Через цепочку коллектор-эмиттер будет проходить от 0 до 100% опорного напряжения нагрузки.

Для управления светодиодной лентой arduino необходимо подобрать транзистор подходящей мощности. Рабочий ток для питания метра светодиодов 300-500мА, для этих целей подойдет силовой биполярный транзистор. Для большей длины потребуется полевой транзистор.

Схема подключения LED ленты к ардуино:

Схема подключения ленты к ардуино

Управление RGB лентой с помощью Andurino

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

Схема подключения к Arduino RGB светодиода:

подключение к arduino rgb светодиода

Аналогично построено и управление RGB лентой Arduino:

Управление RGB лентой через ArduinoАrduino RGB контроллер лучше собирать на полевых транзисторах.

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

Плавное управление яркостью

Скетч управления яркостью светодиодной ленты Arduino

int led = 120; устанавливаем средний уровень яркости

void setup() {
pinMode(4, OUTPUT);  устанавливаем 4й аналоговый порт на вывод
pinMode(2, INPUT);

pinMode(4, INPUT);  устанавливаем 2й и 4й цифровой порт на ввод для опроса кнопок
}
void loop(){

button1 = digitalRead(2);

button2 = digitalRead(4);
if (button1 == HIGH)  нажатие на первую кнопку увеличит яркость
{
led = led + 5;

analogWrite(4, led);
}
if (button2 == HIGH)  нажатие на вторую кнопку уменьшит яркость
{
led = led — 5;

analogWrite(4, led);
}

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

Модули управления Ардуино

Для создания полноценного драйвера управления светодиодной лентой можно использовать модули-датчики.

Инфракрасное управлениеИК-управление

Модуль позволяет запрограммировать до 20 команд.

Радиус сигнала около 8м.

Цена комплекта  6 у.е.

Управление по радиоканалуПо радиоканалу

Четырёхканальный блок с радиусом действия до 100м

Цена комплекта  8 у.е.

Позволяет включать освещение еще при приближении к квартире.

Бесконтактное управлениеБесконтактное

Датчик расстояния способен по движению руки увеличивать и уменьшать яркость освещения.

Радиус действия до 5м.

Цена модуля 0,3 у.е.

Здравствуйте Хабр-сообщество.

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

К таким лентам можно купить источник питания, диммер, диммер с пультом управления. Это позволит вам использовать светодиодную ленту для посветки. Однако если вы захотите запрограммировать алгоритм изменения цвета, или сделать управление из компьютера — то тут начинается разочарование. Вы в продаже не найдете диммеров с управлением через COM-порт или Ethernet.

Я решил эту проблему с помощью Arduino, и хочу поделиться своим вариантом решения с Вами.

Добро пожаловать под кат.

Теоретическая часть

Для реализации плавного изменения свечения всех 3 каналов нам потребуется сделать собственный димер. Сделать его очень просто, для этого требуется взять силовые ключи и управлять ими с помощью ШИМ сигнала. Также наш диммер должен быть программируемым и/или управляемым из вне.

В качестве мозгов идеально подходит Arduino. В её программу можно записать любой алгоритм изменения цветов, а также её можно управлять как с помощью модулей Arduino, так и удаленно по Ethernet, Ик-порту, Bluetooth, используя соответствующие модули.

Arduino Leonardo

Для реализации задуманного я выбрал Arduino Leonardo. Она одна из самых дешевых плат Arduino, и она имеет много выводов с поддержкой ШИМ.

PWM: 3, 5, 6, 9, 10, 11, and 13. Provide 8-bit PWM output with the analogWrite() function.

И так, источник ШИМ у нас имеется, остаётся придумать с силовыми ключами. Если побродить по интренет магазинам, то выяснится, что не существует модуля Arduino для управления RGB лентами. Или просто универсальных модулей с силовыми транзисторами. Также можно найти огромное количество сайтов радиолюбителей, которые делают платы с силовыми ключами сами.

Однако есть способ проще! Нас выручит модуль Arduino для управления двигателями. Этот модуль имеет все необходимое для нас — на нем установлены мощные ключи на 12В.

Пример такого модуля является «L298N Module Dual H Bridge Stepper Motor Driver Board Modules for Arduino Smart Car FZ0407». Такой модуль основан на микросхеме L298N, которая представляет из себя 2 моста. Однако мостовое включение полезно для двигателя (от этого он может менять направление вращения), а в случае RGB ленты, оно бесполезное.

Мы будем использовать не весь функционал этой микросхемы, а только 3 её нижних ключа, подключив ленту как показано на рисунке.

Практическая часть часть

Для реализации потребуется Arduino Leonardo, Модуль управления двигателями L298N, Источник 12В (для запитки ленты), сама RGB лента, соединительные провода.
Для удобства подключения я еще использовал Fundruino IO Expansion, но он никакой функциональной нагрузки не несет.

Схема подключения показана на рисунке.

Хочу дополнительно описать питание системы. В данной схеме питание подается на модуль управления двигателями, в нем стоит понижающий источник питания на 5В, и эти 5В я подаю на вход Vin питания Arduino. Если разорвать эту связь (естественно земли оставив соединенными), то запитывать Arduino и силовые ключи можно от разных источников питания. Это может быть полезно когда к Arduino много всего подключено, и источник в модуле управления двигателями не справляется (выключается по перегреву).

Управляется RGB лента с помощью команд analogWrite, которая настраивает выход для формирования ШИМ сигнала.

Исходный код программы для arduino:

#define GRBLED_PIN_R 9    // пин для канала R
#define GRBLED_PIN_G 10    // пин для канала G
#define GRBLED_PIN_B 11    // пин для канала B

int rgbled_r=0, rgbled_g=0, rgbled_b=0;

void setup(){
  //enable serial datada print
  Serial.begin(9600); 
  Serial.println("RBG LED v 0.1");
  // RGBLED
  pinMode(GRBLED_PIN_R, OUTPUT);
  pinMode(GRBLED_PIN_G, OUTPUT);
  pinMode(GRBLED_PIN_B, OUTPUT);
}

void loop(){
  // change color
  rgbled_r = (rgbled_r+1)%1024;
  rgbled_g = (rgbled_g+2)%1024;
  rgbled_b = (rgbled_b+3)%1024;
  // Output
  Z1_output_rgbled();
  delay(1);
}

void Z1_output_rgbled() {
  analogWrite(GRBLED_PIN_R, rgbled_r);
  analogWrite(GRBLED_PIN_G, rgbled_g);
  analogWrite(GRBLED_PIN_B, rgbled_b);
}

На видео можно увидеть как это работает:

Экономическая часть

Модуль Стоимость Количество
L298N Module Dual H Bridge Stepper Motor Driver Board Modules for Arduino Smart Car FZ0407 $ 5.31 1
Leonardo R3 Development Board for Arduino Compatiblae + USB Cable Wire FZ0437 $ 10.00 1
5050 LED Strip RGB and single color 5M DC12V/24V 60leds/m Waterproof Flexible Car auto Strip Light saving light $ 12.38 1
Retail AC85~265V to DC 12V/6A power supply adaptor transformer switching for led light $ 9.98 1

Итого $37,65 = 1 300 руб

Вместо заключения

Для тех, кто захочет повторить описанную здесь схему — хочу заметить, что драйвер L298N рассчитан на ток 2-3А на канал, а RGB светодиодные ленты, на светодиодах 5050 с плотностью 60 светодиодов на метр, продающиеся по 5 метров, могут потреблять до 6А (2А на канал). По этому если вы хотите использовать ленты длинной более 5М — возможно потребуется схему модернизировать (подключать ленту по сегментам, или взять более мощный драйвер).

Цветная светодиодная лента — пятиметровая герметичная сборка из 300 RGB светодиодов.

Лента предназначена для интерьерного и фасадного освещения, использования в рекламных конструкциях и мультимедийных проектах.

Лента рассчитана на работу от источников постоянного тока, напряжением 12 вольт и силой до 3 ампер.

Видеообзор

Подключение и настройка

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

При подключении к Arduino или Iskra JS удобно использовать Troyka Shield.

Пример работы

Зададим яркость каждого цвета с помощью переменных резисторов. Подключите светодиодную ленту через силовые ключи к пинам 9, 10 и 11. Для управления подключите три потенциометра к аналоговым пинам A0, A2 и A4.

Схема подключения

Код программы

led_strip_pwm_pot.ino
// пины подключения потенциометров
#define POT_RED_PIN     A0
#define POT_GREEN_PIN   A2
#define POT_BLUE_PIN    A4
 
// пины подключения RGB светодиодной ленты через ключи
#define LED_RED_PIN     9
#define LED_GREEN_PIN   10
#define LED_BLUE_PIN    11
 
void setup() {
  // пины в режим выхода
  pinMode(LED_RED_PIN, LOW);
  pinMode(LED_GREEN_PIN, LOW);
  pinMode(LED_BLUE_PIN, LOW);
}
 
void loop() {
  // считываем показания с потенциометров
  // и преобразуем полученый диапазон в диапазон: от 0 до 255
  int sensorRed = map(analogRead(POT_RED_PIN), 0, 1023, 255, 0);
  int sensorGreen = map(analogRead(POT_GREEN_PIN), 0, 1023, 255, 0);
  int sensorBlue = map(analogRead(POT_BLUE_PIN), 0, 1023, 255, 0);
  // устанавливаем полученную яроксть на каждый цвет ленты
  analogWrite(LED_RED_PIN, sensorRed);
  analogWrite(LED_GREEN_PIN, sensorGreen);
  analogWrite(LED_BLUE_PIN, sensorBlue);
}

Общие сведения

Светодиодная лента — это гибкая печатная плата, на которой через равные интервалы распаяны светодиоды.

Длина ленты

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

Светодиодные ленты можно объединять в одну гирлянду.

При использовании длинных лент, позаботьтесь о правильной схеме питания. Нельзя подать напряжение только с одного конца: дорожки в ленте тонковаты для большого тока. Подключайте провода питания ко всем стыкам лент и по её концам.

Плотность размещения светодиодов на ленте

Яркость свечения светодиодной ленты зависит от типа установленных светодиодов и их количества. За единицу измерения принято считать количество светодиодов, установленных на один метр длины ленты. Больше светодиодов — больше световой поток. Количество светодиодов на метр длины ленты лежит в диапазоне от 30 до 120 штук.

Но надо учесть, что чем больше светодиодов на метре длины светодиодной ленты, тем мощнее потребуется блок питания. К выбору этого параметра нужно подходить с позиции «необходимо и достаточно».

Элементы ленты

Светодиод SMD 5050RGB

Светодиод SMD 5050 (5×5 мм) — полупроводниковый источник света, предназначенный для конструирования в различных осветительных устройств. Светодиод стабилен при перепадах температуры и влажности, выдерживает длительное воздействие солнечных лучей и вибрации.

Чип светодиода SMD 5050 состоит из трёх кристаллов. Каждый кристалл имеет два отдельных вывода (анод и катод), что дает возможность для независимой регулировки их яркости.

Светодиоды изготавливается в двух вариациях:

  • одноцветные (белые, жёлтые, красные, зелёные, синие)

  • многоцветные (RGB).

Многоцветные или RGB-светодиоды состоят из трёх кристаллов разных цветов: синего, красного и зелёного(Red, Green, Blue). Изменяя ток одного, двух или трёх кристаллов одновременно, можно получить практически любой цвет излучения из видимого спектра.

Токоограничивающий резистор

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

Контакты подключения

  • (+12V) — положительный контакт светодиодной ленты. Общий для всех трёх цветов. Подключите к плюсовому клеммнику источника напряжения 12 вольт;

  • (R) — отрицательный контакт светодиодной ленты для красного цвета. Подключите к управляющей электронике через силовой ключ.

  • (G) — отрицательный контакт светодиодной ленты для зелёного цвета. Подключите к управляющей электронике через силовой ключ.

  • (B) — отрицательный контакт светодиодной ленты для синего цвета. Подключите к управляющей электронике через силовой ключ.

Место резки

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

Это даёт возможность укоротить ленту до необходимой в проекте длины. Для этого разрежьте ленту поперёк линии, нанесённой по центру контактных площадок между маркировкой.

Место резки маркируется ножницами

Защита от внешних факторов

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

Характеристики

  • Длина ленты: 5 метров

  • Цвет свечения: RGB, 16 миллионов цветов

  • Рабочее напряжение: 12 В

  • Потребляемый ток: 3 А (0,6 A/м)

  • Потребляемая мощность: 36 Вт (7,36 Вт/м)

  • Модель светодиода: SMD 5050RGB

  • Плотность светодиодов: 60 штук/м

  • Кратность резки: 3 светодиода

  • Класс защиты: IP65

Ресурсы

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

Но это не всегда удобно, потому что начинать нужно с какого-то минимального или максимального значения, и либо удерживать кнопку длительное время, пока яркость не будет такой, как нужно, или многократно нажимать регулировочную кнопку. Таких регуляторов описано в литературе очень много.

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

Для управления используется пульт дистанционного управления марки TOSHIBA SE-R0301 от неисправного DVD-плеера. Но, в принципе, можно использовать любой другой пульт, соответственно внеся изменения в программу. У выше указанного пульта есть одиннадцать цифровых кнопок, от «0» до «9» и кнопка «+10».

Было решено кнопку «0» использовать для выключения ленты, а кнопку «+10» для включения её на максимальную яркость Для остальных цифровых кнопок заданы промежуточные значения яркости, которые можно изменить «по вкусу» при программировании. Этот регулятор яркости сделан на основе микроконтроллерной платы ARDUINO UNO.

Использование недорогой готовой платы ARDUINO UNO интересно тем, что это готовый модуль, — небольшая печатная плата, на которой расположен микроконтроллер ATMEGA328, а так же вся его «обвязка», необходимая для его работы, включая USB-программатор и стабилизатор напряжения питания.

Принципиальная схема

Принципиальная схема показана на рисунке. Для приема команд пульта дистанционного управления используется фотоприемник F1 типа TSOP4838, но можно применить и любой другой аналогичный. Сигнал от него поступает на цифровой порт D2, который используется для работы на прием.

Принципиальная схема регулятора яркости светодиодной ленты на Arduino UNO

Рис. 1. Принципиальная схема регулятора яркости светодиодной ленты на Arduino UNO.

У платы ARDUINO UNO имеется 14 цифровых портов, от DO до D13. При этом шесть из них (D3, D5, D6, D9, D10, D11) могут работать как бы в аналоговом режиме, в котором на них присутствует не ноль или единица, а импульсы, широту которых можно задавать от 255-ю ступенями.

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

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

Импульсы с него подаются на затвор полевого транзистора VТ1, в стоковой цепи которого включена светодиодная лента HL1, яркость которой и нужно регулировать.

Программа

Программа для ARDUINO UNO приводится в таблице 1. Данная программа требует загрузки библиотеки IRremote.h которая нужна для распознавания команд пульта ДУ. Эта библиотека есть в стандартном наборе программного обеспечения для ARDUINO, у меня версия Arduino 1.6.11.

Далее идет назначение портов.

В строке:

IRrecv irrecv(2);

входным назначен порт D2. На него подается сигнал с выхода интегрального фотоприемника. А в строке:

pinMode(5, OUTPUT);

выходным назначен порт D5.

Таблица 1.

Исходный код программы для регулятора яркости светодиодной ленты на Arduino UNO

Рис. 2. Исходный код программы для регулятора яркости светодиодной ленты на Arduino UNO.

В программе после «case 0х» записаны коды команд, которые формируется при нажатии соответствующей кнопки пульта дистанционного управления. Эти коды соответствуют пульту TOSHIBA SE-R0301 от неисправного DVD-плеера. Можно использовать и другой пульт, но тогда и коды будут другие. После поступления соответствующего кода указывается уровень скважности импульсов на нем. например, при нажатии кнопки «1» устанавливается на порту D5 20-й уровень широты импульсов :

case 0XA25D807F:

analogWrite( 5, 20);

break;

А при нажатии кнопки «10» устанавливается на порту D5 самый большой 255-й уровень широты импульсов, при котором лента светит на полную яркость :

case 0XA25DA45B:

analogWrite( 5, 255);

break;

Для выключения ленты нужно нажать кнопку «0», при этом устанавливается на порту D5 нулевой уровень широты

Таблица 2.

/*

определение кодов команд пульта

*/

#include

IRrecv irrecv(2); // фотоприемник на порту D2

decode_results results;

void setup () {

Serial.begin(9600); // задание скорости порта COM

irrecv.enableIRIn(); // запуск приема команды

}

void loop() {

if (irrecv.decode(&results)) {

Serial.println(results.value, HEX); // вывод данных в COM

irrecv.resume(); // прием следующей команды

}

}

импульсов, при котором лента не светит вообще :

case 0xA25D50AF:

analogWrite(5, 0);

break;

Таким образом, при нажатии кнопок от «0» до «10» происходит фактическое изменение скважности импульсов на порту D5, которые поступают на затвор полевого транзистора VT1 и питают через него светодиодную ленту, яркость которой зависит от скважности этих импульсов. В программе между нулевым и максимальным заданы уровни скважности 20, 30, 50, 70, 100, 130, 160, 180, 220.

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

Но об этом уже написано выше. Если заданные в программе уровни яркости по какой-то причине не устраивают, можно ввести какие угодно, и в любом порядке, важно чтобы это было целое число в пределах от 0 до 255.

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

Но нужно будет предварительно разобраться, какие коды соответствуют выбранным кнопкам другого пульта. Для этого нужно сначала загрузить в ARDUINO UNO программу из таблицы 2, которая предназначена для определения кодов кнопок пульта.

После загрузки данной программы в микроконтроллер платы ARDUINO UNO, нужно открыть монитор COM-порта, для этого в окне программы Arduino 1.6.11 выбираем «Инструменты» и из выпадающего меню «Монитор порта». После того как откроется окошко Монитора порта, берем пульт ДУ и нажимаем интересные нам кнопки.

В окне монитора порта будет отображаться код, соответствующий каждой кнопке. Следует заметить, что может быть такое, что при нажатии каждой кнопки приходит две команды, — сначала код команды, а затем код FFFFFFF. Или даже несколько строк кода FFFFFFF.

Так вот, первое это код команды, который нужно занести в программу в таблице 1 после «case Ох», а вторая строка или строки букв «F» это просто указатель на то, как долго кнопка удержана нажатой, в одном случае. В другом случае может показывать, что кнопку отпустили Для нашего случая это несущественно, — важен только код самой команды.

Каравкин В. РК-12-19.

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

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

Рынок светодиодного освещения набирает бешеные обороты, и не сложно понять, почему. Они дешевы для производства, потребляют значительно меньше энергии, чем другие варианты освещения, и в большинстве случаев не нагреваются, что делает их безопасными для самых разных целей.
Одним из самых популярных светодиодных продуктов является LED-лента. В этой статье мы рассмотрим, как настроить два наиболее распространенных типа светодиодных лент на Arduino. Эти проекты очень просты, и даже если вы новичок в электронике Arduino или DIY, вы сможете это сделать.
Мы также будем использовать IDE Arduino для их контроля. В этом проекте используется Arduino Uno, хотя вы можете взять практически любую совместимую плату (например, NodeMCU).
Здесь ссылки на все описанные в статье устройсва и материалы. Перейдя по ссылкам ниже вы сможете купить себе светодиодные ленты и Ардуино по партнерской цене.
Arduino по лучшей цене с дополнительной скидкой от Lightru
SPI светодиодная лента — отличного качества — по партнерской цене

Руководство по выбору светодиодных лент к Arduino.

При покупке светодиодных лент есть несколько вещей, которые следует учитывать. Во-первых, это функциональность. Если вы планируете использовать устройства в основном для окружающего освещения, то правильным выбором станет простая диодная полоса 12 В RGB (SMD5050).
Многие приборы поставляются с инфракрасным пультом для управления ими, хотя в этом проекте мы будем использовать Arduino. Потратьте немного времени на покупки. На момент написания статьи метр ленты можно было купить всего за 1 доллар.
Если вы хотите что-то более высокотехнологичное, рассмотрите SPI RGB ленту.

Эти полосы, иногда называемые Neopixels, имеют интегрированные чипсеты, которые позволяют им управлять каждым диодом поодиночке. Это означает, что они способны на большее, чем просто дополнительное освещение. Вы можете использовать их для создания дешевого светодиодного дисплея с нуля. Из лент можно соорудить даже собственную домашнюю тучку с извергающими молниями. Или бегущую светодиодную ленту.

Подробне о SPI RGB лентах вы можете прочитать здесь.

Эти полосы требуют всего 5 В для полноценного питания. Несмотря на то, что можно подавать небольшое количество мощности непосредственно с платы Arduino, обычно рекомендуется использовать отдельный источник питания 5 В, чтобы избавиться от запаха гари. Если вы ищете индивидуально программируемые светодиоды, светодиодная лента Ардуино — лучшая находка для вас. В данный момент стоимость 1 метра равняется примерно 4 долларам — 270 рублям.
Еще одна вещь, которую следует учитывать, – это то, где ленты, вероятно, будут использоваться. Оба типа полосы имеют различную длину, плотность светодиодов – количество диодов на метр – и разную степень защиты от атмосферных воздействий.
Осматривая светодиодную ленту, обратите внимание на цифры в листинге. Обычно первым номером будет количество светодиодов на метр, а буквы IP, за которыми следуют цифры, будут его степенью защищенности.

Например, если в списке указано «30 IP67», это означает, что на метр будет 30 светодиодов. «6» — признак того, что устройство полностью защищено от пыли. «7» значит, что прибор не пострадает от непродолжительного погружения в воду. После того, как вы приобретете светодиодную полоску, придет время связать ее с Arduino. Начнем с SMD5050.

Светодиодная лента Ардуино – Подключение

Чтобы подключить 12v светодиодную ленту к Arduino, вам понадобится несколько компонентов:
● 12v RGB светодиодная лента(SMD5050);
● 1 x Arduino Uno (любая совместимая плата подойдет);
● 3 x 10 кОм резисторов;
● 3 x логических уровня N-канальных МОП-транзисторов (MOSFET);
● 1 х макет;
● Монтажные провода;
● Блок питания на 12 В.

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

Подключение адресной светодиодной ленты к Ардуино

Прежде чем настраивать схему светодиодная лента Ардуино, давайте поговорим о МОП-структуре — MOSFET.

Всякий раз, когда вы управляете прибором с более высоким напряжением, чем у вашего микроконтроллера, вам нужно установить что-нибудь между ними, чтобы избежать поломки или даже возгорания. Один из простых способов сделать это – использовать MOSFET. Передавая сигналы широтно-импульсной модуляции (ШИМ), вы можете контролировать количество энергии, проходящее между стоками и источником. Пропустив каждый из цветов светодиодной полосы через МОП-транзисторы, вы можете регулировать яркость каждого цвета на светодиодной ленте.
При использовании микроконтроллеров не забывайте о компонентах логического уровня для обеспечения стабильной работы. Убедитесь, что ваши МОП-транзисторы являются логическим уровнем, а не стандартным.

Настройте свою схему следующим образом:

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

1. Подключите контакты Arduino 9, 6 и 5 к концам затвора трех МОП-транзисторов и подключите резистор 10 кОм в соответствии с заземлением.
2. Подключите ножки источника к заземлению.
3. Подключите дренажные опоры к разъемам Green, Red и Blue на светодиодной ленте.
4. Подключите шину питания к разъему +12v светодиодной полосы (обратите внимание, что на изображении выше провод питания черный, чтобы соответствовать цветам разъемов на моей светодиодной полосе).
5. Подключите заземление Arduino.
6. Подключите стабилизатор питания 12 В в сеть.
Большинство светодиодных полосок имеет разъемы Dupont, к которым легко подключиться. Если у вас нет таких, вам понадобится припаять провода к диодной ленте. Не паникуйте, если вы новичок в пайке — это легкая работа. В интернете есть множество руководств по началу работы с паяльником, с которыми можно ознакомиться, если пайка доставляет вам трудности.
Для этого проекта мы будем управлять нашей платой Arduino по USB . Вы можете выбрать питание платы с помощью вывода VIN, но перед этим убедитесь, что вы знаете ограничения мощности для своего устройства.

После всех процедур схема и Светодиодная лента Ардуино должна выглядеть примерно так:

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

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

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

Подключите плату Arduino к компьютеру через USB и откройте Arduino IDE. Убедитесь, что у вас правильный номер платы и порта, выбранный для вашей платы, в меню «Сервис»> «Сервис и инструменты»> «Порт». Откройте новый эскиз и сохраните его с соответствующим именем.
Этот эскиз затухает с одноцветными огнями, держит их в таком состоянии в течение нескольких секунд, а затем исчезает, пока они не погаснут снова.

Вы можете сделать эскиз самостоятельно или просто загрузить готовый код из GitHub (https://gist.github.com/anonymous/d4fa3719478c3c5a9c321cc372e9540).

Начните с определения штырей, которые будут использоваться для управления МОП-транзисторами.

#define RED_LED 6
#define BLUE_LED 5
#define GREEN_LED 9

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

int brightness = 255;
int gBright = 0;
int rBright = 0;
int bBright = 0;
int fadeSpeed = 10;

В вашей настройке мы установим выводы Arduino. Мы также будем вызывать пару функций с задержкой в 5 секунд. Этих функций еще не существует, но не беспокойтесь, мы доберемся до них.

void setup() {
pinMode(GREEN_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);

TurnOn();
delay(5000);
TurnOff();
}
Теперь создайте метод TurnOn ():
void TurnOn() {
for (int i = 0; i < 256; i++) {
analogWrite(RED_LED, rBright); rBright +=1; delay(fadeSpeed); } for (int i = 0; i < 256; i++) { analogWrite(BLUE_LED, bBright); bBright += 1; delay(fadeSpeed); } for (int i = 0; i < 256; i++) { analogWrite(GREEN_LED, gBright); gBright +=1; delay(fadeSpeed); } }

Эти три цикла for полностью увеличивают яркость каждого цвета за время, указанное значением fadeSpeed.
Наконец, вам нужно создать метод TurnOff ():
void TurnOff() {
for (int i = 0; i < 256; i++) { analogWrite(GREEN_LED, brightness); analogWrite(RED_LED, brightness); analogWrite(BLUE_LED, brightness); brightness -= 1; delay(fadeSpeed); }}void loop() {} Этот метод применяет нашу переменную яркости ко всем трем цветным выводам и уменьшает их до нуля в течение определенного периода времени. Нам также нужен метод пустого цикла, чтобы избежать ошибок компиляции.

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

Плавное включение светодиодной ленты на Ардуино

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

Теперь вы должны увидеть, что ваша светодиодная лента Ардуино наращивает яркость, удерживая белый оттенок в течение 5 секунд, а затем равномерно исчезает до нуля:

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

Если у вас возникли трудности, дважды проверьте свою проводку и код.

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

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

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

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

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

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

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

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

Опубликовано: 23.02.2017 20:25



WS2812B

Введение

Приветствую всех. Мы продолжаем знакомить Вас со светодиодными лентами. На этот раз мы рассмотрим адресную RGB светодиодную ленту WS2812B. Лента основана на светодиодах WS2812B в корпусе LED 5050, куда в корпус производители поместили не только три встроенных светодиода (Красный, Зеленый, Синий), но и управляемый ШИМ драйвер, управляющий их яркостью. Благодаря этому мы можем получить произвольный цвет, изменяя яркость встроенных светодиодов, а так же управлять отдельно взятым пикселем на ленте. Собственно, три встроенных разноцветных светодиода вместе с ШИМ драйвером и образуют светодиод WS2812B.

Немного запутывает, не правда ли? Светодиод, который содержит себе три разноцветных светодиода, но при этом сам — не светит, а светятся те три, что в него встроены. Поэтому мне проще называть его пикселем, нежели светодиодом. И далее, если я упоминаю пиксель – знайте, что это светодиод WS2812B.

На фото справа вы можете увидеть этот самый светодиод WS2812B, где большой черный прямоугольник это ШИМ драйвер, а вот три встроенных в него светодиода настолько малы, что их с трудом видно, и можно отследить только по золотым нитям, идущим от драйвера к трем разноцветным светодиодам.

Технические характеристики

Теперь давайте немного пройдемся по техническим характеристикам из datasheet который мне удалось раскопать в интернете.

  • Светодиод WS2812B работает от напряжения 5В (±0.5).
  • Ток ~20мА на один встроенный светодиод, то есть ~60мА на пиксель в целом.
  • Рабочая температура от -20 до +80 ℃.

Остальное можете посмотреть самостоятельно в даташите.

Подключение

Подключается светодиодная лента довольно-таки просто, необходимо подать на +5V и GND, плюс (+) и минус (-) от 5В блока питания, а контакт DIN соединить с портом Arduino, как правило, по умолчанию используется 6-й порт Arduino, но вы вправе выбрать и любой другой свободный порт. Так же рекомендуется соединить земли Arduinoи блока питания, как нарисовано на рисунке ниже.

Будьте внимательны, лента на светодиодах WS2812B имеет направление, с одной стороны она имеет контакты DIN, +5V, GND, а с другой стороны DO, +5V, GND, подключать необходимо именно вход, то есть DIN, иначе лента не будет работать. Так же на ленте нарисованы стрелки, указывающие на направление.

WS2812B подключение к Arduino

Протокол

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

WS2812B протокол

Глядя на все эти цифры, становится ясно, что сделать все это, используя стандартные функции digitalWrite, delay и тому подобные — попросту невозможно, ввиду их долгой работы и неточности. Реализовать подобный протокол можно только использовав специальные библиотеки вроде CyberLib или написав собственную на чистом Си или, того хуже для нынешнего программиста, на Ассемблере.

Но не все так плохо, как кажется. Светодиоды WS2812B довольно таки популярны в Arduino сообществе, а это значит, что нам не придётся вдаваться в такие сложности, и достаточно выбрать одно из понравившихся решений.

Библиотеки

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

  • Библиотека FastLED, разрабатывается Даниэлем Гарсиа и Марком Кригсманом. Имеет свой сайт, справочную систему и большое сообщество в ~5000 человек. Библиотека написана на чистом Си, без использования Wiring. FastLED поддерживает все виды Arduino (и не только), а так же умеет работать с кучей различных протоколов и интерфейсов. В том числе и протокол для управления лентами на светодиодах WS2812B.
  • Библиотека Adafruit NeoPixel (Полное описание на нашем сайте), разрабатывается компанией Adafruit Industries. Предназначена для работы со светодиодными лентами и неопиксельными кольцами, продаваемыми в их интернет магазине. Библиотека написана на Си и Ассемблере с небольшим использованием Wiring. Эдакая солянка. Поддерживает все виды Arduino. Содержит меньший функционал по сравнению с FastLED, немного медленней, но имеет более компактный вид, только основное для работы.

Теперь давайте напишем наш излюбленный пример Blink, используя обе эти библиотеки, и затем сравним их.

Пример Blink используя ленту WS2812B (с 30 светодиодами) и библиотеку FastLED

// Подключаем библиотеку FastLED.
#include "FastLED.h"

// Указываем, какое количество пикселей у нашей ленты.
#define LED_COUNT 30

// Указываем, к какому порту подключен вход ленты DIN.
#define LED_PIN 6

// Создаем переменную strip для управления нашей лентой.
CRGB strip[LED_COUNT];

void setup()
{
  // Добавляем ленту.
  FastLED.addLeds(strip, LED_COUNT);
}

void loop()
{
  // Включаем все светодиоды.
  for (int i = 0; i < LED_COUNT; i++)
  {
    strip[i] = CRGB::Red; // Красный цвет.
  }
  // Передаем цвета ленте.
  FastLED.show();
  // Ждем 500 мс.
  delay(500);
  // Выключаем все светодиоды.
  for (int i = 0; i < LED_COUNT; i++)
  {
    strip[i] = CRGB::Black; // Черный цвет, т.е. выключено.
  }
  // Передаем цвета ленте.
  FastLED.show();
  // Ждем 500 мс.
  delay(500);
}
Скетч использует 3758 байт (11%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 187 байт (9%) динамической памяти, оставляя 1861 байт для локальных переменных. Максимум: 2048 байт.

Пример Blink используя ленту WS2812B (с 30 светодиодами) и библиотеку Adafruit NeoPixel

// Подключаем библиотеку Adafruit NeoPixel.
#include "Adafruit_NeoPixel.h"

// Указываем, какое количество пикселей у нашей ленты.
#define LED_COUNT 30

// Указываем, к какому порту подключен вход ленты DIN.
#define LED_PIN 6

// Создаем переменную strip для управления нашей лентой.
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup()
{
  // Инициализируем ленту.
  strip.begin();
}

void loop()
{
  // Включаем все светодиоды.
  for (int i = 0; i < LED_COUNT; i++)
  {
    strip.setPixelColor(i, strip.Color(255, 0, 0)); // Красный цвет.
  }
  // Передаем цвета ленте.
  strip.show();
  // Ждем 500 мс.
  delay(500);
  // Выключаем все светодиоды.
  for (int i = 0; i < LED_COUNT; i++)
  {
    strip.setPixelColor(i, strip.Color(0, 0, 0)); // Черный цвет, т.е. выключено.
  }
  // Передаем цвета ленте.
  strip.show();
  // Ждем 500 мс.
  delay(500);
}
Скетч использует 2592 байт (8%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 40 байт (1%) динамической памяти, оставляя 2008 байт для локальных переменных. Максимум: 2048 байт.

Подытожим

Как вы видите из скетчей выше, работать с обеими библиотеками довольно таки просто. Но библиотека FastLED занимает больше места в памяти Arduino, более того чем больше пикселей в вашей ленте тем больше памяти она зарезервирует для своей работы, а точнее 3 байта на каждый пиксель. Таким образом подключить к Arduino можно не более 600 пикселей при использовании минимальной логики. По этому, мне больше приглянулась библиотека Adafruit NeoPixel. В ней только нужное для работы со светодиодными лентами и более рациональное использование памяти. Какую из этих библиотек использовать, решать, конечно, вам. Обе они работают и со своею задачей справляются на 5+.

Ну а мы на этом закончим с обзором ленты. Далее мы сделаем на ее основе несколько проектов, для более наглядной демонстрации, но это уже буду отдельные статьи. Успехов вам и удачи. Оставляйте свои отзывы и комментарии.

Смотрите также

  • Динамическая подсветка монитора на Arduino
  • Подключение RGB светодиодной ленты к Arduino (LED 3528)
  • Инъекция света


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

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

  • Arduino х 1шт.
  • Trema Shield х 1шт.
  • Trema-модуль силовой ключ х 3шт.
  • Trema-модуль ИК-приёмник х 1шт.
  • Источник питания 12В х 1шт.
  • Коннектор Power Jack с клемником х 1шт.
  • ИК-пульт дистанционного управления х 1шт.
  • RGB светодиодная лента, с коннектором и проводами.

Для реализации проекта нам необходимо установить одну библиотеку:

  • Библиотека iarduino_IR для работы с ИК-приёмопередатчиками
    ВАЖНО: библиотека использует второй аппаратный таймер,
    НЕ ВЫВОДИТЕ СИГНАЛЫ ШИМ НА 3 ИЛИ 11 ВЫВОД!

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE.

Видео:

Схема подключения:

Силовые ключи подключаются к выводам с ШИМ: 5, 6, 9.
ИК-приёмник подключается к цифровому выводу 7 (можно заменить на любой цифровой вывод, указав его номер в скетче).

Схема дистанционного управления RGB лентой с ИК-пульта

Код программы:

// Подключаем библиотеку:
#include <iarduino_IR_RX.h>                          // подключаем библиотеку для работы с ИК приёмником
// Объявляем переменные и константы:
iarduino_IR_RX   IR(7);                              // объявляем переменную для работы с ИК приёмником (номер цифрового вывода к которому подключён ИК приёмник = 7)
const    uint8_t PIN_LED_R   = 6;                    // указываем номер вывода arduino, к которому подключён Trema ключ, управляющий R каналом светодиодной ленты
const    uint8_t PIN_LED_G   = 9;                    // указываем номер вывода arduino, к которому подключён Trema ключ, управляющий G каналом светодиодной ленты
const    uint8_t PIN_LED_B   = 5;                    // указываем номер вывода arduino, к которому подключён Trema ключ, управляющий B каналом светодиодной ленты
         uint8_t VAL_LED_R   = 0xFF;                 // объявляем переменную содержащую значение яркости R канала светодиодной ленты
         uint8_t VAL_LED_G   = 0xFF;                 // объявляем переменную содержащую значение яркости G канала светодиодной ленты
         uint8_t VAL_LED_B   = 0xFF;                 // объявляем переменную содержащую значение яркости B канала светодиодной ленты
         uint8_t VAL_LIGHT   = 0xFF;                 // максимальная яркость для каждого канала RGB
unsigned long    MAS_PLAY[6] = {5,0,0,0,0,0};        // массив для автоперелива {задержка в мс, время старта, тип, сектор, позиция, яркость}
         bool    FLAG_ON     = 0;                    // флаг вкл/выкл
         bool    FLAG_RGB    = 1;                    // флаг указывающий о необходимости изменить значения ШИМ
void setup(){
  IR.begin();                                        // инициируем ИК приёмник
}
void loop(){
// Читаем команды с ИК-пульта (если таковые есть)
  if(IR.check(true)){ if(FLAG_ON){ switch(IR.data){  // если принят пакет с пульта (включая пакеты повторов), если устройство включено, проверяем какая кнопка пульта нажата
    /* <<   = перелив 1 */ case 0xFF22DD: if(IR.key_press){MAS_PLAY[2]=MAS_PLAY[2]==1?0:1; MAS_PLAY[1] = millis();} break;
    /* >>   = перелив 2 */ case 0xFF02FD: if(IR.key_press){MAS_PLAY[2]=MAS_PLAY[2]==2?0:2; MAS_PLAY[1] = millis();} break;
    /* >||  = перелив 3 */ case 0xFFC23D: if(IR.key_press){MAS_PLAY[2]=MAS_PLAY[2]==3?0:3; MAS_PLAY[1] = millis();} break;
    /* CH+  = яркость + */ case 0xFFE21D:                FLAG_RGB=1; VAL_LIGHT=VAL_LIGHT<<1|1; break;
    /* -    = R канал + */ case 0xFFE01F: MAS_PLAY[2]=0; FLAG_RGB=1; VAL_LED_R=VAL_LED_R<<1|1; break;
    /* +    = G канал + */ case 0xFFA857: MAS_PLAY[2]=0; FLAG_RGB=1; VAL_LED_G=VAL_LED_G<<1|1; break;
    /* EQ   = B канал + */ case 0xFF906F: MAS_PLAY[2]=0; FLAG_RGB=1; VAL_LED_B=VAL_LED_B<<1|1; break;
    /* CH   = яркость - */ case 0xFF629D:                FLAG_RGB=1; VAL_LIGHT=VAL_LIGHT>>1;   break;
    /* 0    = R канал - */ case 0xFF6897: MAS_PLAY[2]=0; FLAG_RGB=1; VAL_LED_R=VAL_LED_R>>1;   break;
    /* 100+ = G канал - */ case 0xFF9867: MAS_PLAY[2]=0; FLAG_RGB=1; VAL_LED_G=VAL_LED_G>>1;   break;
    /* 200+ = B канал - */ case 0xFFB04F: MAS_PLAY[2]=0; FLAG_RGB=1; VAL_LED_B=VAL_LED_B>>1;   break;
    /* 1    = красный   */ case 0xFF30CF: MAS_PLAY[2]=0; FLAG_RGB=1; VAL_LED_R=0xFF; VAL_LED_G=0x00; VAL_LED_B=0x00; MAS_PLAY[3]=0; MAS_PLAY[4]=0x00; break;
    /* 2    = оранжевый */ case 0xFF18E7: MAS_PLAY[2]=0; FLAG_RGB=1; VAL_LED_R=0xFF; VAL_LED_G=0x0F; VAL_LED_B=0x00; MAS_PLAY[3]=0; MAS_PLAY[4]=0x7F; break;
    /* 3    = жёлтый    */ case 0xFF7A85: MAS_PLAY[2]=0; FLAG_RGB=1; VAL_LED_R=0xFF; VAL_LED_G=0x3F; VAL_LED_B=0x00; MAS_PLAY[3]=1; MAS_PLAY[4]=0x00; break;
    /* 4    = синий     */ case 0xFF10EF: MAS_PLAY[2]=0; FLAG_RGB=1; VAL_LED_R=0x00; VAL_LED_G=0x00; VAL_LED_B=0xFF; MAS_PLAY[3]=4; MAS_PLAY[4]=0x00; break;
    /* 5    = голубой   */ case 0xFF38C7: MAS_PLAY[2]=0; FLAG_RGB=1; VAL_LED_R=0x00; VAL_LED_G=0xFF; VAL_LED_B=0xFF; MAS_PLAY[3]=3; MAS_PLAY[4]=0x00; break;
    /* 6    = зелёный   */ case 0xFF5AA5: MAS_PLAY[2]=0; FLAG_RGB=1; VAL_LED_R=0x00; VAL_LED_G=0xFF; VAL_LED_B=0x00; MAS_PLAY[3]=2; MAS_PLAY[4]=0x00; break;
    /* 7    = фиолетовый*/ case 0xFF42BD: MAS_PLAY[2]=0; FLAG_RGB=1; VAL_LED_R=0xFF; VAL_LED_G=0x00; VAL_LED_B=0xFF; MAS_PLAY[3]=5; MAS_PLAY[4]=0x00; break;
    /* 8    = белый     */ case 0xFF4AB5: MAS_PLAY[2]=0; FLAG_RGB=1; VAL_LED_R=0xFF; VAL_LED_G=0xFF; VAL_LED_B=0xFF; MAS_PLAY[3]=0; MAS_PLAY[4]=0x00; break;
    /* 9    = чёрный    */ case 0xFF52AD: MAS_PLAY[2]=0; FLAG_RGB=1; VAL_LED_R=0x00; VAL_LED_G=0x00; VAL_LED_B=0x00; MAS_PLAY[3]=0; MAS_PLAY[4]=0x00; break;
  }}/* CH-  = вкл/выкл  */ if(IR.data==0xFFA25D && IR.key_press){FLAG_RGB=1; FLAG_ON=FLAG_ON?0:1;}} // если нажата кнопка пульта вкл/выкл и она не удерживается
// Запускаем функцию перелива цвета (если таковая включена)
  if(MAS_PLAY[2]&&FLAG_ON){Func_color();}
// Выводим ШИМ для каждого канала RGB (если требуется изменить ШИМ хотя бы для одного из каналов)
  if(FLAG_RGB){ FLAG_RGB=0;                                                                         // сбрасываем флаг указывающий о необходимости изменить значения ШИМ
    analogWrite(PIN_LED_R, FLAG_ON?map(VAL_LED_R,0,0xFF,0,MAS_PLAY[2]==1?MAS_PLAY[5]:VAL_LIGHT):0); // выводим ШИМ с указанием яркости R канала светодиодной ленты
    analogWrite(PIN_LED_G, FLAG_ON?map(VAL_LED_G,0,0xFF,0,MAS_PLAY[2]==1?MAS_PLAY[5]:VAL_LIGHT):0); // выводим ШИМ с указанием яркости G канала светодиодной ленты
    analogWrite(PIN_LED_B, FLAG_ON?map(VAL_LED_B,0,0xFF,0,MAS_PLAY[2]==1?MAS_PLAY[5]:VAL_LIGHT):0); // выводим ШИМ с указанием яркости B канала светодиодной ленты
  }
}
// функция автоперелива цвета
void Func_color(){
  if(MAS_PLAY[1]>millis()){MAS_PLAY[1]=0; delay(MAS_PLAY[0]);}                                       // произошло переполнение micros()
  if(MAS_PLAY[1]<millis()-MAS_PLAY[0]){ MAS_PLAY[1]=millis();                                        // если прошло MAS_PLAY[0] мс после последнего изменения ШИМ
    switch(MAS_PLAY[3]){                                                                             //                                                R G B     R G B
      case 0: VAL_LED_B=0x00; VAL_LED_R=0xFF; VAL_LED_G=MAS_PLAY[2]!=2?0xFF:     MAS_PLAY[4]; break; // сектор автоперелива от красного к жёлтому     (FF0000 -> FFFF00)
      case 1: VAL_LED_B=0x00; VAL_LED_G=0xFF; VAL_LED_R=MAS_PLAY[2]!=2?0x00:0xFF-MAS_PLAY[4]; break; // сектор автоперелива от жёлтого  к зелёному    (FFFF00 -> 00FF00)
      case 2: VAL_LED_R=0x00; VAL_LED_G=0xFF; VAL_LED_B=MAS_PLAY[2]!=2?0xFF:     MAS_PLAY[4]; break; // сектор автоперелива от зелёного к голубому    (00FF00 -> 00FFFF)
      case 3: VAL_LED_R=0x00; VAL_LED_B=0xFF; VAL_LED_G=MAS_PLAY[2]!=2?0x00:0xFF-MAS_PLAY[4]; break; // сектор автоперелива от голубого к синему      (00FFFF -> 0000FF)
      case 4: VAL_LED_G=0x00; VAL_LED_B=0xFF; VAL_LED_R=MAS_PLAY[2]!=2?0xFF:     MAS_PLAY[4]; break; // сектор автоперелива от синего к фиолетовому   (0000FF -> FF00FF)
      case 5: VAL_LED_G=0x00; VAL_LED_R=0xFF; VAL_LED_B=MAS_PLAY[2]!=2?0x00:0xFF-MAS_PLAY[4]; break; // сектор автоперелива от фиолетового к красному (FF00FF -> FF0000)
    }
    if(MAS_PLAY[4]<0xFF){MAS_PLAY[4]++;}else{MAS_PLAY[4]=0; MAS_PLAY[3]++;}                          // увеличиваем шаг и сектор автоперелива цвета
    if(MAS_PLAY[3]>=6){MAS_PLAY[3]=0;}                                                               // переходим от 5 к 0 сектору
    if(MAS_PLAY[2]==1){MAS_PLAY[5]=MAS_PLAY[4]>127?map(MAS_PLAY[4],127,255,VAL_LIGHT,1):map(MAS_PLAY[4],0,127,1,VAL_LIGHT);} // затухание и возрастание
    FLAG_RGB=1;                                                                                      // устанавливаем флаг указывающий о необходимости изменить значения ШИМ
  }
}

Алгоритм работы:

В начале кода:

  • подключается библиотека iarduino_IR;
  • создаётся переменная IR с указанием цифрового вывода к которому подключён ИК-приёмник;
  • создаются константы PIN_LED_ R/G/B с указанием выводов ШИМ к которым подключены ключи для каналов R/G/B;
  • создаются переменные VAL_LED_ R/G/B с указанием начального значения ШИМ для каждого канала R/G/B;
  • создаётся переменная VAL_LIGHT с указанием начальной яркости свечения
  • создаётся массив MAS_PLAY для реализации функции автоперелива цвета
  • флаги: FLAG_ON — вкл/выкл ленты и FLAG_RGB — требующий изменение ШИМ для каждого канала R/G/B.

В функции setup:

  • выполняется только одна строка кода: IR.begin(); — инициирующая ИК-приёмник.

В функции loop:

  • сначала проверяется наличие данных принятых с пульта, если данные есть, то оператором switch case определяем, какая кнопка нажата, по её коду и выполняем изменение переменных цвета, яркости, автоперелива и флагов;
  • далее, если требуется включить автоперелив, то запускаем функцию Func_color();
  • в конце устанавливаем новые значения ШИМ, если установлен флаг FLAG_RGB свидетельствующий о том, что были внесены изменения в переменные цвета или яркости.

В функции Func_color:

Меняем цвет и/или яркость по одному из трёх алгоритмов:

  • MAS_PLAY[2]==3 => меняем цвет резко, без изменения яркости;
  • MAS_PLAY[2]==2 => меняем цвет плавно, без изменения яркости;
  • MAS_PLAY[2]==1 => меняем цвет плавно, с изменением яркости;
  • MAS_PLAY[2]==0 => автоперелив отключён, при данном условии функция Func_color() не будет запускаться из функции loop.

Время перелива зависит от значения первого элемента массива MAS_PLAY[0] которое является задержкой в мс для изменения цвета на 1 деление ШИМ. Чем больше данное значение, тем дольше будет происходить перелив. По умолчанию значение равно 5мс, указывается в начале кода, при объявлении массива MAS_PLAY, данное значение можно изменять.

Ссылки:

  • Код программы.
  • Наклейка на ИК-пульт.
  • Библиотека iarduino_IR.
  • Wiki — Установка библиотек в Arduino IDE.
  • Wiki — ИК-приёмник (Trema-модуль).
  • Wiki — Силовой ключ (Trema-модуль).
  • Wiki — Trema Shield.

СОДЕРЖАНИЕ ►

  • Arduino адресная светодиодная лента WS2812B
    • Технические характеристики WS2812B
    • Проверяем адресную светодиодную ленту
  • Подключение адресной ленты к Arduino Nano
    • Код для управления адресной лентой Arduino
    • Код для эффектов на адресной ленте Arduino

Адресная светодиодная лента WS2812B привлекает многих радиолюбителей за возможность создания интересных и ярких проектов на Ардуино с ws2812b светодиодами. Но прежде, чем приступать к новому крутому проекту, следует понять, как подключить и правильно управлять адресной лентой от Ардуино. Рассмотрим в этой статье несколько простых примеров по работе с WS2812B Arduino Uno.

Подключение адресной ленты к Arduino

Адресные светодиоды ws2812b и Ардуино

Адресные ленты отличаются плотностью — от 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 адресной светодиодной ленты

Адресная светодиодная лента ws2812b — это вершина эволюции лент. Каждый светодиод в ленте состоит из обычного RGB светодиода и контроллера с тремя транзисторными выходами. Благодаря этому есть возможность управлять цветом любого светодиода и создавать потрясающие цветовые и световые эффекты. Именно поэтому устройство пользуется популярностью, несмотря на высокую стоимость.

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

WS2812B светодиоды

При подключении обращайте внимание на направление стрелок

Многих интересует, как включить адресную ленту без Ардуино и проверить ее на работоспособность. Если просто подключить питание к ленте, то ничего не произойдет — проверить ленту без контроллера нельзя. Если задеть цифровой вход адресной ленты, то могут загореться несколько светодиодов из-за случайных помех, которые воспринимаются контроллерами ws2812b светодиодов, как команды.

Если под рукой нет платы Ардуино, то можно использовать для проверки специальный контроллер. В крайнем случае, просто потрогать цифровой провод, чтобы понять будут гореть светодиоды на ленте или нет. Другого надежного способа проверить работу ws2812b ленты нет, поэтому рассмотрим далее управление и программирование адресной светодиодной ленты на микроконтроллере Ардуино Нано или Уно.

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

Для этого занятия понадобится:

  • Arduino Uno / Arduino Nano / Arduino Mega;
  • лента WS2812B;
  • макетная плата;
  • 1 резистор от 100 до 500 Ом;
  • провода «папа-папа».

WS2812B светодиоды довольно энергоемкие, один светодиод потребляет до 60 мА при максимальной яркости. Для ленты со 100 диодами потребуется блок питания на 6 и более Ампер. Микроконтроллер Arduino и светодиодная лента могут быть подключены к разным источникам питания, но «земля» должна быть общая. Дело в том, что пин GND тоже участвует в управлении адресной лентой от платы Ардуино Уно.

Схема подключения адресной ленты 5V

Схема подключения адресной ленты 5 Вольт к Ардуино
WS2812B Arduino Uno Arduino Nano Arduino Mega
GND GND GND GND
5V 5V 5V 5V
DO 10 10 10

Для работы с лентой используются три популярные библиотеки — FastLED, AdafruitNeoPixel и LightWS2812. Все библиотеки доступны для скачивания на нашем сайте. Работать с библиотеками FastLED и Adafruit NeoPixel просто, отличаются они в функциональности и объеме занимаемой памяти. После сборки этой простой схемы и установки библиотек, загрузите скетч для адресной светодиодной ленты.

Скетч. Тестирование адресной ленты WS2812b Arduino

#include "Adafruit_NeoPixel.h" // подключаем библиотеку

#define PIN  10              // указываем пин для подключения ленты
#define NUMPIXELS 3  // указываем количество светодиодов в ленте

// создаем объект strip с нужными характеристиками
Adafruit_NeoPixel strip (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
   strip.begin();                     // инициализируем ленту
   strip.setBrightness(50);  // указываем яркость светодиодов (максимум 255)
}

void loop() {
   strip.setPixelColor(0, strip.Color(255, 0, 0));   // включаем красный цвет на 1 светодиоде
   strip.show();   // отправляем сигнал на ленту
   delay(500);
   strip.clear();   // выключаем все светодиоды

   strip.setPixelColor(1, strip.Color(0, 0, 255));   // включаем синий цвет на 2 светодиоде
   strip.show();   // отправляем сигнал на ленту
   delay(500);
   strip.clear();   // выключаем все светодиоды

   strip.setPixelColor(2, strip.Color(255, 255, 255));   // включаем белый цвет на 3 светодиоде
   strip.show();   // отправляем сигнал на ленту
   delay(500);
   strip.clear();   // выключаем все светодиоды

}

Пояснения к коду:

  1. нумерация светодиодов в ленте начинается с нуля, поэтому если мы хотим включить первый светодиод, то указывать надо «0».

Схема подключения адресной ленты 12 Вольт

Схема подключения адресной ленты 12 Вольт к Ардуино

Если у вас лента на 12 Вольт, то ее нужно подключать по схеме, размещенной выше. Резистор на цифровом пине защищает его от выгорания (если питание к ленте будет отключено, то она начнет питаться от цифрового пина, при этом пин может выгореть. Также не стоит подключать питание ленты к плате Ардуино, иначе может выгореть защитный диод на Ардуино или USB порт на компьютере (в худшем случае).

Скетч. Управление адресной лентой Ардуино

#include "Adafruit_NeoPixel.h" // подключаем библиотеку

#define PIN  10              // указываем пин для подключения ленты
#define NUMPIXELS 3  // указываем количество светодиодов в ленте

// создаем объект strip с нужными характеристиками
Adafruit_NeoPixel strip (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
   strip.begin();                     // инициализируем ленту
   strip.setBrightness(50);  // указываем яркость светодиодов (максимум 255)
}

void loop() {

   // поочередно включаем красный цвет
   for (int i = -1; i < NUMPIXELS; i++) {
      strip.setPixelColor(i, strip.Color(255, 0, 0));
      strip.show();
      delay(100);
   }

   // поочередно включаем зеленый цвет
   for (int i = -1; i < NUMPIXELS; i++) {
      strip.setPixelColor(i, strip.Color(0, 255, 0));
      strip.show();
      delay(100);
   }

   // поочередно включаем синий цвет
   for (int i = -1; i < NUMPIXELS; i++) {
      strip.setPixelColor(i, strip.Color(0, 0, 255));
      strip.show();
      delay(100);
   }

}

Пояснения к коду:

  1. с помощью библиотеки Adafruit NeoPixel довольно просто управлять адресной лентой. В примерах к библиотеке можно найти много различных эффектов. Мы продемонстрировали простой вариант с циклом for для включения ленты.

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

В настоящее время адресные светодиодной ленты (NeoPixel LEDs) на базе светодиодов WS2812 находят широкое применение в различных областях. В данной статье мы рассмотрим подключение подобной ленты к плате Arduino и научимся управлять ею в различных режимах.

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

Ранее на нашем сайте применение адресной светодиодной ленты (NeoPixel LEDs) рассматривалось в следующих проектах:

  • комнатный термометр на Arduino Nano;
  • связь двух плат Arduino на расстоянии 3 км с помощью Lora E32.

Также у нас теперь на сайте есть более подробная статья про подключение подобной ленты к плате Arduino, но в ней использована более сложная библиотека для работы с данной лентой, но зато позволяющая создать более «навороченные» режимы цветовых схем ленты.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Адресная светодиодная лента (WS2812 RGB LED Ring Module) (купить на AliExpress).
  3. Макетная плата.
  4. Соединительные провода.

Внешний вид необходимых для проекта компонентовЧто такое NeoPixel?

После своего изобретения в 1962 году светодиоды стали неотъемлемой частью нашей жизни. В большинстве электронных проектов используются светодиоды одного цвета, но использование светодиодов разных цветов выглядело настолько привлекательно, что следом за обычными светодиодами появились трехцветные светодиоды (RGB LEDs) – их еще называют полноцветными или многоцветными светодиодами. На нашем сайте можно прочитать статью о подключении подобного светодиода к плате Arduino.

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

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

Внутреннее устройство RGB адресного светодиода

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

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

Почему NeoPixel?

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

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

Схема проекта

Схема подключения адресной светодиодной ленты WS2812 к плате Arduino представлена на следующем рисунке.

Схема подключения адресной светодиодной ленты WS2812 к плате ArduinoРезистор в схеме необходим для защиты от повреждений светодиодов NeoPixel и для корректной передачи данных. Наилучшее расстояние для связи между модулем светодиодов NeoPixel и микроконтроллерной платой составляет от 1 до 2 метров.

Примечание: если вы используете адресную светодиодную ленту с большим количеством светодиодов, то в этом случае рекомендуется подключать конденсатор большой емкости (приблизительно 1000 мкФ) параллельно + и – источника питающего напряжения.

Прежде чем начинать работу с адресной светодиодной лентой в Arduino необходимо скачать и установить библиотеку для нее — NeoPixel Adafruit library.

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

Эта функция определяет число светодиодов и контакт Arduino для управления ими.

Эта функция инициализирует адресную светодиодную ленту.

Функция, устанавливающая яркость свечения светодиодов. 1 – минимальная яркость, 255 – максимальная.

pixels.setPixelColor(Wich LED,Wich color(Red,Green,Blue));

Эта функция задает цвет свечения светодиода с помощью системы RGB, при этом задается номер светодиода (от 0 до NUMPIXELS-1).

Функция, которая активирует заданные настройки, то есть включает светодиоды с заданными ранее настройками.

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

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

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

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_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();

}

Мигание светодиодами NeoPixel в ленте

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

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

27

28

29

30

31

32

33

34

#include <Adafruit_NeoPixel.h>

#define PIN        6

#define NUMPIXELS 7

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void NeoBlink(int num, int wait)

{

for (int i = 0; i < num; i++)

{

pixels.setPixelColor(i, 35, 35, 35);

}

pixels.show();

delay(wait);

for (int j = 0; j < num; j++)

{

pixels.setPixelColor(j, 0, 255, 0);

}

pixels.show();

delay(wait);

}

void setup()

{

pixels.begin();

pixels.setBrightness(50);

}

void loop()

{

NeoBlink(7, 500);

}

Постепенное затухание свечения светодиодов в ленте

Постепенное затухание свечения светодиодов (fading) – это еще один из замечательных эффектов светодиодов NeoPixel. Чем медленнее происходит затухание, тем более впечатляющим является этот эффект.

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

27

28

#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 NeoFade(int FadeSpeed)

{

int fspeed;

for (int i = 0; i < NUMPIXELS; i++) { pixels.setPixelColor(i, 165, 242, 243); } for (int j = 255; j > 0; j=j2)

{

pixels.setBrightness(j);

pixels.show();

delay(FadeSpeed);

}

}

void setup() {

pixels.begin();

}

void loop() {

NeoFade(100);

}

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

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

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_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);

}

Режим радуги для светодиодов NeoPixel

В сети есть интересный инструмент для удобного создания различных эффектов для адресной светодиодной ленты NeoPixel — NeoPixel Effects Generator. В нем вы можете задать число светодиодов и контакт платы Arduino для управления ими и после создания в этом генераторе необходимых эффектов для вашей ленты вы можете в этом генераторе сформировать готовый код для платы Arduino.

Для этого выполните следующую последовательность шагов.

1. На сайте генератора нажмите Add Led Strip (добавить светодиодную ленту).

2. Задайте количество светодиодов в ленте и номер контакта Arduino, с которого будет осуществляться управление ими.

3. После этого нажмите на Add Effect (добавить эффект) и выберите желаемый эффект.

4. Задайте цвет свечения светодиодов.

5. Нажмите на “generate Arduino code” и после этого для вас будет сформирован код программы для Arduino, который вы можете непосредственно вставить в Arduino IDE.

Загрузка…

5 924 просмотров

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Как изменить яркость светодиода ардуино
  • Как изменить яркость светодиода arduino
  • Как изменить яркость рабочего стола windows 10
  • Как изменить яркость приборной панели на весте
  • Как изменить яркость подсветки на клавиатуре

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии