#4 Эксперимент «RGB-радуга»
Ранее мы уже неоднократно работали со светодиодами. Мы заставляли их загораться и потухать с помощью цифровых сигналов HIGH и LOW. Мы могли плавно регулировать их яркость с помощью аналогового сигнала, задавая значения в диапазоне [0 … 255]. Сегодня мы будем работать с комбинацией из 3-х светодиодов, красного, зелёного и синего цветов, собранной в одном корпусе. Такой трёхцветный светодиод называется RGB-светодиодов, где обозначение RGB — является обозначением базовых цветов светодиодов, находящихся внутри (Red — красный, Green — зелёный, Blue — синий). Почему именно эти цвета? Ответ на этот вопрос вы получите далее.
Перед выполнением эксперимента прочтите:
СБОРКА УСТРОЙСТВА НА МАКЕТНОЙ ПЛАТЕ
Нам понадобятся следующие компоненты:
- Arduino Uno;
- Usb-кабель для подключения к компьютеру;
- Беспаечная макетная плата;
- 1 RGB-светодиод;
- 4 соединительных провода (желательно чёрного, красного, зелёного и синего цветов).
Соберите устройство по следующей схеме:
Схема устройства на макетной плате |
![]() |
Принципиальная схема устройства |
![]() |
Обратите внимание: мы будем работать с уже готовым трёхцветным модулем. Внутри модуля, кроме самих светодиодов, установлены токоограничительные резисторы, поэтому дополнительных резисторов использовать не нужно — модуль можно подключать напрямую к Arduino. Схема модуля и реальная принципиальная схема устройства приведена ниже:
Принципиальная схема RGB-модуля | Принципиальная схема подключения модуля к Arduino |
![]() |
![]() |
Помните, если вы будете использовать «голый» трёхцветный светодиод, вам необходимо не забыть включить в схему токоограничительные резисторы, номиналом в 200 Ом.
- Наименования выводов на RGB-модуле могут различаться. Внимательно смотрите на обозначения этих пинов: сигнальные пины, с помощью которых мы будем управлять светодиодами, обозначаются по цвету светодиода — R, G и B. Пин земли может быть обозначен как (-) или GND;
- В нашем случае, пин R светодиода мы подключим к пину 3 Arduino, пин G — к пину 5, а пин B — к пину 6. Пин земли будем подключать к пину GND на плате Arduino.
- Работать со светодиодами мы будем так же, как и в предыдущих занятиях: мы будем посылать цифровой или аналоговый сигнал на каждый из светодиодов по отдельности, тем самым включая и выключая их, или зажигая не в полную силу;
- Управлять светодиодами мы будем в автоматическом режиме, т.е. мы не будем использовать дополнительных кнопок или потенциометра.
ПРОГРАММИРОВАНИЕ
Запустите Arduino IDE и выберите [Инструменты] ⇒ [ArduBlock].
Для начала давайте просто по-включаем и по-выключаем наши светодиоды. Для этого нам понадобятся блоки [уст. цифровой порт] и [задержка в миллисекундах]:
Загрузите программу в Arduino и проверьте: все ли светодиоды работают? Если всё подключено правильно, то вы должны увидеть мигание красным, зелёным и синим цветами поочерёдно.
Теперь, давайте попробуем зажечь наши светодиоды плавно. Для этого мы будем использовать блок [уст. аналоговый порт] и блок [задержка в миллисекундах]. Наша задача: посылать плавно нарастающий аналоговый сигнал на светодиод. Значение сигнала должно постоянно увеличиваться от 0 до 255 с минимальной задержкой после подачи сигнала (иначе глаз не заметит изменений). Для этого нам пригодится блок [повторить и посчитать], который находится в разделе [Управление]:
Блок имеет 3 раздела: [переменная], [количество раз] и [Команды]. В ходе работы, блок выполняет команды, находящееся в разделе [Команды], заданное количество раз. Количество повторов мы задаём в разделе [количество раз]. При этом, блок считает количество совершённых повторов и помещает это значение в [переменную].
Переменная — выделенная область памяти компьютера для хранения каких-либо данных. В нашем случае, мы будем хранить в переменной количество повторов наших команд, т.е. в переменной будет хранится целое число, которое в ходе работы блока будет постоянно увеличиваться. Переменной можно присвоить собственное имя. В нашем случае, мы назовём её «lightness» — яркость.
Если нам нужно плавно изменить значение яркости светодиода от 0 до 255, то и повторять блок нам будет нужно 255 раз. При этом, мы будем передавать на светодиод аналоговый сигнал равный текущему количеству повторов, т.е. на первом шаге мы передадим значение 1, на втором — 2, на третьем — 3 и т.д. до 255. Давайте плавно увеличим яркость красного светодиода:
Загрузите программу в Arduino и понаблюдайте за её работой. После передачи аналогового сигнала, мы поставили задержку в 4 мс, а это значит, что общее время работы блока составит 4 · 255 = 1020 мс или примерно 1 секунду. Если вы хотите, чтобы ваш светодиод набирал яркость не так быстро, можете увеличить задержку.
Попробуйте изменить программу так, что бы светодиод плавно разгорался в течении 5 секунд.
Теперь попробуем заставить наш светодиод так же плавно угасать. Всё, что для этого нужно — развернуть алгоритм в обратную сторону, т.е. не увеличивать, а уменьшать значение сигнала. К сожалению, блок [повторить и посчитать] может работать лишь в большую сторону, т.е. от 0 до 255, нам же нужно «прогонять» значения аналогового сигнала от 255 до 0. Сделать это достаточно просто. На нужно от фиксированного значения 255 отнимать увеличивающиеся показания нашего счётчика. Таким образом мы получим: на первом шаге 255 — 1 = 254, на втором 255 — 2 = 253, на третьем 255 — 3 = 252 и т.д. до 255-го шага — 255 — 255 = 0. Давайте «клонируем» первый блок [повторить и посчитать] и внесём в него маленькое дополнение:
Загрузите программу в Arduino и понаблюдайте за тем, как наш красный светодиод плавно увеличивает, а затем плавно уменьшает свою яркость. Для того, чтобы задать значение сигнала, мы использовали уже знакомый вам блок из раздела [Математические операторы].
Теперь, давайте заставим все светодиоды модуля поочерёдно зажигаться и гаснуть. Всё, что нам надо сделать — это дважды «клонировать» уже имеющуюся пару блоков и изменить значение пина на который мы будем подавать сигнал:
Загрузите программу в Arduino и понаблюдайте за её работой. Если вы всё сделали правильно, то все светодиоды будут плавно разгораться и затухать один за другим.
Но самое интересное в том, что мы можем зажигать светодиоды не по отдельности, а все вместе. При этом цвета будут смешиваться и мы сможем задавать светодиоду тот цвет свечения, который захотим! По такому же принципу работают пиксели в ваших мониторах, смартфонах и телевизорах. Каждый пиксель — это очень маленький RGB-светодиод, цветом которого управляет микроконтроллер, посылая ему три сигнала — для красного, зелёного и синего светодиодов. Такая схема цветопередачи, когда параметры цвета задаются с помощью 3-х основных цветов, называется цветовой схемой RGB. Для того, чтобы получить нужный вам цвет, вы должны задать 3 значения в диапазоне [0 … 255] и подать их на RGB-модуль одновременно. Цветовую палитру, которая получится при смешении базовых цветов вы уже скорее всего видели на уроках изобразительного искусства, она выглядит следующим образом:
Для того, чтобы определить значения сигналов, которые нужно подать на красный, зелёный и синий светодиод, воспользуемся таблицей:
КРАСНЫЕ ТОНА | ЗЕЛЁНЫЕ ТОНА | ||||||
IndianRed | 205 | 92 | 92 | GreenYellow | 173 | 255 | 47 |
LightCoral | 240 | 128 | 128 | Chartreuse | 127 | 255 | 0 |
Salmon | 250 | 128 | 114 | LawnGreen | 124 | 252 | 0 |
DarkSalmon | 233 | 150 | 122 | Lime | 0 | 255 | 0 |
LightSalmon | 255 | 160 | 122 | LimeGreen | 50 | 205 | 50 |
Crimson | 220 | 20 | 60 | PaleGreen | 152 | 251 | 152 |
Red | 255 | 0 | 0 | LightGreen | 144 | 238 | 144 |
FireBrick | 178 | 34 | 34 | MediumSpringGreen | 0 | 250 | 154 |
DarkRed | 139 | 0 | 0 | SpringGreen | 0 | 255 | 127 |
РОЗОВЫЕ ТОНА | MediumSeaGreen | 60 | 179 | 113 | |||
Pink | 255 | 192 | 203 | SeaGreen | 46 | 139 | 87 |
LightPink | 255 | 182 | 193 | ForestGreen | 34 | 139 | 34 |
HotPink | 255 | 105 | 180 | Green | 0 | 128 | 0 |
DeepPink | 255 | 20 | 147 | DarkGreen | 0 | 100 | 0 |
MediumVioletRed | 199 | 21 | 133 | YellowGreen | 154 | 205 | 50 |
PaleVioletRed | 219 | 112 | 147 | OliveDrab | 107 | 142 | 35 |
ОРАНЖЕВЫЕ ТОНА | Olive | 128 | 128 | 0 | |||
LightSalmon | 255 | 160 | 122 | DarkOliveGreen | 85 | 107 | 47 |
Coral | 255 | 127 | 80 | MediumAquamarine | 102 | 205 | 170 |
Tomato | 255 | 99 | 71 | DarkSeaGreen | 32 | 178 | 170 |
OrangeRed | 255 | 69 | 0 | DarkCyan | 0 | 139 | 139 |
DarkOrange | 255 | 140 | 0 | Teal | 0 | 128 | 128 |
Orange | 255 | 165 | 0 | СИНИЕ ТОНА | |||
ЖЁЛТЫЕ ТОНА | Aqua | 0 | 255 | 255 | |||
Gold | 255 | 215 | 0 | Cyan | 0 | 255 | 255 |
Yellow | 255 | 255 | 0 | LightCyan | 224 | 255 | 255 |
LightYellow | 255 | 255 | 224 | PaleTurquoise | 175 | 238 | 238 |
LemonChiffon | 255 | 250 | 205 | Aquamarine | 127 | 255 | 212 |
LightGoldenrodYellow | 250 | 250 | 210 | Turquoise | 64 | 224 | 208 |
PapayaWhip | 255 | 239 | 213 | MediumTurquoise | 72 | 209 | 204 |
Moccasin | 255 | 228 | 181 | DarkTurquoise | 0 | 206 | 209 |
PeachPuff | 255 | 218 | 185 | CadetBlue | 95 | 158 | 160 |
PaleGoldenrod | 238 | 232 | 170 | SteelBlue | 70 | 130 | 180 |
Khaki | 240 | 230 | 140 | LightSteelBlue | 176 | 196 | 222 |
DarkKhaki | 189 | 183 | 107 | PowderBlue | 176 | 224 | 230 |
ФИОЛЕТОВЫЕ ТОНА | LightBlue | 173 | 216 | 230 | |||
Lavender | 230 | 230 | 250 | SkyBlue | 135 | 206 | 250 |
Thistle | 216 | 191 | 216 | LightSkyBlue | 135 | 206 | 250 |
Plum | 221 | 160 | 221 | DeepSkyBlue | 0 | 191 | 255 |
Violet | 238 | 130 | 238 | DodgerBlue | 30 | 144 | 255 |
Orchid | 218 | 112 | 214 | CornflowerBlue | 100 | 149 | 237 |
Fuchsia | 255 | 0 | 255 | MediumSlateBlue | 123 | 104 | 238 |
Magenta | 255 | 0 | 255 | RoyalBlue | 65 | 105 | 225 |
MediumOrchid | 186 | 85 | 211 | Blue | 0 | 0 | 255 |
MediumPurple | 147 | 112 | 219 | MediumBlue | 0 | 0 | 205 |
BlueViolet | 138 | 43 | 226 | DarkBlue | 0 | 0 | 139 |
DarkViolet | 148 | 0 | 211 | Navy | 0 | 0 | 128 |
DarkOrchid | 153 | 50 | 204 | MidnightBlue | 25 | 25 | 112 |
DarkMagenta | 139 | 0 | 139 | СЕРЫЕ ТОНА | |||
Purple | 128 | 0 | 128 | Gainsboro | 220 | 220 | 220 |
Indigo | 75 | 0 | 130 | LightGrey | 211 | 211 | 211 |
SlateBlue | 106 | 90 | 205 | LightGray | 211 | 211 | 211 |
DarkSlateBlue | 72 | 61 | 139 | Silver | 192 | 192 | 192 |
КОРИЧНЕВЫЕ ТОНА | DarkGrey | 169 | 169 | 169 | |||
Cornsilk | 255 | 248 | 220 | DarkGray | 169 | 169 | 169 |
BlanchedAlmond | 255 | 235 | 205 | Grey | 128 | 128 | 128 |
Bisque | 255 | 228 | 196 | Gray | 128 | 128 | 128 |
NavajoWhite | 255 | 222 | 173 | DimGray | 105 | 105 | 105 |
Wheat | 245 | 222 | 179 | DimGrey | 105 | 105 | 105 |
BurlyWood | 222 | 184 | 135 | LightSlateGray | 119 | 136 | 153 |
Tan | 210 | 180 | 140 | LightSlateGrey | 119 | 136 | 153 |
RosyBrown | 188 | 143 | 143 | SlateGray | 112 | 128 | 144 |
SandyBrown | 244 | 164 | 96 | SlateGrey | 112 | 128 | 144 |
SaddleBrown | 139 | 69 | 19 | DarkSlateGray | 47 | 79 | 79 |
Sienna | 160 | 82 | 45 | DarkSlateGrey | 47 | 79 | 79 |
Brown | 165 | 42 | 42 | Black | 0 | 0 | 0 |
Maroon | 128 | 0 | 0 | White | 255 | 255 | 255 |
В первом столбике таблицы расположены названия цветов, а во втором их RGB коды (первая цифра — R, вторая — G, третья — B). Кроме этого, в сети есть масса сервисов, способных преобразовать цвет в его RGB-код. Давайте попробуем зажечь наш светодиод всеми основными цветами радуги, которые будут сменять друг друга. Для этого, нам необходимы коды красного, оранжевого, жёлтого, зелёного, голубого, синего и фиолетового цветов:
Red (красный) | 255 | 0 | 0 |
Orange (оранжевый) | 255 | 165 | 0 |
Yellow (жёлтый) | 255 | 255 | 0 |
Green (зелёный) | 0 | 255 | 0 |
Cyan (голубой) | 0 | 255 | 255 |
Blue (синий) | 0 | 0 | 255 |
Purple (фиолетовый) | 255 | 0 | 255 |
Давайте подадим сигналы на наш RGB-светодиод последовательно для всех цветов. Для задержки смены цветов, зададим паузу:
Разобраться с алгоритмом, приведённым выше, у вас не составит трудностей. Загрузите программу в Arduino и понаблюдайте за её работой.
Обратите внимание: разные светодиоды немного по разному передают тот или иной цвет. В случае дешёвых светодиодов, оттенки могут быть слаборазличимы. Тем не менее, теперь вы понимаете принцип работы таких светодиодов. Напоследок, давайте попробуем реализовать плавное перетекание одного цвета в другой. Например, красного в фиолетовый и обратно. Для этого нам нужно подавать на красный светодиод постоянный сигнал в 255, а на синий — плавный сигнал от 0 до 255, а затем от 255 до 0. Реализовано это может быть так:
Паузу между сигналами мы выставили в 8 мс, что позволяет плавно изменять цвет от красного к фиолетовому в течении 2 секунд, и ещё столько же времени — обратно, от фиолетового к красному.
ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОГО ВЫПОЛНЕНИЯ
Задание 1:
Создайте алгоритм, который позволит RGB-светодиоду плавно менять цвет от красного к жёлтому, от жёлтого к белому и от белого обратно к красному. Обратите внимание, для того, чтобы получить белый цвет, необходимо смешать все цвета в равных пропорциях, т.е. полностью зажечь все светодиоды (RGB 255, 255, 255).
Задание 2*:
Создайте алгоритм, который заставит RGB-светодиод плавно менять цвета, проходя через все основные цвета радуги, т.е. красный — оранжевый — жёлтый — зелёный — голубой — синий — фиолетовый.
Для того, чтобы получить сертификат, подтверждающий успешное прохождение курса — выполняйте тесты в конце занятий. | Пройти проверочный тест |