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

Включение светодиодной ленты от 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); >
Пояснения к коду:
- Для зажигания LED ленты через реле можно использовать цифровой пин;
- Код повторяет программу для мигания светодиода на Ардуино;
- Для данного примера датчик движения к Ардуино можно не подключать.
Скетч для светодиодной ленты с датчиком движения
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; > > > >
Пояснения к коду:
- В выражении if (millis() — counttime > 10000) можно поставить любое значение в миллисекундах, при котором свет не будет выключаться;
- Задержка 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); // ставим задержку для эффекта > >
Пояснения к коду:
- Используем для плавного зажигания LED ленты 10 пин с ШИМ сигналом;
- Для этого примера датчик движения к Ардуино можно не подключать.
Скетч для плавного включения от датчика движения
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; >> > >
Пояснения к коду:
- в выражении if (millis() — counttime > 10000) можно поставить любое значение в миллисекундах, при котором свет не будет выключаться;
- задержка Ардуино 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 — это вершина эволюции лент. Каждый светодиод в ленте состоит из обычного RGB светодиода и контроллера с тремя транзисторными выходами. Благодаря этому есть возможность управлять цветом любого светодиода и создавать потрясающие цветовые и световые эффекты. Именно поэтому устройство пользуется популярностью, несмотря на высокую стоимость.
Как проверить адресную ленту без Ардуино

Многих интересует, как включить адресную ленту без Ардуино и проверить ее на работоспособность. Если просто подключить питание к ленте, то ничего не произойдет — проверить ленту без контроллера нельзя. Если задеть цифровой вход адресной ленты, то могут загореться несколько светодиодов из-за случайных помех, которые воспринимаются контроллерами ws2812b светодиодов, как команды.
Если под рукой нет платы Ардуино, то можно использовать для проверки специальный контроллер. В крайнем случае, просто потрогать цифровой провод, чтобы понять будут гореть светодиоды на ленте или нет. Другого надежного способа проверить работу ws2812b ленты нет, поэтому рассмотрим далее управление и программирование адресной светодиодной ленты на микроконтроллере Ардуино Нано или Уно.
Как подключить адресную ленту WS2812B Arduino
Для этого занятия понадобится:
- Arduino Uno / Arduino Nano / Arduino Mega;
- лента WS2812B;
- макетная плата;
- 1 резистор от 100 до 500 Ом;
- провода «папа-папа».
WS2812B светодиоды довольно энергоемкие, один светодиод потребляет до 60 мА при максимальной яркости. Для ленты со 100 диодами потребуется блок питания на 6 и более Ампер. Микроконтроллер Arduino и светодиодная лента могут быть подключены к разным источникам питания, но «земля» должна быть общая. Дело в том, что пин GND тоже участвует в управлении адресной лентой от платы Ардуино Уно.

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(); // выключаем все светодиоды >
Пояснения к коду:
- нумерация светодиодов в ленте начинается с нуля, поэтому если мы хотим включить первый светодиод, то указывать надо «0».

Если у вас лента на 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); > >
Пояснения к коду:
- с помощью библиотеки 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 светодиодом на Ардуино
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- макетная плата;
- RGB светодиод;
- 3 резистора 220 Ом;
- провода «папа-мама».

Модуль «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); // устанавливаем паузу для эффекта >
Пояснения к коду:
- с помощью директивы #define мы заменили номер пинов 11, 12 и 13 на соответствующие имена RED , GRN и BLU . Это сделано для удобства, чтобы не запутаться в скетче и понимать какой цвет мы включаем;
- в процедуре 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); > >
Пояснения к коду:
- с помощью директивы #define мы заменили номера пинов 9, 10 и 11 на соответствующие имена RED , GRN и BLU . Это сделано для удобства, чтобы не запутаться в скетче и понимать какой цвет мы включаем;
- пины 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 практически любой оттенок света. Если у вас остались вопросы — оставляйте их в комментариях к этой записи.