mppss.ru – Все про автомобили

Все про автомобили

Плавное изменение цвета трехцветного светодиода. RGB Led Strip управляемый Arduino. Виды транзисторных ключей

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

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

Смешение цветов

Чем RGB-светодиод, лучше трех обычных? Всё дело в свойстве нашего зрения смешивать свет от разных источников, размещенных близко друг к другу. Например, если мы поставим рядом синий и красный светодиоды, то на расстоянии несколько метров их свечение сольется, и глаз увидит одну фиолетовую точку. А если добавим еще и зеленый, то точка покажется нам белой. Именно так работают мониторы компьютеров, телевизоры и уличные экраны.

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

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

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

Трехцветный светодиод (rgb led) — это три светодиода разных цветов в одном корпусе. Они бывают как с небольшой печатной платой, на которой расположены резисторы, так и без встроенных резисторов. Мы рассмотрим оба варианта.

Видео-инструкция сборки модели Arduino с трехцветным светодиодом:

Для сборки модели с трехцветным светодиодом нам потребуется:

  • плата Arduino
  • программа Arduino IDE, которую можно скачать с сайта Arduino .

Что потребуется для Arduino с трехцветным светодиодом со встроенными резисторами?

Если используется светодиод без резисторов, нам также потребуется:

  • Breadboard
  • 4 провода “папа-папа”
  • 3 резистора на 220 Ом

Что потребуется для Arduino с трехцветным светодиодом без встроенных резисторов

При работе с трехцветным светодиодом без встроенных резисторов необходимо иметь ввиду, что назначение ножки светодиода можно определить по ее длине. Самая длинная — земля (GND), короче — зеленый (G), еще короче — голубой (B), а самая короткая — красный (R).

Схема подключения модели Arduino с трехцветным светодиодом со встроенными резисторами:

Схема подлючения трехцветным светодиодом со встроенными резисторами

Схема подключения модели Arduino с трехцветным светодиодом без встроенных резисторов:

Схема подлючения трехцветным светодиодом без встроенных резисторов

Для управления этой моделью подойдет следующая программа (программу вы можете просто скопировать в Arduino IDE):

//объявляем переменные с номерами пинов
int r = 13;
int g = 12;
int b = 11;
void setup() //процедура setup
{
//объявляем используемые порты
pinMode(r, OUTPUT);
pinMode(g, OUTPUT);
pinMode(b, OUTPUT);
}
void loop() //процедура loop
{
digitalWrite(r, HIGH); //включаем красный
delay(500); //ждем 500 Мс
digitalWrite(r, LOW); //выключаем красный
digitalWrite(g, HIGH); //включаем зеленый
delay(500); //ждем 500 Мс
digitalWrite(g, LOW); //выключаем зеленый
digitalWrite(b, HIGH); //включаем синий
delay(500); //ждем 500 Мс
digitalWrite(b, LOW); //выключаем синий
}

Так выглядит собранная модель Arduino с трехцветным светодиодом без выстроенных резисторов:

Собранная модель Arduino с трехцветным светодиодом без встроенных резисторов

Продолжение следует!

Посты по урокам:

  1. Первый урок:
  2. Второй урок:
  3. Третий урок:
  4. Четвертый урок:
  5. Пятый урок:
  6. Шестой урок:
  7. Седьмой урок:
  8. Восьмой урок:
  9. Девятый урок:

серии «Дерзай».

RGB расшифровывается как аббревиатура Red, Green, Blue, при помощи этих цветов можно получить любой цвет путем смешения. Светодиод RGB содержит 3 небольших кристалла R, G, B, с помощью которых мы сможем синтезировать любой цвет или оттенок. В этом уроке мы подключим RGB-светодиод к плате Arduino и заставим его переливаться всеми цветами радуги.
Для данного проекта Вам понадобятся детали, которые имеются в наборах «Базовый» и «Изучаем Arduino»:

  1. Arduino Uno;
  2. Кабель USB;
  3. Плата прототипирования;
  4. Провода «папа-папа» — 7 шт;
  5. Резисторы 220 Ом – 3 шт;
  6. RGB-светодиод – 1 шт;
  7. Потенциометр.

Собираем схему, показанную на рисунке 1.

Рисунок 1. Схема соединений

Теперь приступим к написанию скетча.
RGB-светодиод должен переливаться всеми цветами радуги от красного до фиолетового, затем переходим к красному и так по кругу. Скорость перехода цветов регулируем потенциометром. В таблице 1 приведены данные значений R, G, B для 7 основных цветов радуги.

Таблица 1. Данные значений R, G, B для 7 основных цветов радуги

Для смешения цветов необходимо с выводов Arduino на R, G, B входы светодиода подавать полный спектр напряжений. Но Arduino не может на цифровой вывод выдавать произвольное напряжение. Выдается либо +5В (HIGH), либо 0 В (LOW). Для симуляции неполного напряжения используется ШИМ (Широтно-Импульсная Модуляция, или PWM).

Я надеюсь, Вы уже изучили главу 2.6 книги Джереми Блюма «Изучаем Arduino: инструменты и методы технического волшебства», где подробно рассказывается о механизме широтно-импульсной модуляции.
Алгоритм выполнения программы:

  • Увеличиваем значение зеленой составляющей G, пока не достигнем значения оранжевого (255,125,0),
  • Увеличиваем значение зеленой составляющей G, пока не достигнем желтого цвета (255,255,0).
  • Уменьшаем значение красной составляющей R до значения зеленого цвета (0,255,0).
  • Начальную точка — красный цвет (255,0,0).
  • Увеличиваем значение синей составляющей B до значения голубого цвета (0,255,255).
  • Уменьшаем значение зеленой составляющей G до значения синего цвета (0,0,255).
  • Постепенно увеличим значение красной составляющей R до значения фиолетового цвета (255,0,255).
  • Уменьшаем значение синей составляющей B до значения красного цвета (255,0,0).

Переходим к шагу 1.

После каждого шага делаем паузу для фиксации показа цвета,

Delay(VIEW_PAUSE);

проверяем значение потенциометра и изменяем значение скорости изменения цвета.

Void setpause() { pause=map(analogRead(POT),0,1024,MIN_PAUSE,MAX_PAUSE); Serial.print("pause=");Serial.println(pause); }

Создадим в Arduino IDE новый скетч , занесем в него код из листинга 1 и загрузим скетч на на плату Arduino. Напоминаем, что в настройках Arduino IDE необходимо выбрать тип платы (Arduino UNO) и порт подключения платы.
Листинг 1

Const int RED=11; // вывод R RGB-светодиода const int GREEN=10; // вывод G RGB-светодиода const int BLUE=9; // вывод B RGB-светодиода int red; // переменная для хранения R-составляющей цвета int green; // переменная для хранения G-составляющей цвета int blue; // переменная для хранения B-составляющей цвета const int POT=A0; // вывод подключения потенциометра const int MIN_PAUSE=10; // минимальная задержка смены цвета, мс const int MAX_PAUSE=100; // максимальная задержка смены цвета, мс int pause; // переменная для хранения текущей задержки const int VIEW_PAUSE=2000; // время фиксации основного цвета, мс void setup() { Serial.begin(9600); } void loop() { // от красного к желтому Serial.println("red - yellow"); red=255;green=0;blue=0; for(green=0;green<=255;green++) setRGB(red,green,blue); setpause(); delay(VIEW_PAUSE); // от желтому к зеленому Serial.println("yellow - green"); red=255;green=255;blue=0; for(red=255;red>=0;red--) setRGB(red,green,blue); setpause(); delay(VIEW_PAUSE); // от зеленого к голубому Serial.println("green - blue"); red=0;green=255;blue=0; for(blue=0;blue<=255;blue++) setRGB(red,green,blue); setpause(); delay(VIEW_PAUSE); // от голубого к синему Serial.println("blue - blue"); red=0;green=255;blue=255; for(green=255;green>=0;green--) setRGB(red,green,blue); setpause(); delay(VIEW_PAUSE); // от синего к фиолетовому Serial.println("blue - purple"); red=0;green=0;blue=255; for(red=0;red<=255;red++) setRGB(red,green,blue); setpause(); delay(VIEW_PAUSE); // от фиолетового к красному Serial.println("purple - red"); red=255;green=0;blue=255; for(blue=0;blue>=0;blue--) setRGB(red,green,blue); setpause(); delay(VIEW_PAUSE); } // функция установки цвета RGB-светодиода void setRGB(int r,int g,int b) { analogWrite(RED,r); analogWrite(GREEN,g); analogWrite(BLUE,b); delay(pause); } // функция установки текущей задержки void setpause() { pause=map(analogRead(POT),0,1024,MIN_PAUSE,MAX_PAUSE); Serial.print("pause=");Serial.println(pause); }

После загрузки скетча наблюдаем изменение цвета RGB-светодиода цветами радуги, потенциометром меняем скорость смены цвета (см. рисунок 2,3).


Рисунок 2,3. RGB-светодиод – всеми цветами радуги

: красный, зеленый и синий. Одновременное управляя яркостью трех светодиодов каждого из этих цветов можно создать свет практически любого цвета. Светодиоды, позволяющие менять цвет излучаемого света, такие как те, которые используются в нашем заключительном уроке, устроены подобным образом, но в их конструкции три светодиода расположены вместе в одном очень маленьком корпусе. Такой составной тройной светодиод называется 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.

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

Широтно-импульсная модуляция (ШИМ, 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);
}
}


Нажимая кнопку, вы соглашаетесь с политикой конфиденциальности и правилами сайта, изложенными в пользовательском соглашении