
在孩子玩耍的房间里,我以LED灯条的形式安装了额外的照明。 最初,我计划控制磁带的亮度,这对于设置夜间照明很方便。 我已经有了一个220V的Z-Wave调光器,因此以1000r的价格购买12V可调光变压器要比一个5500r的特殊Fibaro RGBW控制器便宜。
此解决方案有效,但有缺点:
使用一年后,我决定制造Z-Wave LED控制器,但要带有编码器和调光器外壳,以便安装在插座中。
该设备的电路图是基本电路;具有3个引脚的编码器直接连接到Z-Uno:引脚A,引脚B和按钮。 Mosfet连接至PWM引脚。

材料和价格:
Z-Wave Z-Uno板是在Arduino环境中编程的,用于处理来自编码器的信号和控制mosfet的草图仅需143行代码,并带有注释。 草图的工作原理如下:
每隔128μs(由于计时器的中断),我们会检查车轮朝哪个方向转动,并通过4倍状态检查来保护自己免受弹跳。 在放大镜中,每次按下时,请检查按钮是否被按下,关闭录像带或打开以前的亮度级别。 亮度既可以通过编码器设置,也可以通过电话或其他Z-Wave开关设置。
旋转调光器LED控制代码#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控制器,我修改了调光器外壳-我在编码器上钻了一个孔,并略微更改了框架安装架,以使用来自另一个开关的框架。 不要踢踢由即兴材料制成的设计。 您可以使用传统调光器制成的成品外壳,看起来美观。

LUT决定! 对于单块板的制造,它比LUTA更好,我不知道该技术,因此我制作了两块完全适合旧调光器的板。 底部有Z-Uno,一个mosfet和一个用于连接电源和胶带的块,顺便说一下mosfet的设计电压高达30V,因此该胶带可在没有散热器的情况下用作12V或24V,电流不应超过5A。

仅编码器位于顶部。

从板上连接一个三明治并将其放入外壳后,我们得到了Z-Wave LED控制器。

目前,Z-Wave LED控制器尚未安装在插座中,而是位于电视架上。 在一段时间内,我将测试这项工作。

但是现在,控制LED灯条的便利性大大提高了,从轮子或床头开关进行控制时,亮度会立即变化。 在Z-Wave中,调光比例在0到99的范围内,使用滚轮可以在0到255之间选择亮度级别。在0之后旋转1分度时,LED会点亮一点,它不会在晚上唤醒任何人,但有助于避免踩到被遗忘的物体乐高在地板上的多维数据集。
制作该设备花费了3 pm,1个晚上编写固件,1个晚上LUT,1个晚上使用文件。
更新于2018年1月21日
有几种想法可以完成设计,我希望收到您的意见。
想法1.在alik上,我将订购一块带有玻璃面板的精美调光器,并替换填充物,我可以处理。
想法2。在汽车上使用类似于汽车气候控制的带有显示屏的转弯;将显示当前的亮度级别。 问题是我无法从显示屏上找到与空调分开的扭曲。
更新于01/23/2018
在安装板上,Schneider Electric Odace(电气安装中为80 r)组装了一个LED控制器电路。

Odace镜框90 p是(未在照片中显示),但曲折并未单独出售,但我有库存。 没有计划额外的外壳;设备已完全准备就绪。
