Gira + Z-Wave Switch. Sakelar radio 4 tombol berdasarkan Z-Uno



Tugas apa yang dipecahkan oleh saklar radio:

  • Di sebuah ruangan dengan perbaikan siap, furnitur dipindahkan, saklar ditutup dengan kabinet
  • Pada tahap perbaikan, mereka tidak memikirkan pergantian nyaman di dekat tempat tidur
  • Di rumah yang terbuat dari kayu, bukan estetika untuk menarik kabel eksternal, switch radio diperlukan, tetapi dengan desain khusus
  • Integrasi dengan sistem otomasi yang ada

Saat ini, ada saklar Z-Wave bertenaga baterai, seperti Z-Wave.Me Wall Wall , tetapi sakelar ini datang dengan desain kunci tertentu. Jika Anda ingin menggunakan sakelar Legrand, Gira, dll., Maka papan Z-Wave Z-Uno datang untuk menyelamatkan.

Saya akan menunjukkan cara membuat saklar radio bertenaga baterai dari saklar Gira yang biasanya dapat dipasang di tempat yang nyaman. Video sakelar di akhir artikel.

Saya menggunakan mekanisme saklar Gira untuk tirai dengan 4 tombol dan kait di tengah. Saya memilih desain tombol dan bingkai dari seri System 55 hanya karena garis Z-Wave sakelar bertenaga baterai memiliki bingkai dalam desain yang sama.



Menambahkan fungsi-fungsi baru ke Z-Uno sedang berlangsung, dan dalam rilis terbaru KeyScanner ditambahkan, yang memungkinkan Anda memproses klik dari 112 tombol pada saat bersamaan, saya akan membatasi diri untuk membaca 4 tombol dari sakelar.

Dalam sketsa di bawah ini, Z-Uno dalam mode tidur mengharapkan salah satu tombol untuk ditekan, setelah menekan Z-Uno bangun dan mengirim perintah radio, setelah itu ia segera tertidur agar tidak mengkonsumsi daya baterai.



Sketsa saklar radio 4 tombol berdasarkan Z-Uno
// KeyPad 1x4
#include <ZMEKeypad.h>
// Count of rows
#define ROWS  1
// Count of columns
#define COLS  4

// Set rows pins
BYTE rowPins[1] = {17};
// Set columns pins
BYTE columnPins[4] = {9, 10, 11, 12};

// Create object KeyPad
ZMEKeypad kpd = ZMEKeypad(columnPins, COLS, rowPins, ROWS);

#define CONTROL_GROUP1 1  // number of Association Group 
#define CONTROL_GROUP2 2  // number of Association Group
#define SWITCH_ON 0xff
#define SWITCH_OFF 0

// Start holding flags for 4 buttons
byte button_0_start_holding = TRUE;
byte button_1_start_holding = TRUE;
byte button_2_start_holding = TRUE;
byte button_3_start_holding = TRUE;

ZUNO_SETUP_ASSOCIATIONS(ZUNO_ASSOCIATION_GROUP_SET_VALUE_AND_DIM, ZUNO_ASSOCIATION_GROUP_SET_VALUE_AND_DIM); // Send Turn On/Off and Dim commands to associated devices
ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_SLEEPING); // SLEEPING MODE

void setup() {
  zunoSetupKeyScannerWU(4); // turn INT1 wakeup into Key Scanner mode with two columns: pins 9 and 10
  // can also be called in any other place before zunoSendDeviceToSleep()
  kpd.begin();
  kpd.setHoldTime(50); // 100 ms for detect hold button, 10 = 100 ms
  kpd.setDebounceTime(2); // 20 ms debounce, 2 = 20 ms
}

void loop() {
  byte actions[4]; // Array that return all actions from keypad (hold, release, press, double press, etc.)
  byte go_to_sleep = FALSE; // go to sleep after button released;
  
  // Default value for buttons - inactive, then read real states
  byte button_0_active = FALSE;
  byte button_1_active = FALSE;
  byte button_2_active = FALSE;
  byte button_3_active = FALSE;

  byte num_touched_keys = kpd.scanKeys(actions);
  if (num_touched_keys) {
    bool hold = KEYPAD_IS_HOLDING(actions[0]);
    switch (KEYPAD_KEYINDEX(actions[0])) {
      case 0: // Button Left Down
        button_0_active = TRUE;
        if (hold && button_0_start_holding) { // If button 0 start holding
          button_0_start_holding = FALSE;
          zunoSendToGroupDimmingCommand(CONTROL_GROUP1, TRUE, TRUE); // start dimming down (group, direction, start_stop)
        }
        if (!hold) { // If button 0 not holding
          go_to_sleep = TRUE;
          zunoSendToGroupSetValueCommand(CONTROL_GROUP1, SWITCH_OFF);  
        }
        break;
      case 1: // Button Left Up
        button_1_active = TRUE;
        if (hold && button_1_start_holding) { // If button 1 start holding
          button_1_start_holding = FALSE;
          zunoSendToGroupDimmingCommand(CONTROL_GROUP1, FALSE, TRUE); // start dimming up (group, direction, start_stop)
        }
        if (!hold) { // If button 1 not holding
          go_to_sleep = TRUE;
          zunoSendToGroupSetValueCommand(CONTROL_GROUP1, SWITCH_ON);
        }
        break;
      case 2: // Button Right Down
        button_2_active = TRUE;
        if (hold && button_2_start_holding) { // If button 2 start holding
          button_2_start_holding = FALSE;
          zunoSendToGroupDimmingCommand(CONTROL_GROUP2, TRUE, TRUE); // start dimming down (group, direction, start_stop)
        }
        if (!hold) { // If button 2 not holding
          go_to_sleep = TRUE;
          zunoSendToGroupSetValueCommand(CONTROL_GROUP2, SWITCH_OFF);
        }
        break;
      case 3: // Button Right Up
        button_3_active = TRUE;
        if (hold && button_3_start_holding) { // If button 3 start holding
          button_3_start_holding = FALSE;
          zunoSendToGroupDimmingCommand(CONTROL_GROUP2, FALSE, TRUE); // start dimming down (group, direction, start_stop)
        }
        if (!hold) { // If button 3 not holding
          go_to_sleep = TRUE;
          zunoSendToGroupSetValueCommand(CONTROL_GROUP2, SWITCH_ON);
        }
        break;
    }
  }

  if(!button_0_start_holding && !button_0_active) { // If button 0 release holding
    button_0_start_holding = TRUE;
    zunoSendToGroupDimmingCommand(CONTROL_GROUP1, TRUE, FALSE); // stop dimming down (group, direction, start_stop)
  }
   if(!button_1_start_holding && !button_1_active) { // If button 1 release holding
    button_1_start_holding = TRUE;
    zunoSendToGroupDimmingCommand(CONTROL_GROUP1, FALSE, FALSE); // stop dimming up (group, direction, start_stop)
  }
   if(!button_2_start_holding && !button_2_active) { // If button 2 release holding
    button_2_start_holding = TRUE;
    zunoSendToGroupDimmingCommand(CONTROL_GROUP2, TRUE, FALSE); // stop dimming down (group, direction, start_stop)
  }
   if(!button_3_start_holding && !button_3_active) { // If button 3 release holding
    button_3_start_holding = TRUE;
    zunoSendToGroupDimmingCommand(CONTROL_GROUP2, FALSE, FALSE); // stop dimming up (group, direction, start_stop)
  }

  // if all buttons released
  if (kpd.isIdled()) {
    go_to_sleep = TRUE;
  }

  if (go_to_sleep) {
    zunoSendDeviceToSleep();  
  }
}
//        Z-Uno 2.0.6    /Volumes/Files/user/Library/Arduino15/packages/Z-Uno/hardware/zw8051/2.0.6/libraries/ZMEKeypad/ZMEKeypad.h  "BYTE isIdled(){return mon_keys == 0;};"   55 


Penerima perintah radio dikonfigurasikan pada masing-masing dari 4 tombol dengan bantuan asosiasi, dapat berupa relai , dimmer , pita RGBW , lampu LED atau aktuator lainnya. Dalam sketsa, saya membuat 2 grup asosiasi untuk mengendalikan 2 perangkat, tombol atas mengirim perintah daya, tombol bawah mengirim perintah daya.



Kami menghubungkan mekanisme sakelar GIRA ke pin Z-Uno 1,2,3,4. Z-Uno hadir dengan colokan, saya menyoldernya ke kompartemen baterai 1/2 AA dan menyambungkannya ke konektor baterai. Baterai 1 / 2AA (ER14250) memiliki kapasitas 3,6 V yang ringkas, tetapi Anda dapat menggunakan 2 baterai AA, keduanya juga sangat cocok dengan soket.

Z-Uno memiliki 2 konverter DC-DC, mereka tidak diperlukan untuk operasi baterai, oleh karena itu mereka dapat dikeluarkan dari sirkuit catu daya dengan melepas jumper R12. Pada saat yang sama, konsumsi daya Z-Uno dalam mode tidur berkurang 143 kali, dari 1 mA ke 7 ΞΌA.

Saya merekomendasikan kedalaman 60 mm untuk soket, lebih nyaman untuk bekerja dengan mereka, sulit untuk mendorong Z-Uno dengan baterai, kabel dan sakelar itu sendiri ke soket 40 mm, tetapi Anda bisa!





2 tombol kanan mengontrol outlet, mengirim perintah ON dan OFF ke outlet Z-Wave.Me .

2 tombol kiri mengontrol dimmer, dengan menekan sebentar perintah ON dan OFF dikirim, dengan tahan lama ATAS atau BAWAH perintah peredupan dikirim ke dimmer Z-Wave.Me .

Seperti Anda dapat melihat perangkat bertenaga baterai, membaca keadaan tombol menggunakan Z-Uno sangat sederhana, dan dengan cara ini Anda dapat menghubungkan seluruh keyboard ke Z-Uno, di mana setiap tombol akan melakukan fungsi yang berguna di rumah pintar Anda.


Video dari sakelar baterai berdasarkan Z-Uno. Kontrol redup dan relai.

Source: https://habr.com/ru/post/id396839/


All Articles