Заставляем RGB-светодиод с Arduino переливаться всеми цветами радуги
Это шестой урок курса по изучению Ардуино и здесь мы добавим новый элемент из наших наборов. Это RGB-светодиод, входящий в состав наборов «Базовый» и «Изучаем Arduino» серии «Дерзай».
RGB расшифровывается как аббревиатура Red, Green, Blue, при помощи этих цветов можно получить любой цвет путем смешения. Светодиод RGB содержит 3 небольших кристалла R, G, B, с помощью которых мы сможем синтезировать любой цвет или оттенок. В этом уроке мы подключим RGB-светодиод к плате Arduino и заставим его переливаться всеми цветами радуги.
Для данного проекта Вам понадобятся детали, которые имеются в наборах «Базовый» и «Изучаем Arduino» :
- Arduino Uno;
- Кабель USB;
- Плата прототипирования;
- Провода «папа-папа» — 7 шт;
- Резисторы 220 Ом – 3 шт;
- RGB-светодиод – 1 шт;
- Потенциометр.
Собираем схему, показанную на рисунке 1.
Рисунок 1. Схема соединений
Теперь приступим к написанию скетча.
RGB-светодиод должен переливаться всеми цветами радуги от красного до фиолетового, затем переходим к красному и так по кругу. Скорость перехода цветов регулируем потенциометром. В таблице 1 приведены данные значений R, G, B для 7 основных цветов радуги.
Таблица 1. Данные значений R, G, B для 7 основных цветов радуги
| Цвет | R | G | B |
| красный | 255 | 0 | 0 |
| оранжевый | 255 | 125 | 0 |
| желтый | 255 | 255 | 0 |
| зеленый | 0 | 255 | 0 |
| голубой | 0 | 255 | 255 |
| синий | 0 | 0 | 255 |
| фиолетовый | 255 | 0 | 255 |
Для смешения цветов необходимо с выводов Arduino на R, G, B входы светодиода подавать полный спектр напряжений. Но Arduino не может на цифровой вывод выдавать произвольное напряжение. Выдается либо +5В (HIGH), либо 0 В (LOW). Для симуляции неполного напряжения используется ШИМ (Широтно-Импульсная Модуляция, или PWM).
Я надеюсь, Вы уже изучили главу 2.6 книги Джереми Блюма «Изучаем Arduino: инструменты и методы технического волшебства», где подробно рассказывается о механизме широтно-импульсной модуляции.
Алгоритм выполнения программы:
- Увеличиваем значение зеленой составляющей G, пока не достигнем значения оранжевого (255,125,0),
- Увеличиваем значение зеленой составляющей G, пока не достигнем желтого цвета (255,255,0).
- Уменьшаем значение красной составляющей R до значения зеленого цвета (0,255,0).
- Начальную точка — красный цвет (255,0,0).
- Увеличиваем значение синей составляющей B до значения голубого цвета (0,255,255).
- Уменьшаем значение зеленой составляющей G до значения синего цвета (0,0,255).
- Постепенно увеличим значение красной составляющей R до значения фиолетового цвета (255,0,255).
- Уменьшаем значение синей составляющей B до значения красного цвета (255,0,0).
Переходим к шагу 1.
После каждого шага делаем паузу для фиксации показа цвета,
delay(VIEW_PAUSE);
проверяем значение потенциометра и изменяем значение скорости изменения цвета.
void setpause()
{
pause=map(analogRead(POT),0,1024,MIN_PAUSE,MAX_PAUSE);
Serial.print("pause=");Serial.println(pause);
}
Создадим в Arduino IDE новый скетч, занесем в него код из листинга 1 и загрузим скетч на на плату Arduino. Напоминаем, что в настройках Arduino IDE необходимо выбрать тип платы (Arduino UNO) и порт подключения платы.
Листинг 1
const int RED=11; // вывод R RGB-светодиода
const int GREEN=10; // вывод G RGB-светодиода
const int BLUE=9; // вывод B RGB-светодиода
int red; // переменная для хранения R-составляющей цвета
int green; // переменная для хранения G-составляющей цвета
int blue; // переменная для хранения B-составляющей цвета
const int POT=A0; // вывод подключения потенциометра
const int MIN_PAUSE=10; // минимальная задержка смены цвета, мс
const int MAX_PAUSE=100; // максимальная задержка смены цвета, мс
int pause; // переменная для хранения текущей задержки
const int VIEW_PAUSE=2000; // время фиксации основного цвета, мс
void setup()
{
Serial.begin(9600);
}
void loop()
{
// от красного к желтому
Serial.println("red - yellow");
red=255;green=0;blue=0;
for(green=0;green<=255;green++) setRGB(red,green,blue); setpause(); delay(VIEW_PAUSE); // от желтому к зеленому Serial.println("yellow - green"); red=255;green=255;blue=0; for(red=255;red>=0;red--)
setRGB(red,green,blue);
setpause();
delay(VIEW_PAUSE);
// от зеленого к голубому
Serial.println("green - blue");
red=0;green=255;blue=0;
for(blue=0;blue<=255;blue++) setRGB(red,green,blue); setpause(); delay(VIEW_PAUSE); // от голубого к синему Serial.println("blue - blue"); red=0;green=255;blue=255; for(green=255;green>=0;green--)
setRGB(red,green,blue);
setpause();
delay(VIEW_PAUSE);
// от синего к фиолетовому
Serial.println("blue - purple");
red=0;green=0;blue=255;
for(red=0;red<=255;red++) setRGB(red,green,blue); setpause(); delay(VIEW_PAUSE); // от фиолетового к красному Serial.println("purple - red"); red=255;green=0;blue=255; for(blue=0;blue>=0;blue--)
setRGB(red,green,blue);
setpause();
delay(VIEW_PAUSE);
}
// функция установки цвета RGB-светодиода
void setRGB(int r,int g,int b)
{
analogWrite(RED,r);
analogWrite(GREEN,g);
analogWrite(BLUE,b);
delay(pause);
}
// функция установки текущей задержки
void setpause()
{
pause=map(analogRead(POT),0,1024,MIN_PAUSE,MAX_PAUSE);
Serial.print("pause=");Serial.println(pause);
}
После загрузки скетча наблюдаем изменение цвета RGB-светодиода цветами радуги, потенциометром меняем скорость смены цвета (см. рисунок 2,3).

Рисунок 2,3. RGB-светодиод – всеми цветами радуги

Книга Джереми Блума Изучаем Arduino: инструменты и методы технического волшебства.
25 крутых проектов с Arduino
Мобильные роботы на базе Arduino книга М. Момота
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.