Проект 11: RGB светодиод

Описание
RGB светодиод (Red Green Blue Light Emitting Diode) — это светодиод, который может излучать свет в трёх основных цветах: красном, зелёном и синем, а также создавать различные другие цвета за счёт комбинации этих трёх цветов.
В этом проекте мы используем RGB светодиод для достижения цветовых изменений и градиентных эффектов с помощью программирования Arduino.
Аппаратное обеспечение
1. Плата разработки UNO R3 (ch340) x1
2. RGB светодиод x1
3. Резистор 220 Ом x3
4. Макетная плата x1
5. Соединительные провода
Принцип работы
RGB светодиод — это, по сути, корпус с тремя светодиодами, который может создавать практически любой цвет. Он может использоваться в различных приложениях, таких как наружное декоративное освещение, сценическое освещение, домашнее декоративное освещение, светодиодные матричные дисплеи и многое другое.
RGB светодиоды содержат три внутренних светодиода (красный, зелёный и синий), которые можно комбинировать для получения практически любого цвета. Чтобы получить разные цвета, нужно регулировать интенсивность каждого внутреннего светодиода и комбинировать три цветовых сигнала. В этом проекте мы будем использовать ШИМ для индивидуальной регулировки яркости красного, зелёного и синего светодиодов. Особенность в том, что наши глаза воспринимают смесь цветов, а не отдельные цвета, так как светодиоды находятся очень близко друг к другу внутри корпуса.
Типы и структура RGB светодиодов
Как уже упоминалось, RGB светодиоды содержат три светодиода внутри, и обычно эти три внутренних светодиода имеют либо общий анод, либо общий катод, особенно в корпусах с выводами. Таким образом, RGB светодиоды можно классифицировать как с общим анодом или с общим катодом, аналогично семисегментным индикаторам.

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

RGB светодиод с общим катодом
В RGB светодиоде с общим катодом катоды внутренних светодиодов соединены с внешним катодным выводом. Для управления каждым цветом нужно подавать HIGH сигнал или VCC на выводы красного, зелёного и синего, а катодный вывод подключать к отрицательному полюсу источника питания.
Технические характеристики
Низкое тепловое сопротивление
Отсутствие ультрафиолетового излучения
Очень высокая световая отдача и высокая яркость
Прямой ток для красного, синего и зелёного цвета: 20 мА
Прямое напряжение
Красный: 2 В (типичное)
Синий: 3.2 В (типичное)
Зелёный: 3.2 В (типичное)
Световая интенсивность
Красный: 800 мкд
Синий: 4000 мкд
Зелёный: 900 мкд
Длина волны
Красный: 625 нм
Синий: 520 нм
Зелёный: 467.5 нм
Рабочая температура: от -25 ℃ до 85 ℃
Температура хранения: от -30 ℃ до 85 ℃
Схема подключения
Подключите вывод R RGB светодиода к цифровому пину D9 на плате
Подключите вывод G RGB светодиода к цифровому пину D10 на плате
Подключите вывод B RGB светодиода к цифровому пину D11 на плате
Подключите вывод GND RGB светодиода к GND на плате

Пример кода
/*
Electronics Learning Starter Kit for Arduino
Project 11
RGB LED
Edit By Keyes
*/
int redPin = 9; // red pin
int greenPin = 10; // green pin
int bluePin = 11; // blue pin
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop() {
// red gradient
for (int i = 0; i <= 255; i++) {
analogWrite(redPin, i);
delay(10);
}
for (int i = 255; i >= 0; i--) {
analogWrite(redPin, i);
delay(10);
}
// green gradient
for (int i = 0; i <= 255; i++) {
analogWrite(greenPin, i);
delay(10);
}
for (int i = 255; i >= 0; i--) {
analogWrite(greenPin, i);
delay(10);
}
// blue gradient
for (int i = 0; i <= 255; i++) {
analogWrite(bluePin, i);
delay(10);
}
for (int i = 255; i >= 0; i--) {
analogWrite(bluePin, i);
delay(10);
}
}
Объяснение кода
В коде определены три целочисленные переменные redPin, greenPin и bluePin, которым присвоены значения 9, 10 и 11 соответственно. Эти номера соответствуют пинам на плате Arduino, к которым подключён RGB светодиод. Эти пины будут настроены в режиме вывода для отправки аналоговых сигналов и управления яркостью светодиодов.
int redPin = 9; // Pin connected to the red LED
int greenPin = 10; // Pin connected to the green LED
int bluePin = 11; // Pin connected to the blue LED
В функции setup() используется функция pinMode() для установки каждого цветового пина в режим вывода (OUTPUT). Это необходимо, так как по умолчанию пины Arduino настроены на ввод.
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
Функция loop() содержит основную логику управления градиентом цвета RGB светодиода. Используются три отдельных цикла for для управления яркостью красного, зелёного и синего светодиодов соответственно. Каждый цикл сначала постепенно увеличивает яркость от 0 до 255, а затем постепенно уменьшает обратно до 0. Этот процесс создаёт эффект плавного появления и исчезновения света от полностью выключенного до максимальной яркости и обратно. Функция analogWrite() используется для установки значения ШИМ (широтно-импульсной модуляции) на конкретном пине, что регулирует яркость светодиода.
void loop() {
// Red fade
for (int i = 0; i <= 255; i++) {
analogWrite(redPin, i);
delay(10);
}
for (int i = 255; i >= 0; i--) {
analogWrite(redPin, i);
delay(10);
}
// Green fade
for (int i = 0; i <= 255; i++) {
analogWrite(greenPin, i);
delay(10);
}
for (int i = 255; i >= 0; i--) {
analogWrite(greenPin, i);
delay(10);
}
// Blue fade
for (int i = 0; i <= 255; i++) {
analogWrite(bluePin, i);
delay(10);
}
for (int i = 255; i >= 0; i--) {
analogWrite(bluePin, i);
delay(10);
}
}
Результат проекта
После загрузки кода на плату разработки RGB светодиод будет отображать градиентный эффект красного, зелёного и синего цветов по очереди.

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