Управление rgb светодиодом. RGB светодиод и Arduino

15.04.2019

Теперь же разберемся с многоцветным светодиодом, который часто называют сокращенно: RGB-светодиод .

RGB — это аббревиатура, которая расшифровывается как: Red — красный, Green — зеленый, Blue — синий. То есть внутри этого устройства размещается сразу три отдельных светодиода. В зависимости от типа, RGB-светодиод может иметь общий катод или общий анод.

1. Смешение цветов

Чем RGB-светодиод, лучше трех обычных? Всё дело в свойстве нашего зрения смешивать свет от разных источников, размещенных близко друг к другу. Например, если мы поставим рядом синий и красный светодиоды, то на расстоянии несколько метров их свечение сольется, и глаз увидит одну фиолетовую точку. А если добавим еще и зеленый, то точка покажется нам белой. Именно так работают мониторы компьютеров, телевизоры и уличные экраны.

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

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

2. Подключение RGB-светодиода к Ардуино

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

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

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

Внешний вид макета

3. Программа для управления RGB-светодиодом

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

Const byte rPin = 3; const byte gPin = 5; const byte bPin = 6; void setup() { pinMode(rPin, OUTPUT); pinMode(gPin, OUTPUT); pinMode(bPin, OUTPUT); } void loop() { // гасим синий, зажигаем красный digitalWrite(bPin, LOW); digitalWrite(rPin, HIGH); delay(500); // гасим красный, зажигаем зеленый digitalWrite(rPin, LOW); digitalWrite(gPin, HIGH); delay(500); // гасим зеленый, зажигаем синий digitalWrite(gPin, LOW); digitalWrite(bPin, HIGH); delay(500); }

Загружаем программу на Ардуино и наблюдаем результат.

Немного оптимизируем программу: вместо переменных rPin, gPin и bPin применим массив. Это нам поможет в следующих заданиях.

Const byte rgbPins = {3,5,6}; void setup() { for(byte i=0; i<3; i++) pinMode(rgbPins[i], OUTPUT); } void loop() { digitalWrite(rgbPins, LOW); digitalWrite(rgbPins, HIGH); delay(500); digitalWrite(rgbPins, LOW); digitalWrite(rgbPins, HIGH); delay(500); digitalWrite(rgbPins, LOW); digitalWrite(rgbPins, HIGH); delay(500); }

4. Семь цветов радуги

Теперь попробуем зажигать одновременно по два цвета. Запрограммируем такую последовательность цветов:

  • красный
  • красный + зеленый = желтый
  • зеленый
  • зеленый + синий = голубой
  • синий
  • синий + красный = фиолетовый

Оранжевый цвет мы для упрощения опустили. Так что, получилось шесть цветов радуги 🙂

Const byte rgbPins = {3,5,6}; const byte rainbow = { {1,0,0}, // красный {1,1,0}, // жёлтый {0,1,0}, // зелёный {0,1,1}, // голубой {0,0,1}, // синий {1,0,1}, // фиолетовый }; void setup() { for(byte i=0; i<3; i++) pinMode(rgbPins[i], OUTPUT); } void loop() { // перебираем все шесть цветов for(int i=0; i<6; i++){ // перебираем три компоненты каждого из шести цветов for(int k=0; k<3; k++){ digitalWrite(rgbPins[k], rainbow[i][k]); } delay(1000); } }

В результате работы программы получается:

Your browser does not support the video tag.

5. Плавное изменение цвета

Мы не зря подключили RGB-светодиод к выводам 3, 5 и 6. Как известно, эти выводы позволяют генерировать ШИМ сигнал разной скважности. Другими словами, мы можем не просто включать или выключать светодиод, а управлять уровнем напряжения на нем. Делается это с помощью функции analogWrite .

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

Const byte rgbPins = {3,5,6}; int dim = 1; void setup() { for(byte i=0; i<3; i++){ pinMode(rgbPins[i], OUTPUT); } // начальное состояние - горит красный цвет analogWrite(rgbPins, 255); analogWrite(rgbPins, 0); analogWrite(rgbPins, 0); } void loop() { // гасим красный, параллельно разжигаем зеленый for(int i=255; i>=0; i--){ analogWrite(rgbPins, i/dim); analogWrite(rgbPins, (255-i)/dim); delay(10); } // гасим зеленый, параллельно разжигаем синий for(int i=255; i>=0; i--){ analogWrite(rgbPins, i/dim); analogWrite(rgbPins, (255-i)/dim); delay(10); } // гасим синий, параллельно разжигаем красный for(int i=255; i>=0; i--){ analogWrite(rgbPins, i/dim); analogWrite(rgbPins, (255-i)/dim); delay(10); } }

Переменная dim определяет яркость свечения. При dim = 1 имеем максимальную яркость.

Загружаем программу на Ардуино.

Your browser does not support the video tag.

Задания

  1. Индикатор температуры. Добавим в схему термистор и подключим его к аналоговому входу. Светодиод должен менять свой цвет в зависимости от температуры термистора. Чем ниже температура, тем более синий цвет, а чем выше, тем более красный.
  2. RGB лампа с регулятором. Добавим в схему три переменных резистора и подключим их к аналоговым входам. Программа должна непрерывно считывать значения резисторов и менять цвет соответствующей компоненты RGB-светодиода.

Или подсветку с возможностью переключать разные цвета, поэтому тема LED драйверов очень актуальна. Предлагаемая схема такого устройства управляет RGB-светодиодами через Н-канальные МОП-транзисторы, которые позволяют контролировать светодиодные матрицы или лампы до 5 ампер на канал без применения теплоотводов.

Схема электрическая и описание

Во время тестирования контроллер подключался к 50 Вт на 12 В галогенным лампочкам, по одной на каждый канал. Температура МОСФЕТ транзисторов после 5 мин прогона составила чуть больше 50C. Теоретически общая нагрузка для всех трех каналов RGB не должна превышать 15 ампер.

Указанный транзистор STP36NF06L работает при низком напряжении на затворе. Вы можете использовать такие другие стандартные N-канальные полевые транзисторы, которые будут нормально работать при токах нагрузки до 5 ампер и не требовать слишком большого сигнала на входе для полного отпирания.

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

Вот один из вариантов реализации, который использует 20 светодиодов RGB типа Пиранья. Собрана лампа в коробе 25 х 50 х 1000 мм из алюминия. Позже она была приспособлена под настенную полку, чтобы осветить стол. Свет очень яркий и дает хорошее ровное освещение без какого-либо дополнительного рассеивателя.

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

Ассортимент цветных светодиодных лент достаточно обширен и их правильный выбор – дело довольно сложное. И все же, какими бы идеальными они ни были, для их правильной работы необходим блок питания 12 В (реже 24 В) и, конечно же, блок управления с параметрами, подходящими именно под выбранную световую полосу.

Но что же такое этот RGB-контроллер, какие функции он выполняет? И если он так необходим, возможно ли его изготовить своими руками в домашних условиях?

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

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

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

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

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

Естественно, что самым простым способом подключения устройства управления RGB станет вариант, при котором подключена лишь одна светодиодная полоса или ее часть. Но такой способ не совсем практичен, хотя он и не требует включения в цепь каких либо дополнительных приборов. Дело все в том, что на одну линию такого устройства возможно подключение не более 5–6 метров световой полосы, что для подсветки комнаты будет явно недостаточным. Если же длина отрезка будет больше, то на ближайшие к контроллеру светодиоды возрастет нагрузка, в результате чего они просто перегорят.

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

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

Две светодиодные ленты

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

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

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

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

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

Контроллер своими руками


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

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

Схема контроллера, сделанного своими руками

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

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

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

Стоит ли игра свеч?

Если рассуждать с точки зрения логики обычного человека, не увлеченного радиотехникой, то, конечно, купить дешевый RGB-контроллер будет ненамного дороже. К тому же при этом не будет потеряно время на изготовление своими руками подобного прибора. Но для настоящего радиолюбителя, а иногда и просто увлеченного человека, собрать подобный прибор самому во сто крат приятнее, нежели приобретать где-то. А потому попробовать изготовить RGB-контроллер своими руками стоит. Ведь удовольствие от проделанной, а к тому же еще и удачной работы не заменит ничто.

В этой статье рассмотрены основы использования RGB (Red Green Blue (красный, зеленый, синий)) светодиода с Arduino.

Мы используем функцию analogWrite для управления цветом RGB светодиода.

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

То есть, мы будем регулировать яркость каждого светодиода и получать нужный цвет на выходе, как будто это палитра художника или словно вы настраиваете частоты на своем плеере. Для этого можно использовать переменные резисторы . Но в результате схема будет достаточно сложной. К счастью, Arduino предлагает нам функцию analogWrite. Если задействовать на плате контакты, отмеченные символом «~», мы можем регулировать напряжение, которое подается на соответствующий светодиод.

Необходимые узлы

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

1 RGB светодиод 10 мм

3 резистора на 270 Ω (красная, фиолетовая, коричневая полоски). Вы можете использовать резистор с сопротивлением до 1 кОм, но не забывайте, что с повышением сопротивления, светодиод начинает светить не так ярко.


Шесть цифр номера соответствуют трем парам номеров; первая пара – красная составляющая цвета, следующие две цифры – зеленая составляющая, а последняя пара – синяя составляющая. То есть, красному цвету соответствует выражение #FF0000, так как это будет максимальная яркость красного светодиода (FF - это 255 в шестнадцатеричной системе), а красная и синяя компоненты равны 0.

Попробуйте зажечь светодиод, используя, например, оттенок индиго: #4B0082.

Красная, зеленая и синяя компоненты цвета индиго – это 4B, 00 и 82 соответственно. Мы можем использовать их в пределах функции "setColor" с помощью следующей строки кода:

setColor(0x4B, 0x0, 0x82); // индиго

Для трех компонент мы используем запись, в которой перед каждой из них ставится символ "0x" в начале.

Когда будете играться с разными оттенками RGB светодиода, не забывайте после использования каждого из них устанавливать задержку ‘delay’.

ШИМ и Arduino

Широтно импульсная модуляция (ШИМ (PWM на английском)) – это один из методов управления питанием. В нашем случае ШИМ используется для управления яркостью каждого отдельного светодиода.

На рисунке ниже схематично изображен сигнал с одного из ШИМ пинов Arduino.


Каждую 1/500 секунды ШИМ выход генерирует импульс. Длина этого импульса контролируется функцией "analogWrite". То есть, "analogWrite(0)" не будет генерировать никакого импульса, а "analogWrite(255)" сгенерирует сигнал, который будет длится до самого начала следующего. То есть, будет создаваться впечатление, что подается один непрерывный импульс.

Когда в пределах функции analogWrite мы указываем значение в диапазоне от 0 до 255, мы генерируем импульс определенной длительности. Если длина импульса составляет 5%, мы подадим на указанный выход Arduino 5% от максимально доступного питания и создается впечатление, что светодиод горит не на максимальную яркость.

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

Мы не раз рассматривали разнообразные светодиоды, строение, использование и т.д. и т.п. Сегодня я хотел бы остановиться на одной из разновидностей светодиодов (если так можно говорить) - RGB светодиодах.

Что такое RGB светодиод и устройство


Соединение RGB диодов с ШИМ Altmega8

Аноды RGB светодиода подключаем к линиям 1,2,3 порта В, катоды соединяем с минусом. Чтобы получить разнообразные палитры цвета на аноды будем подавать ШИМ сигнал в определенной последовательности. В этом примере мы специально используем программный ШИМ, хотя на Atmega8 можно без проблем получить аппаратный ШИМ на 3 канала. Программный ШИМ можно использовать в случаях нехватки таймеров/счетчиков и по другим причинам. Для генерации ШИМ определенной частоты используем прерывание по переполнению 8-ми битного таймера Т0(TIMER0_OVF_vect). Так как предделитель не используем частота переполнения таймера будет равна 31250Гц. А если переменная "pwm_counter" считает до 163, то частота ШИМ будет равна 190 Hz. В обработчике прерываний исходя из значений в переменных pwm_r, pwm_g, pwm_b переключаются ножки порта В. Цветовые эффекты настраиваются с помощью функций, где задается время свечения светодиода. В тестовой программе сначала загораются красный, зеленый, синий, белый цвета, а потом начинается цикл с переходами цвета.

Программный код:

// Управление RGB светодиодом. Программный ШИМ

#include

#include

volatile char pwm_counter,pwm_r,pwm_g,pwm_b;

// Прерывание по переполнению Т0

ISR (TIMER0_OVF_vect)

if (pwm_counter++ > 163)

pwm_counter = 0;

if (pwm_counter > pwm_r) PORTB |= (1 << PB1);

if (pwm_counter > pwm_g) PORTB |= (1 << PB2);

if (pwm_counter > pwm_b) PORTB |= (1 << PB3);

// Процедура задержки в микросекундах

void delay_us(unsigned char time_us)

{ register unsigned char i;

for (i = 0; i < time_us; i++) // 4 цикла

{ asm (" PUSH R0 "); // 2 цикла

asm (" POP R0 "); // 2 цикла

// 8 циклов = 1 us для 8MHz

// Процедура задержки в миллисекундах

void delay_ms(unsigned int time_ms)

{ register unsigned int i;

for (i = 0; i < time_ms; i++)

{ delay_us(250);

// Красный цвет

void red (unsigned int time)

for (char a = 0; a < 165; a++)

pwm_r = 164 - a; //увеличение

for (char a = 0; a < 165; a++)

pwm_r = a; //уменьшение

// Зеленый цвет

void green (unsigned int time)

for (char a = 0; a < 165; a++)

pwm_g = 164 - a;

for (char a = 0; a < 165; a++)

// Синий цвет

void blue (unsigned int time)

for (char a = 0; a < 165; a++)

pwm_b = 164 - a;

for (char a = 0; a < 165; a++)

// Белый цвет

void white (unsigned int time)

for (char a = 0; a < 165; a++)

pwm_r = 164 - a;

pwm_g = 164 - a;

pwm_b = 164 - a;

for (char a = 0; a < 165; a++)

// Переход цветa

void rgb (unsigned int time)

for (char a = 0; a < 165; a++)

pwm_b = 164 - a;

for (char a = 0; a < 165; a++)