Светодиоды RGB - это интересный и простой способ добавить цвета в ваши проекты.
RGB-светодиод содержит 3 светодиода (красный-R, зеленый-G, синий-B), которые
подключаются так же как обычные светодиоды.
RGB-светодиод бывают в основном 2 видов: с общим анодом или с общим катодом.
Общий анод использует +5 В на общем выводе, в то время как общий катод
подключается к -5В (GND). Как и для любого светодиода, нам нужно подключить
последовательно с каждым токоограничивающий резистор (всего нужно 3 резистора).
В нашем скетче мы начнем с красного цвета, затем постепенно перейдем к зеленому,
затем к синиму и, наконец, вернемся к красному цвету. Делая это, мы будем
создавать цикл и проходить через множество цветов.
Необходимые компоненты:
На первый взгляд, 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);Попробуйте добавить несколько собственных цветов к скетчу и посмотрите, как будет выглядеть светодиод.