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

RGB светодиод
Для отображения всей палитры оттенков вполне достаточно три цвета, используя RGB синтез (Red — красный, Green — зеленый, Blue — синий). RGB палитра используется не только в графических редакторах, но и в сайтостроении. Смешивая цвета в разной пропорции можно получить практически любой цвет. Преимущества RGB светодиодов в простоте конструкции, небольших габаритах и высоком КПД светоотдачи.
RGB светодиоды объединяют три кристалла разных цветов в одном корпусе. RGB LED имеет 4 вывода — один общий (анод или катод имеет самый длинный вывод) и три цветовых вывода. К каждому цветовому выходу следует подключать резистор.
Распиновка RGB светодиода указана на фото выше. Заметим также, что для многих полноцветных (трехцветных) светодиодов необходимы светорассеиватели, иначе будут видны составляющие цвета. Далее подключим трехцветный светодиод к Ардуино и заставим его сначала мигать разными цветами, а затем плавно переливаться разными цветами с помощью «широтно импульсной модуляции».
3. Управление RGB светодиодом на Ардуино
Для этого занятия потребуется:
Arduino Uno / Arduino Nano / Arduino Mega
макетная плата
RGB светодиод
3 резистора 220 Ом
провода «папа-мама»
4. Пример 1: Мигалка разными цветами
#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(400); // устанавливаем паузу для эффекта
digitalWrite(RED, LOW);
digitalWrite(GRN, HIGH); // включаем зеленый свет
digitalWrite(BLU, LOW);
delay(400); // устанавливаем паузу для эффекта
digitalWrite(RED, LOW);
digitalWrite(GRN, LOW);
digitalWrite(BLU, HIGH); // включаем синий свет
delay(400); // устанавливаем паузу для эффекта
}
Пояснения к коду:
с помощью директивы
#define
мы заменили номер пинов 11, 12 и 13 на соответствующие именаRED
,GRN
иBLU
. Это сделано для удобства, чтобы не запутаться в скетче и понимать какой цвет мы включаем;в процедуре
void loop()
мы поочередно включаем все три цвета на RGB.
5. Пример 2: Плавное управление RGB светодиодом
Управление rgb светодиодом на Arduino можно сделать плавным, используя аналоговые выходы с «ШИМ». Для этого ножки светодиода необходимо подключить к аналоговым выходам, например, к пинам 11, 10 и 9. И подавать на аналоговые выходы микроконтроллера различные значения ШИМ (PWM), для этого воспользуемся циклом for, с помощью которого можно повторять нужные команды в программе.
#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
.
6. Пример 3: Плавное включение нескольких цветов 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);
}
}
7. Заключение
Аналоговые выходы на Ардуино используют «широтно импульсную модуляцию» для получения различной силы тока. Мы можем подавать на все три цветовых входа на светодиоде различное значение ШИМ-сигнала в диапазоне от 0 до 255, что позволит нам получить на RGB LED Arduino практически любой оттенок света. Если у вас остались вопросы — оставляйте их в комментариях к этой записи.