Светодиодная лента Ардуино. Управление лентой на Ардуино. Идеи.

Разбираемся как подключить Bluetooth-модуль к Arduino, а затем использовать его для управления светодиодной RGB лентой.

УПРАВЛЯЕМ RGB СВЕТОМ С ARDUINO

RGB светодиод или лента – очень крутая штука, ведь используя даже 8-ми битный ШИМ (0-255) мы можем получить 16.7 миллионов цветов и оттенков! Рассмотрим подключение светодиодов и лент к Arduino.

Светодиоды

Светодиоды можно питать от пинов Arduino, естественно через токоограничивающий резистор на 150-300 Ом (больше – меньше яркость). Для плавного управления яркостью каждого канала подключать нужно к ШИМ пинам (D3, D5, D6, D9, D10, D11 на Arduino Nano/UNO/Pro Mini). Светодиод с общим катодом подключается общей ногой на GND, с общим анодом – на VCC (т.е. на 5V).

Светодиодные ленты через драйвер

RGB светодиодные ленты обычно имеют общий анод, т.е. общий канал 12 Вольт.

Для управления цветом можно использовать так называемый LED amplifier (бывает RGB и RGBW). Купить на Aliexpress

Светодиодные ленты через транзисторы

Вместо драйвера можно использовать полевые транзисторы, схема вот такая:

Какие транзисторы? Вот мой список транзисторов в корпусах to220: IRF3704ZPBF, IRLB8743PBF, IRL2203NPBF, IRLB8748PBF, IRL8113PBF, IRL3803PBF, IRLB3813PBF, IRL3502PBF, IRL2505PBF, IRF3711PBF, IRL3713PBF, IRF3709ZPBF, AUIRL3705N, IRLB3034PBF, IRF3711ZPBF

В корпусах D-PAK: IRLR024NPBF, IRLR024NPBF, IRLR8726PBF, IRFR1205PBF, IRFR4105PBF, IRLR7807ZPBF, IRFR024NPBF, IRLR7821TRPBF, STD60N3LH5, IRLR3103TRPBF, IRLR8113TRPBF, IRLR8256PBF, IRLR2905ZPBF, IRLR2905PBF

Также можно распаять платку

GyverRGB v1.16

rgbLogo.png

Мощная библиотека для удобного управления RGB светодиодами и лентами для Arduino

  • 1530 значений для colorWheel
  • Работа в пространстве RGB
  • Работа в пространстве HSV
  • Установка цвета в формате HEX
  • Установка цветовой температуры
  • 16 предустановленных цветов
  • Настройка полярности ШИМ
  • Функция плавной смены цвета
  • Ограничение тока (по расчёту)
  • Регулировка общей яркости
  • Поддержание яркости LED ленты по мере разряда АКБ
  • Возможность управления 6-ю RGB диодами/лентами с одной Arduino (встроенный генератор ШИМ на ВСЕХ 20 пинах atmega328)
  • Режим с настройкой частоты ШИМ
  • Матрица коррекции LUT
  • Коррекция по минимальному сигналу ШИМ
  • CRT гамма-коррекция яркости

Поддерживаемые платформы: все Arduino (используются стандартные Wiring-функции)

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

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

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

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

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

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

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

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

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

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

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

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

Руководство по выбору светодиодных лент к 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.

Ардуино – принцип действия

Arduino Remote Control, ledплата Arduino

Плата Ардуино – это устройство, на котором установлен программируемый микроконтроллер. К нему подключены различные датчики, органы управления или encoder и, по заданному скетчу (программе), плата управляет моторами, светодиодами и прочими исполнительными механизмами, в том числе и другими платами Ардуино по протоколу SPI. Контроль устройства может осуществляться через дистанционный пульт, модуль Bluetooth, HC-06, Wi-Fi, ESP или internet, и кнопками. Одни из самых популярных плат – Arduino Nano и Arduino Uno, а также Arduino Pro Mini – устройство на базе микроконтроллера ATmega 328

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

к содержанию ↑

Товары, используемые в материале

Самые популярные материалы в блоге

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

Шаг 1. Комплектующие

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

  • Плата Arduino (мы будем использовать Arduino Nano) x 1
  • Модуль Bluetooth HC-06 или HC-05 x 1
  • 12V RGB LED лента (мы используем 30LEDs/m с общим анодом) x 1
  • Клеммный винт x 1
  • Резистор 220 Ом x 3
  • BUZ11 N-Channel Power MOSFET (или эквивалент) x 3
  • Макет и перемычки
  • DC джек и DC коннектор (опционально)
  • Питание 12 В (переменный источник питания)

ДОКУМЕНТАЦИЯ

// объявлениеGRGB(uint8_t rpin, uint8_t gpin, uint8_t bpin);// объявление с выбором режима генерации ШИМ (NORM_PWM / ANY_PWM)// NORM_PWM — дефолтные ШИМ пины (3, 5, 6, 9, 10, 11 для UNO/NANO/MINI)// ANY_PWM — любой пин делается ШИМ пином (частота ~150 Гц). Подробности в библиотеке GyverHacksGRGB(uint8_t rpin, uint8_t gpin, uint8_t bpin, boolean pwmmode);void highFrequency(long frequency);// режим работы на высокой частоте ШИМ (указать в Герцах). Работает с библиотекой PWM.h void setDirection(uint8_t direction);// NORMAL / REVERSE — направление ШИМ// общий катод — NORMAL// общий анод — REVERSE void setMaxCurrent(uint16_t numLeds, float vcc, int maxCur);// установка ограничения по току: количество светодиодов, напряжение питания в милливольтах, максимальный ток void setBrightness(byte bright); // установка яркости (0-255)void setGammaBright(boolean val); // вкл/выкл коррекции яркостиvoid setMinPWM(byte val); // минимальный сигнал PWMvoid setLUT(float rc, float gc, float bc); // установка коррекции цвета (матрица LUT)void constantBrightTick(int minVolts, int vcc); // корректировка под напряжение питанияvoid gammaTick(int vcc); // корректировка красного цвета при падении напряжения питания void setHEX(colors color); // установка цвета в формате HEX (вида 0x808080 )void setRGB(uint8_t r, uint8_t g, uint8_t b); // установка цвета в пространстве RGB (каждый цвет 0-255)void setHSV(uint8_t h, uint8_t s, uint8_t v); // установка цвета в пространстве HSV (каждая велиична 0-255)void setHSV_fast(uint8_t h, uint8_t s, uint8_t v); // более быстрый, но менее красивый вариант предыдущей функцииvoid setKelvin(int16_t temperature); // установить цвет как температуру в Кельвинах (от 1000 до 10’000 — от красного к синему)void colorWheel(int color); // установить цвет (0 — 1530). Максимально широкая палитра ярких цветов (смеси RGB) void fadeTo(colors newColor, uint16_t fadeTime);// плавно изменить текущий цвет к новому за вермя fadeTime в миллисекундах для HEX цвета void fadeTo(uint8_t new_r, uint8_t new_g, uint8_t new_b, uint16_t fadeTime);// для R G B

ПРИМЕРЫ

/* Пример управления цветом RGB светодиода одним потенциометром Потенциометр подключен к А0 Светодиод/мосфеты подключены к ШИМ пинам! Для УНО и НАНО это 3, 5, 6, 9, 10, 11*/#include «GyverRGB.h»GRGB diode(6, 5, 3); // куда подключены цвета (R, G, B)void setup() { }void loop() { byte H = analogRead(0) / 4; // получаем 0-255 // меняем только цвет. Яркость и насыщенность вручную diode.setHSV(H, 255, 255);}
/* Пример управления RGB светодиодом в пространстве RGB (красный, зелёный, синий). Потенциометры подключены к А0, А1 и А2 Светодиод/мосфеты подключены к ШИМ пинам! Для УНО и НАНО это 3, 5, 6, 9, 10, 11 _____ / | | | | |_______| | | | | | | | | | | | | | | | | B G R*/#include «GyverRGB.h»GRGB diode(6, 5, 3); // куда подключены цвета (R, G, B)void setup() { }void loop() { byte R = analogRead(0) / 4; byte G = analogRead(1) / 4; byte B = analogRead(2) / 4; diode.setRGB(R, G, B);}
/* Пример управления RGB светодиодом в пространстве HSV (цвет, насыщенность, яркость). Потенциометры подключены к А0, А1 и А2 Светодиод/мосфеты подключены к ШИМ пинам! Для УНО и НАНО это 3, 5, 6, 9, 10, 11*/#include «GyverRGB.h»GRGB diode(6, 5, 3); // куда подключены цвета (R, G, B)void setup() {}void loop() { byte H = analogRead(0) / 4; byte S = analogRead(1) / 4; byte V = analogRead(2) / 4; diode.setHSV(H, S, V);}
/* Пример управления RGB светодиодом плавная установка цвета Для УНО и НАНО это 3, 5, 6, 9, 10, 11*/#include «GyverRGB.h»GRGB diode(6, 5, 3); // куда подключены цвета (R, G, B)/* Доступные цвета для fadeTo (HEX) WHITE // белый SILVER // серебро GRAY // серый BLACK // чёрный RED // красный MAROON // бордовый YELLOW // жёлтый OLIVE // олива LIME // лайм GREEN // зелёный AQUA // аква TEAL // цвет головы утки чирка https://odesign.ru/teal-color/ BLUE // голубой NAVY // тёмно-синий PINK // розовый PURPLE // пурпурный*/void setup() {}void loop() { diode.fadeTo(RED, 500); diode.fadeTo(BLACK, 500); diode.fadeTo(LIME, 500); diode.fadeTo(BLACK, 500); diode.fadeTo(BLUE, 500); diode.fadeTo(BLACK, 500);}
/* Демонстрация работы метода colorWheel, который устанавливает цвет по значениям 0-1530, делая плавный переход красный-зелёный-синий-красный Откройте монитор/плоттер для наглядного представления алгоритма*/#include «GyverRGB.h»GRGB diode(5, 6, 9); // куда подключены цвета (R, G, B)void setup() { Serial.begin(9600);}void loop() { diode.colorWheel(map(analogRead(0), 0, 1023, 0, 1530)); Serial.println( String(diode.showR) + » » + String(diode.showG) + » » + String(diode.showB)); delay(20);}
/* Пример управления RGB светодиодом из набора готовых цветов Светодиод/мосфеты подключены к ШИМ пинам! Для УНО и НАНО это 3, 5, 6, 9, 10, 11 _____ / | | | | |_______| | | | | | | | | | | | | | | | | B G R*/#include «GyverRGB.h»GRGB diode(6, 5, 3); // куда подключены цвета (R, G, B)/* Доступные цвета для setColor WHITE SILVER GRAY BLACK RED MAROON YELLOW OLIVE LIME GREEN AQUA TEAL BLUE NAVY PINK PURPLE*/void setup() {}void loop() { diode.setHEX(RED); delay(1000); diode.setHEX(YELLOW); delay(1000); diode.setHEX(LIME); delay(1000); diode.setHEX(AQUA); delay(1000); diode.setHEX(PINK); delay(1000); }
// пример с установкой цвета как цветовой температуры в Кельвинах// отправляем значение в Кельвинах в порт#include «GyverRGB.h»GRGB diode(6, 5, 3); // куда подключены цвета (R, G, B)void setup() { Serial.begin(9600);}void loop() { if (Serial.available()) { int buf = Serial.parseInt(); Serial.println(buf); diode.setKelvin(buf); }}
/* Пример управления цветом RGB светодиода одним потенциометром Потенциометр подключен к А0 Светодиод/мосфеты подключены к ШИМ пинам! Для УНО и НАНО это 3, 5, 6, 9, 10, 11*/#include «GyverRGB.h»GRGB diode(9, 10, 11); // куда подключены цвета (R, G, B)void setup() { // раскомментировать нужное /* // частота на пинах 5 и 6 — 31.4 кГц (влияет на millis() ) TCCR0A |= _BV(WGM00); TCCR0B = TCCR0B & 0b11111000 | 0x01; */ /* // частота на пинах 5 и 6 — 7.8 кГц (влияет на millis() ) TCCR0A |= _BV(WGM00) | _BV(WGM01); TCCR0B = TCCR0B & 0b11111000 | 0x02; */ /* // частота на пинах 9 и 10 — 31.4 кГц (влияет на servo) TCCR1B &= ~_BV(WGM12); TCCR1B = TCCR1B & 0b11111000 | 0x01; */ /* // частота на пинах 9 и 10 — 7.8 кГц (влияет на servo) TCCR1B |= _BV(WGM12); TCCR1B = TCCR1B & 0b11111000 | 0x02; */ /* // частота на пинах 3 и 11 — 31.4 кГц (влияет на tone() ) TCCR2A |= _BV(WGM20); TCCR2B = TCCR2B & 0b11111000 | 0x01; */ /* // частота на пинах 3 и 11 — 7.8 кГц (влияет на tone() ) TCCR2A |= _BV(WGM20) | _BV(WGM21); TCCR2B = TCCR2B & 0b11111000 | 0x02; */}void loop() { byte H = analogRead(0) / 4; // получаем 0-255 // меняем только цвет. Яркость и насыщенность вручную diode.setHSV(H, 255, 255);}
/* Пример управления RGB лентой в пространстве HSV одним потенциомтером Выход ШИМ инвертирован (255-0) для драйвера Потенциометр подключен к А0 Драйвер подключен к ШИМ пинам! Для УНО и НАНО это 3, 5, 6, 9, 10, 11*/#include «GyverRGB.h»GRGB diode(6, 5, 3); // куда подключены цвета (R, G, B)void setup() { diode.setDirection(REVERSE); // NORMAL / REVERSE — направление ШИМ // общий катод — NORMAL // общий анод — REVERSE}void loop() { byte H = analogRead(0) / 4; diode.setHSV(H, 255, 255);}
/* Туточки демонстрируется работа сразу двух методов: setMaxCurrent и setBrightness Что происходит: яркость ленты регулируется потенциометром (пин А0) и ограничивается по току (расчётному) */#include «GyverRGB.h»GRGB strip(3, 5, 6); // куда подключены цвета (R, G, B)void setup() { Serial.begin(9600); strip.setDirection(REVERSE); strip.setRGB(200, 180, 0); // ставим жёлтый цвет delay(2000); // любуемся результатом 2 секунды // ограничиваем ток. Метод принимает в качестве аргументов: // количество светодиодов (тут 30) // напряжение питания в милливольтах (тут 12 вольт) // максимальный ток в миллиамперах (тут 50) // после вызова яркость ленты сразу упадёт до такой, при которой будет потребляться ~50 ма strip.setMaxCurrent(30, 12000, 50);}void loop() { // этот метод меняет общую яркость ленты, принимает 0-255 (что мы и делаем с аналог пина) // можно почувствовать, как яркость упирается в лимит по току! Чудесно strip.setBrightness(analogRead(0) / 4); delay(100);}
// скетч управляет лентой, поддерживая яркость по мере разряда аккумуляторов// R1 ближе к Vin, R2 к GND/* (12V) (GND) | | |—[ R1 ]—|—[ R2 ]—| | | (A1) (GND)*/#include «GyverRGB.h»GRGB strip(3, 5, 6); // куда подключены цвета (R, G, B)#define R1 100700 // 100 ком#define R2 9999 // 10 комfloat dividerCoef = (float)((R1 + R2) / R2);int voltage;void setup() { Serial.begin(9600); strip.setDirection(REVERSE); strip.setHEX(WHITE); delay(2000); // задержка для оценки яркости}void loop() { // получить напряжение с пина А0 (делитель) и перевести в милливольты voltage = (float)analogRead(1) * 5 / 1.023 * dividerCoef; // данный метод поддерживает яркость такой, какой она была бы при напряжении // питания 9000 милливольт (9 вольт), сравнивая его с текущим напряжением voltage // таким образом по мере разряда АКБ от 12 до 9 вольт яркость остаётся постоянной strip.constantBrightTick(9000, voltage); // по мере разряда «едут» цвета, данный метод чуть чуть исправляет ситуацию strip.gammaTick(voltage); delay(20);}
/* Простенький алгоритм «огня» — симуляция мерцаний пламени свечи/костра Откройте плоттер порта, чтобы посомтреть на случайность происходящего*/#include «GyverRGB.h»GRGB strip(5, 6, 9); // куда подключены цвета (R, G, B)void setup() { Serial.begin(9600); strip.setDirection(REVERSE);}int hue, val;boolean hueFlag;float valK = 0.3;void loop() { if (hueFlag) { hue += random(-1, 3); if (hue > random(12, 16)) hueFlag = false; } else { hue -= random(-1, 3); if (hue < random(0, 6)) hueFlag = true; } hue = constrain(hue, 3, 16); val = val * (1 — valK) + map(hue, 3, 16, 20, 255) * valK; Serial.println(String(hue) + » » + String(val)); strip.setHSV(hue, 255, val); delay(random(10, 40));}
#define SMOOTH_K 0.25 // коэффициент сглаживания#define TIME_CHANGE 200 // период изменения огня#define MIN_BRIGHT 30 // мин яркость (красный)#define MAX_BRIGHT 255 // макс яркость (жёлтый)#include «GyverRGB.h»GRGB diode(5, 6, 9); // куда подключены цвета (R, G, B)void setup() { // put your setup code here, to run once: Serial.begin(9600); randomSeed(analogRead(0)); diode.setDirection(REVERSE);}float k = 0.25;int val, rndVal;uint32_t prevTime;void loop() { if (millis() — prevTime > TIME_CHANGE) { rndVal = random(0, 13) * 10; prevTime = millis(); } val = val * (1 — SMOOTH_K) + rndVal * SMOOTH_K; diode.colorWheel(val); diode.setBrightness(map(val, 0, 120, MIN_BRIGHT, MAX_BRIGHT)); Serial.println(val); delay(40);}
/* Пример управления RGB светодиодом из набора готовых цветов Светодиод/мосфеты подключены к ЛЮБЫМ ПИНАМ*/// НЕ ЗАБУДЬ включить в самой библиотеке параметр ALLOW_ANYPWM#include «GyverRGB.h»GRGB diode1(2, 3, 4, ANY_PWM); // куда подключены цвета (R, G, B)GRGB diode2(6, 7, 8, ANY_PWM); // куда подключены цвета (R, G, B)byte H;void setup() {}void loop() { H++; diode2.setHSV(H, 255, 255); diode1.setHSV(H, 255, 255); delay(20); }

Выбор RGB ленты

Для этого проекта нам понадобится именно RGB светодиодная лента, та — что с четырьмя контактами.

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

Вариант с тремя контактами – это адресная лента. Для управления такой лентой нужная другая схема и другой программный код, поэтому рассмотрим этот вариант в отдельной статье.

Вариант с пятью и шестью контактами это RGBW и RGBWW ленты. Как вы уже догадались, буква W обозначает дополнительно припаянный белый светодиод, а WW два белых светодиода, такие ленты используются в случаях, если белым нужно светить гораздо ярче чем остальными цветами.

Обычная четырехконтактная лента способна светить белым цветом и без дополнительных светодиодов, просто включив все три своих цвета в равных пропорциях.

БАГИ И ОШИБКИ

Если вы нашли баг или ошибку в исходнике или примерах, или у вас есть идеи по доработке библиотеки – пишите пожалуйста на почту alex@alexgyver.ru. В комментарии на страницах я заглядываю очень редко, на форум – ещё реже.

Управление 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);
}

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

Протокол

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Оцените, пожалуйста, статью. Мы старались:)

(1 оценок, среднее: 5,00 из 5)
loading.gif Загрузка…

Понравилась статья? Расскажите о ней! Вы нам очень поможете:)

Материалы по теме:

Видеоинструкция

Предыдущая

Светодиодная лентаКак можно сделать светодиодную ленту своими руками

Следующая

Светодиодная лентаЧто такое контроллер для светодиодной ленты и как его выбрать

Сборка устройства

Вот так выглядят все необходимые ингредиенты:

Спаиваем всё по схеме и устанавливаем в коробку:

На всякий случай соединение ключей:

Ключ на IRF3205

Рейтинг
( 1 оценка, среднее 5 из 5 )
Загрузка ...