Arduino rgb светодиод плавное изменение цвета. Управление светодиодной лентой при помощи Аrduino

Сегодня подключаем к 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-светодиод – всеми цветами радуги

Ардуино идеально подходит для управления любыми устройствами. Микропроцессор ATmega с помощью программы-скетча манипулирует большим количеством дискретных выводов, аналогово-цифровых входов/выводов и ШИМ-контроллерами.

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

Принцип управления нагрузкой через Ардуино

Плата Ардуино имеет два типа портов вывода: цифровой и аналоговый (ШИМ-контроллер). У цифрового порта возможно два состояния – логический ноль и логическая единица. Если подключить к нему светодиод он либо будет светиться, либо не будет.

Аналоговый выход представляет собой ШИМ-контроллер, на который подаётся сигнал частотой около 500Гц с регулируемой скважностью. Что такое ШИМ-контроллер и принцип его работы можно найти в интернете. Через аналоговый порт возможно не только включать и выключать нагрузку, а и изменять напряжение (ток) на ней.

Синтаксис команд

Цифровой вывод:

pinMode(12, OUTPUT); — задаём порт 12 портом вывода данных;
digitalWrite(12, HIGH); — подаём на дискретный выход 12 логическую единицу, зажигая светодиод.

Аналоговый вывод:

analogOutPin = 3; – задаём порт 3 для вывода аналогового значения;
analogWrite(3, значение); – формируем на выходе сигнал с напряжением от 0 до 5В. Значение – скважность сигнала от 0 до 255. При значении 255 максимальное напряжение.

Способы управления светодиодами через Ардуино

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

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

Виды транзисторных ключей

  • Биполярный;
  • Полевой;
  • Составной (сборка Дарлингтона).
Способы подключения нагрузки
Через биполярный транзистор Через полевой транзистор Через коммутатор напряжения

При подаче высокого логического уровня (digitalWrite(12, HIGH);) через порт вывода на базу транзистора через цепочку коллектор-эмиттер потечет опорное напряжение на нагрузку. Таким образом можно включать и отключать светодиод.

Аналогичным образом работает и полевой транзистор, но поскольку у него вместо «базы» сток, который управляется не током, а напряжением, ограничительный резистор в этой схеме необязателен.

Биполярный вид не позволяет регулировать мощные нагрузки. Ток через него ограничен на уровне 0,1-0,3А.

Полевые транзисторы работают с более мощными нагрузками с током до 2А. Для ещё более мощной нагрузки используют полевые транзисторы Mosfet с током до 9А и напряжением до 60В.

Вместо полевых можно использовать сборку Дарлингтона из биполярных транзисторов на микросхемах ULN2003, ULN2803.

Микросхема ULN2003 и принципиальная схема электронного коммутатора напряжения:

Принцип работы транзистора для плавного управления светодиодной лентой

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

Подключив транзистор к аналоговому порту Ардуино, присваиваем ему значение от 0 до 255, изменяем напряжение, подаваемое на коллектор либо сток от 0 до 5В. Через цепочку коллектор-эмиттер будет проходить от 0 до 100% опорного напряжения нагрузки.

Для управления светодиодной лентой arduino необходимо подобрать транзистор подходящей мощности. Рабочий ток для питания метра светодиодов 300-500мА, для этих целей подойдет силовой биполярный транзистор. Для большей длины потребуется полевой транзистор.

Схема подключения LED ленты к ардуино:

Управление RGB лентой с помощью Andurino

Кроме однокристальных светодиодов, Ардуино может работать и с цветными LED. Подключив выводы каждого цвета к аналоговым выходам Ардуино можно произвольно изменять яркость каждого кристалла, добиваясь необходимого цвета свечения.

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

Аналогично построено и управление RGB лентой Arduino:

Аrduino RGB контроллер лучше собирать на полевых транзисторах.

Для плавного управления яркостью можно использовать две кнопки. Одна будет увеличивать яркость свечения, другая уменьшать.

Скетч управления яркостью светодиодной ленты Arduino

int led = 120; устанавливаем средний уровень яркости

void setup() {
pinMode(4, OUTPUT); устанавливаем 4й аналоговый порт на вывод
pinMode(2, INPUT);

pinMode(4, INPUT); устанавливаем 2й и 4й цифровой порт на ввод для опроса кнопок
}
void loop(){

button1 = digitalRead(2);

button2 = digitalRead(4);
if (button1 == HIGH) нажатие на первую кнопку увеличит яркость
{
led = led + 5;

analogWrite(4, led);
}
if (button2 == HIGH) нажатие на вторую кнопку уменьшит яркость
{
led = led — 5;

analogWrite(4, led);
}

При удержании первой или второй кнопки плавно изменяется напряжение, подаваемое на управляющий контакт электронного ключа. Тогда и произойдет плавное изменение яркости.

Модули управления Ардуино

Для создания полноценного драйвера управления светодиодной лентой можно использовать модули-датчики.

ИК-управление

Модуль позволяет запрограммировать до 20 команд.

Радиус сигнала около 8м.

Цена комплекта 6 у.е.

По радиоканалу

Четырёхканальный блок с радиусом действия до 100м

Цена комплекта 8 у.е.

Позволяет включать освещение еще при приближении к квартире.

Бесконтактное

Датчик расстояния способен по движению руки увеличивать и уменьшать яркость освещения.

Радиус действия до 5м.

Цена модуля 0,3 у.е.

Данный проект посвящен тому, как сделать светодиодную подсветку, управляемую с соседней комнаты, чтобы не вставать с дивана. Светодиодная RGB-подсветка одинаково хорошо украшает как маленький аквариум, так и большую комнату.

Можно засветить разными цветами баню от RGB ленты на Arduino. Создать, так сказать, баню на микропроцессорном управлении от Arduino.

Всего лишь понадобятся для сборки RGB-подсветки такие компоненты:

  1. Bluetooth модуль HC-05 для беспроводной связи с Arduino.
  2. Плата Arduino nano, mini, Uno с микропроцессором ATmega 8, ATmega 168, ATmega 328.
  3. Светодиодная лента RGB, при необходимости во влагозащитном исполнении IP65 или без него.
  4. Смартфон с Android как пульт управления RGB-подсветкой.
  5. Полевые MOSFET транзисторы, такие как P3055LD, P3055LDG, PHD3355L, но лучше с выводами для закрепления в монтажных отверстиях. Биполярные транзисторы работают хуже .
  6. Резисторы 10 кОм, 0.125 Вт - 3 штуки.

Немного теории про подключение RGB ленты к Arduino

Нельзя подключить светодиодную полоску напрямую к плате Arduino. Светодиодная лента светиться от 12 В, тогда как микропроцессору нужно для работы всего 5 В.

Но, самая главная проблема в том, что выходы микропроцессора не имеют достаточной мощности для питания целой ленты светодиодов. В среднем метровой длины светодиодная полоса потребляет 600 мА. Такой ток точно выведет из строя плату Arduino.

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

Для развязки по питанию, в качестве ключей, рекомендуется использовать транзисторы. Лучше использовать полевые MOSFET транзисторы: им для открытия нужен мизерный ток на «затвор», к тому же они имеют большую мощность в сравнении с биполярными ключами такого же размера.

RGB ленты к Arduino

На электромонтажной схеме на управление лентой задействованы ШИМ-выхода: 9 (красный), 10 (зеленый), 11 (голубой).

Три резистора по 10 кОм, 0.125 Вт повешены на «затвор» каждого транзистора.

Плюс от блока питания 12 В (красный провод) идет напрямую на RGB ленту.

Минус от блока питания 12 В (черный провод) распределяется по «истокам» полевых транзисторов.

«Сток» каждого транзистора связан с отдельным контактом ленты: R, G, B. Рекомендуется для удобства при подключении использовать провода красного, зеленого, голубого цвета.

Контакт заземления GND платы Arduino следует посадить на минус входного питания.

Сама плата Arduino Uno запитывается от отдельного сетевого адаптера. Для Arduino nano, mini потребуется собрать простенький источник питания на интегральном стабилизаторе 7805.

Подключение Bluetooth модуля HC-05:

  • VCC - 5V (питание +5 В);
  • GND - GND (земля, общий);
  • RX - TX на Arduino nano, mini, Uno;
  • TX - RX на Arduino nano, mini, Uno;
  • LED - не используется;
  • KEY - не используется.

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

Unsigned long x; int LED = 9; // зеленый подключен к 9 пину int LED2 = 10; // синий подключен к 10 пину int LED3 = 11; // красный подключен к 11 пину int a,b,c = 0; void setup() { Serial.begin(9600); Serial.setTimeout(4); pinMode(LED, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); } void loop() { if (Serial.available()) { x = Serial.parseInt(); if (x>=0 && x<=255) { a = x; // для RGB ленты //a = 255-x; // для светодиода analogWrite(LED, a); } if (x>=256 && x<=511) { b = x-256; // для RGB ленты //b = 511-x; // для светодиода analogWrite(LED2, b); } if (x>=512 && x<=767) { c = x-512; // для RGB ленты //c = 767-x; // для светодиода analogWrite(LED3, c); } /* Serial.println(x); Serial.println(a); Serial.println(b); Serial.println(c); */ } }

Если понадобиться подключить один RGB светодиод, тогда есть электромонтажная схема его подключения.

Установка приложения на телефон

Скачиваем приложение с коротким названием RGB на телефон. .

После установки запускаем приложение по иконке.

Кликаем по надписи

Находим в списке установленный Bluetooth модуль HC-05.

При наличии связи вместо надписи будет отображаться адрес и название установленного модуля Bluetooth.

Ну, вот и всё, управление RGB подсветкой налажено!

Вот видео-пример работы нашего проекта:

GPS часы на Arduino Биометрический замок – Схема и сборка ЖК дисплея

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

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

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

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

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

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