हमने पहले ही Arduino के लिए एक बटन कनेक्ट करने पर ध्यान दिया है और "बाउंसिंग" संपर्कों के मुद्दे पर छुआ है। यह एक बहुत ही कष्टप्रद घटना है जो बार-बार बटन दबाने का कारण बनती है और बटन क्लिक को प्रोग्रामेटिक रूप से संभालना मुश्किल बनाती है। आइए बात करते हैं कि कॉन्टैक्ट बाउंस से कैसे छुटकारा पाएं।
ज़रूरी
- - अरुडिनो;
- - चातुर्य बटन;
- - 10 kOhm के नाममात्र मूल्य के साथ रोकनेवाला;
- - प्रकाश उत्सर्जक डायोड;
- - तारों को जोड़ना।
निर्देश
चरण 1
यांत्रिक स्विच, पुशबटन, टॉगल स्विच और रिले में संपर्क उछाल एक सामान्य घटना है। इस तथ्य के कारण कि संपर्क आमतौर पर धातुओं और मिश्र धातुओं से बने होते हैं जिनमें लोच होती है, जब शारीरिक रूप से बंद हो जाते हैं, तो वे तुरंत एक विश्वसनीय कनेक्शन स्थापित नहीं करते हैं। थोड़े समय के भीतर, संपर्क कई बार बंद हो जाते हैं और एक दूसरे को पीछे हटा देते हैं। नतीजतन, विद्युत प्रवाह तुरंत नहीं, बल्कि उतार-चढ़ाव की एक श्रृंखला के बाद एक स्थिर-अवस्था मान लेता है। इस क्षणिक प्रभाव की अवधि संपर्क सामग्री, आकार और डिजाइन पर निर्भर करती है। जब चातुर्य बटन के संपर्क बंद हो जाते हैं तो चित्रण एक विशिष्ट ऑसिलोग्राम दिखाता है। यह देखा जा सकता है कि स्थिर अवस्था में जाने के क्षण से लेकर कई मिलीसेकंड तक का समय। इसे "बाउंस" कहा जाता है।
प्रकाश, मोटर्स, या अन्य जड़त्वीय सेंसर और उपकरणों को नियंत्रित करने के लिए विद्युत सर्किट में यह प्रभाव ध्यान देने योग्य नहीं है। लेकिन सर्किट में जहां सूचना का तेजी से पढ़ना और प्रसंस्करण होता है (जहां आवृत्तियां "बाउंस" दालों या उच्चतर के समान क्रम की होती हैं), यह एक समस्या है। विशेष रूप से, Arduino UNO, जो 16 मेगाहर्ट्ज पर संचालित होता है, एक 0 से 1 स्विच के बजाय लोगों और शून्य के अनुक्रम को स्वीकार करके संपर्क उछाल को पकड़ने में उत्कृष्ट है।
चरण 2
आइए देखें कि संपर्क उछाल सर्किट के सही संचालन को कैसे प्रभावित करता है। आइए पुल-डाउन रेसिस्टर सर्किट का उपयोग करके घड़ी के बटन को Arduino से कनेक्ट करें। बटन दबाकर, हम एलईडी को जलाएंगे और इसे तब तक छोड़ देंगे जब तक कि बटन दोबारा दबाया न जाए। स्पष्टता के लिए, हम एक बाहरी एलईडी को डिजिटल पिन 13 से जोड़ते हैं, हालांकि बिल्ट-इन को दूर किया जा सकता है।
चरण 3
इस कार्य को पूरा करने के लिए, पहली बात जो दिमाग में आती है:
- बटन की पिछली स्थिति याद रखें;
- वर्तमान स्थिति के साथ तुलना करें;
- अगर राज्य बदल गया है, तो हम एलईडी की स्थिति बदलते हैं।
आइए ऐसा एक स्केच लिखें और इसे Arduino मेमोरी में लोड करें।
जब सर्किट चालू होता है, तो संपर्क उछलने का प्रभाव तुरंत दिखाई देता है। यह स्वयं को इस तथ्य में प्रकट करता है कि एलईडी बटन दबाने के तुरंत बाद प्रकाश नहीं करता है, या रोशनी करता है और फिर बाहर चला जाता है, या बटन दबाने के तुरंत बाद बंद नहीं होता है, लेकिन चालू रहता है। सामान्य तौर पर, सर्किट स्थिर रूप से काम नहीं करता है। और अगर एलईडी चालू करने वाले कार्य के लिए यह इतना महत्वपूर्ण नहीं है, तो अन्य, अधिक गंभीर कार्यों के लिए, यह अस्वीकार्य है।
चरण 4
हम स्थिति को ठीक करने का प्रयास करेंगे। हम जानते हैं कि संपर्क बंद होने के बाद कुछ मिलीसेकंड के भीतर संपर्क बाउंस हो जाता है। आइए प्रतीक्षा करें, कहें, बटन की स्थिति बदलने के बाद 5ms। एक व्यक्ति के लिए यह समय लगभग एक पल है, और किसी व्यक्ति द्वारा एक बटन दबाने में आमतौर पर अधिक समय लगता है - कई दसियों मिलीसेकंड। और Arduino इतने कम समय के साथ बहुत अच्छा काम करता है, और ये 5ms इसे एक बटन दबाने से संपर्कों के उछाल को काटने की अनुमति देगा।
इस स्केच में, हम डिबॉन्स () प्रक्रिया (अंग्रेजी में "बाउंस" केवल "बाउंस" है, उपसर्ग "डी" का अर्थ रिवर्स प्रोसेस) की घोषणा करेंगे, जिसके इनपुट में हम बटन की पिछली स्थिति की आपूर्ति करते हैं। यदि एक बटन प्रेस 5 मिसे से अधिक समय तक रहता है, तो यह वास्तव में एक प्रेस है।
प्रेस का पता लगाकर, हम एलईडी की स्थिति बदलते हैं।
स्केच को Arduino बोर्ड पर अपलोड करें। अब सब कुछ बहुत बेहतर है! बटन बिना असफलता के काम करता है, जब दबाया जाता है, तो एलईडी स्थिति बदल जाती है, जैसा हम चाहते थे।
चरण 5
इसी तरह की कार्यक्षमता विशेष पुस्तकालयों जैसे बाउंस 2 पुस्तकालय द्वारा प्रदान की जाती है।आप इसे "स्रोत" अनुभाग में या वेबसाइट https://github.com/thomasfredericks/Bounce2 पर लिंक से डाउनलोड कर सकते हैं। पुस्तकालय को स्थापित करने के लिए, इसे Arduino विकास पर्यावरण के पुस्तकालय निर्देशिका में रखें और IDE को पुनरारंभ करें।
"बाउंस2" लाइब्रेरी में निम्नलिखित विधियाँ हैं:
बाउंस () - "बाउंस" ऑब्जेक्ट का इनिशियलाइज़ेशन;
शून्य अंतराल (एमएस) - मिलीसेकंड में देरी का समय निर्धारित करता है;
शून्य संलग्न (पिन नंबर) - वह पिन सेट करता है जिससे बटन जुड़ा होता है;
इंट अपडेट () - ऑब्जेक्ट को अपडेट करता है और अगर पिन की स्थिति बदल गई है, तो सही है और अन्यथा गलत है;
इंट रीड () - पिन की नई स्थिति को पढ़ता है।
आइए पुस्तकालय का उपयोग करके अपने स्केच को फिर से लिखें। आप बटन की पिछली स्थिति को वर्तमान के साथ याद भी कर सकते हैं और तुलना कर सकते हैं, लेकिन आइए एल्गोरिथ्म को सरल बनाएं। जब बटन दबाया जाता है, तो हम प्रेस की गिनती करेंगे, और प्रत्येक अजीब प्रेस एलईडी चालू करेगा, और प्रत्येक प्रेस भी इसे बंद कर देगा। यह स्केच संक्षिप्त, पढ़ने में आसान और उपयोग में आसान लगता है।