जीरा + जेड-वेव स्विच। Z-Uno पर आधारित 4-बटन रेडियो स्विच



रेडियो स्विच किन कामों को हल करता है:

  • एक तैयार मरम्मत के साथ एक कमरे में, फर्नीचर को स्थानांतरित कर दिया गया था, स्विच को कैबिनेट के साथ बंद कर दिया गया था
  • मरम्मत के चरण में, उन्होंने बिस्तर के पास एक सुविधाजनक स्विच के बारे में नहीं सोचा
  • लकड़ी से बने घर में, बाहरी तारों को खींचने के लिए सौंदर्यवादी नहीं है, रेडियो स्विच की आवश्यकता होती है, लेकिन एक विशिष्ट डिजाइन के साथ
  • एक मौजूदा स्वचालन प्रणाली के साथ एकीकरण

वर्तमान में, बैटरी चालित जेड-वेव स्विच हैं, जैसे कि Z-Wave.Me वॉल नियंत्रक , लेकिन ये स्विच एक विशिष्ट कुंजी डिज़ाइन के साथ आते हैं। यदि आप स्विच Legrand, Gira, आदि का उपयोग करना चाहते हैं, तो Z-Wave Z-Uno बोर्ड बचाव में आता है।

मैं दिखाऊंगा कि आमतौर पर जीरा स्विच से बैटरी चालित रेडियो स्विच कैसे बनाया जाता है जिसे किसी भी सुविधाजनक स्थान पर स्थापित किया जा सकता है। लेख के अंत में स्विच का वीडियो।

मैं 4 बटन और बीच में एक कुंडी के साथ अंधा के लिए जीरा स्विच तंत्र का उपयोग करता हूं। मैंने सिस्टम 55 श्रृंखला से चाबियों और फ़्रेमों के डिज़ाइन को केवल इसलिए चुना क्योंकि बैटरी-संचालित स्विच की जेड-वेव लाइन में एक ही डिज़ाइन में फ़्रेम हैं।



Z-Uno में नए फ़ंक्शंस जोड़ना जारी है, और नवीनतम रिलीज़ में KeyScanner जोड़ा गया, जो आपको एक ही समय में 112 बटन से क्लिक संसाधित करने की अनुमति देता है, मैं खुद को स्विच से 4 बटन पढ़ने तक सीमित करूंगा।

नीचे स्केच में, Z-Uno स्लीप मोड में एक बटन को दबाए जाने की अपेक्षा करता है, Z-Uno दबाने के बाद उठता है और एक रेडियो कमांड भेजता है, जिसके बाद यह तुरंत सो जाता है ताकि बैटरी पावर का उपभोग न करें।



Z-Uno पर आधारित स्केच 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 टेप , एलईडी लैंप या अन्य एक्ट्यूएटर हो सकता है। स्केच में, मैं 2 उपकरणों को नियंत्रित करने के लिए संघों के 2 समूह बनाता हूं, ऊपरी बटन पावर कमांड भेजते हैं, निचले बटन पावर कमांड भेजते हैं।



हम जीआईआर-स्विच के तंत्र को Z-Uno 1,2,3,4 के पिन से जोड़ते हैं। Z-Uno एक प्लग के साथ आता है, मैंने इसे 1/2 AA बैटरी कंपार्टमेंट में मिला दिया और इसे बैटरी कनेक्टर में प्लग कर दिया। 1 / 2AA (ER14250) बैटरी कॉम्पैक्ट 3.6 वी क्षमता है, लेकिन आप 2 एए बैटरी का उपयोग कर सकते हैं, वे सॉकेट में भी पूरी तरह से फिट होते हैं।

जेड-ऊनो में 2 डीसी-डीसी कन्वर्टर्स हैं, उन्हें बैटरी ऑपरेशन की आवश्यकता नहीं है, इसलिए उन्हें जम्पर आर 12 को टांका लगाकर बिजली की आपूर्ति सर्किट से बाहर रखा जा सकता है। इसी समय, स्लीप मोड में Z-Uno की बिजली की खपत 1 mA से 7 μA तक 143 गुना कम हो जाती है।

मैं सॉकेट्स के लिए 60 मिमी की गहराई की सिफारिश करता हूं, उनके साथ काम करना अधिक सुविधाजनक है, जेड-ऊनो को बैटरी, तारों के साथ धक्का देना मुश्किल है और खुद को 40 मिमी सॉकेट में स्विच करना है, लेकिन आप कर सकते हैं!





2 राइट बटन आउटलेट को नियंत्रित करते हैं, Z-Wave.Me आउटलेट पर ON और OFF कमांड भेजते हैं

2 बाएं बटन डिमर को नियंत्रित करते हैं, एक छोटे से प्रेस पर ओएन और ऑफ कमांड भेजे जाते हैं, एक लंबे होल्ड यूपी या नीचे के साथ डिमिंग कमांड को Z-Wave.Me डिमर पर भेजा जाता है

जैसा कि आप बैटरी से चलने वाले डिवाइस को देख सकते हैं, Z-Uno का उपयोग करके बटन की स्थिति को पढ़ना बहुत सरल है, और इस तरह आप पूरे कीबोर्ड को Z-Uno से जोड़ सकते हैं, जहाँ प्रत्येक बटन आपके स्मार्ट होम का एक उपयोगी कार्य करेगा।


Z-Uno पर आधारित बैटरी स्विच का वीडियो। डायमर और रिले नियंत्रण।

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


All Articles