Курс Arduino Starter. Урок №4. Полноцветный светодиод

Автор: | 23.05.2019

Обзор.

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

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

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

Мы смешиваем цвета, примерно так же, как фиксируют аудио или смешивают краски на палитре — регулируя яркость каждого из трех светодиодов. Сложный способ сделать это — использовать разные значения резисторов (или переменные резисторы), вспомните как мы меняли яркость светодиода с помощью разных резисторов на предыдущем уроке. Это отнимает слишком много времени! К счастью для нас, Arduino имеет функцию analogWrite,вы можете использовать выводы отмеченные ~ для вывода переменного количество энергии на соответствующие светодиоды.

Компоненты.

Чтобы создать проект, описанный в этом уроке, вам понадобятся следующие детали.

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

270 Ω резистор (красные, фиолетовые, коричневые полоски).

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

Макетная плата.

Arduino Uno R3.

Перемычки.

Схема.

Полноцветный светодиод или по другому RGB-светодиод — Red, Green, Blue. Смешивая эти три цвета в разной пропорции можно отобразить любой цвет. Конструктивно, RGB-светодиод состоит из трех кристаллов под одним корпусом и имеет 4 вывода: один общий и три цветовых вывода.

RGB-светодиоды бывают:

  • С общим анодом (CA)
  • С общим катодом (CC)
  • Без общего анода или катода (6 выводов). Как правило в SMD-исполнении.

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

Мы используем светодиоды с общим катодом (отрицательным электродом). Обычно общий вывод самый длинный. Он будет подключен к земле.

Каждый светодиод внутри линзы требует собственный 270Ω резистор, чтобы сократить объем тока, протекающего через него. Три положительных вывода светодиода (один красный, один зеленый и один синий) подключаются к выходным разъемам Arduino, через резисторы.

Если бы мы использовали светодиод с общим анодом  вместо общего катода, общий вывод нужно было бы подсоединить к разъему +5В вместо земли.

Цвета.

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

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

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

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

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

Arduino код.

Код представленный ниже будет перебирать цвета: красный, зеленый, синий, желтый, фиолетовый, голубой. Эти цвета одни из стандартных цветов в Интернет.

int redPin = 11;

int greenPin = 10;

int bluePin = 9;

//uncomment this line if using a Common Anode LED

//#define COMMON_ANODE

void setup()

{

pinMode(redPin, OUTPUT);

pinMode(greenPin, OUTPUT);

 pinMode(bluePin, OUTPUT);

}

void loop()

{

setColor(255, 0, 0);  // red

delay(1000);

setColor(0, 255, 0);  // green

delay(1000);

setColor(0, 0, 255);  // blue

delay(1000);

setColor(255, 255, 0);  // yellow

delay(1000);

setColor(80, 0, 80);  // purple

delay(1000);

setColor(0, 255, 255);  // aqua

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);

}

Попробуйте загрузить и запустить код и после мы разберем его в деталях..

Код начинается с указания, какие выходы будут использоваться для каждого из цветов:

Следующий шаг  записать функцию настройки (Setup). Как мы узнали в предыдущих уроках, функция настройки запускается только один раз после перезагрузки платы Arduino. В данном случае, все что она должна сделать — это определить три контакта которые мы используем в качестве выходов.

Прежде чем мы взглянем на циклическую функцию, давайте рассмотрим последнюю функцию в коде.

Эта функция принимает три аргумента, по одному для яркости красного, зеленого и синего светодиодов. В каждом случае число будет в диапазоне от 0 до 255, где 0 означает выключенное состояние, а 255 означает максимальную яркость. Затем вызывается функция «analogWrite», чтобы установить яркость каждого светодиода.

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

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

Если вы используете светодиод с общим анодом, то Вам необходимо изменить записи значений так, что параметр цвета вычитается из 255, а так же раскомментируйте строку #define COMMON_ANODE в коде!

Использование интернет цветов.

Если вы знакомы веб — программированием или работали в любом графическом редакторе (например, Photoshop), вы, вероятно, помните, что цвета часто представляются как шестизначный номер. Например, красный цвет имеет номер #FF0000.

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

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

Вы можете найти номера, связанные с определенным цветом с помощью таблиц, например как эта:

Давайте окрасим наш светодиод в цвет “Индиго” (#4B0082).

Красной, зеленой и синей частями Индиго являются (в шестнадцатиричной системе исчисления) 4B, 00 и 82 соответственно. Мы можете задать этот цвет с помощью функции ‘setColor’:

Мы воспользовались шестнадцатеричными числами для трех частей цвета, поставив ‘0х’ перед ними.

Попробуйте добавить несколько собственных цветов к циклической функции. Не забудьте добавить задержку после каждой из них.

Теория (ШИМ).

Широтно-импульсная модуляция (или ШИМ) — это метод управления мощностью. Мы используем его на данном занятии, чтобы контролировать яркость каждого из светодиодов.

На рисунке ниже показан сигнал от одного из ШИМ-выводов на Arduino.

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

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

Однако если выход 5В 90% времени будет получать нагрузку 90% от мощности, подаваемой к нему, мы не сможем увидеть включение и выключение светодиодных индикаторов, скорость изменения этих параметров слишком высокая, для нас это будет выглядеть как изменение яркости.