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

в 0:05, , рубрики: wifi, Блог компании Madrobots, Гаджеты. Устройства для гиков, умный дом

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 сеть, либо подключаться уже к существующей.
Из интерактивных элементов на корпусе коннектора есть три светодиода:
Marlight: лампы для программистов
А так же MicroUSB разъем для питания и дырка, в которой скрывается кнопка сброса:
image
Все необходимые данные для первого подключения к роутеру написаны на нем же:
Marlight: лампы для программистов
Поэтому инструкцию открывать даже не будем — все необходимое мы перевели на русский язык и добавили в свой файл.

Что внутри?

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

Конечно, не разобрав устройство хотя бы раз, нельзя считаться его полноценным хозяином. Начнем мы с роутера. Не обращать внимания на гарантийную наклейку — просто, когда ты и являешься компанией, которая предоставляет гарантию.
Marlight: лампы для программистов
Разобрать его легко — ни винтов, ни хитрых крепежей там нет. Все, что надо — поддеть нижнюю крышку чем-нибудь плоским и прочным, чтобы вытянуть ее из защелок:
Marlight: лампы для программистов
После снятия крышки нашему взору предстает нижняя часть платы, на которую смотреть совсем неинтересно.
Marlight: лампы для программистов
А вот обратная сторона уже гораздо интереснее:
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
Причем, как видно на гифке, в полную мощность одновременно два типа светодиодов не работают — хоть это бы и повысило яркость, но потребовало бы большего охлаждения и более мощного блока питания. Да и яркость изменялась бы во время регулирования температуры.
Разобранную лампу, кстати, снимать без рассеивателя просто ужасно, получается вот так(кстати, подписывайтесь)
В центре находится радио-модуль, уже привычно совсем без маркировки:
Marlight: лампы для программистов
Под ним — контроллер:
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 Mobile и BlackBerry, Windows, Linux(в виде пакета под Ubuntu и исходных кодов), MacOS.
  2. Приложение и его исходный код должны быть опубликованы под лицензией BSD.
  3. Приложение должно быть на русском языке. Английский не обязателен, но было бы неплохо.
  4. Разработка должна быть закончена до 1 сентября.
  5. Комплект передается участнику после того, как он продемонстрирует первую версию приложения с дизайном.
  6. Дизайн и дополнительный функционал и — на усмотрение разработчика.

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

Автор: vvzvlad

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js