Опрос


Что для Вас Умный Дом?


Результаты


Реклама


Управление светодиодной RGB-лентой с помощью MegaD-328

17/01/2016 16:57:35

В последнее время светодиодные ленты RGB пользуются большой популярностью, так как они могут не только излучать свет, подобно обычным лампочкам, но и в широком диапазоне менять яркость и температуру свечения, то есть менять свой цвет. Сетчатка человеческого глаза устроена таким образом, что для формирования любого цветового оттенка требуется всего три канала: красный, синий и зеленый. Именно поэтому в стандартной RGB-ленте только три типа светодиодов (red, green, blue), хотя она может генерировать и желто-персиковый и кварцево-серый и медно-коричневый и даже (нет, не сербурмалиновый) перламутрово-розовый.

Однако одной только RGB-ленты недостаточно, чтобы создать эффектную подсветку под настроение. Требуется некий драйвер, контроллер, то есть "железка", которая будет управлять лентой. Сейчас на рынке представлено большое количество решений, позволяющих управлять цветом с помощью пульта. Но нас такие решения не устроят. Нам необходима возможность управления RGB-лентой с помощью любого смартфона или планшета. Нам необходимо, чтобы лентой мог управлять сервер, в котором заложены определенные алгоритмы. Ведь с помощью RGB-ленты можно зимним утром автоматически создавать эффект рассвета даже в суровых приполярных районах, к которым относится добрая половина России, а вечером после напряженного трудового дня успокаивать нервы цветом морской волны.

Но ведь у нас есть замечательное устройство MegaD-328, которое как раз и создавалось для сопряжения с сервером различного оборудования. По счастью MegaD-328 снабжен тремя независимыми ШИМ-каналами, которые мы и будем использовать для управления светодиодной RGB-лентой. Для подключения ленты к контроллеру MegaD-328 я воспользовался идеей пользователя Юрия Яковлева с сайта Geektimes. В статье, которую написал Юрий все расписано очень четко и точно. Опишу лишь отдельные нюансы подключения ленты "Мегадевайсу".

Итак, нам понадобятся:

1. MegaD-328-IN Kit, состоящий из контроллера MegaD-328 и исполнительного модуля MegaD-14-IN
2. Модуль управления двигателем на базе L298N
3. Светодиодная RGB-лента (с потребляемой мощностью до 2А на канал - это длина до 5 метров)

Модуль L298N

Модуль управления двигателем в данном случае является простым и недорогим готовым средством, позволяющим связать светодиодную ленту с ШИМ-каналами контроллера MegaD-328. Все, что необходимо, это правильная коммутация проводов. ШИМ-каналы P10, P12, P13 подключаются ко входам IN1, IN2, IN3 модуля L298N, а выходы OUT1-OUT3 к светодиодной ленте. Ну и питание. Несмотря на обилие проводов, подключение элементарное.

Схема подключения RGB-светодиодной ленты к MegaD-328

Положение конфигурационных джамперов на модуле MegaD-14-IN нижнее. Напомню, что подключать L298N нужно к портам P10, P12, P13. Именно эти порты могут быть сконфигурированы как порты с функцией ШИМ (PWM). Из инструмента потребуется только отвертка. Внимание! На схеме (для простоты понимания) питание берется с клеммы +12В исполнительного блока MegaD-14-IN. Но лучше подключать питание непосредственно к блоку питания. Кроме того, этот БП должен быть расчитан на потребляемый светодиодной лентой ток! Так для светодиодной ленты с потребяемой мощностью 72Вт нужен блок питания, например, DR-100-12. Кроме того, лента мощностью 72Вт (или 2А на канал) - это максимальная возможная нагрузка на драйвер L298N.

Теперь необходимо настроить ШИМ порты P10, P12, P13 в контроллере MegaD-328. Для этого тип порта в Web-интерфейсе нужно выбрать "OUT", а режим "PWM". Так как значение 255 соответствует не максимальной, а минимальной яркости, то в поле Default (значение по умолчанию) необходимо прописать 255.

Теперь, чтобы задать цвет RGB-ленте (в данном примере нежно-розовый) необходимо отправить контроллеру MegaD-328 примерно следующий запрос.

http://192.168.0.14/sec/?cmd=10:100;12:250;13:100

Таким низкоуровневым способом управлять цветом неудобно, поэтому можно написать простейшую программу для визуального управления лентой с любого мобильного устройства. Сделать это совсем нетрудно. Для функции выбора цвета (color picker) я выбрал легкий и простой скрипт jscolor. Основной код программы выглядит так.

<scripT type="text/javascript" src="js2/jquery-1.11.3.min.js"></script>
<script src="/js2/jscolor.min.js"></script>
Цвет: <input class="jscolor {onFineChange:'update(this)'}" value="e1e1e1">
<script>
function update(jscolor) { $.get("mod_rgb_led_control_ajax.php?color=" + jscolor, function(data){}); }
</script>

Здорово! То, что надо. Теперь нужно написать вспомогательный скрипт, который вызывается с помощью технологии Ajax при изменении цвета пользователем и отправляет необходимые команды контроллеру MegaD-328.
Имя скрипта, прописанное в коде выше, mod_rgb_led_control_ajax.php

<?
define("R", "10");
define("G", "12");
define("B", "13");
define("MD", "http://192.168.0.14/sec/?");

$color = $_GET['color'];

$r = 255 - hexdec($color[0].$color[1]);
$g = 255 - hexdec($color[2].$color[3]);
$b = 255 - hexdec($color[4].$color[5]);

file_get_contents(MD."cmd=".R.":$r;".G.":$g;".B.":$b");
?>

Вот и все! Остается только продемонстрировать, как это работает...




Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



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



Сортировка комментариев: Последние сверху | Первые сверху

2017-01-05 14:34:37 | Andrey_B
Сергей, подключать параллельно ленты можно. Но если говорить о 5 метровой RGB ленте мощностью 72Вт, то она максимально нагружает микросхему L298N (2А на канал) и более мощную нагрузку на нее вешать не стоит.


2017-01-04 21:01:16 | Сергей Поздняков
Андрей, правильно ли я понимаю, что если есть потребность подключить более 5м ленты, то делать это нужно параллельно, и можно подключить к одному модулю L298N параллельно несколько лент по 5 метров без угрозы работоспособности модуля?


2016-06-29 01:24:58 | Николай Иванович Никонов
Присоединяюсь к Виталию: Уважаемый автор! Пожалуйста опишите немного подробнее момент, как и куда и в каком виде поместить скрипты. МегаД с драйвером и сервер имеется, планшет имеется, а вот как повторить вышеописанный метод управления светодиодной лентой?


2016-06-21 12:07:12 | Andrey_B
Владимир, вроде бы правильно. 5В отдельно нужно.


2016-06-19 14:44:14 | Владимир
Подключаю ленту на 24В. Джампер снял. На ногу 12В L298N подал +24В на GND -24В . Это правильно? И еще...Нужно-ли при таком включении отдельно подавать 5В?


2016-06-13 14:47:13 | Andrey_B
Александр, можно, конечно. Ведь исполнительный модуль - это всего лишь "обвязка" контроллера. Но при это вы должны четко понимать, что, куда и как вы подключаете.


2016-06-13 06:23:09 | Виталий
Андрей, не могли бы вы немного подробнее изложить: куда поместить и как запускать эти скрипты? Спасибо!


2016-06-13 04:10:34 | Александр
После более детального изучения этого сайта, тут же поправлюсь с оговоркой на мой предыдущий пост ниже. Не "контроллера" а "интерфейсного модуля".
Т. е. можно ли организовать управление без участия исполнительного, а напрямую подключиться к L298N от интерфейсного модуля?


2016-06-13 03:02:39 | Александр
А диммирование на стороне контроллера организовать можно?


2016-04-25 19:35:11 | Andrey_B
Владимир, совместимо, но только на плате драйвера L298N нужно снять джампер. Подробнее посмотрите в даташите на него.


2016-04-25 12:02:06 | Владимир
А это решение совместимо с 24вольтовыми лентами? (конечно при использовании внешнего блока питания на 24В)


2016-03-07 01:01:28 | Кирилл
Хотел поставить этот скрипт на демо страничку во вкладку "свет",работает пока не перейдешь на другую вкладку, при возврате на вкладку "свет" поле input где цвет вводится перестает запускать скрипт при кликанье на него. Как и куда надо вставлять этот код чтобы он работал (где "Этаж1")?


2016-02-19 12:56:32 | Prokol
Данная строка file_get_contents(MD."cmd=".R.":$r;".G.":$g;".B.":$b"); выдавала в логах ошибку и не работало.

Вот такой метод у меня заработал

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, MD."cmd=".R.":$r;".G.":$g;".B.":$b");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$data = curl_exec($ch);
curl_close($ch);

На форумах пишут он работает быстрее, чем выше описанный.


2016-02-10 11:47:02 | Andrey_B
Артем, на тех расстояниях, которые есть в квартире, 12В не просядет. Можно "на месте" поставить только контроллер MegaD-328 и прицепиться точно также к нужным портам.


2016-02-10 01:27:29 | Аpтeм
Идея умного дома как раз и возникла у меня с желания иметь такой будильник. Но тут сразу три порта занято и пока 12 В передашь в другой конец квартиры, напряжение просядет. Так вот есть ли какой нибудь способ работу проводить на местности просто посылая туда сигнал управления (например код цвета)


2016-01-17 23:45:19 | andvas
Отличная идея , будем повторять дома!