Как сделать фиолетовый цвет в arduino
Перейти к содержимому

Как сделать фиолетовый цвет в arduino

  • автор:

RGB светодиод и Arduino

RGB светодиоды

RGB светодиоды — это светодиоды способные излучать свет разных цветов. С английского RGB (Red Green Blue) переводится как красный, зеленый и синий. То есть такой светодиод может светиться этими цветами как по отдельности, так и одновременно с разной интенсивностью. Фактически это три разных светодиода под одной линзой и с 1 общим контактом. Это дает возможность излучать свет практически любого цвета. Я уже рассказывал подробнее о том как работает обычный светодиод и как его подключить к Ардуино.

Расчет резисторов для RGB светодиода

Для того что бы светодиод работал и прослужил как можно дольше необходимо правильно подключить его. Для этого нам придется подавать на него «правильный» ток. А что бы понять какой ток нужно подавать нужно знать параметры именно вашего RGB светодиода. Я использую самые популярные 5 мм светодиоды, купленные на алиэкспрессе. По словам продавца эти светодиоды имеют падение напряжения 1.8-2 В на красном светодиоде и по 3-3.2 В на зеленом и синем, а так же требуют силу тока до 20 мА. Еще мы знаем, что подключать светодиод мы будем к Arduino Uno, на пинах которой напряжение составляет 5 В.

Я немного поэкспериментировал и заметил, что при силе тока 20 мА и 15 мА разницы в свечении светодиода не видно, а вот нагрев уже меньше. При таком режиме работы светодиод прослужит гораздо дольше и будет деградировать гораздо медленнее. Поэтому я буду ограничивать силу тока до 15 мА, а падение напряжения округлю до целых. Исходя из этих данных и будем рассчитывать наши токоограничивающие резисторы. О том что такое резисторы я уже рассказывал.

  • Vps — напряжение источника питания (5 Вольт)
  • Vdf — падение напряжения на светодиоде (2 Вольта для красного и 3 В для зеленого и синего)
  • If — номинальный ток светодиода (15 миллиампер или 0.015 Ампера)

Теперь подставим наши данные в формулу закона Ома для расчета сопротивления. Если кто забыл то напомню: R = U / I (сопротивление равно напряжению деленному на силу тока). Подставляем наши данные:

R = (Vps — Vdf) / If = (5В — 2В) / 0.015А = 200 Ом (для красного цвета)

R = (Vps — Vdf) / If = (5В — 3В) / 0.015А = 133 Ом (для зеленого и синего цветов)

Надо сказать, что данные цифры достаточно примерные и можно использовать резисторы близкие по номиналу. Например у меня есть резисторы на 220 Ом и на 147 Ом. Их я и буду использовать. Подключение будет выглядеть примерно так:

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

С резисторами определились, теперь подключим это все к нашей Arduino Uno. Мы можем регулировать яркость каждого светодиода для получения широкой палитры цвета при смешении красного, зеленого и синего в разных пропорциях. У меня светодиод с общим катодом, значит я могу подключить аноды к разным пинам ардуинки с поддержкой ШИМ. Для этого я использую пины 3 (синий), 5 (зеленый) и 6 (красный), а также пин GND для катода. Вот схема:

Управление RGB светодиодом на ардуино

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

// создаем переменные, хранящие номера наших пинов int red_pin= 6; int green_pin = 5; int blue_pin = 3; void setup() < // обозначаем что наши пины работают как выходы pinMode(red_pin, OUTPUT); pinMode(green_pin, OUTPUT); pinMode(blue_pin, OUTPUT); >void loop() < // вызываем нашу функцию с разными параметрами и ожиданием 1 сек RGB_color(255, 0, 0); // Красный delay(1000); RGB_color(0, 255, 0); // Зеленый delay(1000); RGB_color(0, 0, 255); // Синий delay(1000); RGB_color(255, 255, 125); // Малиновый delay(1000); RGB_color(0, 255, 255); // Бирюзовый delay(1000); RGB_color(255, 0, 255); // Пурпурный delay(1000); RGB_color(255, 255, 0); // Желтый delay(1000); RGB_color(255, 255, 255); // Белый delay(1000); >// Объявляем нашу функцию для управления светодиодом void RGB_color(int red_value, int green_value, int blue_value)

Для того что бы лучше различать оттенки цветов нужно использовать какой-то рассеиватель. Это может быть полупрозрачный пластик или просто лист бумаги. Еще лучше использовать матовые светодиоды. Также вы можете аккуратно наждачной бумагой или напильником сделать прозрачный светодиод матовым. О рассеивании света можете почитать на википедии (англ).

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

Железо

Стартовый набор с Arduino Mega и RFID

Стартовый набор с Arduino Mega и RFID Это расширенный стартовый набор. В комплект входит Arduino Mega R3, макетные платы, множество датчиков, управляемые механизмы и необходимые радиоэлектронные компоненты. Полный список.

Плата Arduino Uno R3

Плата Arduino Uno R3 Arduino Uno — плата на базе микроконтроллера ATmega328P с частотой 16 МГц. На плате есть все необходимое для удобной и быстрой работы.

● Проект 5: RGB-светодиод. Широтно-импульсная модуляция. Переливаемся цветами радуги

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

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

Arduino не может на цифровой вывод выдавать произвольное напряжение. Выдается либо +5 В (HIGH), либо 0 В (LOW). Но уровнем напряжения управляется многое: например, яркость светодиода или скорость вращения мотора. Для симуляции неполного напряжения используется ШИМ (широтно-импульсная модуляция, или PWM).
ШИМ – это операция получения изменяющегося аналогового значения посредством цифровых сигналов. Цифровой сигнал на выходе постоянно переключается между максимальным и минимальным значениями. Переключение имеет частоту в тысячи герц. Глаз не замечает мерцания более 50 Гц, поэтому нам кажется, что светодиод не мерцает, а горит в неполную силу. Длительность включения максимального значения называется шириной импульса. Для получения различных аналоговых величин изменяется ширина импульса (см. рис. 5.1).
Arduino-функция analogWrite() выдает ШИМ-сигнал на цифровой вывод Arduino. После вызова analogWrite() на выходе будет генерироваться постоянная прямоугольная волна с заданной шириной импульса до следующего вызова analogWrite(), частота выдаваемого ШИМ-сигнала равна 490 Гц. На платах Arduino Nano и UNO ШИМ поддерживают выводы 3, 5, 6, 9, 10 и 11, на плате Mega – выводы 2–13. Данные выводы отмечены знаком тильды ˜.

Рис. 5.1. Зависимость значений ШИМ от ширины импульса

В данном эксперименте мы используем RGB-светодиод. RGB расшифровывается как аббревиатура Red, Green, Blue, при помощи этих цветов можно получить любой цвет путем смешения. Светодиод RGB отличается от обычного тем, что содержит 3 небольших кристалла R, G, B, которые смогут синтезировать любой цвет или оттенок. RGB-светодиод имеет 4 вывода (см. рис. 5.2). Подключим RGB-светодиод к плате Arduino и заставим переливаться его цветами радуги. На рис. 5.3 показана схема подключения RGB-светодиода к плате Arduino.
Теперь перейдем к написанию скетча. На самом деле радуга имеет множество цветов, а 7 цветов были придуманы только потому, что эти цвета наиболее устойчиво воспринимаются и определяются глазом и мы их можем назвать и вспомнить поговоркой «Каждый Охотник Желает Знать, Где Сидит Фазан».

Рис. 5.2. Выводы RGB-светодиода

Arduino проект www.arduino-kit.ru

Рис. 5.3. Схема подключения RGB-светодиода

Список этих 7 основных цветов радуги с разложением по компонентам R, G и B представлен в табл. 5.1.

Наш светодиод должен переливаться от красного до фиолетового, проходя через все 7 основных цветов. Алгоритм вычисления любого промежуточного цвета радуги следующий:

1. Примем за начальную точку отсчета красный цвет (255, 0, 0).
2. Будем постепенно увеличивать значение зеленой составляющей G, пока не достигнем значения оранжевого (255, 125, 0), а затем и желтого цвета (255, 255, 0).
3. Постепенно уменьшим значение красной составляющей R до значения зеленого цвета (0, 255, 0).
4. Постепенно увеличим значение синей составляющей B до значения голубого цвета (0, 255, 255).
5. Постепенно уменьшим количество зеленой составляющей G до значения синего цвета (0, 0, 255).
6. Постепенно увеличим количество красной составляющей R до значения фиолетового цвета (255, 0, 255).
7. Выдерживаем небольшую паузу и переходим к шагу 1. Содержимое скетча показано в листинге 5.1.

const int RED= 11 ; // вывод красной ноги RGB-светодиода
const int GREEN= 10 ; // вывод зеленой ноги RGB-светодиода
const int BLUE= 9 ; // вывод синей ноги RGB-светодиода
int red; // переменная для хранения R-составляющей цвета
int green; // переменная для хранения G-составляющей цвета
int blue; // переменная для хранения B-составляющей цвета
void setup ()

void loop ()
// от красного к желтому
red= 255 ;green= 0 ;blue= 0 ;
for (green= 0 ;green setRGB(red,green,blue);
// от желтому к зеленому
for (red= 255 ;red>= 0 ;red—)
setRGB(red,green,blue);
// от зеленого к голубому
for (blue= 0 ;blue setRGB(red,green,blue);
// от голубого к синему
for (green= 255 ;green>= 0 ;green—)
setRGB(red,green,blue);
// от синего к фиолетовому
for (red= 0 ;red setRGB(red,green,blue);
delay( 2000 );
> // функция установки цвета RGB-светодиода
void setRGB ( int r, int g, int b)
analogWrite(RED,r);
analogWrite(GREEN,g);
analogWrite(BLUE,b);
delay( 10 );
>

Порядок подключения:

1. Чтобы видеть смешивание трех компонент R, G, B, а не отдельные составляющие, необходимо сделать поверхность светодиода шероховатой небольшой обработкой напильником или накрыть RGB-светодиод матовой пластиной.
2. Подключаем RGB-светодиод по схеме на рис. 5.3.
3. Загружаем в плату Arduino скетч из листинга 5.1.
4. Наблюдаем свечение светодиода переливающимися цветами радуги.

Листинги программ скачать

KY-016 — Модуль RGB светодиода 5 мм. Подключение к Arduino.

Светодиоды широко используются в проектах на Arduino. Сегодня рассмотрим модуль KY-016, которой оснащен RGB светодиодам 5 мм. В отличие от модуля «KY-009 RGB светодиода (SMD)», данный модуль оснащен резисторами и его можно подключать напрямую к Arduino, без дополнительной обвязки. Схема подключения и код аналогичные с модулем KY-009.

Описание модуля KY-016 — rgb led Arduino.

Описание модуля KY-016 - rgb led Arduino.

KY-016rgb led Arduino полноцветный 5-миллиметровый светодиод RGB, разные цвета и оттенки могут быть получены путем смешивания трех основных цветов.

Технические характеристики rgb модуля Arduino.

Технические характеристики rgb модуля Arduino.

Этот rgb модуль Arduino состоит из 5- миллиметрового RGB-светодиода и трех токоограничивающих резисторов на 150 Ом, для предотвращения перегорания. Регулировка сигнала ШИМ на каждом пине модуля приведет к изменению цвета светодиода.

Светодиодный режим управления

Схема подключения rgb Arduino KY-016.

Подключение rgb светодиода к Arduino следующим оброзом: красный контакт (R) на KY-016 к контакту 9 на Arduino. Синий (B) к контакту 11, зеленый (G) к контакту 10 и земля (-) к GND. Обратите внимание, что вам не нужно использовать ограничивающие резисторы, поскольку они уже установлены на плату.

Схема подключения rgb Arduino KY-016.

Контакты:

На эти контакты подается питание положительной полярности:

Схема подключения KY-016 к Arduino UNO.

Схема подключения KY-016 к Arduino UNO.

Схема подключения KY-016 к Arduino NANO.

Схема подключения KY-016 к Arduino NANO.

Arduino rgb скетч.

Следующий пример Arduino rgb скетч будет циклически переключаться между различными цветами, изменяя значение ШИМ для каждого из трех основных цветов.

int redpin = 9; //pin red LED int bluepin =10; //pin blue LED int greenpin = 11;//pin green LED int val; void setup() < pinMode(redpin, OUTPUT); pinMode(bluepin, OUTPUT); pinMode(greenpin, OUTPUT); Serial.begin(9600); >void loop() < for(val = 255; val >0; val--) < analogWrite(redpin, val); //PWM red analogWrite(bluepin, 255 - val); //PWM blue analogWrite(greenpin, 128 - val); //PWM green Serial.println(val); //print delay(5); >for(val = 0; val < 255; val++) < analogWrite(redpin, val); analogWrite(bluepin, 255 - val); analogWrite(greenpin, 128 - val); Serial.println(val); delay(5); >>

Второй вариант кода позволяет плавно изменять цвет из одного оттенка к другому и так по кругу .

#define R_PIN 9 //pin red LED #define G_PIN 10 //pin blue LED #define B_PIN 11 //pin green LED void setup() < pinMode(R_PIN, OUTPUT); pinMode(G_PIN, OUTPUT); pinMode(B_PIN, OUTPUT); >void loop() < // плавно проходимся по всем цветам static int counter = 0; counter += 10; colorWheel(counter); delay(100); if (counter >1530) counter = 0; > // включает цвет по цветовому колесу, принимает 0-1530 void colorWheel(int color) < byte _r, _g, _b; if (color else if (color > 255 && color else if (color > 510 && color else if (color > 765 && color else if (color > 1020 && color else if (color > 1275 && color analogWrite(R_PIN, 255 - _r); analogWrite(G_PIN, 255 - _g); analogWrite(B_PIN, 255 - _b); >

Код не оптимальный, но для понимания этого достаточно. Кроме этого, для облегчения работы с RGB светодиодами также есть библиотеки, например: RGBLed Arduino library.

Использование библиотеки RGBLed Arduino library для работы с модулем KY-016.

Скачать библиотеку RGBLed можно на github или внизу статьи, в разделе «файлы для скачивания»

Заходим в Arduino IDE и выбираем в меню: «Скетч –> Подключить библиотеку –> Добавить .ZIP библиотеку…»

Заходим в Arduino IDE и выбираем в меню

Выбираем скаченный архив RGBLed-master .zip и нажимаем кнопку «Открыть». После установки вы увидите надпись, что библиотека успешно добавлена.

Использование библиотеки RGBLed Arduino library для работы с модулем KY-016.

Для начала работы с библиотекой RGBLed ее нужно подключить.

#include

Затем создать объект для подключения, указав пины подключения светодиода к Arduino.

RGBLed led(RED_PIN, GREEN_PIN, BLUE_PIN, RGBLed::COMMON_ANODE or RGBLed::COMMON_CATHODE);

В дальнейшем мы можем, в основном цикле loop(), оперировать цветом светодиода, для этого в библиотеке есть функции:

led.setColor(RGBLed::RED); // или led.setColor(255, 0, 0);
  • Выключить свет
led.off();
  • Установить яркость
led.brightness(RGBLed::RED, 50); // 50% brightness // или led.brightness(255, 0, 0, 50); // 50% brightness

Для того чтобы загорелся красный светодиод на 100 мс, достаточно в коде добавить строчку:

led.flash(RGBLed::RED, 100); // Interval 100ms // или led.flash(255, 0, 0, 100); // Interval 100ms

Также в библиотеки есть палитра цветов.

RED GREEN BLUE MAGENTA CYAN YELLOW WHITE

С библиотекой идут примеры использования. Например Вспышка:

#include RGBLed led(9, 10, 11, RGBLed::COMMON_CATHODE); void setup() < >void loop() < // Flash red color, interval 100ms led.flash(RGBLed::RED, 100); // Flash green color, interval 100ms led.flash(0, 255, 0, 100); // Flash red color, during 250ms with interval 100ms led.flash(RGBLed::RED, 250, 100); // Flash green color, during 250ms with interval 100ms led.flash(0, 255, 0, 250, 100); >

Как видим из кода, у нас будем c , про которую есть у меня на сайт отдельный урок: Полицейская мигалка своими руками из светодиодов на Arduino

мигать светодиод красным и синим цветами, на подобии полицейской мигалки

Вывод

Модуль KY-016 показал себя как достаточно простой в использовании, и применить его можно в различных проектах на Arduino. И главный плюс, по сравнению с модуля KY-009, — это распаянные резисторы.

Понравился Урок KY-016 — Модуль RGB светодиода 5 мм. Подключение к Arduino ? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

RGB светодиоды и ленты

Я думаю все знают, что свет – это поток фотонов, но в то же время он является электромагнитной волной, излучением. Человеческий глаз воспринимает очень узкий диапазон этого излучения: приблизительно от 390 до 790 ТГц (террагерц), так называемое видимое излучение или видимый свет. “Ориентироваться” в этом диапазоне электромагнитного излучения принято в обратной величине – длине волны, измеряемой в данном случае в нанометрах (нм): человеческий глаз видит излучение в диапазоне от ~400 нм (фиолетовый) до ~800 нм (красный). Между синим и красным есть ещё один важный цвет – зелёный: Красный (Red, R), зелёный (Green, G) и синий (Blue, B) являются основными цветами: смешивая эти три цвета в разных пропорциях можно получить плюс-минус все остальные цвета. blank Этот наглядный “двухмерный” случай с кругами вы тоже скорее всего видели. Если раскручивать тему дальше, то можно задаться интенсивностью каждого цвета и получить итоговый цвет как функцию от трёх переменных, или же трёхмерное цветовое пространство RGB. Если интенсивности всех трёх цветов равны нулю – получится чёрный цвет, если все три максимальны – белый, а всё что между – оттенки: На картинке выше интенсивность каждого цвета представлена диапазоном 0-255. Знакомое число, не правда ли? Всё верно, в большинстве применений диапазон каждого цвета кодируется одним байтом, потому что это удобно с точки зрения программирования и достаточно с точки зрения глаза: три цвета – три байта – 256*256*256 == 16.8 миллионов оттенков. Да, именно эта цифра часто фигурирует в рекламах смартфонов и телевизоров, и именно столько оттенков мы можем абсолютно не напрягаясь получить при использовании Arduino и RGB светодиодов, о чём и поговорим в этом уроке.

RGB светодиоды

RGB светодиод представляет собой по сути три светодиода в одном корпусе. Чтобы не плодить лишние выводы, все аноды или катоды светодиодов объединяются и получается 4 контакта: R, G, B и общий. Общим может быть как минус-катод (Common Cathode), так и плюс-анод (Common Anode): Также на этой картинке показана распиновка типичного RGB светодиода: самая длинная нога – общий вывод, крайняя рядом с ней – красный, с другой стороны зелёный дальняя крайняя – синий. К Arduino такой светодиод подключается точно так же, как если бы мы подключали три отдельных светодиода (читай предыдущий урок про светодиоды): на каждый цвет нужен токоограничивающий резистор, а общую ногу нужно подключать в зависимости от того, анод она или катод. blank Можно управлять каждым цветом точно так же, как если бы это были отдельные светодиоды. Также не забываем про подключение: если у светодиода общий катод, то высокий сигнал ( digitalWrite(pin, HIGH); ) с управляющих пинов будет включать выбранный цвет, а если общий анод – то выключать. Соответственно плавное управление яркостью при помощи ШИМ работает по той же логике: у общего катода analogWrite(pin, 200); включит цвет почти на полную яркость, а у общего анода – почти полностью погасит. RGB светодиоды можно дёшево найти на Aliexpress, а именно:

  • Матовые общий катод
  • Матовые общий анод
  • Прозрачные общий катод
  • Прозрачные общий анод

В качестве магазина рекомендую CHANZON, самые хорошие светодиоды и чипы/матрицы.

RGB ленты

blank

RGB светодиодные ленты устроены аналогично одноцветным лентам и RGB светодиодам: в 12 Вольтовой ленте светодиоды каждого цвета соединяются по три штуки с токоограничивающим резистором и образуют сегмент ленты, далее эти сегменты подключаются параллельно. Также лента имеет общий вывод со всех цветов, в большинстве случаев это общий анод. Почему? Помните, в уроке про управление нагрузкой я говорил, что чаще всего используют N-канальные полевые транзисторы, потому что они дешевле, удобнее в применении и имеют более удачные характеристики? Вот именно поэтому! Драйверы для RGB лент также делают на основе N-канальников, поэтому найти в продаже ленту с общим катодом даже вряд-ли получится. В качестве магазина на aliexpress рекомендую BTF Lighting , самые качественные ленты. Итак, как нам подключить RGB светодиодную ленту к Arduino? Точно так же, как обычную! Но тут я добавлю ещё несколько интересных вариантов.

MOSFET

Нам понадобятся три полевых транзистора и резисторы им в обвязку (почему и зачем – читай в уроке про управление нагрузкой). Подключается всё вот по такой схеме: blank Если нужно плавное управление яркостью цветов – подключаем к ШИМ пинам, если просто вкл/выкл – можно к обычным. Свой драйвер на плате можно развести примерно вот так (корпуса D-pak):

LED Amplifier

У китайцев есть готовые драйверы для “усиления” сигнала на RGB ленту, по сути те же три транзистора что выше, но всё красивое и готовое. Подключается следующим образом:

blank

Драйвер Н-моста

Ну и экзотический вариант: использовать полномостовой драйвер для моторов. Почему нет? Количество выходов у таких драйверов всегда кратно двум (для подключения одного мотора), так что это отличный вариант для управления также RGBW лентой. Драйверы можно найти на aliexpress по названию.

blankblank blank

Программирование

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

Библиотека GRGB

  • Поддержка драйверов с общим анодом и общим катодом
  • Настройка яркости
  • Гамма-коррекция яркости (квадратный CRT)
  • Библиотека может не привязываться к пинам и просто генерировать значения 8 бит
  • Быстрые оптимизированные целочисленные вычисления (не везде)
  • Плавный переход между любыми цветами (не блокирует выполнение кода)
  • Установка цвета разными способами:
    • RGB
    • HSV
    • Быстрый HSV
    • Цветовое колесо (1530 значений)
    • Цветовое колесо (255 значений)
    • Теплота (1000-40000К)
    • HEX цвета 24 бита
    • HEX цвета 16 бит
    • 17 предустановленных цветов

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

    #include "GRGB.h" GRGB led(COMMON_CATHODE, 6, 5, 3); // куда подключены цвета (R, G, B) void setup() < >void loop() < byte H = analogRead(0) / 4; // получаем 0-255 // меняем цвет от 0 до 255 led.setWheel8(H); >

    В рамках этого урока мы рассмотрим некоторые алгоритмы, потому что это интересно и может пригодиться где-то ещё.

    Хранение цвета

    Что касается хранения цветовой информации, то это могут быть как три отдельных байта byte r, g, b; , так и более крупный тип данных, например так: long color; . Во втором случае цвет принято записывать в HEX представлении: красный, зелёный и синий байты идут друг за другом 0xRRGGBB . Напомню, что один байт в 16-ричном представлении может иметь значение от 0x00 (0) до 0xFF (255). Таким образом например цвет 0xBBA000 – жёлтый средней яркости ( 0xBB красный, 0xA0 зелёный, 0x0 синий). Такое представление чаще всего встречается в веб-разработке, при работе с микроконтроллером удобнее хранить цвет в байтах. Вот так можно конвертировать цвет из HEX в байты и наоборот:

    // например цвет в HEX long val = 0x12ff34, val2; byte r, g, b; // разбиваем val на байты по цветам RRGGBB r = (val >> 16) & 0xFF; g = (val >> 8) & 0xFF; b = val & 0xFF; // склеиваем обратно в long val2 = ((long)r 
    

    Может пригодиться при связке Arduino и веба.

    Включение цветов

    Как я уже писал выше, включение того или иного цвета производится точно так же, как в уроке про обычные светодиоды. Для плавного управления яркостью используется ШИМ сигнал.

    #define R_PIN 3 #define G_PIN 5 #define B_PIN 6 void setup() < pinMode(R_PIN, OUTPUT); pinMode(G_PIN, OUTPUT); pinMode(B_PIN, OUTPUT); // работаем с общим анодом // цвет бирюзовый не на всю яркость analogWrite(R_PIN, 255); analogWrite(G_PIN, 10); analogWrite(B_PIN, 10); >void loop()

    Для плавного управления цветом можно использовать потенциометры:

    #define R_PIN 3 #define G_PIN 5 #define B_PIN 6 void setup() < pinMode(R_PIN, OUTPUT); pinMode(G_PIN, OUTPUT); pinMode(B_PIN, OUTPUT); >// потенциометры на A0, A1 и A2 void loop()

    Цветовое колесо

    blank

    Первый очевидный эффект – плавное перетекание одного цвета в другой. Это можно сделать линейно, вот таким образом: Реализовать это можно просто через условия. Продолжим предыдущий пример:

    #define R_PIN 3 #define G_PIN 5 #define B_PIN 6 void setup() < pinMode(R_PIN, OUTPUT); pinMode(G_PIN, OUTPUT); pinMode(B_PIN, OUTPUT); >void loop() < // плавно проходимся по всем цветам static int counter = 0; counter += 10; colorWheel(counter); delay(100); >// включает цвет по цветовому колесу, принимает 0-1530 void colorWheel(int color) < byte _r, _g, _b; if (color else if (color > 255 && color else if (color > 510 && color else if (color > 765 && color else if (color > 1020 && color else if (color > 1275 && color analogWrite(R_PIN, 255 - _r); analogWrite(G_PIN, 255 - _g); analogWrite(B_PIN, 255 - _b); >

    Пространство HSV

    blank

    Следующий вариант более интересен тем, что помимо цвета позволяет настроить его яркость и насыщенность. Такая цветовая модель называется HSV – (Hue, Saturation, Value), или (Цвет, Насыщенность, Яркость), в этом цветовом пространстве гораздо удобнее выбирать нужный цвет. Представить его можно цилиндром: Светодиод и лента работают в пространстве RGB, HSV цвет нужно конвертировать в RGB для включения соответствующих каналов цвета. В подробности работы алгоритма вдаваться не будем, тем более что существует много разных вариантов его реализации, можно найти их в интернете по запросу HSV to RGB C++. Вот один из них, который использую я:

    #define R_PIN 3 #define G_PIN 5 #define B_PIN 6 void setup() < pinMode(R_PIN, OUTPUT); pinMode(G_PIN, OUTPUT); pinMode(B_PIN, OUTPUT); // включит красно-жёлтый // с насыщенностью 200 из 255 // и максимальной яркостью setHSV(20, 200, 255); >void loop() < >// включить цвет в HSV, принимает 0-255 по всем параметрам void setHSV(uint8_t h, uint8_t s, uint8_t v) < float r, g, b; byte _r, _g, _b; float H = (float)h / 255; float S = (float)s / 255; float V = (float)v / 255; int i = int(H * 6); float f = H * 6 - i; float p = V * (1 - S); float q = V * (1 - f * S); float t = V * (1 - (1 - f) * S); switch (i % 6) < case 0: r = V, g = t, b = p; break; case 1: r = q, g = V, b = p; break; case 2: r = p, g = V, b = t; break; case 3: r = p, g = q, b = V; break; case 4: r = t, g = p, b = V; break; case 5: r = V, g = p, b = q; break; >_r = r * 255; _g = g * 255; _b = b * 255; // инверсия для общего анода analogWrite(R_PIN, 255 - _r); analogWrite(G_PIN, 255 - _g); analogWrite(B_PIN, 255 - _b); >

    На этом этапе я могу вам сказать, что после прочтения всех предыдущих уроков вы можете самостоятельно открыть и изучить исходник библиотеки и при желании взять оттуда нужный алгоритм или эффект!

    Подключение большого количества RGB

    У меня на сайте есть статья, где рассказано об алгоритме динамической индикации RGB светодиодов. Она позволяет подключить несколько RGB светодиодов или лент с возможностью изменения цвета.

    Полезные страницы

    • Набор GyverKIT – большой стартовый набор Arduino моей разработки, продаётся в России
    • Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress у проверенных продавцов
    • Подборка библиотек для Arduino, самых интересных и полезных, официальных и не очень
    • Полная документация по языку Ардуино, все встроенные функции и макросы, все доступные типы данных
    • Сборник полезных алгоритмов для написания скетчей: структура кода, таймеры, фильтры, парсинг данных
    • Видео уроки по программированию Arduino с канала “Заметки Ардуинщика” – одни из самых подробных в рунете
    • Поддержать автора за работу над уроками
    • Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *