Gira + Z-Wave开关。基于Z-Uno的4按钮无线电开关



无线交换机可以完成哪些任务:

  • 在准备好维修的房间中,移动家具,用橱柜关闭开关
  • 在维修阶段,他们没有想到床旁有一个方便的开关
  • 在用木材建造的房屋中,拉外部布线并不美观,需要无线电开关,但要有特定的设计
  • 与现有自动化系统集成

当前,有电池供电的 Z-Wave开关,例如Z-Wave.Me墙控制器,但是这些开关带有特定的按键设计。如果您想使用Legrand,Gira等开关,则可以使用Z-Wave Z-Uno板进行救援。

我将展示如何从通常可以安装在任何方便位置的Gira开关制作电池供电的无线电开关。本文结尾处的开关视频。

我将Gira开关装置用于百叶窗,中间有4个按钮和一个闩锁。我之所以选择System 55系列的按键和框架设计,是因为电池供电开关Z-Wave系列具有相同设计的框架。



正在向Z-Uno添加新功能,并且在最新版本中添加了KeyScanner,它使您可以同时处理来自112个按钮的单击,我将限于读取4个按钮。

在下面的草图中,处于睡眠模式的Z-Uno希望按下其中一个按钮,按下Z-Uno会唤醒并发送无线电命令,此后它立即进入睡眠状态,以免消耗电池电量。



基于Z-Uno的Sketch 4键单选开关
// 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 


在关联的帮助下,可以在4个按钮的每个按钮上配置无线电命令的接收器,它可以是继电器调光器RGBW磁带LED灯或其他执行器。在草图中,我创建了两组用于控制2个设备的关联,上方的按钮发送电源命令,下方的按钮发送电源命令。



我们将GIRA开关机构连接到Z-Uno 1,2,3,4的引脚。 Z-Uno带有一个插头,我将其焊接到1/2 AA电池盒中,然后将其插入电池连接器中。 1 / 2AA(ER14250)电池具有3.6 V的紧凑型容量,但是您可以使用2节AA电池,它们也非常适合插入插座。

Z-Uno有2个DC-DC转换器,不需要电池操作,因此可以通过焊接跳线R12将它们从电源电路中排除。同时,Z-Uno在睡眠模式下的功耗降低了143倍,从1 mA降至7μA。

我建议插座的深度为60毫米,使用它们时更方便,将电池,电线和开关本身推入Z-Uno很难插入40毫米的插座中,但是有可能!





2个右按钮控制插座,向Z-Wave.Me插座发送ON和OFF命令

左2个按钮控制调光器,短按打开和关闭命令,长按UP或DOWN向下将调光命令发送到Z-Wave.Me调光器

正如您看到的电池供电设备一样,使用Z-Uno读取按钮的状态非常简单,通过这种方式,您可以将整个键盘连接到Z-Uno,其中每个按钮将执行智能家居的有用功能。


基于Z-Uno的电池开关的视频。调光器和继电器控制。

Source: https://habr.com/ru/post/zh-CN396839/


All Articles