Светодиоды 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
|