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.

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

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

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

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

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

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

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