Эта статья – размышление над способом организации работы устройства AAL. Все пока сыро, но обозначу основные тезисы по структуре устройства.
Исходные данные по устройству приведены в предыдущей статье.
Кратко, по тем пунктам, которые затрагивают внутреннее структуру устройства:
— устройство предназначается, в первую очередь, для создания «ночной» подсветки прихожей и во-вторую – для создания различных световых эффектов
— в качестве источника света будет применена умная лента WS2812B (позже обязательно сделаю вариант и для обычной RGB-ленты)
— устройство должно быть простым в управлении
— устройство должно быть интерактивным и реагировать на различные внешние события
— устройство должно иметь возможность гибкой настройки для применения в нестандартных условиях.
Предварительная схема:
Сначала я планировал делать подсветку однотонную, то есть все светильники во всей прихожей должны были светиться с одинаковой яркостью и цветностью (и регулировка их должна была осуществляться как одним источником света). Но так как для подсветки будет использована умная лента, а источников света (светильников) много, то появляется возможность управления каждым светильником отдельно. Но тут сразу вырисовывается один минус – управлять десятком светильником каждым отдельно довольно неудобно. В итоге принял компромиссное решение – управление всей подсветкой в прихожей будет осуществляться как одним источником света, но в самом устройстве должны быть настройки, позволяющие от одной управляемой RGB-точки получить различные способы «распределения» этой точки на все светильники.
Забегая вперед, признаюсь, что на такое решение во многом повлиял выбор приложения управления освещением под Андродид. С самого начала было понятно, что что-то вменяемое под Андроид у меня вряд ли получится написать, поэтому я решил взять подходящее готовое приложение из Маркета и использовать для своего устройства. К моему удивлению в Плей Маркете практически нет приложений, позволяющих управлять многоканальным светом. Зачастую — это DMX-пульты, которые для моего применения довольно громоздки, непонятны и неудобны в работе. Больше для меня подошли-бы приложения, управляющие умными лампами от различных производителей (там и различные режимы работы и визуализация звука и таймеры), но проблема в том, что эти приложения на уровне железа привязаны к своим лампам и использовать их в своих целях не представляется возможным (разве что перепрошивать модули Блютуз). Нашлось всего одно приложение, которое меня устроило и которым удобно пользоваться для освещения. На него я и ориентировался при выборе режимов работы и способов формирования эффектов. В следующей статье я опишу это приложение подробней, но если у кого есть на примете хорошие приложения для управления светом посредством блютуз – отпишитесь, еще не поздно что-то менять.
Продолжаем размышления дальше.
Итак, у нас есть базовый RGB-цвет (я назвал его базовой точкой Base-point), который изменяется динамически способом выбранного эффекта. Дальше нам нужно этот базовый цвет сделать интерактивным, то есть заставить реагировать на различные датчики. На данный момент у меня предусмотрена работа с 3 датчиками:
— датчик присутствия – это обычный PIR-датчик
— датчик звука – микрофонный усилитель
— и обычный потенциометр, который может быть использован просто как регулятор, допустим, цветового тона, а может быть заменен на другой аналоговый датчик (например, датчик освещенности или температуры). Кстати, у устройства остаются свободные входа и если понадобится еще какие либо датчики, то их можно будет добавить.
В меню устройства мы выбираем, с какого датчика брать сигнал, и какой параметр базовой точки изменять пропорционально уровню с этого датчика. Параметрами может быть яркость освещения (к примеру, появился человек в прихожей – свет загорелся ярче), цветность, тон, и тому подобное (это тоже можно задавать в меню).
Базовую точку после интерактивных изменений я назвал точкой сдвига (Shift-point), так как, по сути, происходит сдвиг цвета базовой точки по определенной шкале (толи яркости, толи цветности…) на величину аналогового сигнала с датчика.
Идем дальше.
У нас есть базовая точка, которую формирует выбранный эффект. Есть интерактивное изменение базовой точки, после которого получаем точку сдвига. Дальше точку сдвига нужно воспроизвести на наших светильниках (у меня их 10, по 5 с каждой стороны прихожей, а в устройстве я планирую иметь до 24). Можно просто засветить все светильники цветом сдвинутой точки (и я думаю, такой режим должен присутствовать в устройстве), но хочется сделать что-то более интересное. Например, почему бы не сделать яркость светильников больше к центру, а по краям ее уменьшить? Или заставить светильники изменять цветовой тон или яркость вглубь прихожей? Для этого нам необходимо создать отдельную точку для каждого из светильников. 24 точки я решил не создавать, а сделать 12 – по аналогии с первым эффектором (что в последующем позволит управлять светильниками из программы для Эффектора). Определяем 12 точек-каналов (Channel-point). Соответственно, в меню должна быть включена возможность задать закон (эффект) распределения Shift-point на 12 Channel-point.
Это, например, могут быть такие эффекты:
— пик – увеличение яркости к центральным каналам
— просадка – уменьшение яркости к центральным каналам
— угасание – уменьшение яркости к дальним каналам
— разгорание — уменьшение яркости к ближним каналам
— огонь – имитация «горения» по каналам (картинка будет постоянно динамически изменятся)
— скролл – изменение точки сдвига будет «пробегать» по каналам начиная с первого и до последнего
— волна – изменение яркости каналов в виде бегущей волны
— пульс – пульсирование яркости каналов
— … по ходу создания нужно еще придумать эффектов
Переходим к выводу Channel-point на пиксели светильников.
Светильник формирует ряд пикселей умной ленты и предполагается, что сигнал на все светильники будет выдаваться через одну ногу МК. То есть светильники должны будут включены последовательно друг за дружкой. Физически — это могут быть или отдельные куски ленты (как будет сделано у меня) соединенные последовательно проводами, или это может быть цельный кусок ленты, условно разделенный на зоны светильников. Необходимо иметь возможность задать количество пикселей формирующий один светильник (и соответственно, воспроизводящих одну Channel-точку). Еще нужно иметь возможность применять эффекты распределения цвета по пикселям, подобные описанным выше для Channel-точек (просто воспроизводить один цвет на пикселях с индивидуальной адресацией – это не рационально). Для более гибкого применения освещения, необходимо предусмотреть возможность задания очередности светильников на ленте (это, например, понадобится мне, так как по своей конструкции на потолке мне будет неудобно прокладывать провода чисто по порядку следования каналов). И последнее, 12 каналов светильников может оказаться мало, поэтому планирую реализовать поддержку 24 светильников (с возможностью распределения по ним 12 Channel-point в произвольном порядке).
Вот, на сегодняшний день, и вся структура устройства AAL. Предполагаю, что в процессе разработки будет что-то изменятся (в том числе и по Вашим пожеланиям), но в любом случае – это вариант который мне нравится.
Графически, все, о чем я писал выше, можно отобразить следующей блок-схемой.