
Na sala onde a criança está brincando, instalei iluminação adicional na forma de uma faixa de LED. Inicialmente, planejei controlar o brilho da fita, o que é conveniente para definir a iluminação noturna. Eu já tinha um dimmer de 220V Z-Wave, então era mais barato comprar um transformador de 12V para 1000r do que um controlador Fibaro RGBW especial para 5500r.
Esta solução funciona, mas há contras:
- Atraso de escurecimento
- Você não pode definir um nível de brilho muito baixo.
Após um ano de uso, decidi fazer meu controlador LED Z-Wave, mas com um codificador e uma caixa mais escura, para instalação em um soquete.
O diagrama do circuito do dispositivo é elementar: um codificador de 3 pinos é conectado diretamente ao Z-Uno: pino A, pino B e botão. Mosfet se conecta ao pino PWM.

Materiais e preços:
A placa Z-Wave Z-Uno é programada no ambiente Arduino, o esboço para processar sinais do codificador e controlar o mosfet requer apenas 143 linhas de código com comentários. Um esboço funciona da seguinte maneira:
A cada 128 μs, por interrupção do cronômetro, verificamos em que direção a roda gira, nos protegemos do salto por uma verificação de estado de 4 vezes. Na lupa, verifique se o botão é pressionado, cada vez que você pressiona, desliga a fita ou liga o nível de brilho anterior. O brilho pode ser definido no codificador e em um telefone ou outro comutador Z-Wave.
Código de controle de LED do redutor rotativo#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; }
Para alterar o brilho da fita usando o dimmer que eu costumava usar, você tinha que segurar a tecla para cima ou para baixo, não é muito conveniente, é difícil ajustar o nível de brilho desejado. E o dimmer parece um interruptor comum, e não um dimmer clássico com uma roda à qual muitos estão acostumados.

Para o novo controlador de LEDs Z-Wave, modifiquei a caixa do dimmer - fiz um furo no codificador e mudei levemente a montagem do quadro para usar o quadro de outro comutador. Não chute pelo design, feito de materiais improvisados. Você pode usar a carcaça acabada de um dimmer convencional para parecer esteticamente agradável.

LUT decide! Para a fabricação de uma única instância da placa, é melhor que a LUTA. Não conheço a tecnologia, por isso fiz duas placas que se encaixam perfeitamente no caso do dimmer antigo. Na parte inferior, há o Z-Uno, um mosfet e um bloco para conectar energia e fita, pelo modo como o mosfet é projetado para tensões de até 30V, para que a fita possa ser usada como 12V ou 24V, sem radiador, a corrente não deve exceder mais de 5A.

Somente o codificador está localizado na parte superior.

Depois de conectar um sanduíche das placas e colocá-lo no gabinete, obtemos um controlador de LEDs Z-Wave.

No momento, o controlador LED Z-Wave não está instalado no soquete e fica em um suporte de TV. Por algum tempo vou testar o trabalho.

Mas agora a conveniência de controlar a faixa de LED aumentou muito, ao controlar de uma roda ou um interruptor de cabeceira, o brilho muda instantaneamente. No Z-Wave, a escala de escurecimento está no intervalo de 0 a 99. Usando a roda, você pode selecionar o nível de brilho de 0 a 255. Quando você gira 1 divisão após 0, os LEDs acendem um pouco, não acordam ninguém à noite, mas ajudam a não pisar no esquecido. Cubo LEGO no chão.
Foram necessárias 15 horas para fazer o dispositivo, 1 firmware de gravação noturno, 1 noite LUT, 1 noite trabalhando com um arquivo.
ATUALIZAÇÃO 21/01/2018
Existem várias idéias para finalizar o design. Gostaria de receber comentários.
Ideia 1. De modo geral, pedirei um dimmer bonito acabado com um painel de vidro e substituirei o recheio, posso lidar com isso.
Idéia 2. Use uma torção com uma tela semelhante ao controle climático em um carro, o nível de brilho atual será exibido. O problema é que não consigo encontrar a distorção com uma tela separada do controle de temperatura.
ATUALIZADO 23/01/2018
Na placa de montagem, a Schneider Electric Odace (80 r na instalação elétrica) montou um circuito controlador de LED.

O quadro Odace 90 p é (que não está na foto), mas a torção não é vendida separadamente, mas eu a tinha em estoque. Nenhuma caixa adicional está planejada; o dispositivo está completamente pronto.
