# Проект 11: RGB светодиод ![](../media/0b94d5d82ff25415fdf53e187656c611.png) #### Описание RGB светодиод (Red Green Blue Light Emitting Diode) — это светодиод, который может излучать свет в трёх основных цветах: красном, зелёном и синем, а также создавать различные другие цвета за счёт комбинации этих трёх цветов. В этом проекте мы используем RGB светодиод для достижения цветовых изменений и градиентных эффектов с помощью программирования Arduino. #### Аппаратное обеспечение 1\. Плата разработки UNO R3 (ch340) x1 2\. RGB светодиод x1 3\. Резистор 220 Ом x3 4\. Макетная плата x1 5\. Соединительные провода #### Принцип работы RGB светодиод — это, по сути, корпус с тремя светодиодами, который может создавать практически любой цвет. Он может использоваться в различных приложениях, таких как наружное декоративное освещение, сценическое освещение, домашнее декоративное освещение, светодиодные матричные дисплеи и многое другое. ![](../media/48f44153f77de3feb3b506bda4c50997.png)RGB светодиоды содержат три внутренних светодиода (красный, зелёный и синий), которые можно комбинировать для получения практически любого цвета. Чтобы получить разные цвета, нужно регулировать интенсивность каждого внутреннего светодиода и комбинировать три цветовых сигнала. В этом проекте мы будем использовать ШИМ для индивидуальной регулировки яркости красного, зелёного и синего светодиодов. Особенность в том, что наши глаза воспринимают смесь цветов, а не отдельные цвета, так как светодиоды находятся очень близко друг к другу внутри корпуса. **Типы и структура RGB светодиодов** Как уже упоминалось, RGB светодиоды содержат три светодиода внутри, и обычно эти три внутренних светодиода имеют либо общий анод, либо общий катод, особенно в корпусах с выводами. Таким образом, RGB светодиоды можно классифицировать как с общим анодом или с общим катодом, аналогично семисегментным индикаторам. ![RGB-LEDs-Pinout](../media/0fbcb84f353fc006cf1bbfd52a71bddb.png) Если посмотреть на RGB светодиод, то у него будет четыре вывода. Если расположить светодиод так, чтобы самый длинный вывод был вторым слева, то выводы будут располагаться в следующем порядке: красный, анод или катод, зелёный и синий. **RGB светодиод с общим анодом** В RGB светодиоде с общим анодом аноды внутренних светодиодов соединены с внешним анодным выводом. Для управления каждым цветом нужно подавать LOW сигнал или землю на выводы красного, зелёного и синего, а анодный вывод подключать к положительному полюсу источника питания. ![Common-Anode-RGB-LED-Pinout](../media/e12806f9dc240b35ae7ed7df3945a952.png) **RGB светодиод с общим катодом** В RGB светодиоде с общим катодом катоды внутренних светодиодов соединены с внешним катодным выводом. Для управления каждым цветом нужно подавать HIGH сигнал или VCC на выводы красного, зелёного и синего, а катодный вывод подключать к отрицательному полюсу источника питания.![Common-Cathode-RGB-LED-Pinout](../media/b20b5b1bd67c3fb62335957f42570cd9.png) #### Технические характеристики Низкое тепловое сопротивление Отсутствие ультрафиолетового излучения Очень высокая световая отдача и высокая яркость Прямой ток для красного, синего и зелёного цвета: 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 на плате ![Img](../media/img-20260401180542.png) #### Пример кода ```cpp /* 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 светодиод. Эти пины будут настроены в режиме вывода для отправки аналоговых сигналов и управления яркостью светодиодов. ```cpp 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 настроены на ввод. ```cpp void setup() { pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); } ``` Функция `loop()` содержит основную логику управления градиентом цвета RGB светодиода. Используются три отдельных цикла for для управления яркостью красного, зелёного и синего светодиодов соответственно. Каждый цикл сначала постепенно увеличивает яркость от 0 до 255, а затем постепенно уменьшает обратно до 0. Этот процесс создаёт эффект плавного появления и исчезновения света от полностью выключенного до максимальной яркости и обратно. Функция `analogWrite()` используется для установки значения ШИМ (широтно-импульсной модуляции) на конкретном пине, что регулирует яркость светодиода. ```cpp 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 светодиод будет отображать градиентный эффект красного, зелёного и синего цветов по очереди. ![P11](../media/P11.gif) Яркость каждого цвета будет постепенно увеличиваться от 0 до 255, а затем постепенно уменьшаться до 0.