Урок 9: RGB Светодиод

1. Цель эксперимента

Познакомиться с принципами работы RGB-светодиода и цветовой моделью RGB, а также научиться смешивать три базовых канала (Red, Green, Blue) с помощью ШИМ-сигнала (PWM), получая любые оттенки — от чистого красного до белого.

2. Компоненты

Кол-во

Деталь

1

Плата Arduino UNO

1

RGB-светодиод (общий катод)

3

Резисторы 220 Ω–330 Ω

1

Макетная плата (breadboard)

5

Перемычки «папа–папа»

1

USB-кабель A-B

3. Немного знаний

RGB-светодиод
Триканальный RGB-светодиод
  • RGB — аддитивная модель. При 100 % яркости всех трёх каналов получаем белый цвет.

  • Светодиоды бывают общий катод (общий «-») и общий анод (общий «+»). В примере ниже используется общий катод: общий вывод подключён к GND. Для общего анода логика PWM инвертируется (0 = максимум яркости).

  • Управляют каналами через PWM-пины Arduino (помечены «~»).

4. Схема подключения

Схема подключения RGB-светодиода к Arduino
  • Общий катод → GND

  • R-канал (длинный вывод, обычно крайний) → через резистор → 11 (PWM)

  • G-канал → через резистор → 9 (PWM)

  • B-канал → через резистор → 10 (PWM)

5. Пример кода

Ниже приведён скетч, который плавно переливается всеми цветами спектра. Практически каждая строка снабжена пояснением, так что даже новичок легко поймёт, что происходит.

rgb_led_original.ino
// ---------- Константы с номерами пинов ----------
int redpin   = 11; // PWM-пин для красного канала (R)
int bluepin  = 10; // PWM-пин для синего  канала (B)
int greenpin =  9; // PWM-пин для зелёного канала (G)

int val;           // переменная яркости (0–255)

// ------------------- setup() --------------------
void setup() {
  pinMode(redpin,   OUTPUT); // объявляем все три пина выходами
  pinMode(bluepin,  OUTPUT);
  pinMode(greenpin, OUTPUT);

  Serial.begin(9600);       // открываем Serial-монитор на 9600 бод
}

// -------------------- loop() --------------------
void loop() {
  // ----- Переход от красного к синему -----
  for (val = 255; val > 0; val--) {       // идём от 255 к 0
    analogWrite(11, val);                 // красный постепенно гаснет
    analogWrite(10, 255 - val);           // синий загорается
    analogWrite(9,  128 - val);           // зелёный корректирует оттенок
    delay(1);                             // пауза 1 мс для плавности
  }

  // ----- Обратный переход (синий → красный) -----
  for (val = 0; val < 255; val++) {       // идём от 0 к 255
    analogWrite(11, val);                 // красный усиливается
    analogWrite(10, 255 - val);           // синий гаснет
    analogWrite(9,  128 - val);           // зелёный зеркально меняется
    delay(1);
  }

  Serial.println(val, DEC); // выводим значение val (255) в монитор
}

6. Как работает код

  • analogWrite() генерирует на пине PWM сигнал с заполнением 0–255. При общем катоде 0 — «выключено», 255 — «максимум яркости».

  • В первом цикле яркость красного канала линейно падает, синего — растёт, а зелёный изменяется так, чтобы получался плавный «градиент».

  • Во втором цикле процесс идёт в обратную сторону. Получается бесконечный «цветовой переход».

7. Пошаговый запуск

  1. Соберите схему согласно рисунку выше.

  2. Подключите Arduino и выберите плату UNO в меню IDE.

  3. Скопируйте скетч, загрузите его. Светодиод начнёт плавно переливаться.

  4. Откройте Serial Monitor (9600 baud) — увидите вывод текущего значения переменной val.

8. Что может пойти не так

Симптом

Причина

Решение

Светодиод не светит

Общий вывод не на GND / забыты резисторы

Проверьте схему, подключите резисторы 220 Ω

Цвета «перепутаны»

Подключены не те ноги RGB-светодиода

Найдите datasheet или определите выводы мультиметром

Очень тускло

Слишком большие резисторы

Используйте 220 Ω или 330 Ω, не больше 1 kΩ

9. Эксперименты

  • Измените алгоритм, чтобы получался мигающий «светофор»: красный → жёлтый → зелёный.

  • Добавьте потенциометр и меняйте яркость каналов в реальном времени.