4.02.3. Лабораторная работа №4.2.3.md
Радуга на светодиоде
Тема работы
В главе 2 мы научились просто включать цвета на RGB-светодиоде
, вручную переставляя провода. В этой лабораторной работе мы выйдем на совершенно новый уровень - заставим Рудирон
самостоятельно и плавно смешивать цвета, создавая на одном светодиоде эффект радужного перелива.
Цель
- Научиться управлять всеми тремя каналами
RGB-светодиода
с помощью командыanalogWrite()
. - Понять, как с помощью ШИМ можно получить не только основные, но и смешанные, промежуточные цвета.
- Закрепить использование циклов
for
для создания сложных световых анимаций.
Оборудование и материалы
- Отладочная плата
Рудирон
. - Макетная плата.
- 1
RGB-светодиод
с общим катодом. - 3 резистора номиналом 220 Ом.
- 4 соединительных провода.
- USB-кабель для подключения
Рудирона
к компьютеру. - Компьютер с настроенной средой
Arduino IDE
.
Ход работы
-
Как смешиваются цвета?
Вы наверняка знаете, что если смешать краски, например, синюю и жёлтую, получится зелёная. Это субтрактивная модель, она работает с отражённым светом. Но в мире экранов и светодиодов всё иначе. Здесь используется аддитивная модель, где цвета складываются. Основные цвета здесь — Красный (Red), Зелёный (Green) и Синий (Blue), или
RGB
.Смешивая свет от этих трёх источников, мы можем получить любой цвет радуги.
- Красный + Зелёный = Жёлтый
- Зелёный + Синий = Голубой (Циан)
- Синий + Красный = Пурпурный (Маджента)
- Красный + Зелёный + Синий = Белый
- Отсутствие всех цветов = Чёрный
В этой работе мы запрограммируем плавный переход по цветовому кругу, проходя через все основные и смешанные цвета. А в качестве домашнего задания вы сможете попробовать реализовать полный спектр.
-
Сборка схемы
Схема подключения очень похожа на ту, что мы использовали для простого переключения цветов, но с одним важным отличием: мы должны подключить выводы светодиода к пинам
Рудирона
, которые поддерживают ШИМ. Согласно документации, это, например, пины5
,7
и8
.- Вставьте
RGB-светодиод
(с общим катодом) в макетную плату. - К каждой из трёх цветных ножек (анодов) подключите по резистору на 220 Ом.
- Соедините с
Рудироном
:- Вывод красного цвета (через резистор) подключите к пину 5.
- Вывод зелёного цвета (через резистор) подключите к пину 7.
- Вывод синего цвета (через резистор) подключите к пину 8.
- Самую длинную ножку (общий катод) подключите к пину
GND
.
- Вставьте
-
Написание и загрузка кода
- Убедитесь, что перемычка
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», чтобы загрузить код на плату.
- Убедитесь, что перемычка
-
Проверка работы
Сразу после загрузки
RGB-светодиод
начнёт плавно переливаться, проходя через все шесть основных и смешанных цветов: красный, жёлтый, зелёный, голубой, синий, пурпурный и снова красный.
Результаты
Вы создали полноценную световую анимацию! Ваша программа плавно управляет яркостью каждого из трёх кристаллов RGB-светодиода
, создавая непрерывный переход между цветами.
Анализ результатов
Весь эффект достигается за счёт шести циклов for
. В каждом цикле яркость одного цвета остаётся постоянной (0 или 255), а яркость другого плавно меняется от 0 до 255 (или наоборот). Например, в первом блоке analogWrite(redPin, 255)
держит красный цвет на максимуме, а analogWrite(greenPin, i)
постепенно добавляет к нему зелёный. В результате мы видим, как чисто красный цвет плавно превращается в жёлтый.
Выводы
В этой лабораторной работе вы объединили знания о RGB-светодиодах
и ШИМ. Вы научились программно смешивать цвета и создавать плавные переходы между ними. Этот принцип лежит в основе всей современной цифровой графики, работы цветных дисплеев и систем «умного» освещения.
Вопросы для самопроверки
- Что такое аддитивная цветовая модель?
- Как с помощью
RGB-светодиода
получить белый цвет? А оранжевый? - Почему для этой работы важно было подключить светодиод к пинам, поддерживающим ШИМ?
- Как изменить код, чтобы переливы цветов происходили в два раза быстрее?
- Задача со звёздочкой: Подумайте, как можно было бы реализовать переход по полному спектру, как на втором цветовом круге. Опишите алгоритм словами. (Подсказка: в любой момент времени яркость одного цвета равна 255, другого — 0, а третьего — меняется).
Вы научились создавать настоящую радугу с помощью программы! В следующей лабораторной работе мы перейдём от света к движению и научимся плавно управлять скоростью вращения вентилятора.
- Страницы
- 1. Введение
- 1.01. Лабораторная работа №1.1
- 1.02. Лабораторная работа №1.2
- 1.03. Лабораторная работа №1.3
- 1.04. Лабораторная работа №1.4
- 1.05. Лабораторная работа №1.5
- 2. Основы электроники
- 2.01. Электрический ток и параметры цепи
- 2.01.1. Лабораторная работа №2.1.1
- 2.01.2. Лабораторная работа №2.1.2
- 2.02. Сопротивление в цепи
- 2.02.1. Лабораторная работа №2.2.1
- 2.02.2. Лабораторная работа №2.2.2
- 2.03. Полупроводники
- 2.03.1. Лабораторная работа №2.3.1
- 2.03.2. Лабораторная работа №2.3.2
- 3. Основы программирование на C++
- 3.01. Типы данных и переменные
- 3.01.1. Практикум
- 3.02. Операторы в C++
- 3.02.1. Практикум
- 3.03. Структуры ветвления
- 3.03.1. Практикум
- 3.04. Структуры повторения
- 3.04.1. Практикум
- 3.05. Массивы
- 3.05.1. Практикум
- 3.06. Функции
- 3.06.1. Практикум
- 3.07. Решения задач
- 4. Программирование микроконтроллеров
- 4.01. Цифровые сигналы и GPIO
- 4.01.1. Лабораторная работа №4.1.1
- 4.01.2. Лабораторная работа №4.1.2
- 4.01.3. Лабораторная работа №4.1.3
- 4.01.4. Лабораторная работа №4.1.4
- 4.01.5. Лабораторная работа №4.1.5
- 4.01.6. Лабораторная работа №4.1.6
- 4.01.7. Лабораторная работа №4.1.7
- 4.01.8. Лабораторная работа №4.1.8
- 4.02. Аналоговые сигналы и ШИМ
- 4.02.1. Лабораторная работа №4.2.1
- 4.02.2. Лабораторная работа №4.2.2
- 4.02.3. Лабораторная работа №4.2.3
- 4.02.4. Лабораторная работа №4.2.4
- 4.02.5. Лабораторная работа №4.2.5
- 4.03. Аналоговый сигнал и АЦП
- 4.03.1. Лабораторная работа №4.3.1
- 4.03.2. Лабораторная работа №4.3.2
- 4.03.3. Лабораторная работа №4.3.3
- 4.03.4. Лабораторная работа №4.3.4
- 4.03.5. Лабораторная работа №4.3.5
- 4.04. Аналоговый сигнал и ЦАП
- 4.04.1. Лабораторная работа №4.4.1
- 4.04.2. Лабораторная работа №4.4.2
- 4.05. Генерация и измерение импульсов
- 4.05.1. Лабораторная работа №4.5.1
- 4.05.2. Лабораторная работа №4.5.2
- 4.06. Аппаратные прерывания
- 4.06.1. Лабораторная работа №4.6.1
- 4.06.2. Лабораторная работа №4.6.2
- 4.07. Псевдопараллелизм
- 4.07.1. Лабораторная работа №4.7.1
- 4.07.2. Лабораторная работа №4.7.2
- 4.08. Интерфейсы связи - UART
- 4.08.1. Лабораторная работа №4.8.1
- 4.09. Интерфейсы связи - I2C
- 4.09.1. Лабораторная работа №4.9.1
- 4.10. Интерфейсы связи - SPI
- 4.10.1. Лабораторная работа №4.10.1
- home
-
imgs
- 1. Введение
- 1.01. Лабораторная работа №1.1
- 1.02. Лабораторная работа №1.2
- 1.03. Лабораторная работа №1.3
- 1.04. Лабораторная работа №1.4
- 1.05. Лабораторная работа №1.5
- 2. Основы электроники
- 2.01. Электрический ток и параметры цепи
- 2.01.1. Лабораторная работа №2.1.1
- 2.01.2. Лабораторная работа №2.1.2
- 2.02. Сопротивление в цепи
- 2.02.1. Лабораторная работа №2.2.1
- 2.02.2. Лабораторная работа №2.2.2
- 2.03. Полупроводники
- 2.03.1. Лабораторная работа №2.3.1
- 2.03.2. Лабораторная работа №2.3.2
- 3. Основы программирование на C++
- 3.01. Типы данных и переменные
- 3.01.1. Практикум
- 3.02. Операторы в C++
- 3.02.1. Практикум
- 3.03. Структуры ветвления
- 3.03.1. Практикум
- 3.04. Структуры повторения
- 3.04.1. Практикум
- 3.05. Массивы
- 3.05.1. Практикум
- 3.06. Функции
- 3.06.1. Практикум
- 3.07. Решения задач
- 4. Программирование микроконтроллеров
- 4.01. Цифровые сигналы и GPIO
- 4.01.1. Лабораторная работа №4.1.1
- 4.01.2. Лабораторная работа №4.1.2
- 4.01.3. Лабораторная работа №4.1.3
- 4.01.4. Лабораторная работа №4.1.4
- 4.01.5. Лабораторная работа №4.1.5
- 4.01.6. Лабораторная работа №4.1.6
- 4.01.7. Лабораторная работа №4.1.7
- 4.01.8. Лабораторная работа №4.1.8
- 4.02. Аналоговые сигналы и ШИМ
- 4.02.1. Лабораторная работа №4.2.1
- 4.02.2. Лабораторная работа №4.2.2
- 4.02.3. Лабораторная работа №4.2.3
- 4.02.4. Лабораторная работа №4.2.4
- 4.02.5. Лабораторная работа №4.2.5
- 4.03. Аналоговый сигнал и АЦП
- 4.03.1. Лабораторная работа №4.3.1
- 4.03.2. Лабораторная работа №4.3.2
- 4.03.3. Лабораторная работа №4.3.3
- 4.03.4. Лабораторная работа №4.3.4
- 4.03.5. Лабораторная работа №4.3.5
- 4.04. Аналоговый сигнал и ЦАП
- 4.04.1. Лабораторная работа №4.4.1
- 4.04.2. Лабораторная работа №4.4.2
- 4.05. Генерация и измерение импульсов
- 4.05.1. Лабораторная работа №4.5.1
- 4.05.2. Лабораторная работа №4.5.2
- 4.06. Аппаратные прерывания
- 4.06.1. Лабораторная работа №4.6.1
- 4.06.2. Лабораторная работа №4.6.2
- 4.07. Псевдопараллелизм
- 4.07.1. Лабораторная работа №4.7.1
- 4.07.2. Лабораторная работа №4.7.2
- 4.08. Интерфейсы связи - UART
- 4.08.1. Лабораторная работа №4.8.1
- 4.09. Интерфейсы связи - I2C
- 4.09.1. Лабораторная работа №4.9.1
- 4.10. Интерфейсы связи - SPI
- 4.10.1. Лабораторная работа №4.10.1
- home