ZmiterIv

<<< Back

RGB подсветка своими руками.

В данной статье мы будем делать RGB подсветку на базе с управлением из MajorDoMo через Простые Устройства (ПУ).

Полная версия статьи тут.
Для изготовления собственно подсветки нам понадобятся: RGB светодиодная лента, алюминиевый светодиодный профиль с рассеивателем, блок питания на 12в, способный запитать вашу ленту, модуль WiFi микроконтроллера WeMos D1 mini, модуль DC-DC преобразователя 360mini, 3 мосфета КП737Г, корпус польского производства Kradex Z24A, пара разъемов, гребенка, несколько резисторов и конденсаторов.

Схема устройства:

Плюс 12в от блока питания поданы на dc-dc преобразователь для формирования напряжения питания микроконтроллера 3,3в и напрямую на светодиодную ленту. С выхода DC-DC преобазователя, через диод шоттки (можно взять и обычный) и перемычку X2 запитывается плата WeMos D1 mini. Перемычка нужна, что бы при первом запуске безопасно выставить выходное напряжение на преобразователе не спалив при этом микроконтроллер. Диод необходим, что бы при подключении ESP8266 к компьютеру через USB, не было просадки питания (без диода, с замкнутой перемычкой модуль ESP не стартует вовсе), ну или всякий раз при подключении к компу снимать перемычку. Резисторы R1-R3 нужны, для поддержания низкого уровня на затворах мосфетов при старте микроконтроллера (что бы не вспыхивали светодиоды при включении), резисторы R4-R6 ограничивают ток на затворах. Мосфеты управляют тремя цветовыми каналами RGB подсветки.
Изготовление:
Всю конструкцию можно собрать и навесным монтажом или на макетной плате, но я предпочитаю делать для своих поделок печатные платы.
Скачать печатную плату в формате .lay6. Внимание, при печати платы зеркалить!!!
Для отладки каких-то сценариев к RGB контроллеру можно подключить миниатюрный дисплей SSD1306. На него будут выводится значения RGB каналов, а при старте модуля отобразится полученный IP адрес.
Платы D1 mini и mini-360 установлены на контакты от гребенки. Вся конструкция установлена в корпус Kradex Z24A, под разъемы необходимо пропилить отверстия в боковой стенке.

Прошивка:
Скачать скетч
Из исходной версии, найденной в интернете, я выпилил всё лишнее на мой взгляд, включая неправильно работающий собственный ColorPicker (всё надо инвертировать).
Данные значений RGB-каналов принимаются через Get-запросы. А вот обратной связи здесь нет. Так, что при сбое питания, состояние объекта в системе «Умный дом» может быть иным, нежели на самом деле. Я планировал добавить функцию обратной связи на MQTT, но на это пока не хватает знаний/времени. Но и в таком виде всё работает вполне пристойно.
Прошивать будем в среде Arduino IDE. Для работы среды с платами на базе ESP8266, необходимо подгрузить файлы поддержки (подробнее здесь). После настройки среды программирования можно открывать скетч и подключать необходимые библиотеки.
Когда все библиотеки будут подключены и компиляция пройдет удачно — можно переходить к правке Wi-Fi подключения в скетче. Находим следующие строки и меняем на свои SSID и пароль.

const char* ssid = "ssid_name";
const char* password = "passwd";

После всех необходимых правок можно подключать плату и загружать в нее скетч, предварительно выбрав нужный COM-порт в «Инструменты» > «Порт:»…
Настройка MajorDoMo:
Для начала нам нужно создать Простое Устройство. Для этого идём в Панель управления > Простые устройства, жмем кнопку «Добавить». Здесь вводим любое название, например, RGB-подсветка, выбираем тип Освещение (RGB), по желанию указываем местоположение и жмем кнопку «Добавить».

Автоматически создастся связанный объект, через методы которого мы будем управлять нашей RGB подсветкой. Так, как наше устройство управляется посредством get-запросов, необходимо дописать метод включения/выключения и добавить свойство wanip, которое будет хранить IP-адрес нашего модуля RGB.

Итак, нам нужно отредактировать метод TurnOn и TurnOff класса SRGB. После текста инжекции добавляем код, приведённый ниже (За помощь в написании метода отдельное спасибо xor):

$color=$this->getProperty("color");
    $color=preg_replace('/^#/','',$color);
    $color=hexdec($color);
    $red=round(($color >> 16 & 0xFF)*4.015);
    $green=round(($color >> 8 & 0xFF)*4.015);
    $blue=round(($color & 0xFF)*4.015);
    $cmdUrl = "http://".$this->getProperty("wanip")."/?r=".$red."&g=".$green."&b=".$blue;
    //say($cmdUrl);
    getURL($cmdUrl,0);

Должно получится как-то так:

Тоже самое делаем для метода TurnOff.

Так, как в коде используется чтение из свойства wanip, которого у нас еще нет, необходимо его добавить. Переходим в свойства класса SRGB и нажимаем «Добавить новое свойство». Вписываем в поле «Название» wanip, заполняем поле «Описание» и жмем «Добавить». Должно получится так:

Осталось прописать адрес нашего устройства RGB. Выбираем сверху «Объекты» и жмём «Редактировать»

На открывшейся странице вписываем IP адрес в свойство wanip и жмем обновить.

Казалось бы на этом и всё, но после какого-то обновления системы обнаружилась проблема. В метод SRGB_setColor.php то ли ошибка закралась, то ли я не разобрался как его правильно «готовить», но так, как мне надо метод больше не работал. Т.е. если раньше, открывая цветовое поле элемента «выбор цвета» (colorPicker) я мог выбрать нужный мне цвет, нажать ОК и цвет подсветки сразу менялся на нужный, то сейчас мне ещё необходимо включить/выключить устройство, что бы передались данные. Т.е. раньше метод TurnOn вызывался после изменения цвета, то сейчас его надо вызывать специально выключая и включая объект. Сравнивая методы старый и после обновления я нашёл различия. Приведу листинг рабочего метода (метод расположен в /var/www/modules/devices/SRGB_setColor.php (Линукс):

<?php

if (!$params['color']) return;

$color=strtolower($params['color']);
$color=preg_replace('/^#/','',$color);

$transform=array(
    'red'=>'ff0000',
    'green'=>'00ff00',
    'blue'=>'0000ff',
    'white'=>'ffffff'
);

if (isset($transform[$color])) {
    $color=$transform[$color];
}

if ($color == '000000') {
$this->callMethodSafe('turnOff');
} else {
$this->setProperty('color',$color);
$this->setProperty('colorSaved',$color);
$this->callMethodSafe('turnOn');
}

Минск. 03.2019
Дмитрий Иванов
www.blogid.by

Discuss (17) (8)

See also:
2019-04-22 Мониторинг логов в линукс на примере модуля Noolite.

Минск, Беларусь

На форуме: Дмитрий Иванов

Web-site URL:
http://blogid.by