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

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

Рынок светодиодного освещения набирает бешеные обороты, и не сложно понять, почему. Они дешевы для производства, потребляют значительно меньше энергии, чем другие варианты освещения, и в большинстве случаев не нагреваются, что делает их безопасными для самых разных целей. Одним из самых популярных светодиодных продуктов является LED-лента. В этой статье мы рассмотрим, как настроить два наиболее распространенных типа светодиодных лент на Arduino. Эти проекты очень просты, и даже если вы новичок в электронике Arduino или DIY, вы сможете это сделать. Мы также будем использовать IDE Arduino для их контроля. В этом проекте используется Arduino Uno, хотя вы можете взять практически любую совместимую плату (например, NodeMCU). Здесь ссылки на все описанные в статье устройсва и материалы. Перейдя по ссылкам ниже вы сможете купить себе светодиодные ленты и Ардуино по партнерской цене. Arduino по лучшей цене с дополнительной скидкой от Lightru SPI светодиодная лента — отличного качества — по партнерской цене

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

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

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

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

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

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

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

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

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

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

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

Почему NeoPixel?

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


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

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

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

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

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

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

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

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

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

Технические характеристики

Адресная светодиодная лента состоит из RGB-светодиодов в SMD корпусе 5050 и микрочипов ШИМ-драйверов. В настоящее время наиболее популярными являются адресные LED-ленты с использованием чипов WS2811 и WS2812B. Модификация WS2811 представляет собой интегральную микросхему (ИМС) в корпусе DIP-8 (9,2х6,4 мм) или SOP-8 (5,1х4,0 мм). Данный 3-канальный драйвер имеет следующую конфигурацию выводов:

  • 1 – ШИМ-регулируемый выход (красный);
  • 2 – ШИМ-регулируемый выход (зелёный);
  • 3 – ШИМ-регулируемый выход (синий);
  • 4 – общий;
  • 5 – выход передачи данных;
  • 6 – вход передачи данных;
  • 7 – выбор режима работы;
  • 8 – питание +5В.

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

В адресной ленте с использованием чипа WS2811 и питанием 5 вольт микросхема драйвера располагается в непосредственной близости перед каждым RGB-светодиодом SMD 5050, рядом с которым также установлены токоограничивающие резисторы и конденсатор, защищающий от помех. Но на сегодняшний момент такие модели устарели и встречаются крайне редко. Сегодня в продаже имеются адресные светодиодные ленты на чипах WS2811 только с питанием от +12 В. В этом случае чип WS2811 управляет не одним светодиодом, а группой из 3 штук.


Различные оттенки светодиодной ленты.

Не успела ИМС WS2811 обрести популярность, как её место заняла более совершенная WS2812B. Данный тип ШИМ-драйвера намного компактнее и размещается непосредственно в корпусе светодиода SMD 5050. Если присмотреться, то под прозрачным люминофором можно увидеть миниатюрный чёрный прямоугольник с отходящими позолоченными проводниками.

Подобная унификация позволила значительно упростить сборку адресных светодиодных лент и модулей, а сам WS2812B имеет лишь 4 вывода:

  • 1 – питание (+3,5… +5,3 В);
  • 2 – выход передачи данных;
  • 3 – общий;
  • 4 – вход передачи данных.

ИМС драйвера потребляет не более 1 мкА, а максимальный ток одного адресного светодиода составляет 60 мА. Диапазон рабочих температур: от -25 до +80°C. При выборе адресной светодиодной ленты важным критерием является степень защиты от влаги и пыли. Для использования в уличных условиях подойдут только модели с IP65 и IP67.

Будет интересно Принцип работы диода и сфера его применения

Материал в тему: Что такое конденсатор

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

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

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

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

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

Подключение

  • GND ленты соединяется с GND микроконтроллера, так как все сигналы ходят относительно “земли”
  • У любого отрезка ленты есть вход, а есть выход: у входа средний пин называется DI, а у выхода – DO
    При работе с Wemos в программе нужно указывать номер GPIO, а не цифру с платы. См. распиновку

    . К Arduino подключается именно вход ленты, то есть пин DI

  • DI подключается на любой цифровой пин. Если лента питается отдельно от Arduino – DI нужно подключать через резистор 100-500 Ом, чтобы избежать питания ленты через пин, что приведёт к выходу из строя пина Arduino или первого светодиода в ленте. Лучше ставить резистор в любом случае, чтобы исключить такую возможность
  • 5V ленты подключается к питанию. Питание может быть общим с Arduino
  • Лента потребляет большой ток, поэтому питать её от Arduino, подключенной к USB – нельзя. В наборе GyverKIT есть сетевой адаптер на 5V, ленту нужно питать от него

В рассмотренных схемах Arduino питается от USB. Для автономной работы можно подключить питание с адаптера на пин 5V платы.

Управление 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); }

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

Как сохранить данные во внутренней памяти Arduino nodemcu

Для данной задачи мы будем использовать несколько команд: EEPROM.read и EEPROM.write. Сохранять мы будет не только логин и пароль к вай фай, мы будем сохранять: wifi, пользовательские настройки переходов. Для этого напишем несколько функций:

  • Запись в память EEPROM
  • Чтение из памяти EEPROM
  • Очистка памяти EEPROM

Отдельно хочу сказать об очистке, она обязательно нужна и ее нужно будет вызывать каждый раз перед записью. Запись происходит по байтам, каждый байт я буду называть ячейкой. Очистка у нас будет своя, мы не будем обнулять байты, мы будем записывать в каждую ячейку свой символ “#”, так нам будет проще и это будет нагляднее. Я определил три диапазона памяти, с которой мы будем работать: с 20 ячейки по 90 мы будем хранить данные для подключения к wifi, с 90-100 данные пользовательского перехода и с 100-2000 будем хранить сами пользовательские переходы, думаю нам этого хватит. После этого пишем код для наших функций:

//*************************************************** void ClearEprom(int s1, int s2) { EEPROM.begin(2000); for (int i = s1; i < s2; i++) { EEPROM.write(i, 35); } EEPROM.commit(); EEPROM.end(); } //*************************************************** void EEPROM_writeAnything(int ee, String val) { EEPROM.begin(2000); byte *text; int len; len = val.length() + 1; unsigned char* buf = new unsigned char; val.getBytes(buf, len, 0); for (int i = 0; i < len; i++) { int s; s = ee + i; byte sim; sim = byte(buf); EEPROM.write(s, sim); } EEPROM.commit(); EEPROM.end(); } //*************************************************** String ReadEprom(int s, int count) { EEPROM.begin(2000); String txt; unsigned int i; for ( i = s; i < (s + count — 1); i++) { if (EEPROM.read(i) == 35) { break; } txt += char(EEPROM.read(i)); } EEPROM.commit(); EEPROM.end(); return txt; }

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

Признаки и симптомы ВПЧ 45 у женщин

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

Папилломавирус 45 не имеет характерных признаков, но заподозрить инфекцию можно по следующим симптомам:

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

Когда инфекция, вызванная вирусом папилломы человека, переходит в 3 стадию (после которой развивается рак), у представителей обоих полов появляются головокружения, слабость, снижается аппетит, сексуальная активность.

Сборка устройства

Вот так выглядят все необходимые ингредиенты:

Спаиваем всё по схеме и устанавливаем в коробку:

На всякий случай соединение ключей:


Ключ на IRF3205

Танцующие огни

Для безопасного программирования нашей платы отключите VIN линия от линии электропередач. Вы прикрепите его позже.

Подключите Arduino к компьютеру и откройте IDE Arduino. Проверьте, правильно ли выбрана плата и номер порта в Инструменты> Доска а также Инструменты> Порт меню.

Мы будем использовать FastLED библиотека для проверки нашей установки. Вы можете добавить библиотеку, нажав на Эскиз> Включить библиотеку> Управление библиотеками и поиск FastLED. Нажмите «Установить», и библиотека будет добавлена ​​в IDE.

Под Файл> Примеры> FastLED выберите DemoReel100 эскиз. Этот набросок циклически повторяет различные вещи, которые можно сделать с WS2812 Светодиодные полосы, и это невероятно легко установить.

Все, что вам нужно изменить, это DATA_PIN переменная, чтобы она соответствовала контакт 13, и NUM_LEDS переменная, чтобы определить, сколько светодиодов в полосе, которую вы используете. В этом случае я использую только небольшую линию из 10 светодиодов, вырезанных из более длинной полосы. Используйте больше для большего светового шоу!

Это оно! Загрузите эскиз на свою плату, отсоедините кабель USB и включите питание 5 В. Наконец, снова подключите VIN Arduino к линии электропередачи и посмотрите шоу!

Если ничего не происходит, проверьте проводку и убедитесь, что вы указали правильный вывод Arduino на демонстрационном эскизе.

Отличие лент ws2812, ws2812b, ws2811

Наиболее распространенные модели со встроенными микросхемами имеют маркировку WS2812 или WS2812b. С внешними – WS2811.

Чем модель ws2812 отличается от ws2812b? Первые имеют 6 контактов (PIN) для управления, а вторые, с буковкой “b” – всего четыре.

На 2812 питание светодиода и чипа разнесены. У 2812b питание интегрированного драйвера и светодиода вынесено на один PIN (VDD).

А в чем главные отличия между ws2812b и ws2811?

ws2812b – работает от 5v

ws2811 – питание 12v (в 2015г прекращен выпуск последних моделей на 5в)

WS2812 управляет кластерами по одному диоду, WS2811 управляет тремя светодиодами одновременно.

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

ДОКУМЕНТАЦИЯ

Список функций и методов библиотеки из файла .h

// объявление GRGB(uint8_t rpin, uint8_t gpin, uint8_t bpin); // объявление с выбором режима генерации ШИМ (NORM_PWM / ANY_PWM) // NORM_PWM — дефолтные ШИМ пины (3, 5, 6, 9, 10, 11 для UNO/NANO/MINI) // ANY_PWM — любой пин делается ШИМ пином (частота ~150 Гц). Подробности в библиотеке GyverHacks GRGB(uint8_t rpin, uint8_t gpin, uint8_t bpin, boolean pwmmode); // NORMAL / REVERSE — направление ШИМ // общий катод — NORMAL // общий анод — REVERSE void setDirection(boolean direction); // установка ограничения по току: // numLeds — количество светодиодов // vcc — напряжение питания в милливольтах // maxCur — максимальный ток void setMaxCurrent(uint16_t numLeds, float vcc, int maxCur); void setBrightness(byte bright); // установка яркости (0-255) void constantBrightTick(int minVolts, int vcc); // корректировка под напряжение питания void gammaTick(int vcc); // корректировка красного цвета при падении напряжения питания void setHEX(uint32_t color); // установка цвета в формате HEX (вида 0x808080 ) void setRGB(uint8_t r, uint8_t g, uint8_t b); // установка цвета в пространстве RGB (каждый цвет 0-255) void setHSV(uint8_t h, uint8_t s, uint8_t v); // установка цвета в пространстве HSV (каждая велиична 0-255) void setHSV_fast(uint8_t h, uint8_t s, uint8_t v); // более быстрый, но менее красивый вариант предыдущей функции void setKelvin(int16_t temperature); // установить цвет как температуру в Кельвинах (от 1000 до 10’000 — от красного к синему) void colorWheel(int color); // установить цвет (0 — 1530). Максимально широкая палитра ярких цветов (смеси RGB) // плавно изменить текущий цвет к новому за вермя fadeTime в миллисекундах // для HEX цвета void fadeTo(uint32_t newColor, uint16_t fadeTime); // для R G B void fadeTo(uint8_t new_r, uint8_t new_g, uint8_t new_b, uint16_t fadeTime);

Подключение к Arduino

Прямое подключение светодиодной ленты к Arduino уместно только в случае применения слабых LED-диодов. Для светодиодной ленты между ней и платой необходимо установить дополнительные электротехнические элементы.

Через реле

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

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

С помощью биполярного транзистора

Если нужно повысить ток или напряжение на выходе, подключите биполярный транзистор. При его выборе ориентируйтесь на ток нагрузки. Ток управления не превышает 20 мА, поэтому добавьте резистор на 1 – 10 кОм для ограничения тока за счет сопротивления.

С помощью полевого транзистора

Вместо биполярных транзисторов для управления светодиодными лентами возьмите полевые (сокращенно — МОП). Разница между ними связана с принципом управления: биполярные изменяют ток, полевые — напряжение на затворе. Благодаря этому небольшой ток затвора управляет большой нагрузкой (десятками ампер).

С помощью плат расширения

Если нет желания использовать реле и транзисторы, можно купить целые блоки — платы расширения. К ним относятся Wi-Fi, Bluetooth, эквалайзер, драйвер и т. д., которые необходимы для управления нагрузкой разных мощностей и напряжений. Это могут быть как одноканальные элементы, которые подойдут монохромным лентам, так и многоканальные (для управления цветными RGB-лентами).

Рейтинг
( 2 оценки, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]