विषयसूची:

1 पिन का उपयोग करके डीआईपी ट्यून चयनकर्ता: 4 कदम
1 पिन का उपयोग करके डीआईपी ट्यून चयनकर्ता: 4 कदम

वीडियो: 1 पिन का उपयोग करके डीआईपी ट्यून चयनकर्ता: 4 कदम

वीडियो: 1 पिन का उपयोग करके डीआईपी ट्यून चयनकर्ता: 4 कदम
वीडियो: 📢1k Subs 4k hours होने के बाद YouTube क्या चेक करता है (7 mistakes😱) Channel Monetize kaise kare 2024, नवंबर
Anonim
1 पिन का उपयोग करके डीआईपी ट्यून चयनकर्ता
1 पिन का उपयोग करके डीआईपी ट्यून चयनकर्ता

कुछ समय पहले मैंने एक "म्यूजिक बॉक्स" प्रोजेक्ट पर काम किया था जिसमें 10 अलग-अलग ट्यून स्निपेट के बीच चयन करने की आवश्यकता थी। एक विशिष्ट धुन चुनने के लिए एक प्राकृतिक विकल्प 4 पिन डिप स्विच था क्योंकि 4 स्विच 2. प्रदान करता है4=16 विभिन्न सेटिंग्स। हालांकि, इस दृष्टिकोण के लिए पाशविक बल कार्यान्वयन के लिए 4 डिवाइस पिन की आवश्यकता होती है, प्रत्येक स्विच के लिए एक। चूंकि मैं विकास के लिए ATtiny85 का उपयोग करने की योजना बना रहा था, इसलिए 4 पिनों का नुकसान थोड़ा अधिक था। सौभाग्य से, मैं एक लेख में भाग गया जो एकाधिक स्विच इनपुट को संभालने के लिए 1 एनालॉग पिन का उपयोग करने के लिए एक सरल विधि का वर्णन करता है।

मल्टी-स्विच; 1-इनपुट तकनीक 16 संभावित स्विच सेटिंग संयोजनों में से प्रत्येक के लिए एक अद्वितीय पूर्णांक मान प्रदान करने के लिए वोल्टेज डिवाइडर सर्किट का उपयोग करती है। 16 पूर्णांक पहचानकर्ताओं के इस सेट का उपयोग एप्लिकेशन प्रोग्राम में एक सेटिंग के साथ एक क्रिया को जोड़ने के लिए किया जाता है।

यह निर्देश संगीत बॉक्स एप्लिकेशन के लिए धुन चयन को लागू करने के लिए मल्टी-स्विच विधि को नियोजित करता है। चयनित राग को फिर Arduino टोन फ़ंक्शन का उपयोग करके एक पीजो बजर के माध्यम से बजाया जाता है।

चरण 1: आवश्यक हार्डवेयर

आवश्यक हार्डवेयर
आवश्यक हार्डवेयर

कार्यान्वयन मंच के रूप में यूएनओ का उपयोग आवश्यक हार्डवेयर घटकों की संख्या को कम करता है। मल्टी-स्विच इनपुट पद्धति के कार्यान्वयन के लिए केवल 4-पिन डिप स्विच, वोल्टेज डिवाइडर के लिए उपयोग किए जाने वाले 5 प्रतिरोधों और कनेक्शन के लिए हुकअप वायर की आवश्यकता होती है। संगीत बॉक्स ट्यून चयनकर्ता के कार्यान्वयन के लिए कॉन्फ़िगरेशन में एक पीजो बजर जोड़ा जाता है। वैकल्पिक रूप से, उपयोग किए जाने वाले डिप स्विच के प्रकार के आधार पर, डिप स्विच को ब्रेडबोर्ड से जोड़ने के लिए 2x4 8 पिन सॉकेट का उपयोग करना सहायक होता है क्योंकि मानक डिप स्विच पिन सीधे ब्रेडबोर्ड में प्लग न करने वाले परफ़ॉर्म को सोल्डरिंग के लिए बनाया गया लगता है। सॉकेट डिप स्विच कनेक्शन को स्थिर करता है और टॉगल स्विच सेट करते समय स्विच को आसानी से उठाने से रोकता है।

नाम संभावित स्रोत कैसे इस्तेमाल किया
4-पिन डुबकी स्विच धुन चयन
2x4 पिन सॉकेट (वैकल्पिक) वीरांगना अधिकांश डिप स्विच पर पोस्ट ब्रेडबोर्ड में स्विच को बहुत अच्छी तरह से नहीं रखते हैं। एक सॉकेट कनेक्शन को और अधिक ठोस बनाने में मदद करता है। एक विकल्प एक डिप स्विच ढूंढना है जो वास्तव में नियमित आईसी पिन के साथ ब्रेडबोर्ड के उपयोग के लिए बनाया गया है।

प्रतिरोधक:

  • १०के x२
  • 20K
  • 40K
  • 80K
वोल्टेज विभक्त लागू करें
निष्क्रिय पीजो बजर वीरांगना Arduino टोन फ़ंक्शन के माध्यम से एप्लिकेशन द्वारा संचालित मेलोडी चलाएं

चरण 2: मल्टी-स्विच विधि स्पष्टीकरण

मल्टी-स्विच विधि स्पष्टीकरण
मल्टी-स्विच विधि स्पष्टीकरण

यह खंड मल्टी-स्विच पद्धति के लिए अंतर्निहित अवधारणाओं पर चर्चा करता है और 16 संभावित डिप स्विच सेटिंग कॉन्फ़िगरेशन में से प्रत्येक के लिए अद्वितीय पहचानकर्ताओं की स्टैंड-अलोन गणना के लिए आवश्यक समीकरण विकसित करता है। इन पहचानकर्ताओं का उपयोग किसी एप्लिकेशन प्रोग्राम में स्विच कॉन्फ़िगरेशन को किसी क्रिया के साथ संबद्ध करने के लिए किया जा सकता है। उदाहरण के लिए, आप सेटिंग चाहते हैं - 1 चालू करें, 2 बंद करें, 3 बंद करें, 4 बंद करें (1, 0, 0, 0) - अमेजिंग ग्रेस खेलने के लिए और (0, 1, 0, 0) खेलने के लिए शेर आज रात सोता है। संक्षिप्तता और संक्षिप्तता के लिए कॉन्फ़िगरेशन पहचानकर्ताओं को दस्तावेज़ के शेष भाग में तुलनित्र के रूप में संदर्भित किया जाता है।

छवि
छवि

मल्टी-स्विच विधि के लिए मूलभूत अवधारणा वोल्टेज डिवाइडर सर्किट है जिसमें एक इनपुट वोल्टेज से जुड़े श्रृंखला प्रतिरोधों में 2 होते हैं। आउटपुट वोल्टेज लीड प्रतिरोधों के बीच जुड़ा हुआ है, R1 और आर2, ऊपर दिखाये अनुसार। विभक्त आउटपुट वोल्टेज की गणना इनपुट वोल्टेज को रोकनेवाला R. के अनुपात से गुणा करके की जाती है2 R. के योग के लिए1 और आर2 (समीकरण 1)। यह अनुपात हमेशा 1 से कम होता है इसलिए आउटपुट वोल्टेज हमेशा इनपुट वोल्टेज से छोटा होता है।

जैसा कि मल्टी-स्विच के ऊपर डिज़ाइन आरेख में दर्शाया गया है, R. के साथ वोल्टेज विभक्त के रूप में कॉन्फ़िगर किया गया है2 स्थिर और R1 4 डुबकी स्विच प्रतिरोधों के लिए समग्र/समतुल्य प्रतिरोध के बराबर। R. का मान1 निर्भर करता है कि कौन से डिप स्विच चालू हैं और इसलिए, समग्र प्रतिरोध में योगदान करते हैं। चूंकि डिप स्विच रेसिस्टर्स समानांतर में हैं, तुल्य प्रतिरोध गणना समीकरण घटक प्रतिरोधों के व्युत्क्रम के संदर्भ में कहा गया है। हमारे कॉन्फ़िगरेशन और मामले के लिए कि सभी स्विच चालू हैं, समीकरण बन जाता है

1/आर1 = 1/80000 + 1/40000 + 1/20000 + 1/10000

R. दे रहा है1 = 5333.33 वोल्ट। इस तथ्य को ध्यान में रखते हुए कि अधिकांश सेटिंग्स में कम से कम एक स्विच बंद है, स्विच स्थिति का उपयोग गुणक के रूप में किया जाता है:

1/आर1 = एस1*1/80000 + s2*१/४००० + s3*1/20000 + एस4*1/10000 (2)

जहां राज्य गुणक, sमैं, स्विच चालू होने पर 1 के बराबर होता है और स्विच बंद होने पर 0 के बराबर होता है। आर1 अब समीकरण 1 में आवश्यक प्रतिरोध अनुपात की गणना के लिए उपयोग किया जा सकता है। उस मामले का उपयोग करना जहां सभी स्विच फिर से उदाहरण के रूप में चालू हैं

अनुपात = आर2/(आर1+आर2) = 10000/(5333.33+10000) =.6522

अनुमानित तुलनित्र मूल्य की गणना में अंतिम चरण एनालॉग रीड फ़ंक्शन के प्रभाव का अनुकरण करने के लिए अनुपात को 1023 से गुणा करना है। उस मामले के लिए पहचानकर्ता जहां सभी स्विच चालू हैं, तब है

COMPARATOR15 = 1023*.6522 = 667

16 संभावित स्विच सेटिंग्स के लिए पहचानकर्ताओं की गणना के लिए अब सभी समीकरण मौजूद हैं। संक्षेप में:

  1. आर1 समीकरण 2. का उपयोग करके गणना की जाती है
  2. आर1 और आर2 संबंधित प्रतिरोध RATIO की गणना के लिए उपयोग किया जाता है
  3. तुलनित्र मान प्राप्त करने के लिए RATIO को 1023 से गुणा किया जाता है
  4. वैकल्पिक रूप से, अनुमानित आउटपुट वोल्टेज की गणना RATIO*Vin. के रूप में भी की जा सकती है

तुलनित्रों का सेट केवल वोल्टेज विभक्त के लिए उपयोग किए जाने वाले प्रतिरोधक मानों पर निर्भर करता है और कॉन्फ़िगरेशन के लिए एक अद्वितीय हस्ताक्षर हैं। क्योंकि विभक्त आउटपुट वोल्टेज रन से रन (और पढ़ने के लिए पढ़ने के लिए) में उतार-चढ़ाव होगा, इस संदर्भ में अद्वितीय का अर्थ है कि पहचानकर्ताओं के दो सेट बिल्कुल समान नहीं हो सकते हैं, लेकिन वे इतने करीब हैं कि घटक तुलनित्र अंतर एक छोटे से पूर्व के भीतर आते हैं- निर्दिष्ट अंतराल। अंतराल आकार पैरामीटर को अपेक्षित उतार-चढ़ाव के हिसाब से काफी बड़ा चुना जाना चाहिए लेकिन इतना छोटा होना चाहिए कि विभिन्न स्विच सेटिंग्स ओवरलैप न हों। आमतौर पर 7 आधी-चौड़ाई के अंतराल के लिए अच्छा काम करता है।

किसी विशेष कॉन्फ़िगरेशन के लिए तुलनित्रों का एक सेट कई तरीकों से प्राप्त किया जा सकता है - डेमो प्रोग्राम चलाएं और प्रत्येक सेटिंग के लिए मान रिकॉर्ड करें; गणना करने के लिए अगले भाग में स्प्रेडशीट का उपयोग करें; एक मौजूदा सेट की प्रतिलिपि बनाएँ। जैसा कि ऊपर उल्लेख किया गया है, सभी सेट संभवतः थोड़े अलग होंगे, लेकिन उन्हें काम करना चाहिए। मैं मल्टी-स्विच सेटअप के लिए विधि लेखक के पहचानकर्ताओं के सेट और अगले खंड से स्प्रेडशीट का उपयोग करने का सुझाव देता हूं यदि किसी भी प्रतिरोधक को महत्वपूर्ण रूप से बदल दिया जाता है या अधिक प्रतिरोधक जोड़े जाते हैं।

निम्नलिखित डेमो प्रोग्राम वर्तमान डिप स्विच सेटिंग की पहचान करने के लिए तुलनित्रों के उपयोग को दर्शाता है। प्रत्येक प्रोग्राम चक्र में वर्तमान कॉन्फ़िगरेशन के लिए एक पहचानकर्ता प्राप्त करने के लिए एक एनालॉग रीड किया जाता है। इस पहचानकर्ता की तुलना तुलनित्र सूची में तब तक की जाती है जब तक कोई मिलान नहीं मिल जाता या सूची समाप्त नहीं हो जाती। यदि कोई मिलान पाया जाता है तो सत्यापन के लिए एक आउटपुट संदेश जारी किया जाता है; नहीं मिलने पर चेतावनी जारी की जाती है। लूप में 3 सेकंड की देरी डाली जाती है ताकि सीरियल आउटपुट विंडो संदेशों से अभिभूत न हो और डिप स्विच कॉन्फ़िगरेशन को रीसेट करने के लिए कुछ समय दे।

//-------------------------------------------------------------------------------------

// वोल्टेज विभक्त आउटपुट को पढ़ने के लिए डेमो प्रोग्राम और प्रत्येक संभावित सेटिंग के लिए // तुलना मूल्यों की एक सरणी में आउटपुट मान को देखकर // वर्तमान डिप स्विच कॉन्फ़िगरेशन की पहचान करने के लिए इसका उपयोग करें। लुकअप सरणी में मान // या तो कॉन्फ़िगरेशन के लिए पिछले रन से प्राप्त किए जा सकते हैं या गणना के माध्यम से // अंतर्निहित समीकरणों के आधार पर प्राप्त किए जा सकते हैं। //------------------------------------------------ --------------------------------------- इंट तुलनित्र [16] = {0, 111, 203, २७६, ३३९, ३९३, ४३४, ४७८, ५१०, ५४२, ५६७, ५९०, ६१४, ६३२, ६५१, ६६७}; // प्रसंस्करण चर को परिभाषित करें int dipPin = A0; // वोल्टेज विभक्त इनपुट के लिए एनालॉग पिन int dipIn = 0; // एनालॉग रीड इंट काउंट = 0 द्वारा अनुवादित डिवाइडर वोल्टेज आउटपुट रखता है; // लूप काउंटर इंट एप्सिलॉन = 7; // तुलना अंतराल आधी-चौड़ाई वाला बूल डिपफाउंड = झूठा; // सच है अगर वर्तमान वोल्टेज डिवाइडर आउटपुट लुक अप टेबल शून्य सेटअप () {पिनमोड (डिपपिन, इनपुट) में पाया जाता है; // वोल्टेज डिवाइडर पिन को INPUT Serial.begin (९६००) के रूप में कॉन्फ़िगर करें; // सीरियल संचार सक्षम करें} शून्य लूप () {देरी (3000); // आउटपुट को बहुत तेजी से स्क्रॉल करने से रोकें // लुकअप पैरामीटर शुरू करें गिनती = 0; डिपफाउंड = झूठा; // वर्तमान आउटपुट वोल्टेज डिपइन = एनालॉग रीड (डिपपिन) पढ़ें और दस्तावेज करें; सीरियल.प्रिंट ("डिवाइडर आउटपुट"); सीरियल.प्रिंट (डिपइन); // वर्तमान मूल्य के लिए तुलनित्र सूची खोजें जबकि ((गिनती <16) && (! डिपफाउंड)) {अगर (abs (dipIn - तुलनित्र [गिनती]) <= एप्सिलॉन) {// इसे डिपफाउंड = सच पाया; Serial.print ("प्रवेश पर पाया गया"); सीरियल.प्रिंट (गिनती); Serial.println ("मान" + स्ट्रिंग (तुलनित्र [गिनती])); टूटना; } गिनती++; } अगर (! डिपफाउंड) {// मान तालिका में नहीं है; ऐसा नहीं होना चाहिए Serial.println ("ओओपीएस! नहीं मिला; बेहतर कॉल घोस्ट बस्टर"); } }

चरण 3: तुलनित्र स्प्रेडशीट

छवि
छवि

16 तुलनित्र मानों की गणना ऊपर दिखाए गए स्प्रेडशीट में दी गई है। संलग्न एक्सेल फ़ाइल इस खंड के नीचे डाउनलोड के लिए उपलब्ध है।

स्प्रेडशीट कॉलम ए-डी डिप स्विच रेसिस्टर वैल्यू और 16 संभावित स्विच सेटिंग्स को रिकॉर्ड करते हैं। कृपया ध्यान दें कि फ्रिटिंग डिज़ाइन आरेख में दिखाया गया हार्डवेयर डीआईपी स्विच वास्तव में स्प्रेडशीट में दिखाए गए दाएं से बाएं नंबरिंग के बजाय बाएं से दाएं क्रमांकित है। मुझे यह कुछ हद तक भ्रमित करने वाला लगा, लेकिन विकल्प "1" कॉन्फ़िगरेशन (0, 0, 0, 1) को सूची के पहले स्थान पर नहीं रखता है। कॉलम ई वोल्टेज विभक्त समकक्ष प्रतिरोध आर की गणना करने के लिए पिछले खंड के सूत्र 2 का उपयोग करता है1 सेटिंग के लिए। कॉलम एफ इस परिणाम का उपयोग संबंधित प्रतिरोध अनुपात की गणना करने के लिए करता है, और अंत में, कॉलम जी अनुमानित तुलनित्र मूल्य प्राप्त करने के लिए एनालॉग रीड अधिकतम मान (1023) द्वारा अनुपात को गुणा करता है। अंतिम 2 कॉलम में अनुमानित और वास्तविक मूल्यों के बीच अंतर के साथ-साथ डेमो प्रोग्राम के एक रन से वास्तविक मान होते हैं।

पिछले खंड में इस स्प्रेडशीट के विस्तार सहित तुलनित्र मूल्यों का एक सेट प्राप्त करने के लिए तीन विधियों का उल्लेख किया गया है, यदि प्रतिरोधक मान महत्वपूर्ण रूप से बदल दिए गए हैं या अधिक स्विच जोड़े गए हैं। ऐसा प्रतीत होता है कि प्रतिरोधी मूल्यों में छोटे अंतर अंतिम परिणामों को महत्वपूर्ण रूप से प्रभावित नहीं करते हैं (जो अच्छा है क्योंकि प्रतिरोधी विनिर्देश एक सहिष्णुता देते हैं, 5% कहते हैं, और प्रतिरोधी शायद ही कभी इसके वास्तविक घोषित मूल्य के बराबर होता है)।

चरण 4: एक धुन बजाएं

एक धुन बजाएं
एक धुन बजाएं

यह समझाने के लिए कि किसी एप्लिकेशन में मल्टी-स्विच तकनीक का उपयोग कैसे किया जा सकता है, संगीत बॉक्स प्रोग्राम के लिए ट्यून चयन प्रक्रिया को लागू करने के लिए "विधि स्पष्टीकरण" खंड से तुलना डेमो प्रोग्राम को संशोधित किया गया है। अद्यतन एप्लिकेशन कॉन्फ़िगरेशन ऊपर दिखाया गया है। हार्डवेयर का एकमात्र जोड़ चयनित धुन बजाने के लिए एक निष्क्रिय पीजो बजर है। सॉफ्टवेयर में मूल परिवर्तन बजर और अरुडिनो टोन रूटीन का उपयोग करके, एक बार पहचाने जाने पर, एक धुन बजाने के लिए एक रूटीन के अतिरिक्त है।

उपलब्ध ट्यून स्निपेट आवश्यक समर्थन संरचनाओं की परिभाषा के साथ, एक हेडर फ़ाइल, Tunes.h में निहित हैं। प्रत्येक धुन को नोट से संबंधित संरचनाओं की एक सरणी के रूप में परिभाषित किया जाता है जिसमें नोट आवृत्ति और अवधि होती है। नोट आवृत्तियों को एक अलग हेडर फ़ाइल, पिच्स.एच में समाहित किया गया है। प्रोग्राम और हेडर फाइलें इस खंड के अंत में डाउनलोड के लिए उपलब्ध हैं। तीनों फाइलों को एक ही डायरेक्टरी में रखा जाना चाहिए।

चयन और पहचान निम्नानुसार होती है:

  1. "उपयोगकर्ता" वांछित धुन से जुड़े कॉन्फ़िगरेशन में डिप स्विच सेट करता है
  2. प्रत्येक प्रोग्राम लूप चक्र वर्तमान डिप स्विच सेटिंग के लिए पहचानकर्ता एनालॉग के माध्यम से प्राप्त किया जाता है
  3. चरण 2 कॉन्फ़िगरेशन पहचानकर्ता की तुलना उपलब्ध ट्यून सूची में प्रत्येक तुलनित्र से की जाती है
  4. यदि कोई मैच पाया जाता है तो ट्यून नोट सूची तक पहुंचने के लिए आवश्यक जानकारी के साथ playTune रूटीन को कॉल किया जाता है

    Arduino टोन फ़ंक्शन का उपयोग करके प्रत्येक नोट बजर के माध्यम से खेला जाता है

  5. यदि कोई मिलान नहीं मिलता है, तो कोई कार्रवाई नहीं की जाती है
  6. दोहराएँ 1-5

उपलब्ध धुनों के लिए डीआईपी स्विच सेटिंग्स नीचे दी गई तालिका में दिखाई गई हैं जहां 1 का मतलब स्विच चालू है, 0 स्विच ऑफ है। याद रखें कि जिस तरह से डिप स्विच उन्मुख स्थान है, वह 1 को बाईं-सबसे स्थिति में स्विच करता है (एक 80K रोकनेवाला के साथ जुड़ा हुआ)।

नाम स्विच 1 स्विच 2 स्विच 3 स्विच 4
डैनी लड़के 1 0 0 0
नन्हा भालू 0 1 0 0
शेर आज रात सोता है 1 1 0 0
परेशानी कोई नहीं जानता 0 0 1 0
अविश्वसनीय मनोहरता 0 0 0 1
खाली जगह 1 0 0 1
मॉकिंग बर्ड हिल 1 0 1 1

एक पीजो बजर से ध्वनि की गुणवत्ता निश्चित रूप से बहुत अच्छी नहीं है लेकिन यह कम से कम पहचानने योग्य है। वास्तव में यदि स्वरों को मापा जाता है, तो वे नोटों की सटीक आवृत्ति के बहुत करीब होते हैं। प्रोग्राम में उपयोग की जाने वाली एक दिलचस्प तकनीक PROGMEM निर्देश का उपयोग करके डिफ़ॉल्ट डेटा मेमोरी सेक्शन के बजाय फ्लैश/प्रोग्राम मेमोरी सेक्शन में ट्यून डेटा को स्टोर करना है। डेटा अनुभाग प्रोग्राम प्रोसेसिंग चर रखता है और कुछ ATtiny माइक्रोकंट्रोलर के लिए लगभग 512 बाइट्स के आसपास बहुत छोटा है।

सिफारिश की: