RGB-светодиод: смешивание цветов с Arduino, общий анод и общий катод
Как работает RGB-светодиод и как отличить общий катод от общего анода? Подключение к Arduino, резисторы для каждого цвета, смешивание цветов через analogWrite, радуга, код для ESP32 и Pico.
RGB-светодиод — это три отдельных светодиода в одном корпусе: красный, зелёный и синий. Задавая яркость каждого из них отдельно, можно получить почти любой цвет — от жёлтого до голубого и от фиолетового до оранжевого. На том же принципе работает каждый пиксель экрана компьютера. Это одна из самых весёлых деталей для Arduino: индикаторы состояния, лампы настроения и разноцветные сигналы уведомлений.

Как работает RGB-светодиод?
Цвета света смешиваются аддитивно: красный и зелёный вместе выглядят жёлтым, зелёный и синий дают голубой, красный и синий — фиолетовый (пурпурный), а все три вместе — белый. Arduino задаёт яркость каждого канала от 0 до 255 с помощью PWM. Теоретически это 256 × 256 × 256 ≈ 16,7 миллиона сочетаний. PWM включает и выключает светодиод сотни раз в секунду; глаз не видит мерцания и воспринимает только среднюю яркость.
| Цвет | Красный | Зелёный | Синий |
|---|---|---|---|
| Красный | 255 | 0 | 0 |
| Зелёный | 0 | 255 | 0 |
| Синий | 0 | 0 | 255 |
| Жёлтый | 255 | 255 | 0 |
| Голубой | 0 | 255 | 255 |
| Пурпурный | 255 | 0 | 255 |
| Оранжевый | 255 | 80 | 0 |
| Белый | 255 | 255 | 255 |
Общий катод или общий анод?
Самая длинная из четырёх ножек RGB-светодиода — общий вывод трёх светодиодов. Если он объединяет катоды, светодиод с общим катодом; если аноды — с общим анодом. Снаружи они выглядят одинаково, но подключение и код у них противоположные:
| Параметр | Общий катод (CC) | Общий анод (CA) |
|---|---|---|
| Длинная ножка подключается к | GND | 5V |
| Чтобы зажечь цвет | Подать на пин HIGH (255) | Подать на пин LOW (0) |
| Значение в коде | analogWrite(pin, value) | analogWrite(pin, 255 - value) |
| Полностью выключен | 0 | 255 |
Порядок выводов и подключение к Arduino
У распространённых RGB-светодиодов 5 мм порядок выводов такой: красный, общий (самый длинный), зелёный, синий, но у разных производителей он может отличаться, поэтому надёжнее проверить каждую ножку. Каждый цвет подключается через свой резистор к PWM-пину. На Arduino Uno PWM-пины отмечены знаком ~: 3, 5, 6, 9, 10 и 11.
| Ножка | Подключение | Пин Arduino Uno |
|---|---|---|
| Красный (R) | Через резистор | D9 |
| Общий (самый длинный) | GND для общего катода, 5V для общего анода | — |
| Зелёный (G) | Через резистор | D10 |
| Синий (B) | Через резистор | D11 |
Номиналы резисторов: отдельный резистор на каждый цвет
Каждому цвету для свечения нужно своё напряжение (прямое падение напряжения): около 2,0 V для красного и 3,0–3,2 V для зелёного и синего. Если ориентироваться на 20 mA при 5 V, красному нужен (5 − 2.0) / 0.020 = 150 Ω, а зелёному и синему (5 − 3.2) / 0.020 ≈ 100 Ω. На практике 220 Ω на всех трёх безопасно и всё ещё достаточно ярко; цвета можно уравнять в коде. Чтобы рассчитать свои значения, воспользуйся калькулятором Резистор для светодиода, а прямое напряжение каждого цвета смотри в таблице Напряжения светодиодов.
Смешивание цветов с Arduino
Код ниже объединяет три канала в одну функцию setColor() и по очереди показывает семь цветов. Если светодиод с общим анодом, просто поставь COMMON_ANODE в true; функция сама инвертирует значения.
1const int R_PIN = 9;
2const int G_PIN = 10;
3const int B_PIN = 11;
4const bool COMMON_ANODE = false; // ortak anotsa true yap / set true for common anode
5
6void setColor(int r, int g, int b) {
7 if (COMMON_ANODE) { r = 255 - r; g = 255 - g; b = 255 - b; }
8 analogWrite(R_PIN, r);
9 analogWrite(G_PIN, g);
10 analogWrite(B_PIN, b);
11}
12
13void setup() {
14 pinMode(R_PIN, OUTPUT);
15 pinMode(G_PIN, OUTPUT);
16 pinMode(B_PIN, OUTPUT);
17}
18
19void loop() {
20 setColor(255, 0, 0); delay(1000); // kırmızı / red
21 setColor(0, 255, 0); delay(1000); // yeşil / green
22 setColor(0, 0, 255); delay(1000); // mavi / blue
23 setColor(255, 255, 0); delay(1000); // sarı / yellow
24 setColor(0, 255, 255); delay(1000); // turkuaz / cyan
25 setColor(255, 0, 255); delay(1000); // mor / magenta
26 setColor(255, 255, 255); delay(1000); // beyaz / white
27}Плавные переходы цвета: эффект радуги
Если вместо прыжков между цветами уменьшать один канал и одновременно увеличивать другой, свет плавно перетекает из красного в зелёный, из зелёного в синий и обратно в красный. Цикл ниже использует ту же функцию setColor(); меняй значение задержки, чтобы регулировать скорость.
1// setColor() ve pin tanımları yukarıdaki gibi / setColor() and pins as above
2void loop() {
3 for (int i = 0; i < 256; i++) { setColor(255 - i, i, 0); delay(8); } // kırmızı → yeşil / red → green
4 for (int i = 0; i < 256; i++) { setColor(0, 255 - i, i); delay(8); } // yeşil → mavi / green → blue
5 for (int i = 0; i < 256; i++) { setColor(i, 0, 255 - i); delay(8); } // mavi → kırmızı / blue → red
6}Выбор цвета потенциометрами
Если подключить три потенциометра к A0, A1 и A2, каждый станет ручкой одного цветового канала. analogRead() возвращает значение от 0 до 1023; разделив его на 4, получишь диапазон 0–255, которого ждёт PWM. Подключение потенциометра объясняется в статье Что такое потенциометр?
1// A0, A1, A2'de üç potansiyometre; setColor() yukarıdaki gibi
2// three pots on A0, A1, A2; setColor() as above
3void loop() {
4 int r = analogRead(A0) / 4; // 0–1023 → 0–255
5 int g = analogRead(A1) / 4;
6 int b = analogRead(A2) / 4;
7 setColor(r, g, b);
8}RGB-светодиоды с ESP32 и Raspberry Pi Pico
На ESP32 с актуальным ядром Arduino (3.x) analogWrite() работает на любом выходном пине, поэтому код выше запускается без изменений, если поменять номера пинов. Следить нужно только за напряжением: пины выдают 3,3 V, и зелёный и синий каналы с прямым напряжением около 3 V светят тусклее. При 3,3 V бери маленькие резисторы, например 47–100 Ω, а если нужна настоящая яркость, питай светодиод от 5 V через транзистор. На Pico класс PWM в MicroPython принимает значения от 0 до 65535:
1from machine import Pin, PWM
2import time
3
4pins = [PWM(Pin(n)) for n in (11, 12, 13)] # GP11 R, GP12 G, GP13 B
5for p in pins:
6 p.freq(1000)
7
8def set_color(r, g, b): # 0–255
9 for p, v in zip(pins, (r, g, b)):
10 p.duty_u16(v * 257) # 0–65535 (ortak anotta 65535 - v * 257)
11
12while True:
13 set_color(255, 0, 0); time.sleep(1) # kırmızı / red
14 set_color(0, 255, 0); time.sleep(1) # yeşil / green
15 set_color(0, 0, 255); time.sleep(1) # mavi / blueОбычный RGB-светодиод или адресный (WS2812B)?
| Параметр | Обычный RGB-светодиод | WS2812B (NeoPixel) |
|---|---|---|
| Нужно пинов | 3 PWM-пина на светодиод | 1 пин данных на всю ленту |
| Управление цветом | PWM-выходами Arduino | Крошечной микросхемой внутри каждого светодиода |
| Библиотека | Не нужна | Adafruit NeoPixel или FastLED |
| Лучше всего для | 1–2 светодиодов, индикаторов состояния | Лент, колец, матриц, фоновой подсветки |
Для одного-двух цветных огоньков обычный RGB-светодиод — самое простое и дешёвое решение. Если нужно раскрашивать десятки светодиодов по отдельности, 6 PWM-пинов Uno не хватит; тогда переходят на ленты WS2812B, которые управляют сотнями светодиодов по одному проводу.
Идеи проектов с RGB-светодиодом
- Лампа настроения: помести радугу в матовую банку — получится мягкий ночник.
- Индикатор температуры: объедини с DHT11, чтобы лампа светилась синим, когда холодно, зелёным, когда тепло, и красным, когда жарко.
- Смеситель цветов: создавай любой цвет вручную тремя потенциометрами.
- Выбор цвета с телефона: меняй цвет лампы палитрой на веб-странице, которую раздаёт ESP32.
- Свет уведомлений: мигай светодиодом определённым цветом, когда приходит новое письмо или сообщение.
- Цвета с клавиатуры: показывай разный цвет в зависимости от цифры, набранной на клавиатуре.
Частые ошибки и как их исправить
- Цвета работают наоборот: светодиод с общим анодом управляется как с общим катодом; поставь COMMON_ANODE в true.
- Один цвет никогда не загорается: порядок выводов может отличаться от ожидаемого; проверь каждую ножку по очереди с резистором.
- Переходы ступенчатые, без промежуточных оттенков: светодиод на пине без PWM; на Uno такие пины могут быть только полностью включены или выключены.
- Цвета сбоят, пока играет зуммер: на Uno функция tone() использует Timer2 и ломает PWM на пинах 3 и 11; переставь RGB-светодиод на пины вроде 5, 6, 9 и 10.
- Без резисторов: слишком большой ток рано или поздно повредит и светодиод, и пин Arduino.
- Очень тускло на ESP32: при 3,3 V зелёный и синий на пределе; возьми резисторы поменьше или транзистор.
Если хочешь разобраться в основах светодиодов и в том, зачем им резисторы, загляни в статьи Что такое светодиод? и Что такое резистор? В приложении BlueGrays есть проекты с RGB-светодиодом — плавная смена цветов, лампа с управлением с клавиатуры и смеситель цветов — со схемами подключения и кодом.
Частые вопросы
Как узнать, с общим анодом мой RGB-светодиод или с общим катодом?
Подключи длинную ножку к GND и коснись другой ножкой 5V через резистор 220 Ω; если загорелся — это общий катод. Если нет, подключи длинную ножку к 5V, а другую через резистор к GND; если теперь горит — общий анод. То же самое умеет режим проверки диодов в мультиметре.
Какой резистор нужен для RGB-светодиода?
При 5 V идеально около 150 Ω для красного и около 100 Ω для зелёного и синего. Для простоты можно поставить 220 Ω на все три: это безопасно и всё ещё достаточно ярко. Отдельный резистор на каждый цвет обязателен.
Сколько цветов может дать RGB-светодиод?
Каждый канал принимает 256 уровней яркости от 0 до 255, поэтому теоретически сочетаний 16,7 миллиона. На практике глаз различает меньше цветов, а разница в яркости светодиодов сближает некоторые оттенки.
Почему мой RGB-светодиод выглядит голубоватым вместо белого?
Три светодиода отличаются по яркости, а глаз к одним цветам чувствительнее, чем к другим; обычно преобладают синий и зелёный. Немного убавь эти два канала в коде или поставь на них резисторы побольше, и белый станет нейтральнее.
Что будет, если подключить RGB-светодиод к пину без PWM?
Этот канал будет только полностью включён или полностью выключен; analogWrite считает 128 и выше включением, а всё, что ниже, — выключением. Если так все три канала, получится только 8 базовых цветов без плавных переходов.
Сколькими RGB-светодиодами может управлять Arduino Uno?
У Uno 6 PWM-пинов, поэтому независимыми цветами можно управлять максимум у 2 RGB-светодиодов. Для большего числа используй 16-канальный PWM-драйвер вроде PCA9685 или ленты WS2812B, которые управляют сотнями светодиодов с одного пина.
Что собрать после прочтения
Все проекты
Работа с RGB-светодиодом
В одном светодиоде прячутся три цвета: RGB-светодиод загорается красным, затем зелёным, затем синим, каждый цвет горит полсекунды и полсекунды не горит, а потом цикл начинается снова. Нужны всего один

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

Управление RGB-светодиодом на ESP32
Бесконечное число цветов одним RGB-светодиодом вместо 3 отдельных. Как в Arduino, радужный переход получается заданием значений R/G/B через analogWrite(). Теория цвета (например, красный + зелёный = жёлтый) видна на практике.

Смеситель цветов на ESP32 (3 потенциометра + RGB-светодиод + OLED)
Умная лампа для смешивания цветов на ESP32: вращая три потенциометра, можно получить любой цвет! Когда крутишь потенциометры красного, зелёного и синего, RGB-светодиод с общим катодом меняет цвет в реальном времени. OLED-дисплей SSD1306 показывает значения каждого цвета в диапазоне 0–255, полосы заполнения и веб-код цвета HEX (например, #FF8040). Мини-студия цвета, которая учит теории цвета RGB, чтению АЦП, регулировке яркости через PWM и дизайну экрана I2C.

Смена цветов RGB-светодиода на Pico (3 канала PWM)
Один светодиод — миллионы цветов! RGB-светодиод содержит 3 светодиода: красный, зелёный и синий. Если управлять каждым своим каналом PWM Pico, цвета смешиваются: красный + зелёный = жёлтый, зелёный + синий = голубой, все три = белый. Светодиод перебирает 8 цветов. Изучи несколько каналов PWM, объявление функций (def set_color(...)), смешивание RGB, перевод 8 бит → 16 бит (x257) и общий катод и общий анод.

Управление лентой WS2812B NeoPixel на ESP32
Адресуемые светодиоды WS2812B (NeoPixel) — умные RGB-светодиоды, которыми управляют цепочкой через один пин данных. В этом проекте лента WS2812B из 8 светодиодов управляется библиотекой Adafruit_NeoPixel и показывает плавную радужную анимацию. Логика 3,3V у ESP32 работает с большинством WS2812B, но на случай нестабильности показано решение с последовательным резистором 470Ω и конденсатором 1000µF. Анимация получается сдвигом значения оттенка.

Работа со светодиодной лентой WS2812B
Познакомься с умной светодиодной лентой, где каждому огоньку можно задать свой цвет. Arduino сначала зажигает первые пять светодиодов красным, через секунду остальные пять — синим, затем выключает все
Другие статьи
Приложение BlueGrays
Собери эту схему шаг за шагом в телефоне
Схема подключения, код и список деталей на одном экране. 200+ проектов на Arduino, ESP32 и Pico готовы к сборке.
Наведи камеру телефона
Наведи камеру на код — откроется магазин приложений на телефоне.
или открыть магазин

