Содержание статьи
Содержание

Главная / Arduino для начинающих / RGB светодиод и Arduino

RGB светодиод и Arduino

В этой статье рассмотрены основы использования RGB (Red Green Blue (красный, зеленый, синий)) светодиода с Arduino.

Мы используем функцию analogWrite для управления цветом RGB светодиода.

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

То есть, мы будем регулировать яркость каждого светодиода и получать нужный цвет на выходе, как будто это палитра художника или словно вы настраиваете частоты на своем плеере. Для этого можно использовать переменные резисторы. Но в результате схема будет достаточно сложной. К счастью, Arduino предлагает нам функцию analogWrite. Если задействовать на плате контакты, отмеченные символом «~», мы можем регулировать напряжение, которое подается на соответствующий светодиод.

Необходимые узлы

Для того, чтобы реализовать наш небольшой проект, нам понадобятся:

1 RGB светодиод 10 мм

RGB светодиод

3 резистора на 270 Ω (красная, фиолетовая, коричневая полоски). Вы можете использовать резистор с сопротивлением до 1 кОм, но не забывайте, что с повышением сопротивления, светодиод начинает светить не так ярко.

Резистор 220 Ом

1 Breadboard

Беспаечная монтажная плата

1 плата Arduino Uno R3 или ее аналог

Arduino Uno

Коннекторы

Провода

Схема подключения

У RGB светодиода четыре ноги. По одному позитивному контакты на каждый светодиод и один общий контакт, к которому подключаются все отрицательные полюса светодиодов (аноды).

Схема RGB светодиода

Общий анод на RGB светодиоде – это второй по счету, самый длинный контакт. Этот контакт мы подключим к земле (gnd).

Для каждого светодиода нужен собственный резистор на 270 Ом, чтобы предотвратить возможность протекания чересчур больших токов. Эти резисторы устанавливаются в цепь между катодами (красный, зеленый и синий) и управляющими пинами на нашем Arduino.

Если вы используете RGB светодиодиод с общим анодом, вместо общего катода, самый длинный контакт на светодиоде подключается к пину +5 V вместо пина gnd.

Схема подключения RGB светодиода к Arduino

Схема подключения RGB светодиода к Arduino - фото

Цвета

Немного теории: мы можем смешивать три основных цвета и видеть новые оттенки, так как в наших глазах три типа рецепторов (для красного, зеленого и синего цветов). В результате ваш глаз и мозг обрабатывает информацию о насыщенности этих трех цветов и преобразовывает их в другие оттенки спектра.

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

Палитра RGB цветов

Если мы настроим одинаковую яркость всех светодиодов, мы он будет светиться белым. Если мы отключим синий светодиод и будут гореть с одинаковой яркостью только красный и зеленый, мы получим желтый свет.

Мы можем управлять яркостью каждого светодиода отдельно, смешивая цвета как нам заблагорассудится.

Так как черный цвет не что иное, как отсутствие света, получить его не получится. Ближайший оттенок черного – это полностью выключенные светодиоды.

Скетч Arduino

Скетч, который приведен ниже, будет перебирать цвета в цикле: красный, зеленый, синий и аквамарин. В общем, стандартный набор цветов.

/*

Adafruit Arduino - RGB светодиод подробная инструкция на сайте:

arduino-diy.com

*/

int redPin = 11;

int greenPin = 10;

int bluePin = 9;

//уберите тег комментария со строки ниже, если вы используете светодиод с общим анодом

//#define COMMON_ANODE

void setup()

{

pinMode(redPin, OUTPUT);

pinMode(greenPin, OUTPUT);

pinMode(bluePin, OUTPUT);

}

void loop()

{

setColor(255, 0, 0); // красный

delay(1000);

setColor(0, 255, 0); // зеленый

delay(1000);

setColor(0, 0, 255); // синий

delay(1000);

setColor(255, 255, 0); // желтый

delay(1000);

setColor(80, 0, 80); // фиолетовый

delay(1000);

setColor(0, 255, 255); // аквамарин

delay(1000);

}

void setColor(int red, int green, int blue)

{

#ifdef COMMON_ANODE

red = 255 - red;

green = 255 - green;

blue = 255 - blue;

#endif

analogWrite(redPin, red);

analogWrite(greenPin, green);

analogWrite(bluePin, blue);

}

Попробуйте запустить этот скетч. Особенности скетча раскрыты ниже…

Скетч начинается с указания пинов, которые используются для каждого отдельного цвета:

int redPin = 11;

int greenPin = 10;

int bluePin = 9;

Следующий шаг – функция 'setup'. Эта функция отрабатывает один раз после запуска Arduino. В нашей программе в пределах этой функции мы инициализируем три пина, которые мы будем использовать в качестве выходов.

void setup()

{

pinMode(redPin, OUTPUT);

pinMode(greenPin, OUTPUT);

pinMode(bluePin, OUTPUT);

}

Перед тем как рассмотреть функцию 'loop', давайте рассмотрим последнюю функцию в скетче.

void setColor(int red, int green, int blue)

{

analogWrite(redPin, red);

analogWrite(greenPin, green);

analogWrite(bluePin, blue);

}

Эта функция принимает три аргумента. Один отвечает за яркость красного, зеленого и синего светодиодов. В каждом из них значение варьируется в диапазоне от 0 до 255, где 0 означает, что он полностью выключен, а 255 – максимальная яркость. После этого функция вызывает 'analogWrite', чтобы настроить яркость каждого светодиода.

Если вы взглянете на функцию 'loop', вы увидите, что в ее пределах мы настраиваем яркость красного, зеленого и синего оттенков, которые мы хотим отобразить и потом делаем паузу на 1 секунду, прежде чем перейти к другому цвету.

void loop()

{

setColor(255, 0, 0); // красный

delay(1000);

setColor(0, 255, 0); // зеленый

delay(1000);

setColor(0, 0, 255); // синий

delay(1000);

setColor(255, 255, 0);// желтый

delay(1000);

setColor(80, 0, 80); // фиолетовый

delay(1000);

setColor(0, 255, 255);// аквамарин

delay(1000);

}

Попробуйте добавить несколько собственных цветов в скетч. Поэкспериментируйте с RGB светодиодом и вашим Arduino.

Если вы используете RGB светодиод с общим анодом, вам надо поменять значения, которые вы подаете на противоположные. То есть, 255 должен соответствовать 0. Для этого раскомментируйте #define COMMON_ANODE в приведенном выше скетче!

Расшифровываем цвета

Using Internet Colors

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

Шесть цифр номера соответствуют трем парам номеров; первая пара – красная составляющая цвета, следующие две цифры – зеленая составляющая, а последняя пара – синяя составляющая. То есть, красному цвету соответствует выражение #FF0000, так как это будет максимальная яркость красного светодиода (FF - это 255 в шестнадцатеричной системе), а красная и синяя компоненты равны 0.

Попробуйте зажечь светодиод, используя, например, оттенок индиго: #4B0082.

Красная, зеленая и синяя компоненты цвета индиго – это 4B, 00 и 82 соответственно. Мы можем использовать их в пределах функции 'setColor' с помощью следующей строки кода:

setColor(0x4B, 0x0, 0x82); // индиго

Для трех компонент мы используем запись, в которой перед каждой из них ставится символ '0x' в начале.

Когда будете играться с разными оттенками RGB светодиода, не забывайте после использования каждого из них устанавливать задержку ‘delay’.

ШИМ и Arduino

Широтно импульсная модуляция (ШИМ (PWM на английском)) – это один из методов управления питанием. В нашем случае ШИМ используется для управления яркостью каждого отдельного светодиода.

На рисунке ниже схематично изображен сигнал с одного из ШИМ пинов Arduino.

ШИМ модуляция

Каждую 1/500 секунды ШИМ выход генерирует импульс. Длина этого импульса контролируется функцией 'analogWrite'. То есть, 'analogWrite(0)' не будет генерировать никакого импульса, а 'analogWrite(255)' сгенерирует сигнал, который будет длится до самого начала следующего. То есть, будет создаваться впечатление, что подается один непрерывный импульс.

Когда в пределах функции analogWrite мы указываем значение в диапазоне от 0 до 255, мы генерируем импульс определенной длительности. Если длина импульса составляет 5%, мы подадим на указанный выход Arduino 5% от максимально доступного питания и создается впечатление, что светодиод горит не на максимальную яркость.

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!