habrahabr

Marlight: лампы для программистов

  • вторник, 29 июля 2014 г. в 03:11:01
http://habrahabr.ru/company/madrobots/blog/230473/

Marlight — это светодиодная RGBW лампочка, управляемая по радиоканалу с частотой 2.4 ГГц. Она может управляться как с пульта, который непосредственно передает на частоте лампочки, так и с помощью роутера, который подключается в домашней Wi-Fi. С помощью роутера, который транслирует команды, поступающие к нему по сети в радиопакет для лампы, лампами можно управлять из мобильного приложения, компьютера или домашнего сервера.

image

Я рассказывал раньше о системе для умного дома — NooLite(1, 2), но самый главный ее недостаток для обычных пользователей это то, что ее надо устанавливать с применением клемм, паяльника, с разрезанием проводки и так далее. Обратной стороной является высокая возможность настроить все по своему вкусу, но это не всегда необходимо. В этот раз я расскажу о системе, которая обладает похожими функциями, но рассчитана на обычных людей — все что надо сделать для ее установки, это просто ввернуть лампочку в патрон.

Комплект


Вся система состоит из трех вещей — самой лампочки, пульта и роутера, каждый из можно купить по отдельности:
image

Лампа
Коробка лампы выглядит вот так:
image
Внутри находится лампа, упакованная в пластик:
image
И все! Больше внутри нет ничего, подразумевается что лампа, не имеющая ни кнопок, ни других органов управления, не нуждается в инструкции. Кстати, упаковка достаточно прочная — из более 1000 ламп, прошедших через магазин, была повреждена всего одна — у нее немного раздавили цоколь. Пришлось это очень кстати, и теперь у нас есть возможность посмотреть, что у ее внутри, правда об этом чуть дальше.

Итак, лампа:

image

Она имеет цоколь E27 — стандартный для бытовых ламп:

image

Чтобы понять размер, можно положить ее рядом с икеевской лампой — СПАРСАМ.

image

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

Вес у них тоже похож, СПАРСАМ весит 185 грамм:

image

А марлайт 179:

image

Такой вес маленькой лампочки обусловлен толстым алюминиевым корпусом, который выполняет роль радиатора для светодиодов.
Чтобы сравнить яркость двух ламп, я сфотографировал их в одном и том же положении на одних настройках(1/100, 2.8, 400):

image

Оказалось, что марлайт на максимальных настройках даже немного ярче. На то, что освещается по-разному не обращайте внимания, потому что это лампа, у которой я снял рассеиватель(зачем — станет понятно позже).

Пульт

Пульт управления выглядит вот так:

image

Коробку вы можете увидеть на заглавной фотографии, поэтому показывать смысла ее нет. Комплектация пульта гораздо богаче лампы — у него в комплекте есть целая инструкция:

image

Пульт, кстати, работает от трех батарей ААА(которых нет в комплекте):

image

Самое интересное в пульте(помимо внутренностей, естественно), это органы управления:

image

Чтобы не рассказывать о том, какая кнопочка за что отвечает, я нарисовал вот такую картинку:

image

Она же вошла в наше руководство. Нам пришлось написать нормальное руководство, потому что то, которое идет в комплекте, мало того, что написано на плохом английском, но еще неполное и частично противоречивое.

Внизу пульта — кнопки управления каналами. Как и в случае с NooLite, лампы привязываются к пульту, а не наоборот. В том смысле, что в лампу записывается код пульта(точнее, код канала на пульте), с которого она будет принимать команды.

У каждого пульта 4 канала, Каждый канал управляется двумя кнопками — включить и выключить. Кнопка включения является одновременно и кнопкой активации канала — все верхние элементы управления(изменение цвета, яркости, температуры света) применяются к последнему активному каналу, т.е. к каналу, у которого вы последний раз нажали кнопку включения. Если лампы были выключены то после ее нажатия они включатся в режиме «белый свет» с сохранением предыдущей установкой яркости и температуры цвета. Если же лампы уже горели, то не произойдет ничего, но пульт запомнит этот канал, и все следующие команды с помощью верхних кнопок будет отдавать этому каналу.

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

Один из коллег, которому очень понравились эти лампы(привет, fundorin), купил себе сразу 11 штук и поставил их во все комнаты в доме. 4 канала пульта — 4 места в доме: кухня, туалет-ванная, гостинная и коридор. Получилось, что с одного пульта можно управлять освещением во всей квартире из любого места. Говорит, очень удобно, особенно выключать свет уже лежа в кровати и уменьшать яркость, лежа в ванне.

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

Блок управления — роутер

Лампочки, управляемые с пульта — это конечно, прикольно, на на умный дом ну вообще никак не тянет. Самый интересное начинается, когда становится возможным подключить лампы к компьютеру и настроить какую-нибудь автоматизацию. Для этого служит коннектор-роутер вот в такой коробочке:

image

Комплектация у нее еще богаче пульта — помимо руководства у нее в комплекте есть еще и проводок для питания!

image

Несмотря на USB разъем, провод служит только для питания — подключить роутер-коннектор к компьютеру не получится. Нет, конечно подключить-то получится, но разницы по сравнению с блоком питания не будет. Нет у него так же и LAN разъёма, вся коммуникация осуществляется через беспроводные соединения. Он может либо создавать собственную WiFi сеть, либо подключаться уже к существующей.

Из интерактивных элементов на корпусе коннектора есть три светодиода:



А так же MicroUSB разъем для питания и дырка, в которой скрывается кнопка сброса:

image

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



Поэтому инструкцию открывать даже не будем — все необходимое мы перевели на русский язык и добавили в свой файл.

Что внутри?


Блок управления — роутер

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



Разобрать его легко — ни винтов, ни хитрых крепежей там нет. Все, что надо — поддеть нижнюю крышку чем-нибудь плоским и прочным, чтобы вытянуть ее из защелок:



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



А вот обратная сторона уже гораздо интереснее:

image

На ней мы видим передатчик на частоту 2.4 ГГц с микросхемой без маркировки:

image

Как и основного контроллера:

image

Не понимаю, зачем заказывать контроллеры без маркировки, если прошивку все равно считать нельзя. Что даст отсутствие маркировки? Ну да ладно, это надо спрашивать у китайцев. Мы же идем дальше и видим микросхему RTC — часов реального времени, которая называется DS1302. Это такая специализированная микросхема, которая занимается только одним — считает время. Правда, делает она это отлично — с хорошей точностью и очень низким энергопотреблением — от батарейки CR2032 она может работать около двух лет, даже если ее не подключать все это время к питанию.

Для самого подсчета времени рядом расположен «часовой» кварц на трудно запоминаемую частоту 32768 Гц, которая является просто двойкой в 15 степени. Достаточно уменьшить это частоту вдвое 15 раз подряд и мы получим частоту 1 Гц — тик каждую секунду.

image

Идем дальше. Остался только Wi-Fi модуль с UART интерфейсом:

image

Он собственно и отвечает за общение с локальной сетью вашего роутера или создание своей собственной.

Лампа

Теперь разберем саму лампу. Вообще, в отличии от пульта и роутера она совершенно неразборная(но самая интересная). Например, первая стадия разборки подразумевает срезание горячим ножом или спиливание рассеивающего купола из пластика:

image

Он, кстати, довольно толстый — почти 3 мм толщины:

image

Разбить лампу с таким пластиком затруднительно. После трепанации лампы нам открывается доступ к основной плате:

image

Как мы видим, для освещения используются 30 светодиодов — 24 белых светодиодов(12 светодиодов теплого оттенка и 12 — холодного) и 6 RGB светодиодов. RGB светодиоды отвечают за цветное освещение, а белые, соответственно, за белое.

image

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

В центре находится радио-модуль, уже привычно совсем без маркировки:



Под ним — контроллер:

image

Это STM8 контроллер STM8S003F3, совершенно обычный — 16MHz, 8 Kb памяти. Контроллер общается с радиомодулем по SPI.

Чтобы добраться до блока питания лампы, надо подобным образом срезать цоколь лампы:

image

А потом залезть паяльником глубоко и отпаять провода питания:

image

То, что отвалилось после этого от лампочки — и есть блок питания:

image

Блок питания построен на одной микросхеме LNK606, что довольно необычно для китайских устройств.

image

LNK606 — это микросхемы серии LinkSwitch-II, предназначенные специально для изготовления блоков питания. За счет того, что они следят полностью за всеми параметрами БП, его схема получается очень простой:

image

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

Так вот, вернемся к светодиодам:

image

Белые светодиоды одинаковы, отличаются только типом люминофора. «Белые» светодиоды — на самом деле синие или ультрафиолетовые, именно того вырвиглазного оттенка, что светит нам прямо в глаза ночью. Белыми их делают желтое вещество — люминофор, которые поглощает синий свет и переизлучает его в другом диапазоне. Комбинирую разные вещества в его составе можно добиться разных оттенков белого, например холодного или теплого, как это было сделано тут. Большой плюс люминофорных светодиодов — плавный спектр в отличии от RGB-сборок:

image

Это положительно сказывается на качестве освещения — у таких светодиодов выше индекс цветопередачи — CRI, несмотря на то, что они могут с первого взгляда выглядеть так же, как и сборки — излучать примерно такой же белый свет. Но есть нюанс! ©

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

image

В спектре присутствуют волны этой длины и они успешно отражаются предметом. А если мы освещаем этот предмет источником света, у которого спектр выглядит не так, как у солнечного света? Получается вот что:

image

Это, правда, про флуоресцентные лампы, но не суть. У лампы в спектре просто отсутствует часть волн этой длины, хоть он и кажется нам таким же белым, как и солнечный свет. Раз волн в спектре нет — то и отражать предмету нечего, он будет выглядеть темным.

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

Короче, люминофорные светодиоды — это хорошо, и только их и надо использовать для освещения рабочего места. А этого кто-то не знал?
Вообще, все нормальные белые светодиодные лампы используют люминофорные светодиоды, и я это говорю просто к тому, что Marlight можно использовать для освещения рабочего места, если вас устраивает его яркость.

Впрочем, в лампе RGB-сборки все-таки есть, но они используются для отображения всех остальных цветов. Вот один из трехцветных светодиодов ближе, можно рассмотреть три разных кристалла и проводки к ним:

image

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

Еще один бич светодиодного освещения — мерцание. У светодиода, в отличии от лампы накаливания нет тепловой инерции, и если мы включаем светодиод напрямую в сеть, как делают в дешевых лампах-кукурузинах, то светодиоды моргают 100 раз в секунду, что отлично замечается при быстрых движениях глаз или предметов — карандашный тест. Там речь о мониторах, но для освещения это работает. Вот например, как выглядит «блок питания» в одной из ламп у меня дома:

image

Пользоваться ей для освещения жилых помещений, конечно нельзя. Стоит в туалете.
Опять же, в нормальных лампах такой проблемы нет — там, как и в марлайте, стоит блок питания, который преобразует напряжение сети в нужное(постоянное) для светодиода, избавляя от мерцания вообще. Точнее, избавляя от мерцания на максимальной яркости, потому что яркость понижается ШИМ-ом, обычно невысокой частоты. Раз уж мы разобрали лампочку, подключим к ней осциллограф и посмотрим на то, как тут работает изменение яркости:

image

Теперь можно включить лампочку и посмотреть на происходящее щупами осциллографа:

image

Когда она включена на полную яркость, пульсаций ожидаемо нет:

image

Два канала осциллографа подключены к каналам теплых и холодных светодиодов. В данном случае «теплые» светодиоды горят на полную мощность, а «холодные» выключены совсем, что мы и видим на картинке.

А теперь уменьшим яркость кнопкой на пульте или в приложении:

image

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

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

image

Теперь изменим не яркость, а температуру цвета:

image

Повинуясь табличке заполнения, защитой в недрах контролера, «холодный» светодиод включился на 20% яркости вместе с белым, чтобы сместить температуру света к более холодной. Но в то же время, чтобы избежать изменения яркости(часть цикла-то оба светодиода работают вместе), «теплый» в конце цикла выключился ровно на то время, на которой включился «холодный», и таким образом суммарная яркость всей лампы не изменилась. Если включить температуру в «средний» режим, то оба светодиода будут работать одинаковое время, и это будет выглядеть вот так:

image

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

image

Чтобы разобрать то, что осталось от лампы, надо открутить два винта(синие стрелки), а потом отпаять точки подключения платы процессора к плате светодиодов(красные стрелки):

image

Платы соединены бутербродом не просто так — нижняя плата алюминиевая, а верхняя из текстолита. Это сделано для того, чтобы отводить тепло от светодиодов, но в то же время не испытывать проблем с двухсторонним монтажом на алюминиевой плате. Толщина ее, кстати, 1.5мм:

image

Теперь, если поддеть алюминиевую плату чем-то загнутым и потянуть, она не без труда, но отделится от радиатора:

image

Между нижней платой и радиатором нанесен слой термоинтерфейса — такой же, какой используется на радиаторах для процессора.

В руке остается вот такая солидная алюминиевая болванка-радиатор, которая составляет большую часть веса лампы:

image

Пульт

С грустью (потому что это последнее, что можно разобрать) откроем пульт:
image

Верхняя часть — это сенсорное кольцо:

image

Похожее на аппноут от ST:

image

Нижняя часть — кнопки, мембранные для включения-отключения канала, сенсорные для всех остальных функций:

image

Обратная сторона уже интереснее:

image

Там есть две микросхемы без маркировки:

image

И уже знакомый нам модуль передатчика:

image

Управление


О том, как управлять лампами с пульта, я уже рассказал выше. Теперь поговорим о том, что могут делать приложения. Для начала, покажу веб-панель роутера — она довольна проста. В нем можно настроить сеть, вот так выглядят настройки, когда коннектор создает свою сеть wifi-socket без шифрования:

image

А так коннектор подключается к сети в качестве клиента:

image

Еще там можно поменять пароль для входа:

image

И перезагрузить его:

image

Остальные настройки пользователю не нужны и трогать их не надо, потому что это чревато потерей роутера работоспособности до ресета — они относятся к настройкам передачи TCP<->UART к контроллеру, который транслирует их уже в команды для радио-модуля.

Приложение для телефона

Приложение для управления лампочками имеется под iOS и Android. Они довольно простые по функционалу, и по сути дублируют кнопки на пульте управления. Вот приложение для iOS:

image

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

Как я уже говорил, для андроида приложение совершенно такое же, но выглядит немного хуже — кое-где поехали кнопки.

image

Для начала работы, им нужно указать IP-адрес и порт. Зачем оставлена возможность настройки порта я так и не понял, его хоть и можно изменить в веб-интерфейсе, но для чего это нужно — непонятно. А еще в поле Name, несмотря на подсказку «UserName» надо вводить не «admin», как написано на коннекторе, а имя роутера. Впрочем, ввести туда admin тоже можно, просто у вас будет коннектор c именем в программе admin.
Как я уже говорил, функционал приложения в большинстве своем дублирует собой пульт, кроме последнего экрана. Там собраны пресеты, которые нельзя переназначить, и еще некоторый функционал — таймер, будильник и так далее.

image

Так бы мы и жили с простыми приложениями для телефона, если бы нам неожиданно не написал Efimomax, который купил лампочку, а потом провел реверс-инжиниринг протокола общения мобильной программы и коннектора(он оказался не очень сложным) и написал реализацию на PHP и C# в виде библиотеки и простого приложения.

Приложение для компьютера

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

image

Оно функционально и довольно хорошо работает. Забрать приложение с исходниками можно вот тут. Форки и пушреквесты приветствуются :)

Серверное приложение

Написано на PHP, HTML выглядит вот так:

image

Но это не самое главное. Самое главное — что скрипту можно передавать параметры из веб-странички или из консоли.

Сам скрипт довольно простой, основную его часть составляет вот эта функция:
function sendMessage($udp_message)
{
    $message = vsprintf(str_repeat('%c', count($udp_message)), $udp_message);

    global $server_ip, $server_port, $delay, $debug, $error_value, $ok_value;

    if ($socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)) {
        socket_sendto($socket, $message, strlen($message), 0, $server_ip, $server_port);
        sleep ($delay);
        socket_close($socket);

        echo $ok_value;
    } else {
        echo $error_value;
    }
}


Остальное составляют команды, обработка ошибок и так далее.
Найти его можно в Github, форки и пушреквесты как обычно, приветствуются!
Использовать его можно как обычно, передавая ему параметры через адресную строку:
http://192.168.12.1/marlight.php?command=RGB_MODE_SET_COLOR&r=255&g=10&b=0

Так и вызывая его напрямую из скрипта внутри системы:
MBP-Zaytsev:~ vvzvlad$ php marlight.php command=RGB_MODE_SET_COLOR&r=255&g=10&b=0


Итог


Довольно интересное устройство, которое вполне подходит для умного дома начального уровня. Конечно, не без недостатков, и требующее некоторой допилки (читай «написания управляющего софта»), но вполне работоспособное, хорошо сделанное и прикольное.

Ссылки


Репозиторий на github с исходными кодами на PHP и С#.

Где купить и сколько стоит?


Конечно, у нас в магазине:
Лампа в магазине: 990 рублей
Роутер в магазине: 990 рублей
Пульт в магазине: 690 рублей
А еще можно прийти в наш оффлайн-магазин на горбушке и вживую посмотреть, потрогать, понюхать, покрутить в руках, а потом попросить завернуть.

Сделай приложение для своей любимой платформы — получи комплект Marlight


В связи с тем, что приложение для телефонов выглядит как говно не очень, и работать с ним так же удобно, мы меняем комплект из пяти ламп Marlight, пульта и коннектора на приложение для вашей любимой операционной системы или мобильной платформы!

image

Условия:

  1. В акции участвуют приложения для следующих платформ: Android, iOS, Windows Phone, BlackBerry, Windows, консольного для Linux/OpenWRT/DD-WRT, MacOS.
  2. Приложение и его исходный код должны быть опубликованы под лицензией BSD.
  3. Комплект передается участнику после того, как он продемонстрирует первую версию приложения с дизайном.
  4. Дизайн и дополнительный функционал и — на усмотрение разработчика.


Для участия пишите мне на почту vz@madrobots.ru c темой «Акция Marlight».
Что не хватает Marlight?

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Проголосовало 528 человек. Воздержалось 206 человек.

Конкурс — хорошая идея?

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Проголосовало 504 человека. Воздержалось 212 человек.