Информационный портал MSEVM






Главная > Arduino > Учебник для MEGA2560 > Урок 04. RGB LED (RGB-светодиод).


Светодиоды RGB - это интересный и простой способ добавить цвета в ваши проекты. RGB-светодиод содержит 3 светодиода (красный-R, зеленый-G, синий-B), которые подключаются так же как обычные светодиоды.

RGB-светодиод бывают в основном 2 видов: с общим анодом или с общим катодом. Общий анод использует +5 В на общем выводе, в то время как общий катод подключается к -5В (GND). Как и для любого светодиода, нам нужно подключить последовательно с каждым токоограничивающий резистор (всего нужно 3 резистора).

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

Необходимые компоненты:

  • Lafvin Mega2560 R3 - 1шт.
  • Макетная плата 830 - 1шт.
  • М-М провода - 4шт.
  • RGB LED - 1шт.
  • резисторы 220 Ом - 3шт.


Описание компонентов

RGB:

На первый взгляд, RGB (красный, зеленый и синий) светодиоды выглядят как обычные светодиоды. Тем не менее, внутри обычной светодиодной упаковки, на самом деле есть три светодиода, один красный, один зеленый и да, один синий. Управляя яркостью каждого, светодиоды можно смешивать практически в любой цвет. Мы смешиваем цвета так же, как краски на палитре - настраивая яркость каждого из трех светодиодов. Конечно, это можно сделать, используя резисторы разного номинала (или переменные резисторы), как мы это делали в уроке 2, но это много работы! К счастью для нас, плата MEGA2560_R3 имеет функцию аналоговой записи что вы можете использовать с выводами, помеченными ~, чтобы вывести переменное напряжение на соответствующие светодиоды. Светодиод RGB имеет четыре провода. Есть один вывод, который ведет к аноду каждого отдельного светодиода и один провод, который подключен к катодам всех трех светодиодов.



Здесь на фотографиях вы можете увидеть 4 светодиода. Каждый отдельный пин для зеленого, синиго или красного цвета называется анодом. Вы всегда будете подключать <+> к нему. Катод идет к <-> (земля). Если вы подключите его иначе, светодиод не будет гореть. Общий отрицательный контакт RGB-светодиода - это второй вывод от плоскоой стороны светодиода. Это также самый длинный из четырех выводов, который будет подключен к земле. Каждый светодиод внутри RGB-светодиода требует собственного резистора на 220 Ом для предотвращения протекания через него слишком большого. Три положительных провода светодиодов (один красный, один зеленый и один синий) подключены к выходным контактам MEGA2560 с помощью этих резисторов.


ЦВЕТ:

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


Если мы установим одинаковую яркость всех трех светодиодов, то общий цвет будет белым. Если мы выключим синий светодиод, так что только красный и зеленый cветодиоды будут светить с одинаковой яркостью, тогда свет будет желтым. Мы можем контролировать яркость каждого из красных, зеленых и синих частей RGB-светодиода отдельно, что позволяет смешивать любые цвета, которые нам нравятся. Черный не столько цвет, сколько отсутствие света. Поэтому ближе всего мы можем прийти к черному - отключить все три цвета.


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

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


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


Принципиальная схема:



Монтажная схема:



Код:

После подключения, пожалуйста, откройте программу из папки с кодом - Светодиод RGB урока 4 и нажмите ЗАГРУЗИТЬ, чтобы загрузить программу. См. Урок 2 для получения подробной информации о процессе загрузки, если есть какие-либо ошибки.

Наш код будет использовать циклы FOR для переключения между цветами. Первый цикл FOR перейдет от КРАСНОГО к ЗЕЛЕНОМУ. Второй цикл FOR перейдет от ЗЕЛЕНОГО к СИНЕМУ. Последний цикл FOR перейдет от синего к красному. Посмотрите на скетч, рассмотрим его подробнее ...

// Define Pins
#define BLUE 3
#define GREEN 5
#define RED 6

void setup()
{
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
}

// define variables
int redValue;
int greenValue;
int blueValue;

// main loop
void loop()
{
#define delayTime 10 // fading time between colors

redValue = 255; // choose a value between 1 and 255 to change the color.
greenValue = 0;
blueValue = 0;

// this is unnecessary as we've either turned on RED in SETUP
// or in the previous loop ... regardless, this turns RED off
// analogWrite(RED, 0);
// delay(1000);

for(int i = 0; i < 255; i += 1) // fades out red bring green full when i=255
{
redValue -= 1;
greenValue += 1;
// The following was reversed, counting in the wrong directions
// analogWrite(RED, 255 - redValue);
// analogWrite(GREEN, 255 - greenValue);
analogWrite(RED, redValue);
analogWrite(GREEN, greenValue);
delay(delayTime);
}

redValue = 0;
greenValue = 255;
blueValue = 0;

for(int i = 0; i < 255; i += 1) // fades out green bring blue full when i=255
{
greenValue -= 1;
blueValue += 1;
// The following was reversed, counting in the wrong directions
// analogWrite(GREEN, 255 - greenValue);
// analogWrite(BLUE, 255 - blueValue);
analogWrite(GREEN, greenValue);
analogWrite(BLUE, blueValue);
delay(delayTime);
}

redValue = 0;
greenValue = 0;
blueValue = 255;

for(int i = 0; i < 255; i += 1) // fades out blue bring red full when i=255
{
// The following code has been rearranged to match the other two similar sections
blueValue -= 1;
redValue += 1;
// The following was reversed, counting in the wrong directions
// analogWrite(BLUE, 255 - blueValue);
// analogWrite(RED, 255 - redValue);
analogWrite(BLUE, blueValue);
analogWrite(RED, redValue);
delay(delayTime);
}
}



Скетч начинается с указания пинов, которые будут использоваться для каждого из цветов:
// Define Pins
#define BLUE 3
#define GREEN 5 
#define RED 6

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

void setup()
{
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT); pinMode(BLUE, OUTPUT);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
}
Прежде чем мы рассмотрим функцию 'loop', давайте посмотрим на последнюю функцию в скетче. Определение переменных:
redValue = 255; // choose a value between 1 and 255 to change the color. 
greenValue = 0;
blueValue = 0;

Эта функция принимает три аргумента, для яркости красного, зеленого и синие светодиоды. В каждом случае число будет в диапазоне от 0 до 255, где 0 означает выключенное состояние, а 255 означает максимальную яркость. Затем функция вызывает "analogWrite" для установки яркость каждого светодиода. Если вы посмотрите на функцию 'loop', вы увидите, что мы устанавливаем количество красного, зеленого и синего света, которое мы хотим отобразить, а затем делаем паузу на секунду раньше переходя к следующему цвету.

#define delayTime 10 // fading time between colors
delay(delayTime);
Попробуйте добавить несколько собственных цветов к скетчу и посмотрите, как будет выглядеть светодиод.

Пример:





Тема форума: http://msevm.com/forum/index.php?topic=9893





e-mail рассылки
Радиолюбитель
Подписаться письмом

















afb44aa5




Яндекс цитирования Rambler's Top100