Перейти к содержимому

Как подключить rgb светодиод к arduino

  • автор:

Подключение светодиодной ленты к Ардуино

Ардуино подключение светодиодной ленты 12 Вольт

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

Управление светодиодной лентой 12 Вольт через Ардуино можно сделать с помощью реле или транзистора. В первом случае при включении / выключении будет слышен щелчок срабатывания магнитного реле, что многих будет раздражать. Кроме того, реле не позволит сделать эффект плавного затухания освещения. Транзистор не имеет перечисленных минусов, а конечное устройство будет более компактным.

Как подключить светодиодную ленту к Ардуино

Для этого занятия потребуется:

  • Arduino Uno / Arduino Nano / Arduino Mega;
  • источник постоянного тока 12 Вольт;
  • светодиодная лента;
  • полевые / биполярные транзисторы;
  • реле Ардуино 12 Вольт;
  • датчик движения;
  • макетная плата;
  • резисторы;
  • провода «папа-папа», «папа-мама».

Подключение светодиодной ленты к Ардуино через реле

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

Как запрограммировать светодиодную ленту

void setup() < pinMode(12, OUTPUT); // объявляем пин 12, как выход > void loop() < digitalWrite(12, HIGH); delay(1000); digitalWrite(12, LOW) delay(1000); >
Пояснения к коду:
  1. Для зажигания LED ленты через реле можно использовать цифровой пин;
  2. Код повторяет программу для мигания светодиода на Ардуино;
  3. Для данного примера датчик движения к Ардуино можно не подключать.

Скетч для светодиодной ленты с датчиком движения

unsigned long counttime; byte w = 1; #define LED 12 // назначаем порт для реле #define PIR 2 // назначаем порт для датчика void setup() < pinMode(LED, OUTPUT); // объявляем пин LED, как выход pinMode(PIR, INPUT); // объявляем пин PIR, как вход > void loop() < delay(200); // если есть движение - включаем свет if (digitalRead(PIR) == HIGH) < digitalWrite(LED, HIGH); w = 1; > // если движения нет - включаем счетчик if (digitalRead(PIR) == LOW) < counttime = millis(); w = 0; while (w == 0) < delay(200); // если движения нет в течении 10 секунд - выключаем свет и выходим из цикла if (millis() - counttime > 10000) < digitalWrite(LED, LOW); w = 1; > // если обнаружено движение в течении 10 сек. - включаем свет и выходим из цикла if (digitalRead(PIR) == HIGH) < digitalWrite(LED, HIGH); w = 1; > > > >
Пояснения к коду:
  1. В выражении if (millis() — counttime > 10000) можно поставить любое значение в миллисекундах, при котором свет не будет выключаться;
  2. Задержка delay(200); может влиять на скорость срабатывания датчика, но позволяет немного разгрузить процессор.

Как подключить LED ленту через транзистор

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

Биполярный или полевой транзистор позволяет плавно включать LED ленту и регулировать яркость освещения в доме на Ардуино. Для примера мы взяли RGB LED ленту, чтобы переключать разные цвета. Можно использовать и обычную ленту 12 Вольт. Соберите схему, как на картинке и загрузите в плату следующий пример кода. Если у вас остались вопросы — оставляйте их в комментариях к этой записи.

Скетч для плавного включения светодиодной ленты

void setup() < pinMode(10, OUTPUT); // объявляем пин 10, как выход > void loop() < // плавное включение for(int i=0; i analogWrite(10, i); delay(5); // ставим задержку для эффекта > //плавное затухание for(int i=255; i>=0; i--) < analogWrite(10, i); delay(5); // ставим задержку для эффекта > >
Пояснения к коду:
  1. Используем для плавного зажигания LED ленты 10 пин с ШИМ сигналом;
  2. Для этого примера датчик движения к Ардуино можно не подключать.

Скетч для плавного включения от датчика движения

unsigned long counttime; byte w = 1; #define LED 10 // назначаем порт для реле #define PIR 2 // назначаем порт для датчика void setup() < pinMode(LED, OUTPUT); // объявляем пин LED, как выход pinMode(PIR, INPUT); // объявляем пин PIR, как вход > void loop() < delay(200); // если есть движение - плавно включаем свет и заходим в цикл while (w == 2) if (digitalRead(PIR) == HIGH) < for (int i = 0; i analogWrite(LED, i); delay(5); > w = 2; while (w == 2) < if (digitalRead(PIR) == HIGH) < delay(200); // если движения нет - свет не выключаем, а заходим в цикл while (w == 0) if (digitalRead(PIR) == LOW) < w = 0; >> > > // если движения нет - включаем счетчик и заходим в цикл while if (digitalRead(PIR) == LOW) < counttime = millis(); w = 0; while (w == 0) < delay(200); // если движения нет в течении 10 секунд - выключаем свет и выходим из цикла if (millis() - counttime > 10000) < for (int i = 255; i >= 0; i--) < analogWrite(LED, i); delay(5); > w = 1; > // если обнаружено движение - переходим в цикл (w == 2), не выключая свет if (digitalRead(PIR) == HIGH) < w = 2; >> > >
Пояснения к коду:
  1. в выражении if (millis() — counttime > 10000) можно поставить любое значение в миллисекундах, при котором свет не будет выключаться;
  2. задержка Ардуино delay(200); может влиять на скорость срабатывания датчика, но позволяет немного разгрузить процессор.

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

RGB светодиод – три светодиода с цветами Red (красный), Green (зелёный) и Blue (синий), размещённые в общем корпусе. Более подробную теорию можно найти в уроке про RGB светодиоды.

Подключение

“Голый” RGB светодиод подключается к источнику 5V точно так же, как обычный светодиод: с ограничением тока при помощи резисторов, иначе довольно быстро сгорит. Но в наборе GyverKIT идёт удобный RGB модуль, на котором резисторы уже распаяны, а сам светодиод имеет общий катод:

Соответственно достаточно подключить GND к пину “-“, а пины RGB – к любым цифровым пинам микроконтроллера.

  • При подключении к обычным цифровым пинам мы получим всего 8 цветов – чёрный (все выключены), белый (все включены) и 6 сочетаний между тремя цветами
  • При подключении к ШИМ пниам у нас появится возможность контролировать яркость каждого канала цвета, что при стандартных настройках даёт 256 градаций яркости и 256*256*256 = 16.7 миллионов оттенков для RGB светодиода!
  • Подключение к Wemos будет точно такое же, но там ШИМ сигнал можно включить на любом пине, причём с глубиной 10 бит (1024 значения), что даёт 1 миллиард оттенков! Это так много, что глазами различить не получится =)
    • У Wemos логический уровень 3.3V, поэтому светодиод будет гореть менее ярко, т.к. будет потреблять меньший ток. В то же время допустимый ток с пина Wemos ниже, чем у Arduino, поэтому всё работает “как нужно”!

    Библиотеки

    По сути библиотеки не нужны, так как светодиодом можно управлять при помощи базовых функций вывода. Но для удобства работы с разными цветовыми моделями удобнее использовать уже готовые алгоритмы, например мою библиотеку GRGB. Библиотека идёт в архиве к набору GyverKIT, а свежую версию всегда можно установить/обновить из встроенного менеджера библиотек Arduino по названию GRBG. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.

    Примеры ручного управления

    Для удобства управления обозначим пины, подключение например как по схеме выше:

    #define R_PIN 6 #define G_PIN 5 #define B_PIN 3

    В блоке setup() сделаем пины выходами:

    pinMode(R_PIN, OUTPUT); pinMode(G_PIN, OUTPUT); pinMode(B_PIN, OUTPUT);

    Готово! Теперь можно включить любой нужный цвет. Объединим всё в одну программу и будем включать цвета на полную яркость поочерёдно:

    #define R_PIN 6 #define G_PIN 5 #define B_PIN 3 void setup() < pinMode(R_PIN, OUTPUT); pinMode(G_PIN, OUTPUT); pinMode(B_PIN, OUTPUT); >void loop()

    Примеры с GRGB

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

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

    Пример простого переключения основных цветов

    #define R_PIN 6 #define G_PIN 5 #define B_PIN 3 #include GRGB led(COMMON_CATHODE, R_PIN, G_PIN, B_PIN); void setup() < >void loop() < led.setRGB(255, 0, 0); // установить красный delay(1000); led.setRGB(0, 255, 0); // установить зелёный delay(1000); led.setRGB(0, 0, 255); // установить синий delay(1000); >

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

    В этом примере плавно меняются все цвета при помощи функции “цветового колеса”

    #define R_PIN 6 #define G_PIN 5 #define B_PIN 3 #include GRGB led(COMMON_CATHODE, R_PIN, G_PIN, B_PIN); void setup() < >void loop() < static byte count = 0; // переменная "счётчик" led.setWheel8(count); // ставим значение колеса (0-255) count++; // за счёт использования типа byte переменная будет меняться от 0 до 255 delay(50); // задержка для плавности >

    Домашнее задание

    • Изучить возможности библиотеки GRGB
    • Попробовать другие цветовые режимы

    Связанные уроки

    • Обычные светодиоды
    • RGB светодиоды
    • ШИМ сигнал

    Адресная светодиодная лента Ардуино WS2812B

    Адресная лента ws2812b Ардуино

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

    Как проверить адресную ленту без Ардуино

    WS2812B светодиоды

    Многих интересует, как включить адресную ленту без Ардуино и проверить ее на работоспособность. Если просто подключить питание к ленте, то ничего не произойдет — проверить ленту без контроллера нельзя. Если задеть цифровой вход адресной ленты, то могут загореться несколько светодиодов из-за случайных помех, которые воспринимаются контроллерами ws2812b светодиодов, как команды.

    Если под рукой нет платы Ардуино, то можно использовать для проверки специальный контроллер. В крайнем случае, просто потрогать цифровой провод, чтобы понять будут гореть светодиоды на ленте или нет. Другого надежного способа проверить работу ws2812b ленты нет, поэтому рассмотрим далее управление и программирование адресной светодиодной ленты на микроконтроллере Ардуино Нано или Уно.

    Как подключить адресную ленту WS2812B Arduino

    Для этого занятия понадобится:

    • Arduino Uno / Arduino Nano / Arduino Mega;
    • лента WS2812B;
    • макетная плата;
    • 1 резистор от 100 до 500 Ом;
    • провода «папа-папа».

    WS2812B светодиоды довольно энергоемкие, один светодиод потребляет до 60 мА при максимальной яркости. Для ленты со 100 диодами потребуется блок питания на 6 и более Ампер. Микроконтроллер Arduino и светодиодная лента могут быть подключены к разным источникам питания, но «земля» должна быть общая. Дело в том, что пин GND тоже участвует в управлении адресной лентой от платы Ардуино Уно.

    Схема подключения адресной ленты 5V

    WS2812B Arduino Uno Arduino Nano Arduino Mega
    GND GND GND GND
    5V 5V 5V 5V
    DO 10 10 10

    Для работы с лентой используются три популярные библиотеки — FastLED, AdafruitNeoPixel и LightWS2812. Все библиотеки доступны для скачивания на нашем сайте. Работать с библиотеками FastLED и Adafruit NeoPixel просто, отличаются они в функциональности и объеме занимаемой памяти. После сборки этой простой схемы и установки библиотек, загрузите скетч для адресной светодиодной ленты.

    Скетч. Тестирование адресной ленты WS2812b Arduino

    #include "Adafruit_NeoPixel.h" // подключаем библиотеку #define PIN 10 // указываем пин для подключения ленты #define NUMPIXELS 3 // указываем количество светодиодов в ленте // создаем объект strip с нужными характеристиками Adafruit_NeoPixel strip (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); void setup() < strip.begin(); // инициализируем ленту strip.setBrightness(50); // указываем яркость светодиодов (максимум 255) > void loop() < strip.setPixelColor(0, strip.Color(255, 0, 0)); // включаем красный цвет на 1 светодиоде strip.show(); // отправляем сигнал на ленту delay(500); strip.clear(); // выключаем все светодиоды strip.setPixelColor(1, strip.Color(0, 0, 255)); // включаем синий цвет на 2 светодиоде strip.show(); // отправляем сигнал на ленту delay(500); strip.clear(); // выключаем все светодиоды strip.setPixelColor(2, strip.Color(255, 255, 255)); // включаем белый цвет на 3 светодиоде strip.show(); // отправляем сигнал на ленту delay(500); strip.clear(); // выключаем все светодиоды >
    Пояснения к коду:
    1. нумерация светодиодов в ленте начинается с нуля, поэтому если мы хотим включить первый светодиод, то указывать надо «0».

    Схема подключения адресной ленты 12 Вольт

    Если у вас лента на 12 Вольт, то ее нужно подключать по схеме, размещенной выше. Резистор на цифровом пине защищает его от выгорания (если питание к ленте будет отключено, то она начнет питаться от цифрового пина, при этом пин может выгореть. Также не стоит подключать питание ленты к плате Ардуино, иначе может выгореть защитный диод на Ардуино или USB порт на компьютере (в худшем случае).

    Скетч. Управление адресной лентой Ардуино

    #include "Adafruit_NeoPixel.h" // подключаем библиотеку #define PIN 10 // указываем пин для подключения ленты #define NUMPIXELS 3 // указываем количество светодиодов в ленте // создаем объект strip с нужными характеристиками Adafruit_NeoPixel strip (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); void setup() < strip.begin(); // инициализируем ленту strip.setBrightness(50); // указываем яркость светодиодов (максимум 255) > void loop() < // поочередно включаем красный цвет for (int i = -1; i < NUMPIXELS; i++) < strip.setPixelColor(i, strip.Color(255, 0, 0)); strip.show(); delay(100); > // поочередно включаем зеленый цвет for (int i = -1; i < NUMPIXELS; i++) < strip.setPixelColor(i, strip.Color(0, 255, 0)); strip.show(); delay(100); > // поочередно включаем синий цвет for (int i = -1; i < NUMPIXELS; i++) < strip.setPixelColor(i, strip.Color(0, 0, 255)); strip.show(); delay(100); > >
    Пояснения к коду:
    1. с помощью библиотеки Adafruit NeoPixel довольно просто управлять адресной лентой. В примерах к библиотеке можно найти много различных эффектов. Мы продемонстрировали простой вариант с циклом for для включения ленты.

    Заключение. В этом обзоре мы рассмотрели лишь подключение и возможность управления адресной лентой от Ардуино. Так как возможности работы с библиотеками FastLED, AdafruitNeoPixel довольно разнообразны. Больше интересных примеров на Arduino и WS2812B размещено в разделе Проекты на Ардуино, где представлены проекты с бегущей строкой на адресной ленте и другие световые эффекты.

    Как подключить RGB светодиод к Ардуино

    На этом занятии мы будем использовать цифровые и аналоговые выходы с «широтно импульсной модуляцией» на плате Arduino для включения RGB светодиода с различными оттенками. Использование RGB LED ленты позволяет создать освещение интерьера с любым оттенком цвета. Расскажем про устройство и распиновку полноцветного (RGB) светодиода и рассмотрим директиву #define в языке C++.

    Устройство и назначение RGB светодиода

    Для отображения всей палитры оттенков вполне достаточно три цвета, используя RGB синтез (Red — красный, Green — зеленый, Blue — синий). RGB палитра используется не только в графических редакторах, но и в сайтостроении. Смешивая цвета в разной пропорции можно получить практически любой цвет. Преимущества RGB светодиодов в простоте конструкции, небольших габаритах и высоком КПД светоотдачи.

    RGB светодиоды объединяют три кристалла разных цветов в одном корпусе. RGB LED имеет 4 вывода — один общий (анод или катод имеет самый длинный вывод) и три цветовых вывода. К каждому цветовому выходу следует подключать резистор. Кроме того, модуль RGB LED Arduino может сразу монтироваться на плате и иметь встроенные резисторы — этот вариант более удобный для занятий в кружке робототехники.

    Фото. Распиновка RGB светодиода

    Распиновка RGB светодиода указана на фото выше. Заметим также, что для многих полноцветных (трехцветных) светодиодов необходимы светорассеиватели, иначе будут видны составляющие цвета. Далее подключим трехцветный светодиод к Ардуино и заставим его сначала мигать разными цветами, а затем плавно переливаться разными цветами с помощью «широтно импульсной модуляции».

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

    Для этого занятия потребуется:

    • Arduino Uno / Arduino Nano / Arduino Mega;
    • макетная плата;
    • RGB светодиод;
    • 3 резистора 220 Ом;
    • провода «папа-мама».

    Схема подключения RGB LED к Ардуино на макетной плате

    Модуль «RGB светодиод» можно подключить напрямую к плате, без проводов и макетной платы. Подключите модуль с полноцветным RGB светодиодом к следующим пинам: Минус — GND, B — Pin13, G — Pin12, R — Pin11 (смотри первое фото). Если вы используете RGB LED (Light Emitting Diode), то подключите его по схеме на фото. После подключения модуля и сборки схемы на Ардуино загрузите скетч в плату.

    Скетч для мигания RGB светодиодом на Ардуино

    #define RED 11 // присваиваем имя RED для пина 11 #define GRN 12 // присваиваем имя GRN для пина 12 #define BLU 13 // присваиваем имя BLU для пина 13 void setup() < pinMode(RED, OUTPUT); // используем Pin11 для вывода pinMode(GRN, OUTPUT); // используем Pin12 для вывода pinMode(BLU, OUTPUT); // используем Pin13 для вывода > void loop() < digitalWrite(RED, HIGH); // включаем красный свет digitalWrite(GRN, LOW); digitalWrite(BLU, LOW); delay(1000); // устанавливаем паузу для эффекта digitalWrite(RED, LOW); digitalWrite(GRN, HIGH); // включаем зеленый свет digitalWrite(BLU, LOW); delay(1000); // устанавливаем паузу для эффекта digitalWrite(RED, LOW); digitalWrite(GRN, LOW); digitalWrite(BLU, HIGH); // включаем синий свет delay(1000); // устанавливаем паузу для эффекта >
    Пояснения к коду:
    1. с помощью директивы #define мы заменили номер пинов 11, 12 и 13 на соответствующие имена RED , GRN и BLU . Это сделано для удобства, чтобы не запутаться в скетче и понимать какой цвет мы включаем;
    2. в процедуре void loop() мы поочередно включаем все три цвета на RGB.

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

    Управление rgb светодиодом на Arduino можно сделать плавным, используя аналоговые выходы с «ШИМ». Для этого ножки светодиода необходимо подключить к аналоговым выходам, например, к пинам 11, 10 и 9. И подавать на аналоговые выходы микроконтроллера различные значения ШИМ (PWM), для этого воспользуемся циклом for, с помощью которого можно повторять нужные команды в программе.

    Скетч для плавного мигания RGB светодиода

    #define RED 11 // присваиваем имя RED для пина 11 #define GRN 10 // присваиваем имя GRN для пина 10 #define BLU 9 // присваиваем имя BLU для пина 9 void setup() < pinMode(RED, OUTPUT); // используем Pin11 для вывода pinMode(GRN, OUTPUT); // используем Pin10 для вывода pinMode(BLU, OUTPUT); // используем Pin9 для вывода > void loop() < // плавное включение/выключение красного цвета for (int i = 0; i analogWrite(RED, i); delay(2); > for (int i = 255; i >= 0; i--) < analogWrite(RED, i); delay(2); > // плавное включение/выключение зеленого цвета for (int i = 0; i analogWrite(GRN, i); delay(2); > for (int i = 255; i >= 0; i--) < analogWrite(GRN, i); delay(2); > // плавное включение/выключение синего цвета for (int i = 0; i analogWrite(BLU, i); delay(2); > for (int i = 255; i >= 0; i--) < analogWrite(BLU, i); delay(2); > >
    Пояснения к коду:
    1. с помощью директивы #define мы заменили номера пинов 9, 10 и 11 на соответствующие имена RED , GRN и BLU . Это сделано для удобства, чтобы не запутаться в скетче и понимать какой цвет мы включаем;
    2. пины 9, 10 и 11 мы использовали, как аналоговые выходы analogWrite .

    Плавное включение нескольких цветов RGB LED

    #define RED 11 // присваиваем имя RED для пина 11 #define GRN 10 // присваиваем имя GRN для пина 10 #define BLU 9 // присваиваем имя BLU для пина 9 void setup() < pinMode(RED, OUTPUT); // используем Pin11 для вывода pinMode(GRN, OUTPUT); // используем Pin10 для вывода pinMode(BLU, OUTPUT); // используем Pin9 для вывода > void loop() < // плавное включение красного и зеленого цвета for (int i = 0; i analogWrite(RED, i); analogWrite(GRN, i); delay(2); > for (int i = 255; i >= 0; i--) < analogWrite(RED, i); analogWrite(GRN, i); delay(2); > // плавное включение красного и синего цвета for (int i = 0; i analogWrite(RED, i); analogWrite(BLU, i); delay(2); > for (int i = 255; i >= 0; i--) < analogWrite(RED, i); analogWrite(BLU, i); delay(2); > >

    Заключение. Аналоговые выходы на Ардуино используют «широтно импульсную модуляцию» для получения различной силы тока. Мы можем подавать на все три цветовых входа на светодиоде различное значение ШИМ-сигнала в диапазоне от 0 до 255, что позволит нам получить на RGB LED Arduino практически любой оттенок света. Если у вас остались вопросы — оставляйте их в комментариях к этой записи.

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

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