
Di ruangan tempat anak bermain, saya memasang penerangan tambahan dalam bentuk strip LED. Awalnya, saya berencana untuk mengontrol kecerahan kaset, ini nyaman untuk mengatur pencahayaan malam. Saya sudah memiliki dimmer Z-Wave untuk 220V, jadi lebih murah untuk membeli transformator dimmable untuk 12V untuk 1000r daripada controller RGBW khusus dari Fibaro untuk 5500r.
Solusi ini berfungsi, tetapi ada kontra:
- Keterlambatan Peredupan
- Anda tidak dapat mengatur tingkat kecerahan yang sangat rendah.
Setelah satu tahun digunakan, saya memutuskan untuk membuat pengontrol LED Z-Wave saya, tetapi dengan encoder dan case dimmer, untuk pemasangan di soket.
Diagram sirkuit perangkat ini sederhana, sebuah enkoder dengan 3 pin terhubung langsung ke Z-Uno: pin A, pin B dan tombol. MOSFET terhubung ke pin PWM.

Bahan dan harga:
Papan Z-Wave Z-Uno diprogram di lingkungan Arduino, sketsa untuk memproses sinyal dari encoder dan mengendalikan MOSFET hanya membutuhkan 143 baris kode dengan komentar. Sebuah sketsa berfungsi sebagai berikut:
Setiap 128 μs, dengan interupsi dari timer, kami memeriksa ke arah mana roda diputar, kami melindungi diri dari pantulan dengan cek status 4 kali lipat. Pada kaca pembesar, periksa tombol ditekan, setiap kali Anda menekan, matikan kaset atau nyalakan tingkat kecerahan sebelumnya. Brightness dapat diatur baik dari encoder dan dari telepon atau saklar Z-Wave lainnya.
Kode Kontrol LED Rotary Dimmer#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; }
Untuk mengubah kecerahan rekaman menggunakan dimmer yang biasa saya gunakan, Anda harus menahan tombol ke atas atau ke bawah, itu tidak terlalu nyaman, sulit untuk menyesuaikan tingkat kecerahan yang diinginkan. Dan peredup itu terlihat seperti saklar biasa, dan tidak seperti peredup klasik dengan roda yang banyak digunakan.

Untuk pengontrol LED Z-Wave baru, saya memodifikasi case dimmer - Saya membuat lubang untuk encoder dan sedikit mengubah frame mount untuk menggunakan frame dari switch lain. Jangan menendang untuk desain, terbuat dari bahan improvisasi. Anda dapat menggunakan rumah yang sudah jadi dari dimmer konvensional agar terlihat estetis.

LUT yang memutuskan! Untuk pembuatan satu contoh papan, itu lebih baik daripada LUTA saya tidak tahu teknologinya, jadi saya membuat 2 papan yang sangat pas dalam kasus dimmer lama. Di bagian bawah ada Z-Uno, sebuah MOSFET dan sebuah blok untuk menghubungkan daya dan pita, dengan cara MOSFET dirancang untuk tegangan hingga 30V, sehingga pita dapat digunakan sebagai 12V atau 24V, tanpa radiator, arus tidak boleh melebihi lebih dari 5A.

Hanya pembuat enkode yang terletak di atas.

Setelah menyambungkan sandwich dari papan dan meletakkannya di kasing, kami mendapatkan pengontrol LED Z-Wave.

Saat ini, pengontrol LED Z-Wave tidak terpasang di soket dan terletak di dudukan TV. Untuk beberapa waktu saya akan menguji pekerjaan itu.

Tapi sekarang kemudahan mengendalikan strip LED telah sangat meningkat, ketika mengendalikan dari roda atau saklar samping tempat tidur, kecerahan berubah secara instan. Dalam Z-Wave, skala peredupan berkisar antara 0 hingga 99, menggunakan roda Anda dapat memilih tingkat kecerahan dari 0 hingga 255. Ketika Anda memutar 1 divisi setelah 0, LED menyala sedikit, ia tidak akan membangunkan siapa pun di malam hari, tetapi akan membantu untuk tidak menginjak orang yang dilupakan. LEGO kubus di lantai.
Butuh 3 sore untuk membuat perangkat, 1 malam menulis firmware, 1 malam LUT, 1 malam bekerja dengan file.
DIPERBARUI 01/21/2018
Ada beberapa ide untuk menyelesaikan desain, saya ingin menerima komentar.
Ide 1. Pada alik saya akan memesan dimmer cantik yang sudah jadi dengan panel kaca dan mengganti isinya, saya bisa tangani ini.
Gagasan 2. Gunakan pelintiran dengan tampilan yang mirip dengan pengontrol suhu di mobil, tingkat kecerahan saat ini akan ditampilkan. Masalahnya adalah saya tidak dapat menemukan putaran dengan tampilan terpisah dari kontrol iklim.
DIPERBARUI 01/23/2018
Di pelat pemasangan, Schneider Electric Odace (80 r pada instalasi listrik) memasang rangkaian pengontrol LED.

Frame Odace 90 p adalah (yang tidak ada dalam foto), tetapi twist tidak dijual secara terpisah, tetapi saya memilikinya dalam stok. Tidak ada perumahan tambahan yang direncanakan, perangkat ini benar-benar siap.
