4.02.3. Лабораторная работа №4.2.3.md


Радуга на светодиоде

Тема работы

В главе 2 мы научились просто включать цвета на RGB-светодиоде, вручную переставляя провода. В этой лабораторной работе мы выйдем на совершенно новый уровень - заставим Рудирон самостоятельно и плавно смешивать цвета, создавая на одном светодиоде эффект радужного перелива.

Цель

  • Научиться управлять всеми тремя каналами RGB-светодиода с помощью команды analogWrite().
  • Понять, как с помощью ШИМ можно получить не только основные, но и смешанные, промежуточные цвета.
  • Закрепить использование циклов for для создания сложных световых анимаций.

Оборудование и материалы

  • Отладочная плата Рудирон.
  • Макетная плата.
  • 1 RGB-светодиод с общим катодом.
  • 3 резистора номиналом 220 Ом.
  • 4 соединительных провода.
  • USB-кабель для подключения Рудирона к компьютеру.
  • Компьютер с настроенной средой Arduino IDE.

Ход работы

  1. Как смешиваются цвета?

    Вы наверняка знаете, что если смешать краски, например, синюю и жёлтую, получится зелёная. Это субтрактивная модель, она работает с отражённым светом. Но в мире экранов и светодиодов всё иначе. Здесь используется аддитивная модель, где цвета складываются. Основные цвета здесь — Красный (Red), Зелёный (Green) и Синий (Blue), или RGB.

    Смешивая свет от этих трёх источников, мы можем получить любой цвет радуги.

    • Красный + Зелёный = Жёлтый
    • Зелёный + Синий = Голубой (Циан)
    • Синий + Красный = Пурпурный (Маджента)
    • Красный + Зелёный + Синий = Белый
    • Отсутствие всех цветов = Чёрный

    В этой работе мы запрограммируем плавный переход по цветовому кругу, проходя через все основные и смешанные цвета. А в качестве домашнего задания вы сможете попробовать реализовать полный спектр.

    Рис. 1. Цветовой круг Иттена (Полный спектр)

  2. Сборка схемы

    Схема подключения очень похожа на ту, что мы использовали для простого переключения цветов, но с одним важным отличием: мы должны подключить выводы светодиода к пинам Рудирона, которые поддерживают ШИМ. Согласно документации, это, например, пины 5, 7 и 8.

    • Вставьте RGB-светодиодобщим катодом) в макетную плату.
    • К каждой из трёх цветных ножек (анодов) подключите по резистору на 220 Ом.
    • Соедините с Рудироном:
      • Вывод красного цвета (через резистор) подключите к пину 5.
      • Вывод зелёного цвета (через резистор) подключите к пину 7.
      • Вывод синего цвета (через резистор) подключите к пину 8.
      • Самую длинную ножку (общий катод) подключите к пину GND.

    Рис. 2. Схема подключения RGB-светодиода к ШИМ-пинам

  3. Написание и загрузка кода

    • Убедитесь, что перемычка PRG | RUN стоит в положении PRG.
    • Откройте Arduino IDE и введите следующий код:

      // Назначаем пинам ШИМ понятные имена
      const int redPin = 5;
      const int greenPin = 7;
      const int bluePin = 8;
      
      void setup() {
        pinMode(redPin, OUTPUT);
        pinMode(greenPin, OUTPUT);
        pinMode(bluePin, OUTPUT);
      }
      
      void loop() {
        // От красного к жёлтому (увеличиваем зелёный)
        for (int i = 0; i <= 255; i++) {
        analogWrite(redPin, 255);
        analogWrite(greenPin, i);
        analogWrite(bluePin, 0);
        delay(10);
        }
      
        // От жёлтого к зелёному (уменьшаем красный)
        for (int i = 255; i >= 0; i--) {
        analogWrite(redPin, i);
        analogWrite(greenPin, 255);
        analogWrite(bluePin, 0);
        delay(10);
        }
      
        // От зелёного к голубому (увеличиваем синий)
        for (int i = 0; i <= 255; i++) {
        analogWrite(redPin, 0);
        analogWrite(greenPin, 255);
        analogWrite(bluePin, i);
        delay(10);
        }
      
        // От голубого к синему (уменьшаем зелёный)
        for (int i = 255; i >= 0; i--) {
        analogWrite(redPin, 0);
        analogWrite(greenPin, i);
        analogWrite(bluePin, 255);
        delay(10);
        }
      
        // От синего к пурпурному (увеличиваем красный)
        for (int i = 0; i <= 255; i++) {
        analogWrite(redPin, i);
        analogWrite(greenPin, 0);
        analogWrite(bluePin, 255);
        delay(10);
        }
      
        // От пурпурного к красному (уменьшаем синий)
        for (int i = 255; i >= 0; i--) {
        analogWrite(redPin, 255);
        analogWrite(greenPin, 0);
        analogWrite(bluePin, i);
        delay(10);
        }
      }
      
    • Нажмите кнопку «Upload», чтобы загрузить код на плату.
  4. Проверка работы

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

Результаты

Вы создали полноценную световую анимацию! Ваша программа плавно управляет яркостью каждого из трёх кристаллов RGB-светодиода, создавая непрерывный переход между цветами.

Анализ результатов

Весь эффект достигается за счёт шести циклов for. В каждом цикле яркость одного цвета остаётся постоянной (0 или 255), а яркость другого плавно меняется от 0 до 255 (или наоборот). Например, в первом блоке analogWrite(redPin, 255) держит красный цвет на максимуме, а analogWrite(greenPin, i) постепенно добавляет к нему зелёный. В результате мы видим, как чисто красный цвет плавно превращается в жёлтый.

Выводы

В этой лабораторной работе вы объединили знания о RGB-светодиодах и ШИМ. Вы научились программно смешивать цвета и создавать плавные переходы между ними. Этот принцип лежит в основе всей современной цифровой графики, работы цветных дисплеев и систем «умного» освещения.

Вопросы для самопроверки

  1. Что такое аддитивная цветовая модель?
  2. Как с помощью RGB-светодиода получить белый цвет? А оранжевый?
  3. Почему для этой работы важно было подключить светодиод к пинам, поддерживающим ШИМ?
  4. Как изменить код, чтобы переливы цветов происходили в два раза быстрее?
  5. Задача со звёздочкой: Подумайте, как можно было бы реализовать переход по полному спектру, как на втором цветовом круге. Опишите алгоритм словами. (Подсказка: в любой момент времени яркость одного цвета равна 255, другого — 0, а третьего — меняется).

Вы научились создавать настоящую радугу с помощью программы! В следующей лабораторной работе мы перейдём от света к движению и научимся плавно управлять скоростью вращения вентилятора.