Принцип управления нагрузкой через Ардуино
Плата Ардуино имеет два типа портов вывода: цифровой и аналоговый (ШИМ-контроллер). У цифрового порта возможно два состояния – логический ноль и логическая единица. Если подключить к нему светодиод он либо будет светиться, либо не будет.
Аналоговый выход представляет собой ШИМ-контроллер, на который подаётся сигнал частотой около 500Гц с регулируемой скважностью. Что такое ШИМ-контроллер и принцип его работы можно найти в интернете. Через аналоговый порт возможно не только включать и выключать нагрузку, а и изменять напряжение (ток) на ней.
Синтаксис команд
Цифровой вывод:
pinMode(12, OUTPUT); — задаём порт 12 портом вывода данных; digitalWrite(12, HIGH); — подаём на дискретный выход 12 логическую единицу, зажигая светодиод.
Аналоговый вывод:
analogOutPin = 3; – задаём порт 3 для вывода аналогового значения; analogWrite(3, значение); – формируем на выходе сигнал с напряжением от 0 до 5В. Значение – скважность сигнала от 0 до 255. При значении 255 максимальное напряжение.
Способы управления светодиодами через Ардуино
Напрямую через порт можно подключить лишь слабый светодиод, да и то лучше через ограничительный резистор. Попытка подключить более мощную нагрузку выведет его из строя.
Для более мощных нагрузок, в том числе светодиодных лент, используют электронный ключ – транзистор.
Различные программы
Библиотеки с программами для платы Arduino можно загрузить с официального сайта или найти в Интернете на других информационных ресурсах. Если есть навыки, можете даже самостоятельно написать скетч-программу (исходный код). Для сбора электрической цепи не требуется каких-то специфичных знаний.
Варианты применения системы под управлением Arduino:
- Освещение. Наличие датчика позволит задать программу, в соответствии с которой свет в комнате либо появляется сразу, либо плавно включается параллельно заходу солнца (с увеличением яркости). Для включения можно использовать Wi-Fi, телефон и интеграцию в систему «Умный дом».
- Освещение коридора и лестничных площадок. Arduino позволит организовать освещение каждой детали (к примеру, ступени) отдельно. Добавьте в плату датчик движения, чтобы адресные светодиоды загорались последовательно в зависимости от того места, где зафиксировано движение объекта. Если движения нет, диоды будут гаснуть.
- Светомузыка. Воспользуйтесь фильтрами и подайте на аналоговый вход звуковые сигналы, чтобы на выходе организовать светомузыку (эквалайзер).
- Модернизация компьютера. Некоторые датчики позволят создать зависимость цвета светодиодов от температуры процессора, его загрузки, нагрузки на оперативную память. Используется протокол DMX 512.
Микросхемы Arduino расширяют возможности применения монохромных и многоканальных (RGB) светодиодных лент. Помимо слияния различных цветов, образования сотен тысяч оттенков сможете создать неповторимые эффекты — затухание при заходе солнца, периодическое включение/выключение при фиксации движения и многое другое.
Виды транзисторных ключей
- Биполярный;
- Полевой;
- Составной (сборка Дарлингтона).
Способы подключения нагрузки | ||
Через биполярный транзистор | Через полевой транзистор | Через коммутатор напряжения |
При подаче высокого логического уровня (digitalWrite(12, HIGH);) через порт вывода на базу транзистора через цепочку коллектор-эмиттер потечет опорное напряжение на нагрузку. Таким образом можно включать и отключать светодиод.
Аналогичным образом работает и полевой транзистор, но поскольку у него вместо «базы» сток, который управляется не током, а напряжением, ограничительный резистор в этой схеме необязателен.
Биполярный вид не позволяет регулировать мощные нагрузки. Ток через него ограничен на уровне 0,1-0,3А.
Полевые транзисторы работают с более мощными нагрузками с током до 2А. Для ещё более мощной нагрузки используют полевые транзисторы Mosfet с током до 9А и напряжением до 60В.
Вместо полевых можно использовать сборку Дарлингтона из биполярных транзисторов на микросхемах ULN2003, ULN2803.
Микросхема ULN2003 и принципиальная схема электронного коммутатора напряжения:
Как сохранить данные во внутренней памяти 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 и возвращаем текстовую строку
Принцип работы транзистора для плавного управления светодиодной лентой
Транзистор работает как водопроводный кран, только для электронов. Чем выше напряжение, подаваемое на базу биполярного транзистора либо сток полевого, тем меньше сопротивление в цепочке эмиттер-коллектор, тем выше ток, проходящий через нагрузку.
Подключив транзистор к аналоговому порту Ардуино, присваиваем ему значение от 0 до 255, изменяем напряжение, подаваемое на коллектор либо сток от 0 до 5В. Через цепочку коллектор-эмиттер будет проходить от 0 до 100% опорного напряжения нагрузки.
Для управления светодиодной лентой arduino необходимо подобрать транзистор подходящей мощности. Рабочий ток для питания метра светодиодов 300-500мА, для этих целей подойдет силовой биполярный транзистор. Для большей длины потребуется полевой транзистор.
Схема подключения LED ленты к ардуино:
Подключение к Arduino
Прямое подключение светодиодной ленты к Arduino уместно только в случае применения слабых LED-диодов. Для светодиодной ленты между ней и платой необходимо установить дополнительные электротехнические элементы.
Через реле
Подключите реле к плате Arduino через цифровой выход. Управляемая полоса может иметь одно из двух состояний — включения или выключения. Если нужно организовать управление RGB-лентой, понадобятся три реле.
Значение тока, контролируемое данным устройством, ограничивается мощностью катушки. Если мощность слишком мала, элемент не сможет замыкать большие контакты. Для наиболее высоких мощностей примените релейные сборки.
С помощью биполярного транзистора
Если нужно повысить ток или напряжение на выходе, подключите биполярный транзистор. При его выборе ориентируйтесь на ток нагрузки. Ток управления не превышает 20 мА, поэтому добавьте резистор на 1 – 10 кОм для ограничения тока за счет сопротивления.
Обратите внимание! В идеале нужно пользоваться транзистором n-p-n типа на базе общего эмиттера. Если требуется большое усиление, примените транзисторную сборку.
С помощью полевого транзистора
Вместо биполярных транзисторов для управления светодиодными лентами возьмите полевые (сокращенно — МОП). Разница между ними связана с принципом управления: биполярные изменяют ток, полевые — напряжение на затворе. Благодаря этому небольшой ток затвора управляет большой нагрузкой (десятками ампер).
Обязательно добавьте к схеме резистор для ограничения тока. Из-за высокой чувствительности к помехам к выходу контроллера подключается масса резистора на 10 кОм.
С помощью плат расширения
Если нет желания использовать реле и транзисторы, можно купить целые блоки — платы расширения. К ним относятся Wi-Fi, Bluetooth, эквалайзер, драйвер и т. д., которые необходимы для управления нагрузкой разных мощностей и напряжений. Это могут быть как одноканальные элементы, которые подойдут монохромным лентам, так и многоканальные (для управления цветными RGB-лентами).
Управление 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); }
При удержании первой или второй кнопки плавно изменяется напряжение, подаваемое на управляющий контакт электронного ключа. Тогда и произойдет плавное изменение яркости.
Схема контроллера RGB подсветки на ардуино
Схема контроллера RGB ленты
Как видно, ничего особенно сложного.
Ардуино питается напрямую от 12 вольт. У неё есть встроенный преобразователь, который снижает питающее напряжение до 5 вольт, от него и будем питать модуль сенсорной кнопки и датчик движения.
Ардуино управляет тремя транзисторными ключами, которые в свою очередь управляют цветами ленты.
Ключи управляются ШИМ сигналом, подробнее об этом можно прочесть здесь.
Используются три канала ШИМ ардуино.
Сфера применения
Относительно высокая стоимость светодиодов и лент, собранных на чипах WS2811 и WS2812B, ограничивает их область применения в сравнении с обычными LED-лентами. Главным образом их используют для решения таких задач, с которыми обычной светодиодной ленте не справиться:
- для сборки полноцветных модулей;
- в конструировании светильников, управляемых по принципу «soft lights»;
- в качестве декоративной подсветки чего-либо;
- в построении LED-видео экранов, используемых в уличной рекламе и шоу-бизнесе.
Интерес к адресной светодиодной ленте среди радиолюбителей вызван тем, что на её основе можно собрать подсветку, которая будет изменять цвет и яркость по заданному алгоритму.
Как это работает?
Адресная лента WS2812B поделена на сегменты, в каждом из которых расположен светодиод и конденсатор (для повышения помехоустойчивости). Относительно напряжения питания все они между собой подключены параллельно, то есть +5 В будет присутствовать на каждом сегменте. А вот передача данных осуществляется последовательно: от предыдущего сегмента к последующему. Поэтому при выходе из строя одного из светодиодов цепи все следующие сегменты перестанут светиться.
Управление готовыми устройствами и модулями на базе WS2812B производится с помощью специализированного контроллера, внутри которого записана программа. На радиолюбительском уровне управлять работой адресной светодиодной ленты удобней всего через Arduino, используя для этого небольшую программу – скетч.
Технические характеристики
Адресная светодиодная лента состоит из 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.
Яркие идеи
Эти полоски требуют меньше компонентов для их запуска, и есть некоторая свобода в отношении того, какие именно значения компонентов вы можете использовать. Конденсатор в этой цепи гарантирует, что светодиоды 5 В получают постоянный источник питания. Резистор гарантирует, что сигнал данных, полученный от Arduino, не будет иметь каких-либо помех.
Тебе понадобится:
- WS2811/12/12B 5v светодиодная лента (все три модели имеют встроенные чипы и работают практически одинаково)
- 1 х Arduino Uno (или аналогичная совместимая плата)
- 1 х 220-440 Ом Резистор (что-нибудь между этими двумя значениями в порядке)
- 1 х 100-1000 мкФ Конденсатор (что-нибудь между этими двумя значениями в порядке)
- Макет и подключить провода
- 5В блок питания
Настройте вашу схему, как показано на схеме:
Обратите внимание, что конденсатор должен быть правильной ориентации. Вы можете определить, какая сторона крепится к шине заземления, посмотрев на корпус конденсатора знак минус (-).
На этот раз мы питаем Arduino от источника питания 5В. Это делает проект автономным, когда мы закончим, хотя здесь есть несколько важных моментов.
Во-первых, убедитесь, что ваша плата может получать питание 5 В, прежде чем подключать ее к источнику питания. Почти все платы разработки работают под напряжением 5 В через USB-порт, но контакты питания некоторых могут иногда пропускать регуляторы напряжения и превращать их в тосты.
Кроме того, рекомендуется убедиться, что несколько отдельных источников питания не подключены к Arduino — отсоединяйте кабель USB всякий раз, когда вы используете внешний источник питания.
После подключения он должен выглядеть так:
Теперь, когда наша светодиодная лента подключена, давайте перейдем к коду.