В комнате где играет ребенок я установил дополнительную подсветку в виде LED ленты. Изначально я планировал, что буду управлять яркостью ленты, это удобно для настройки ночной подсветки. У меня уже был Z-Wave диммер на 220В, поэтому дешевле было докупить диммируемый трансформатор на 12В за 1000р, чем специальный RGBW контроллер от Fibaro за 5500р.
Это решение работает, но есть минусы:
- Задержка при диммировании
- Нельзя установить очень маленький уровень яркости
Спустя год использования, я решил изготовить свой Z-Wave LED контроллер, но с энкодером и в корпусе от диммера, для установки в подрозетник.
Принципиальная схема устройства элементарна, к Z-Uno напрямую подключается энкодер 3-мя пинами: пин A, пин B и кнопка. Мосфет подключается к PWM пину.
Материалы и цены:
№ | Материал | Фото | Цена |
1 | Z-Wave плата Z-Uno | 3500 р | |
2 | MOSFET IRLR8729 | 27 р | |
3 | Encoder EC11 | 50 р |
Z-Wave плата Z-Uno программируется в среде Arduino, скетч для обработки сигналов от энкодера и управления мосфетом занимает всего 143 строчки кода с комментариями. Скетч работает следующим образом:
Каждые 128 мкс по прерыванию от таймера проверяем, в какую сторону крутят колесико, от дребезга защищаемся 4-х кратной проверкой состояния. В лупе проверяем нажатие кнопки, при каждом нажатии выключаем ленту или включаем на предыдущий уровень яркости. Яркость можно задавать как с энкодера, так и с телефона или другого Z-Wave выключателя.
#define PUSH_BUTTON 23
#define ENCODER_CHA_PIN 19
#define ENCODER_CHB_PIN 20
#define LEV_SHIFT 8
#define ENCODER_DEBONCE 4
#define STATE_IDLE 0xFF
#define STATE_SKIP 0xFE
ZUNO_SETUP_ISR_GPTIMER(gpt_handler);
ZUNO_SETUP_CHANNELS(ZUNO_SWITCH_MULTILEVEL(getter, setter));
byte level = 0;
byte last_reported_level = 0;
byte g_state = STATE_IDLE;
byte g_pins = 0;
byte g_debounce_time = 0;
byte last_push_button_state = HIGH;
byte stored_level = 0;
dword last_level_changed_time = 0;
// Runs every 128 ?s
void gpt_handler() {
byte pins = 0;
pins = !digitalRead(ENCODER_CHA_PIN);
if(!digitalRead(ENCODER_CHB_PIN))
pins |= 2;
if(g_pins == pins) {
// Is the state stable?
g_debounce_time++;
if(g_debounce_time>ENCODER_DEBONCE) {
if(g_state == STATE_IDLE) {
g_state = pins;
}
else if(g_state == STATE_SKIP) {
if(pins == 0)
g_state = 0;
}
else {
if((g_state == 0 && pins == 1) ||
(g_state == 1 && pins == 3) ||
(g_state == 3 && pins == 2) ||
(g_state == 2 && pins == 0) ) {
if (level < 39) {
level++;
}
else if ((level + LEV_SHIFT) <= 255) {
level += LEV_SHIFT;
}
else if ((level + LEV_SHIFT) > 255){
level = 255;
}
}
else
if((g_state == 0 && pins == 2) ||
(g_state == 2 && pins == 3) ||
(g_state == 3 && pins == 1) ||
(g_state == 1 && pins == 0) ) {
if (level <= 39 && level !=0) {
level--;
}
else if (level >= LEV_SHIFT) {
level -= LEV_SHIFT;
}
else if (level < 0) {
level = 0;
}
}
if(g_state != pins)
g_state = STATE_SKIP;
}
g_debounce_time = 0;
}
}
else {
g_debounce_time = 0;
}
g_pins = pins;
}
void setup() {
Serial.begin();
pinMode(PUSH_BUTTON, INPUT_PULLUP);
pinMode(ENCODER_CHA_PIN, INPUT);
pinMode(ENCODER_CHB_PIN, INPUT_PULLUP);
zunoGPTInit(ZUNO_GPT_SCALE1024|ZUNO_GPT_CYCLIC); // 32 MHz/1024 = 31.25 kHz (tick is 32 ?s)
zunoGPTSet(4); // 32 ?s * 4 = 128 ?s
zunoGPTEnable(1);
}
void loop() {
// Do we need to report the level?
if(last_reported_level != level) {
if (level > 0) {
stored_level = level;
}
last_reported_level = level;
analogWrite(PWM1, level);
last_level_changed_time = millis();
Serial.print("Level: ");
Serial.println(level);
}
// Button handler
byte current_push_button_state = digitalRead(PUSH_BUTTON);
if (current_push_button_state != last_push_button_state) {
last_push_button_state = current_push_button_state;
// if button pressed
if (last_push_button_state == LOW) {
// if LED turned ON, turn OFF
if (level > 0) {
analogWrite(PWM1, 0);
level = 0;
}
// Restore last level
else {
analogWrite(PWM1, stored_level);
level = stored_level;
}
}
}
// Send report if 2 seconds level not changed
if (last_level_changed_time && millis() > last_level_changed_time + 2000) {
last_level_changed_time = 0;
zunoSendReport(1);
}
}
void setter(byte value) {
if (value > 99) {
value = 99;
}
level = (long)value * 255 / 99;
analogWrite(PWM1, level);
}
byte getter(void) {
return last_reported_level * 99 / 255;
}
Чтобы изменить яркость ленты с помощью диммера, который я раньше использовал, нужно было удерживать клавишу вверх или вниз, это не очень удобно, трудно подстроить нужный уровень яркости. Да и выглядит диммер, как обычный выключатель, а не как классический светорегулятор с колесиком к которому многие привыкли.
Для нового Z-Wave LED контроллера я модифицировал корпус диммера — просверлил отверстие для энкодера и немного поменял крепление рамки, чтобы использовать рамку от другого выключателя. За дизайн не пинайте, делал из подручных материалов. Можно использовать и готовый корпус от обычного диммера, чтобы выглядело эстетично.
ЛУТ решает! Для изготовления единичного экземпляра платы, лучше ЛУТА я не знаю технологии, поэтому изготовил 2 платы, которые идеально помещаются в корпусе старого диммера. В нижней части находится Z-Uno, мосфет и колодка для подключения питания и ленты, кстати мосфет рассчитан на напряжения до 30В, поэтому ленту можно использовать, как 12В, так и 24В, без радиатора ток лучше не превышать более 5А.
В верхней части расположен только энкодер.
Соединив бутерброд из плат и поместив его в корпус, получился Z-Wave LED контроллер.
На данный момент Z-Wave LED контроллер не установлен в подрозетник и лежит на тумбе под телевизор. Некоторое время еще потестирую работу.
Но уже сейчас удобство управления LED лентой сильно повысилось, при управлении с колесика или прикроватного выключателя яркость изменяется мгновенно. В Z-Wave шкала диммирования находится в диапазоне от 0 до 99, с помощью колесика можно выбрать уровень яркости от 0 до 255. При вращении на 1 деление после 0 светодиоды чуть светят, ночью это никого не разбудит, но поможет не наступать на случайно забытый кубик LEGO на полу.
На изготовление устройства ушло 3 вечера, 1 вечер — написание прошивки, 1 вечер ЛУТ, 1 вечер работа напильником.
ОБНОВЛЕНО 21.01.2018
Есть несколько идей по доработке дизайна, хотел бы комментарии получить.
Идея 1. На алике закажу готовый красивый диммер со стеклянной панелью и заменю начинку, с этим я справлюсь.
Идея 2. Использовать крутилку с дисплеем как у климат контроля в машине, на дисплее будет отображаться текущей уровень яркости. Проблема в том, что не могу найти крутилку с дисплеем отдельно от климат контроля.
Комментарии (56)
An_private
18.01.2018 16:38> RGBW контроллер
Судя по всего одному ключу — это одноканальный контроллер, а не RGBW — нет возможности регулировать отдельные цветовые компоненты
ClearAirTurbulence
18.01.2018 17:53Спасибо, довольно интересно. В особенности ссылка на энкодер.
1. Интересено, сложно ли сделать полноченный RGB контроллер с панелью управления с тремя энкодерами HLS (Hue Luminance Saturation)… Китайские достали невозможностью по-людски задать цвет.
2. Голая лента такая голая… Надеюсь, CRI у нее человеческий.allcreater
18.01.2018 18:57Да почти то же самое получится, что в этой статье, только больше контролов будет(если Вы хотите управлять и H, и L, и S), ну и три транзистора, по одному на канал. Нужно только найти формулу перевода из HSL в RGB, а дальше — как везде.
GennPen
19.01.2018 10:06Если и делать, то делать в RGBW. Т.к. добиваться белый (или похожий) оттенок на китайских RGB лентах — это тихий ужас.
Когда начинал делать освещение в комнате, то думал обойдусь обычной RGB-лентой, но в итоге сильно разочаровался, заказал белую ленту и на ардуине сделал контроллер HSL->RGBWClearAirTurbulence
19.01.2018 16:05Спасибо за совет, я в курсе :)
Если нужен W, вопросов нет, конечно, нужна RGBW лента. Более того, даже дорогие премиум-ленты без W смешением RGB нормального белого не смогут дать, это данность.
А у вас именно HSL-контроллер? Как управление реализовано — тремя энкодерами, или есть какие-нибудь хитрости, типа запоминания-восстановления понравившихся цветов через пресеты?GennPen
19.01.2018 16:38А у вас именно HSL-контроллер?
Самодельный, для кодирования цвета — два линейных переменных резистора — L- и S- (яркость и насыщенность) а енкодером — H-канал (цвет).ClearAirTurbulence
20.01.2018 01:08Если не секрет, с чем связано такое решение?
Почему не три ротационных энкодера, или не три резистора?GennPen
20.01.2018 02:00Яркость и насыщенность привычней регулировать от нуля(нижнее положение) до максимума(верхнее положение). А у канала цвета нет «нуля», по сути он и выбирается по круговой шкале, поэтому и решил делать енкодером, который можно крутить в любую сторону на любой угол.
ClearAirTurbulence
20.01.2018 12:46Тогда еще вопрос: резисторы нормально служат? И какие использованы? А то некоторые хлипкие, и некоторые сомнения в их долговечности и точности… Хотелось бы линейный энкодер, но те, что я находил, имеют весьма странные ценники (может, плохо искал).
aivs Автор
18.01.2018 18:02Не вижу сложности, если один энкодер прекрасно работает, то и 3 будут. Плюс, всегда есть возможность задать точный уровень с помощью Z-Wave контроллера.
Если бы планировал ремонт, то и нишу под ленту продумал. А в моем случае нужно было дополнительное освещение без больших затрат.vconst
18.01.2018 18:28Если бы планировал ремонт, то и нишу под ленту продумал.
Как раз пишу статью про освещение лентами, накатал уже 7 страниц, а до монтажа еще не дошел %)
Я приделал на стену алюминиевые уголки. Минимальные вмешательства в интерьер, времени отнимает немного, сделать просто. Рекомендую.
allcreater
18.01.2018 18:54Хмм, что за адский ужас творится с ценами на электронику с поддержкой ZWave, ZigBee и иже с ними? Вроде бы протоколы задуманы для соединения кучи мелких и в теории недорогих устройств, а получаем то, что есть.
Никто не подскажет, есть ли что-то подобное и менее дорогое? 3500 за хорошее устройство не жалко, но не стоит ведь того такая ардуинка. С другой стороны, есть те же ESP32, но идеологически не очень пригодны для умного дома, управлять с WiFi розетками — это какой-то уж очень оверкилл.
Извините за оффтоп, давно пригорает :(aivs Автор
18.01.2018 19:08Да, у многих пригорает, но таков рынок Z-Wave. Хочешь готовое решение быстро — плати деньги, нет — иди разрабатывай свой протокол на wi-fi или nfr ни с кем не совместимый.
Хотелось бы, чтобы Z-Uno стоило на порядок дешевле. Но производитель не спешит с снижением цены.
В мире Z-Wave только Z-Uno позволяет разрабатывать пользователям свои уникальные устройства. Был один аналог, но давно про него не слышно.
vasimv
18.01.2018 19:09Потому что все кушать хотят, лицензии на эти протоколы стоят дорого. В результате — нет ни разработчиков, ни производителей. Думаю, не сильно ошибусь с прогнозом, если скажу что все эти протоколы постепенно умрут. Так что WiFi на сегодняшний день — самое оптимальное. Появится еще какой-нибудь WiFi LE, так вообще будет идеально.
aivs Автор
18.01.2018 19:12Ошибаетесь на счет «умрут». Месяц назад Silicon Labs — производитель в том числе и ZigBee чипов купила Sigma Designs — производителя чипов и владельца лицензий Z-Wave.
Эти протоколы только набираю обороты, сейчас в очень сильной компании.vasimv
18.01.2018 19:23Ну, это мое личное мнение. То что один производитель покупает производителя конкурирующего протокола — скорее признак как раз близкой смерти. WiFi и Bluetooth уже прочно обосновались на этом рынке, пользователям совершенно не захочется ставить еще какие-то гейты wifi<->z-wave, когда можно просто купить девайс с wifi и управлять с телефона. Потеряли эти z* слишком много времени из-за своей жадности.
vp7
18.01.2018 21:46Был такой обалденный стандарт — FireWire.
Пользовался им почти 10 лет назад, была и видео-камера и внешний HDD.
Для своего времени он совершил прорыв, существенно обходил USB 2.0 (позволял передавать данные с гарантированной задержкой) и многое и многое.
Но одна единственная ошибка с лицензированием поставила на нём жирный крест.
ZigBee/Z-Wave действительно может завоевать мир, если оптовая стоимость конечного модуля будет в пределах $1-2, а в обыкновенной квартире будет по 20+ устройств, поддерживающих такой стандарт.
Сейчас же это игрушка для богатых и для гиков. А значит по определению не может быть массовой.
telobezumnoe
19.01.2018 10:07а что сложного выделить отельную вайфай сеть для них, поставить отдельно mqtt сервер на роутер и пользоваться? у меня дома уже с год работает насколько контроллеров… и никаких проблем с передачей данных пока не выявлено. та же лента rgb прекрасно диммируется и меняются цвета с телефона, более того с телефона на все это прикрутил голосовое управление. то же самое с zwave тем более за такие деньги это не получится
dernuss
19.01.2018 13:23-1есть те же ESP32
А есть esp8266 и esp8265. Дешего и сердито.
allcreater
19.01.2018 14:56Есть, конечно! Разумеется, они ещё бюджетнее, но, положим, даже монструозный(в плане избыточных возможностей) ESP32 у официальных поставщиков стоят всего 300р за модуль, что больше чем на порядок дешевле, чем описанные в статье Z-Wave модули, а, во-вторых, у новых SoC уже есть Bluetooth/BLE, что лично мне кажется более перспективной заменой вайфая. Может, я и извращенец, но этот стек кажется более подходящим для управления небольшими устройствами.
aivs Автор
19.01.2018 15:03ESP32 не может работать от батарейки, BLE может. Для любителей BLE производитель Z-Wave устройств Fibaro выпускает и BLE версии с HomeKit
https://homekit.fibaro.com/
dernuss
19.01.2018 17:05А как же управление через интернет?
allcreater
19.01.2018 17:31Ну, задумывалось так, что BLE/Bluetooth устройства общаются с хабом или между собой(ходят слухи, что BLE теоретически может в ячеистую топологию, но лично я ещё не разбирался, что для этого нужно и возможно ли вообще), а дальше уже интернеты.
Прямое управление по вайфаю в этом плане звучит вроде бы логично, маршрутизация и настройка подсетей в этом случае определяется роутером, но не хочется засорять все доступные частоты сигналом от кучи устройств. Может быть, мои беспокойства напрасны. Если это действительно не мешает соседям и не снижает скорость в собственной сети до минимальной из поддерживаемых клиентами — тогда, наверное, пригодно.dernuss
20.01.2018 10:04Если честно то я слабо представляю Bluetooth устройства типа диммеров и прочих, так как 1) мощность Bluetooth очень мала. Фактически радиус одна комната, 2) уж как то сложно спаривать Bluetooth устройства, 3) Нужен ещё хаб
Если с хабом, тогда уж лучше либо сделать самому свой аналог z-wave, на каких нибудь si4432 недорогих и esp. Или копить деньги или ждать снижения цены на z-wave или аналоги.
Насчет засорять сигналом, для частных домов wifi вариант точно подходит, насчет квартир в многоэтажных домах — не знаю. Но такие устройства не качают торренты. Так что тоже не думаю что будут проблемы.
DmitrySpb79
21.01.2018 14:29> Хмм, что за адский ужас творится с ценами на электронику с поддержкой ZWave, ZigBee и иже с ними?
На самом деле, нет никакого адского ужаса — просто все эти товары не рассчитаны на российский рынок.
К примеру Philips Hue в России практически не встречаются, а в Голландских магазинах они везде в электротоварах лежат. Просто 30Евро за лампочку для России это «ужас-ужас», а в Голландии это 3 раза на электричке до работы и обратно доехать.aivs Автор
21.01.2018 19:27Откуда такая оценка российского рынка, если вам дорого лампочка за 30$ с радиоуправлением, значит она вам не нужна.
DmitrySpb79
21.01.2018 20:42Я думаю, в России за такую цену она многим не нужна :) Искал я как-то выключатель с диммером именно под Hue в Питере, не нашел (сейчас может уже появились, не знаю, было год назад). Аналогично было с датчиками движения.
aivs Автор
21.01.2018 21:39Ikea комплект из диммера и лампы 18€.
https://m2.ikea.com/de/de/p/tradfri-dimmer-set-warmes-tageslicht-weiss-80349888/
kaplson
19.01.2018 10:09Круглая светодиодная люстра с пультом, умеющая светить теплым, холодным, ярким, слабым, с режимом ночной подсветки (1Вт) и имитацией заката солнца стоит 4-5 тысяч рублей (а за 6 умеет светить любым цветом).
aivs Автор
19.01.2018 10:11Тут про умный дом, а люстра только с одного пульта управляется
rustavelli
19.01.2018 11:33от xiaomi светильник за $60 через wifi управляется. Цена на эти zwave запредельная.
kaplson
19.01.2018 12:12То, что я увидел на фотографии, на умный дом не похоже.
aivs Автор
19.01.2018 12:22Там между фоток еще немного текста есть, где рассказывается, что лента управляется не только с энкодера, но и с телефона и с выключателя при входе, и с прикроватного выключателя. Можете почитать мои предыдущие статьи, там много про обустройство моей домашней автоматизации.
Igrek_L
19.01.2018 13:12Если речь об Estаres то пульт там на 433 МГц, кодировка довольно легко снифится, после чего управление доступно не только с пульта но из «Умного дома». У меня два таких светильника, оба успешно заведены в Domoticz посредством broadlink_а.
Igrek_L
22.01.2018 09:21Есть несколько идей по доработке дизайна, хотел бы комментарии получить.
...
По моему мнению «крутилка» ломает дизайн и удобства. По сути в том или ином варианте использования (день/ночь/игра/...) выставляется вполне определенный уровень подсветки + включаются/выключаются дополнительные источники света. То есть сцены. Сцены удобны и не требуют крутилок. Несколько режимов с привязкой ко времени суток/активности гораздо удобней. Переключать между ними можно обычными кнопками или голосом, жестами, да чем угодно!
Кстати, за сопоставимые деньги можно приобрести ленту с ws8212 и управлять яркостью/цветом каждого диодика в ленте. Несложным Easy ESP например. У меня так сделана ночная подсветка в коридоре и имитация рассвета/заката в комнате сына. Попутно по люстре можно определять время. :) Зеленым диодикомком она показывает на часы, а красным минуты. Особенно удобно утром на работу выходить.
vconst
Ленту наклеили прямо на обои?
Эх… Хотел я сделать управление лентами на Ардуино, но забуксовал на диммировании большой мощности и плюнул. В итоге купил готовые диммера, но цены на них конские :(
aivs Автор
Лента наклеена на потолочный бордюр, смотрит вниз, думал рассеиватель добавить, но не захотел терять в яркости.
vconst
Не отваливается, не отгорает? Греется не сильно?
Я не рискнул клеить ленты просто так, без теплоотвода, но у меня на них основное освещение сделано.
aivs Автор
Больше года назад клеил, горит по 8 часов в день. Не греется, она же открытая, чего ей греться. Как приклеил, так и забыл.
vconst
Мои ленты жрут почти 300 ватт… Без радиатора стремно.
aivs Автор
Эта лента 4.5м жрет 30Вт.
vconst
Тогда да, можно вообще не париться.
Popadanec
А как вы решили вопрос отвода излишков тепла.
vconst
Приклеил их на алюминиевые уголки.
GennPen
Тоже делал освещение(рассеянное от потолка), в целом при максимальной нагрузке вышло около 400 Вт. Две полосы на алюминиевом профиле, который отлично рассеивает тепло.
Danov
Это на какую площадь комнаты?
GennPen
Комната около 20 кв.м., периметр около 18 м.
Изначально попробовал RGB-ленту, примерно 12 Вт/м, вышло около 200 Вт на максимуме, но не понравился ее белый оттенок, поэтому добавил белую ленту. В итоге если их обе включать на полную — потребляют около 400 Вт, но обе одновременно я не включаю, в контроллере поставил ограничение в 200Вт.
saggy
Лента запитана с одной стороны? Потери яркости не наблюдается в конце ленты?
aivs Автор
на 5 метрах не чувствуется потерь