गुरुवार, 30 मार्च 2017

Switch Bouncing and Debouncing in Arduino

(फोटो मोठा करून पाहण्यासाठी क्लिक करा)

हा प्रयोग यापूर्वीच्या प्रयोगासारखाच आहे . म्हणजे आपण सारे कॉम्पोनंट व सर्किट या पूर्वीच्या प्रयोगाचेच वापरणार आहोत. पण त्या प्रयोगात एलइडी कायम चालू किंवा बंद रहात असे. आणि मोमेंटरी स्वीच दाबल्यावर तो त्याची स्थिती ऑन/ ऑफ  बदलत असे.

पण असे न होता जर साध्या स्वीच प्रमाणे एलइडीला चालू किंवा बंद करायचे असेल तर त्यासाठी आपल्याला फक्त प्रोग्राम मध्ये बदल करावा लागेल. हा प्रोग्राम आर्डूइनो च्या प्रोग्रामिंग सॉफ्टवेअर मध्ये

File - Examples - Digital - Debounce

या ठिकाणी आढळतो. पण याचे नाव टॉगल न ठेवता डीबाउंस का ठेवले असावे ? त्यासाठी आपल्याला बाऊंस म्हणजे काय हे समजावून घ्यावे लागेल.

Components

  • Arduino Uno's board with USB cable
  • one breadboard small
  • one Tact Switch
  • one LED
  • Resistors 220 Ohms, 10 K Ohms, one each.
  • Jumper wires (Male-Male)
या प्रयोगासाठी लागणाऱ्या साऱ्या गोष्टी तुम्हाला आर्डूइनो उनोच्या एखाद्या स्टार्टर किटमधे मिळतील. तुम्ही जर अजून एखादा किट घेतला नसेल तर या पानाच्या उजव्या बाजूला दिसत असलेल्या लिंक वरून तुम्ही एखादे किट खरेदी करू शकता.

Prerequisite

या प्रयोगासाठी आपल्याला आर्डूइनोच्या  प्रोग्रामिंग सॉफ्टवेअरची आवश्यकता आहे.  तुम्हाला ते कॉम्प्युटरवर इंस्टॉल करावे लागेल. जर तुम्ही अजून केले नसेल तर या लिंकवरून डाउनलोड करू शकता.


Circuit

या प्रयोगामध्ये आपण एक सर्किट बनवू. पहिल्यांदा एलइडी चालू असेल आणि बटन दाबल्यावरच बंद होईल. आणि परत बटन दाबल्यावर ती चालू होईल. म्हणजे घरात वापरल्या जाणाऱ्या स्वीच सारखेच हे काम करील.

LED Toogle switch 

 (चित्र मोठे करून पाहण्यासाठी क्लिक करा) 

येथे आपण आर्डूइनो उनोचे दोन डिजिटल पोर्ट वापरू. पिन 13 आणि  2. तुम्ही यासाठी इतर कोणतेही पोर्ट (डिजिटल) वापरू शकता.

येथे आपण एक टॅक्ट स्वीच वापरलेला आहे. तुम्हाला या स्वीचच्या पिनांची माहिती नसेल तर या आर्टिकलमधे याची माहिती वाचू शकता.

टॅक्ट स्वीचबद्दल  सविस्तर माहिती मी एका व्हिडियोमध्ये दिली आहे. तुम्हाला हवे असल्यास तुम्ही हा व्हिडिओ या लिंकवर पाहू शकता.

टॅक्ट स्वीचला  ब्रेडबोर्डच्या मधोमध असलेल्या गॅप च्या वर बसवून घ्या. आणि एलइडी पण एखाद्या ठिकाणी बसवा.  एलइडीची लांब पिन पॉजिटिव्ह आणि आखूड पिन निगेटिव्हची असते .

आपण 10 किलो ओहम्सचा रेजिस्टर पुश बटणाच्या कोणत्याही एका बाजूला जोडू शकतो. आणि रेजिस्टरचे दुसरे टोक आपण ब्रेडबोर्डवरील ग्राउंडच्या लेनशी जोडू. जर तुमच्या ब्रेडबोर्डवर लाल आणि निळ्या रेघा असतील तर निळ्या रंगाच्या रेषेजवळील पिनांना ग्राउंडशी कनेक्ट करण्यासाठी वापरता येते.

या सर्किटला आपण वेगवेगळ्या प्रकारे जोडू शकतो, पण समजण्यास अडचण होऊ नये म्हणून मी कमीत कमी वायारींचा वापर केलेला आहे.

आपण 220 ओहम्सच्या रेजिस्टरला एलईडीच्या आखूड पिनशी जोडू . एलईडीचे आखूड पिन निगेटिवचे असते याला  कॅथोड म्हणतात. रेजिस्टरचे दुसरे टोक आपण ब्रेडबोर्डच्या निळ्या लेनशी जोडू.

आपण आर्डूइनो उनोच्या 5V आणि ग्राउंडच्या पिनांना स्वीचशी जोडू. यासाठी आपण मेल टू मेल जम्पर वायरींचा वापर करू.  5V च्या पिनला स्वीचच्या कोणत्याही एका बाजूशी ब्रेडबोर्डवर जोडा. ग्राउंडच्या पिनला ब्रेडबोर्डच्या निळ्या रंगाच्या लेनशी जोडा . 

आता आपण स्वीचच्या ग्राउंडशी जोडलेल्या बाजूला आर्डूइनोच्या डिजिटल पिन क्रमांक 2 शी जोडू.

आता आपण एलईडीच्या लांब पिनला आर्डूइनोच्या  डिजिटल पिन क्रमांक 13 शी जोडू.

आता आपण आर्डूइनो उनोच्या बोर्डला युएसबी केबलने कॉम्प्युटरशी जोडू आणि आर्डूइनोचे प्रोग्रामिंग सॉफ्टवेअर उघडू. त्यामध्ये खालील प्रोग्राम उघडावा.

File - Examples - Digital - Debounce

याला अपलोड करण्यासाठी अपलोडचे आईकॉन वापरा किंवा Skecth - Upload या मेनूचा वापर करा.
प्रोग्राम अपलोड झाल्यानंतर तुम्ही एलइडी ला स्वीच दाबून चालू किंवा बंद करू शकता.

पण यात Debounce कोठे येतो ? हे समजण्यासाठी आपण याच सर्किट मध्ये स्वीच कसा बाउंस होतो ते पाहू. त्यासाठी आपल्याला एक वेगळा प्रोग्राम वापरावा लागेल. हा प्रोग्राम मी या लिंक वर अपलोड केलेला आहे, त्यावर क्लिक करून तो तुम्ही वाचू शकता.

त्याचबरोबर ही फाईल Toggle.ino तुम्ही डाउनलोड देखील करू शकता. हा प्रोग्राम तुम्ही आर्डूइनो उनोच्या बोर्ड वर सरळ अपलोड करू शकता.

आता जर तुम्ही स्वीच दाबाल तर एलइडी पेटताना आणि विझताना दिसेल. पण जर तुम्ही सतत बटन दाबत राहाल तर काही वेळा एलइडी पेटलेलीच  किंवा विझलेलीच दिसेल, म्हणजे एखाद्या वेळी तुम्ही दाबलेले बटन काम करीत नसलेले तुम्हाला आढळून येईल.

हे इलेक्ट्रॉनिक्स मध्ये वापरल्या जाणाऱ्या मोमेंटरी स्वीच मध्ये पहायला मिळते. याला स्वीच बाउंस होणे असे म्हणतात.

Bouncing and Debouncing


या स्वीच मध्ये बटणाच्या खालील बाजूला (3) धातूची एक लहान गोलाकार टिकली असते. या स्वीच चे बटन (2) आपण जेव्हा दाबतो तेव्हा ही गोलाकार प्लेट खालील बाजूच्या पिनांच्या आतील बाजूशी (5) जोडली जाते आणि सर्किट पूर्ण होऊन त्यामधून विद्युत प्रवाह वाहू लागतो. आणि बटणावरील बोट उचलल्यावर बटन परत वर जाते आणि कॉंटॅक्ट संपतो.

पण धातूच्या दोन तुकड्यांची एकमेकाशी जेव्हा टक्कर होते तेव्हा त्यांच्या मध्ये कंपन होते. या ठिकाणी देखील वरील बाजूची गोलाकार प्लेट कंपित होते. हे कंपन अगदी कमी जागेत आणि कमी वेळा पुरते घडते. पण तेवढ्या अंतरावर आणि तितक्या वेळात देखील बटन सतत चालू बंद होत असल्याचा परिणाम त्यामुळे घडतो.

हे कंपन काही मिली सेकंद पर्यंत टिकते. एका मिली सेकंदात ही प्लेट किती तरी वेळा थरथरते. आणि तितका वेळ स्वीच चालू आणि बंद होतो. पण हे सेकंदाच्या हजाराव्या भागात होत असल्यामुळे आपल्याला त्याचा दृश्य परिणाम लक्षात येत नाही.

या प्रयोगा मध्ये आपल्याला हा परिणाम पाहता येतो. येथे आपण एकदा स्वीच दाबल्यावर ऑन आणि परत दाबल्यावर ऑफ होण्यासाठी प्रोग्रामिंग केलेली आहे. पण प्रत्यक्षात असे न होता काही वेळा आपल्याला अनपेक्षित परिणाम पहावयास मिळतो. हे बाउन्सिंगमुळे होते.

बाउन्सिंगमुळे होणारा अनपेक्षित परिणाम टाळण्यासाठी आपण काही मिली सेकंदा पर्यंत मायक्रो प्रोसेसर चे काम थांबवतो आणि त्यानंतर परत कोड रन होतो. येथे आपण 50 मिली सेकंद वाट पाहतो. यामुळे सुरवातीच्या काळात बाउन्सिंगमुळे प्लेटची होणारी थरथर थांबते आणि त्यानंतर कोड रन झाल्यामुळे अनपेक्षित परिणाम होत नाही. याला सॉफ्टवेअर डीबाउन्सिंग म्हणतात.

 येथे प्रोग्रामच्या कोड मध्ये millis() या फ़न्क्शन चा वापर केला जातो. हे फंक्शन डिजिटल टायमर प्रमाणे काम करते. आणि प्रोग्राम सुरु झाल्यापासून हा मिली सेकंदा मध्ये वेळ मोजतो. या ठिकाणी पन्नास मिली सेकंदापूर्वी जर स्वीच ची ऑन/ ऑफ पोजिशन बदलली तर त्यामध्ये परत पन्नास मिली सेकंद जोडून तेवढ्या वेळापुरते मायक्रो कंट्रोलरला थांबवले जाते आणि त्या नंतरच पुढचा कोड कार्यान्वित होतो. तर अशा रीतीने स्वीच च्या बाउंस होण्याच्या समस्येवर तोडगा काढला जातो.

तर या पूर्वी मी दिलेला कोड हा साधा टॉगल ऑन/ ऑफ चा कोड होता. आता तुम्ही यापुढील कोड पाहाल तर त्यामध्ये डीबाउंसिंग साठी नवीन कोड जोडला आहे. हा नवीन कोड तुम्ही या लिंक वर वाचू शकता.

त्याच बरोबर तुम्ही हा कोड toggle_with_debounce.ino डाउनलोड करून त्याला सरळ आर्डूइनो उनोच्या बोर्ड वर अपलोड करू शकता.

Summary

या लेखामध्ये आपण मोमेंटरी स्वीचला टॉगल ऑन/ ऑफ स्वीच सारखे प्रोग्रामिंगच्या सहाय्याने कसे वापरता येते हे पाहिले. त्याच बरोबर मोमेंटरी स्वीच मध्ये बाउंसचा परिणाम सर्किट मध्ये कसा होतो आणि त्याला प्रोग्रामिंग च्या सहाय्याने कसे टाळता येते हे पाहिले.