Gira + Z-Wave Switch. مفتاح راديو 4 زر يعتمد على Z-Uno



ما المهام التي يقوم مفتاح الراديو بحلها:

  • في غرفة ذات إصلاح جاهز ، تم نقل الأثاث ، وتم إغلاق المفتاح بواسطة خزانة
  • في مرحلة الإصلاح ، لم يفكروا في مفتاح مناسب بالقرب من السرير
  • في المنزل المصنوع من الخشب ، ليس من الجمالي سحب الأسلاك الخارجية ، يلزم تبديل المفاتيح اللاسلكية ، ولكن مع تصميم محدد
  • التكامل مع نظام التشغيل الآلي الحالي

حاليًا ، هناك مفاتيح Z-Wave تعمل بالبطارية ، مثل Z-Wave.Me Wall Controller ، ولكن هذه المفاتيح تأتي بتصميم رئيسي محدد. إذا كنت تريد استخدام المفاتيح Legrand ، Gira ، وما إلى ذلك ، فإن لوحة Z-Wave Z-Uno تأتي إلى الإنقاذ.

سأوضح كيفية عمل مفتاح راديو يعمل بالبطارية من مفتاح Gira عادة يمكن تثبيته في أي مكان مناسب. فيديو التبديل في نهاية المقال.

أستخدم آلية التبديل Gira للمكفوفين مع 4 أزرار ومزلاج في المنتصف. لقد اخترت تصميم المفاتيح والإطارات من سلسلة System 55 فقط لأن خط Z-Wave للمفاتيح التي تعمل بالبطارية لديه إطارات في نفس التصميم.



تتم إضافة وظائف جديدة إلى Z-Uno ، وفي أحدث إصدار تمت إضافة KeyScanner ، والذي يسمح لك بمعالجة النقرات من 112 زرًا في نفس الوقت ، سأقصر نفسي على قراءة 4 أزرار من المفتاح.

في الرسم البياني أدناه ، تتوقع Z-Uno في وضع السكون أن يتم الضغط على أحد الأزرار ، بعد الضغط على Z-Uno يستيقظ ويرسل أمر راديو ، وبعد ذلك ينام على الفور حتى لا يستهلك طاقة البطارية.



رسم تبديل الراديو 4 زر على أساس 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 


على كل من 4 أزرار بمساعدة جمعيات تكوين الراديو فريق المتلقي، يمكن أن يكون التتابع ، باهتة ، الشريط RGBW ، مصباح LED أو غيرها من المحرك. في الرسم ، أقوم بإنشاء مجموعتين من الارتباطات للتحكم في جهازين ، الأزرار العلوية ترسل أوامر الطاقة ، الأزرار السفلية ترسل أوامر الطاقة.



نقوم بتوصيل آلية التبديل GIRA بدبابيس Z-Uno 1،2،3،4. يأتي Z-Uno مزودًا بقابس ، ملحومًا به في حجرة البطارية 1/2 AA وقم بتوصيله بموصل البطارية. تتميز بطارية 1 / 2AA (ER14250) بسعة مدمجة 3.6 فولت ، ولكن يمكنك استخدام بطاريتين AA ، كما أنها تتناسب تمامًا مع المقبس.

تحتوي Z-Uno على محولين DC-DC ، وهي غير مطلوبة لتشغيل البطارية ، وبالتالي يمكن استبعادها من دائرة تزويد الطاقة عن طريق لحام وصلة العبور R12. في الوقت نفسه ، يتم تقليل استهلاك الطاقة لـ Z-Uno في وضع السكون بمقدار 143 مرة ، من 1 مللي أمبير إلى 7 ميكرو أمبير.

أوصي بعمق 60 مم للمقابس ، وهو أكثر ملاءمة للعمل معها ، من الصعب دفع Z-Uno مع بطارية وأسلاك والتبديل نفسه إلى مقابس 40 مم ، ولكن من الممكن!





يتحكم زرين يمينين في المخرج ، ويرسلان أوامر التشغيل والإيقاف إلى مخرج Z-Wave.Me . يتحكم الأزراران الأيسران في باهتة اللون

، بضغطة قصيرة ، يتم إرسال الأمرين ON و OFF ، مع الضغط الطويل لأعلى أو لأسفل ، يتم إرسال أوامر التعتيم إلى Z-Wave.Me dimmer .

كما ترى الجهاز الذي يعمل بالبطارية ، فإن قراءة حالة الأزرار باستخدام Z-Uno بسيطة للغاية ، وبهذه الطريقة يمكنك توصيل لوحة مفاتيح كاملة بـ Z-Uno ، حيث سيؤدي كل زر وظيفة مفيدة لمنزلك الذكي.


فيديو لمفتاح البطارية على أساس Z-Uno. التحكم في التعتيم والتتابع.

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


All Articles