Переключение цветов rgb светодиода. Управление RGB-светодиодом с помощью Arduino. Модули управления Ардуино

: красный, зеленый и синий. Одновременное управляя яркостью трех светодиодов каждого из этих цветов можно создать свет практически любого цвета. Светодиоды, позволяющие менять цвет излучаемого света, такие как те, которые используются в нашем заключительном уроке, устроены подобным образом, но в их конструкции три светодиода расположены вместе в одном очень маленьком корпусе. Такой составной тройной светодиод называется RGB LED.

Давайте сделаем наш собственный светодиод RGB из трех отдельных 5-миллиметровых светодиодов. Эти три светодиода имеют прозрачные неокрашенные линзы, поэтому нам нужно светодиоды с прозрачными, бесцветными линзами могут быть любого цвета! Если вы используете другой комплект, просто найдите один красный, один зеленый и один синий светодиод (с бесцветной или окрашенной линзой).

Отключите USB-кабель и замените красный светодиод на один из светодиодов с прозрачной линзой, затем снова подключите USB-кабель.


Какого цвета светодиод? Если вы обнаружите красный с первой попытки, отложите его и повторите процесс, чтобы определить цвет двух других светодиодов.

Подключите два других светодиода с последовательно включенными резисторами на 1K к контактам 10 и 11, как показано на схеме. Загрузите и откройте код из модуля Tinkercad Circuits или скопируйте его и вставьте в новый пустой эскиз Arduino. Загрузите его в свою плату Arduino Uno и посмотрите, можете ли вы сопоставить строки кода с событиями, которые вы видите на светодиодах, как это было сделано нами ранее.

Незнакомой частью этого кода является функция setColor () ; . Это пользовательская функция, определенная в коде после функции void loop() .

void setColor(int red, int green, int blue)
{
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
}

Определение функции включает в себя объявление имени и типа аргументов, которые вы можете использовать в качестве настраиваемых параметров. Эти параметры вы можете изменить каждый раз при выполнении кода. В этой простой функции три целых значения записываются в три светодиодных вывода, используя уже знакомую нам функцию
analogWrite () ; .
setColor(255, 255, 0); // yellow

Каждый раз, когда в основном цикле вызывается эта функция, программа выполняет код в функции перед тем, как продолжить выполнение основного цикла. В этом случае аргументы используются в качестве кода уровня яркости каждого из светодиодов. Диапазон для установки яркости составляет 0-255, так как для управления каждым цветом используется один байт, что позволяет использовать 256 отдельных уровней яркости.

Теперь загрузите и откройте код из этого более сложного проекта RGB или скопируйте и вставьте код в новый пустой эскиз Arduino. Прочтите комментарии в коде, чтобы больше узнать о том, как работает эта программа. Код делает некоторые математические вычисления для преобразования диапазона 0-100 в нужный диапазон, который требуется светодиодам (0-255). Это удобно, так как вы можете думать о яркости в процентах вместо диапазона 0-255.

Для хранения информации о цвете, код использует набор переменных, называемый

  • 3 резистора по 220 Ом (вот отличный набор резисторов самых распространённых номиналов);
  • соединительные провода (рекомендую вот такой набор);
  • макетная плата (breadboard);
  • персональный компьютер со средой разработки Arduino IDE.
  • 1 Отличие RGB светодиодов с общим анодом и с общим катодом

    RGB светодиоды бывают двух типов: с общим анодом («плюсом») и общим катодом («минусом») . На рисунке приведены принципиальные схемы эти двух типов светодиодов. Длинная ножка светодиода - это всегда общий вывод питания. Отдельно расположен вывод красного светодиода (R ), зелёный (G ) и синий (B ) располагаются по другую сторону от общего вывода, как показано на рисунке. В данной статье мы рассмотрим подключение RGB светодиода как с общим анодом, так и с общим катодом.

    2 Подключение RGB светодиода с общим анодом к Arduino

    Схема подключения RGB светодиода с общим анодом показана на рисунке. Анод подключаем к "+5 В" на плате Arduino, три другие вывода - к произвольным цифровым пинам.


    Обратите внимание, что мы подключаем каждый из светодиодов через свой резистор, а не используем один общий. Желательно делать именно так, потому что каждый из светодиодов имеет свой КПД. И если подключить их все через один резистор, светодиоды будут светиться с разной яркостью.

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

    3 Управление RGB светодиодами с помощью Arduino

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

    // задаём номера выводов: const int pinR = 12; const int pinG = 10; const int pinB = 9; void setup() { // задаём назначение выводов: pinMode(pinR, OUTPUT); pinMode(pinG, OUTPUT); pinMode(pinB, OUTPUT); } void loop() { digitalWrite(pinR, LOW); //зажигаем канал Red delay(100); digitalWrite(pinR, HIGH); //выключаем Red delay(200); digitalWrite(pinG, LOW); //зажигаем канал Green delay(100); digitalWrite(pinG, HIGH); //выключаем Green delay(200); digitalWrite(pinB, LOW); //зажигаем канал Blue delay(100); digitalWrite(pinB, HIGH); //выключаем Blue delay(200); }

    4 Собрать схему на макетной плате

    Посмотрим в действии на мигание RGB светодиодом. Светодиод по очереди зажигается красным, зелёным и синим цветами. Каждый цвет горит 0,1 секунду, а затем гаснет на 0,2 секунды, и включается следующий. Можно зажигать каждый канал отдельно, можно все одновременно, тогда цвет свечения будет меняться.


    RGB светодиод подключён к Arduino. Схема собрана на макетной плате

    5 к Arduino

    Если вы используете RGB светодиод с общим катодом , то подключите длинный вывод светодиода к GND платы Arduino, а каналы R, G и B - к цифровым портам Arduino. При этом нужно помнить, что светодиоды загораются при подаче на каналы R, G, B высокого уровня (HIGH), в отличие от светодиода с общим анодом.


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

    Если не менять вышеприведённый скетч, то каждый цвет светодиода в этом случае будет гореть 0,2 секунды, а пауза между ними составит 0,1 секунду.

    Если вы хотите управлять яркостью светодиода, то подключайте RGB светодиод к цифровым выводам Arduino, которые имеют функцию ШИМ (PWM). Такие выводы на плате Arduino обычно помечены знаком тильда (волнистая линия), звёздочкой или обведены кружочками.

    Этот несложный Arduino проект предназначен для управления с помощью PWM (широтно-импульсной модуляции). Она может изменить уровень каждого цвета независимо путем изменения скважности ШИМ. Таким образом можно создать любой цвет путем смешивания разных цветов в процентах. Вращение энкодера на плате позволяет пользователю выбрать нужный канал и изменить его яркость. Транзисторы с малым коммутационным сопротивлением, создают очень низкое тепловыделение даже с использованием большого количества светодиодов. Например, IRF540 транзистор имеет вполне низкое проходное RDS-сопротивление - около 70 мОм.

    Схема контроллера лент

    RGB LED - очень распространенный вид светодиодных лент, который включает в себя красный, зеленый и синий светодиодный чип в одном корпусе. Хотя они находятся в одном корпусе, каждый кристалл можно контролировать независимо. Благодаря этой функции, мы можем получить огромное количество различных цветов с помощью RGB светодиодов и конечно получившийся цвет может быть динамически изменен с помощью регулятора.

    Основной контроллер выполнен с применением Arduino Uno. Он считывает входные данные от энкодера и согласно этой информации, происходит переключение транзисторов. Транзисторы управляются выводами 9, 10 и 11, которые имеют внутренние функции ШИМ. Направление сигналов энкодера A и B читаются с помощью элементов 2 и 3, которые подключены к модулю. Кнопка энкодера используется для выбора канала и подключена к выводу 1, что устанавливают в качестве входных данных.

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

    ШИМ

    Гениально определение ШИМ сформулировано в Википедии , поэтому я просто скопипащу его оттуда: "ШИМ - приближение желаемого сигнала (многоуровневого или непрерывного) к действительным бинарным сигналам (с двумя уровнями - вкл / выкл ), так, что, в среднем, за некоторый отрезок времени, их значения равны. <...> ШИМ есть импульсный сигнал постоянной частоты и переменной скважности, то есть отношения периода следования импульса к его длительности. С помощью задания скважности (длительности импульсов) можно менять среднее напряжение на выходе ШИМ . "


    Теперь разберемся, что это значит. Пусть есть обычный такой прямоугольный сигнал:




    Он имеет фиксированную частоту и скважность 50%. Это означает, что половину периода напряжение максимально, а другую половину оно равно нулю. Проинтегрировав этот сигнал за период, мы увидим, что его энергия равна половине максимальной. Это будет эквивалентно тому, как если бы мы все время подавали половину напряжения.


    Если у нас максимальное напряжение равно 5 В, то напряжение, получаемое на выходе ШИМ равно скважность умножить на 5 В (и делить на 100% чтобы формал-nazi не привязывались):


    Arduino позволяет записать на ШИМ-выход значение от 0 до 255, а это значит, что мы можем получить напряжение с дискретностью примерно 20 мВ.


    Трехцветный светодиод

    Вот он, четырехногий красавец:


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

    Если подать на длинную ногу +5В, а на все остальные 0В, то получится белый свет (умоляю, предохраняйтесь - ставьте ограничивающие резисторы!). Насколько он белый, можно судить по следующему видео:


    Но получать белый цвет на нем как раз-таки неинтересно. Посмотрим, как заставить его переливаться разными цветами.

    ШИМ на Arduino

    Частота ШИМ на Arduino - примерно 490 Гц. На плате Arduino UNO выводы, которые могут быть использованы для ШИМ - 3,5,6, 9, 10 и 11. На плате к этому есть подсказка - шелкографией перед номерами ШИМ-выводов есть тильда или диез.

    Нет ничего проще, чем управлять ШИМ на Arduino! Для этого используется одна единственная функция analogWrite(pin, value) , где pin - номер вывода, а value - значение от 0 до 255. При этом ничего не надо писать в void setup() !

    Подробнее про это на английском языке можно почитать и .

    Совсем немного работаем

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

    Соберем незамысловатую схему:


    И напишем незамысловатый код:

    //обзываем выводы соответственно цвету
    int REDpin = 9;
    int GREENpin = 10;
    int BLUEpin = 11;

    void setup (){}

    void loop (){
    for (int value = 0 ; value <= 255; value +=1) {
    //яркость красного уменьшается
    analogWrite (REDpin, value);
    //яркость зеленого увеличивается
    analogWrite (GREENpin, 255-value);
    //синий не горит
    analogWrite (BLUEpin, 255);
    //пауза
    delay (30);
    }

    for (int value = 0 ; value <= 255; value +=1) {
    //красный не горит
    analogWrite (REDpin, 255);
    //яркость зеленого уменьшается
    analogWrite (GREENpin, value);
    //яркость синего увеличивается
    analogWrite (BLUEpin, 255-value);
    //пауза
    delay (30);
    }

    for (int value = 0 ; value <= 255; value +=1) {
    //яркость красного увеличивается
    analogWrite (REDpin, 255-value);
    //зеленый не горит
    analogWrite (GREENpin, 255);
    //яркость синего уменьшается
    analogWrite (BLUEpin, value);
    //пауза
    delay (30);
    }
    }

    Во многих приложениях, как любительских, так и профессиональных, иногда бывает необходимым генерировать цвета различных оттенков. Использование отдельных одноцветных светодиодов в таких случаях неоправданно конструктивно и экономически. Поэтому для таких целей были разработаны RGB-светодиоды.



    RGB-светодиод (аббревиатура означает RED, GREEN, BLUE) является сочетанием кристаллов, способных генерировать красный, зеленый и синий цвета. Благодаря такому сочетанию данные светодиоды могут воспроизводить 16 миллионов оттенков света. Управлять RGB-светодиодами несложно, и они без проблем могут использоваться в проектах с Arduino. В данном материале будет показан пример управления RGB-светодиодом с помощью Arduino.


    Поскольку RGB-светодиод, как было отмечено выше, является сочетанием кристаллов трех разных базовых цветов, то схемотехнически он изображается как три светодиода. Конструктивно такой светодиод имеет один общий вывод и три вывода для каждого цвета. Ниже показана схема подключения RGB-светодиода к Arduino. Также на схеме имеется буквенно-числовой ЖК-дисплей 16×2, потенциометры и последовательно соединенные с линиями RGB-светодиода резисторы. Эти резисторы (R1 = 100 Ом, R2 = 270 Ом, R3 = 330 Ом) ограничивают ток светодиодов, чтобы они не вышли из строя. Переменные резисторы (потенциометры) VR1-VR3 сопротивлением 10 КОм используются для управления интенсивностью свечения RGB-светодиода, то есть с помощью них можно задавать цвет светодиода, меняя интенсивность красного, зеленого и синего кристаллов. Потенциометр VR1 соединен с аналоговым входом A0, VR2 с аналоговым входом A1, а VR3 с аналоговым входом A2.



    ЖК-дисплей в данном случае используется для отображения значения цвета и шестнадцатеричного значения цветового кода. Значение цветового кода отображается в 1-й строке ЖК-дисплея (в виде Rxxx Gxxx Bxxx, где xxx представляет собой числовое значение), а шестнадцатеричный код отображается во 2-й строке ЖК-дисплея (в виде HEXxxxxxx). Резистор R4 сопротивлением 100 Ом применяется для ограничения тока, прикладываемого к подсветке ЖК-дисплея, а для регулировки контрастности ЖК-дисплея используется переменный резистор VR4 сопротивлением 10 КОм.


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


    #include // библиотека для ЖК-дисплея LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // линии Arduino для подключения ЖК-дисплея int Radj; int Gadj; int Badj; int Rval=0; int Gval=0; int Bval=0; int R = 9; int G = 10; int B = 11; void setup() { pinMode(R, OUTPUT); // Линия 9 направлена на выход pinMode(G, OUTPUT); // Линия 10 направлена на выход pinMode(B, OUTPUT); // Линия 11 направлена на выход lcd.begin(16,2); // Инициализация дисплея delay(1); lcd.setCursor(0,0); lcd.print("RGB COLOUR"); lcd.setCursor(4,1); lcd.print("GENERATOR"); delay(2000); lcd.setCursor(0, 0); lcd.print(" R G B "); lcd.setCursor(3,1); lcd.print("HEX= "); } void loop() { Radj = analogRead(0); Gadj = analogRead(1); Badj = analogRead(2); Rval=Radj/4; // Convert the range from (0-1023) to (0-255) Gval=Gadj/4; // Convert the range from (0-1023) to (0-255) Bval=Badj/4; // Convert the range from (0-1023) to (0-255) lcd.setCursor(2,0); if (Rval<10) { lcd.setCursor(2,0); lcd.print("00"); lcd.print(Rval); } else if(Rval<100) { lcd.setCursor(2,0); lcd.print("0"); lcd.print(Rval); } else { lcd.setCursor(2,0); lcd.print(Rval); } lcd.setCursor(8,1); if (Rval<16) { lcd.print("0"); lcd.print(Rval, 16); } else { lcd.print(Rval, 16); } lcd.setCursor(7,0); if (Gval<10) { lcd.setCursor(7,0); lcd.print("00"); lcd.print(Gval); } else if(Gval<100) { lcd.setCursor(7,0); lcd.print("0"); lcd.print(Gval); } else { lcd.setCursor(7,0); lcd.print(Gval); } lcd.setCursor(10,1); if (Gval<16) { lcd.print("0"); lcd.print(Gval, 16); } else { lcd.print(Gval, 16); } lcd.setCursor(12,0); if (Bval<10) { lcd.setCursor(12,0); lcd.print("00"); lcd.print(Bval); } else if(Bval<100) { lcd.setCursor(12,0); lcd.print("0"); lcd.print(Bval); } else { lcd.setCursor(12,0); lcd.print(Bval); } lcd.setCursor(12,1); if (Bval<16) { lcd.print("0"); lcd.print(Bval, 16); } else { lcd.print(Bval, 16); } analogWrite(R, Rval); // ШИМ-выход для красного цвета analogWrite(G, Gval); // ШИМ-выход для зеленого цвета analogWrite(B, Bval); // ШИМ-выход для синего цвета }

    Публикации по теме