СОДЕРЖАНИЕ ►
На этом занятии мы будем использовать цифровые и аналоговые выходы с «широтно импульсной модуляцией» на плате Arduino для включения RGB светодиода с различными оттенками. Использование RGB LED ленты позволяет создать освещение интерьера с любым оттенком цвета. Расскажем про устройство и распиновку полноцветного (RGB) светодиода и рассмотрим директиву #define в языке C++.
Устройство и назначение RGB светодиода

Для отображения всей палитры оттенков вполне достаточно три цвета, используя RGB синтез (Red — красный, Green — зеленый, Blue — синий). RGB палитра используется не только в графических редакторах, но и в сайтостроении. Смешивая цвета в разной пропорции можно получить практически любой цвет. Преимущества RGB светодиодов в простоте конструкции, небольших габаритах и высоком КПД светоотдачи.
RGB светодиоды объединяют три кристалла разных цветов в одном корпусе. RGB LED имеет 4 вывода — один общий (анод или катод имеет самый длинный вывод) и три цветовых вывода. К каждому цветовому выходу следует подключать резистор. Кроме того, модуль RGB LED Arduino может сразу монтироваться на плате и иметь встроенные резисторы — этот вариант более удобный для занятий в кружке робототехники.

Распиновка RGB светодиода указана на фото выше. Заметим также, что для многих полноцветных (трехцветных) светодиодов необходимы светорассеиватели, иначе будут видны составляющие цвета. Далее подключим трехцветный светодиод к Ардуино и заставим его сначала мигать разными цветами, а затем плавно переливаться разными цветами с помощью «широтно импульсной модуляции».
Управление RGB светодиодом на Ардуино
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- макетная плата;
- RGB светодиод;
- 3 резистора 220 Ом;
- провода «папа-мама».

Модуль «RGB светодиод» можно подключить напрямую к плате, без проводов и макетной платы. Подключите модуль с полноцветным RGB светодиодом к следующим пинам: Минус — GND, B — Pin13, G — Pin12, R — Pin11 (смотри первое фото). Если вы используете RGB LED (Light Emitting Diode), то подключите его по схеме на фото. После подключения модуля и сборки схемы на Ардуино загрузите скетч в плату.
Скетч для мигания RGB светодиодом на Ардуино
#define RED 11 // присваиваем имя RED для пина 11 #define GRN 12 // присваиваем имя GRN для пина 12 #define BLU 13 // присваиваем имя BLU для пина 13 void setup() { pinMode(RED, OUTPUT); // используем Pin11 для вывода pinMode(GRN, OUTPUT); // используем Pin12 для вывода pinMode(BLU, OUTPUT); // используем Pin13 для вывода } void loop() { digitalWrite(RED, HIGH); // включаем красный свет digitalWrite(GRN, LOW); digitalWrite(BLU, LOW); delay(1000); // устанавливаем паузу для эффекта digitalWrite(RED, LOW); digitalWrite(GRN, HIGH); // включаем зеленый свет digitalWrite(BLU, LOW); delay(1000); // устанавливаем паузу для эффекта digitalWrite(RED, LOW); digitalWrite(GRN, LOW); digitalWrite(BLU, HIGH); // включаем синий свет delay(1000); // устанавливаем паузу для эффекта }
Пояснения к коду:
- с помощью директивы
#defineмы заменили номер пинов 11, 12 и 13 на соответствующие именаRED,GRNиBLU. Это сделано для удобства, чтобы не запутаться в скетче и понимать какой цвет мы включаем; - в процедуре
void loop()мы поочередно включаем все три цвета на RGB.
Плавное управление RGB светодиодом
Управление rgb светодиодом на Arduino можно сделать плавным, используя аналоговые выходы с «ШИМ». Для этого ножки светодиода необходимо подключить к аналоговым выходам, например, к пинам 11, 10 и 9. И подавать на аналоговые выходы микроконтроллера различные значения ШИМ (PWM), для этого воспользуемся циклом for, с помощью которого можно повторять нужные команды в программе.
Скетч для плавного мигания RGB светодиода
#define RED 11 // присваиваем имя RED для пина 11 #define GRN 10 // присваиваем имя GRN для пина 10 #define BLU 9 // присваиваем имя BLU для пина 9 void setup() { pinMode(RED, OUTPUT); // используем Pin11 для вывода pinMode(GRN, OUTPUT); // используем Pin10 для вывода pinMode(BLU, OUTPUT); // используем Pin9 для вывода } void loop() { // плавное включение/выключение красного цвета for (int i = 0; i <= 255; i++) { analogWrite(RED, i); delay(2); } for (int i = 255; i >= 0; i--) { analogWrite(RED, i); delay(2); } // плавное включение/выключение зеленого цвета for (int i = 0; i <= 255; i++) { analogWrite(GRN, i); delay(2); } for (int i = 255; i >= 0; i--) { analogWrite(GRN, i); delay(2); } // плавное включение/выключение синего цвета for (int i = 0; i <= 255; i++) { analogWrite(BLU, i); delay(2); } for (int i = 255; i >= 0; i--) { analogWrite(BLU, i); delay(2); } }
Пояснения к коду:
- с помощью директивы
#defineмы заменили номера пинов 9, 10 и 11 на соответствующие именаRED,GRNиBLU. Это сделано для удобства, чтобы не запутаться в скетче и понимать какой цвет мы включаем; - пины 9, 10 и 11 мы использовали, как аналоговые выходы
analogWrite.
Плавное включение нескольких цветов RGB LED
#define RED 11 // присваиваем имя RED для пина 11 #define GRN 10 // присваиваем имя GRN для пина 10 #define BLU 9 // присваиваем имя BLU для пина 9 void setup() { pinMode(RED, OUTPUT); // используем Pin11 для вывода pinMode(GRN, OUTPUT); // используем Pin10 для вывода pinMode(BLU, OUTPUT); // используем Pin9 для вывода } void loop() { // плавное включение красного и зеленого цвета for (int i = 0; i <= 255; i++) { analogWrite(RED, i); analogWrite(GRN, i); delay(2); } for (int i = 255; i >= 0; i--) { analogWrite(RED, i); analogWrite(GRN, i); delay(2); } // плавное включение красного и синего цвета for (int i = 0; i <= 255; i++) { analogWrite(RED, i); analogWrite(BLU, i); delay(2); } for (int i = 255; i >= 0; i--) { analogWrite(RED, i); analogWrite(BLU, i); delay(2); } }
Заключение. Аналоговые выходы на Ардуино используют «широтно импульсную модуляцию» для получения различной силы тока. Мы можем подавать на все три цветовых входа на светодиоде различное значение ШИМ-сигнала в диапазоне от 0 до 255, что позволит нам получить на RGB LED Arduino практически любой оттенок света. Если у вас остались вопросы — оставляйте их в комментариях к этой записи.










В 1 скетче ошибочка. В строчках, где загорается зелёный цвет написано «BLE»
Спасибо. Исправили программу для трехцветного светодиода Ардуино
Второй скетч. В описании пины 9,10 и 11, а в скетче 11,12,13
Спасибо. Внесли изменения в скетч
В некоторых схемах резистор устанавливают один, на общий вывод светодиода, а остальные выводы трехцветного светодиода подключают непосредственно к пинам. Почему так нельзя сделать в данной схеме ?
Правильно каждый анод трехцветного светодиода к Ардуино подключать через резистор, как отдельный светодиод. Но если это для вас принципиально, то можно с одним резистором.
Я приобрёл rgb-светодиод и начал над ним ставить эксперименты, пользуясь регулируемым DC-DC преобразователем и DC-миллиамперметром. Вот что удалось выяснить: красный светодиод- при напряжении 2,3 V потребляемый ток 30 mA, зелёный 3 V — 12 mA, синий 3 V — 15 mA. Для подключения к напряжению 5 V необходимо индивидуально для каждого светодиода по закону Ома рассчитать величину сопротивления резистора, иначе яркость светодиодов будет разной. У меня получилось: красный — 90 Ом, зелёный — 166 Ом, синий — 133 Ом. Синий при 2,3 V практически не светится, а красный при 2,4 V начал потреблять 40 mA, и я не стал увеличивать напряжение для красного, опасаясь его сжечь. Можешь поставить один резистор на общий вывод, но яркость у всех светодиодов будет разная.
В схеме на общий анод подаете минус — это опечатка или я чего-то не понимаю?
Это Вы штатные RGB цвета включили. Для включения например желтого надо включить красный и зеленый цвет — так и получается. А как сделать мигающий желтый цвет? Одновременного включение красного и зеленого цвета в цикле не дает результата!
А последний вопрос очень интересный. Жаль, пока без ответа
Добавили код для одновременного включения двух цветов