विषयसूची:

Arduino और Thumbwheel स्विच: 9 कदम
Arduino और Thumbwheel स्विच: 9 कदम

वीडियो: Arduino और Thumbwheel स्विच: 9 कदम

वीडियो: Arduino और Thumbwheel स्विच: 9 कदम
वीडियो: Thumb wheel switch program 2024, जुलाई
Anonim
Arduino और Thumbwheel स्विचेस
Arduino और Thumbwheel स्विचेस

इस लेख में हम अपने Arduino सिस्टम के साथ पुश-व्हील / थंबव्हील स्विच के उपयोग की जांच करते हैं। पीएमडी वे से प्राप्त कुछ उदाहरण यहां दिए गए हैं।

चरण 1:

छवि
छवि

अनियमित के लिए, प्रत्येक स्विच एक लंबवत खंड होता है और उन्हें विभिन्न आकार बनाने के लिए एक साथ जोड़ा जा सकता है। आप शून्य से नौ तक अंकों का चयन करने के लिए बटनों का उपयोग कर सकते हैं। ऐसे विकल्प उपलब्ध हैं जिनके पास एक पहिया है जिसे आप अपने अंगूठे से बढ़ा सकते हैं / घटा सकते हैं बटन के बजाय।

फैंसी यूजर इंटरफेस के दिनों से पहले ये स्विच संख्यात्मक डेटा प्रविष्टि सेट करने के लिए काफी लोकप्रिय तरीके थे। हालाँकि वे आज भी उपलब्ध हैं, तो आइए देखें कि वे कैसे काम करते हैं और हम उनका उपयोग कैसे कर सकते हैं। स्विच का मान बाइनरी-कोडेड दशमलव या सीधे दशमलव के माध्यम से उपलब्ध कराया जाता है। बीसीडी रूप में स्विच के पीछे पर विचार करें।

चरण 2:

छवि
छवि

हमारे पास बाईं ओर आम है, फिर 1, 2, 4 और 8 के लिए संपर्क। यदि आप एक छोटे वोल्टेज (5V कहते हैं) को सामान्य पर लागू करते हैं, तो स्विच के मूल्य को उन संपर्कों के मूल्यों को जोड़कर मापा जा सकता है जो अंदर हैं उच्च अवस्था। उदाहरण के लिए, यदि आप 3 चुनते हैं - संपर्क 1 और 2 समान वोल्टेज पर होंगे। शून्य और नौ के बीच के मानों को तालिका में इस प्रकार दर्शाया जा सकता है।

चरण 3:

छवि
छवि

अब तक आपको एहसास होना चाहिए कि एक स्विच के मूल्य को पढ़ना आसान होगा - और आप सही कह रहे हैं, यह है। हम 5V को आम से, आउटपुट को हमारे Arduino बोर्ड के डिजिटल इनपुट पिन से कनेक्ट कर सकते हैं, फिर प्रत्येक आउटपुट का मान निर्धारित करने के लिए digitalRead() का उपयोग कर सकते हैं। स्केच में हम बीसीडी मान को दशमलव संख्या में बदलने के लिए कुछ बुनियादी गणित का उपयोग करते हैं। तो चलिए अब करते हैं।

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

चरण 4:

अब 1, 2, 4, और 8 लेबल वाले आउटपुट को (उदाहरण के लिए) डिजिटल पिन 8, 9, 10 और 11 से कनेक्ट करना एक साधारण मामला है। 5V को स्विच 'C' पॉइंट से और GND को … GND से कनेक्ट करें। इसके बाद, हमारे पास एक स्केच होना चाहिए जो इनपुट को पढ़ सके और बीसीडी आउटपुट को दशमलव में बदल सके। निम्नलिखित स्केच पर विचार करें:

/* SAA1064 संख्यात्मक डिस्प्ले शील्ड का उपयोग करता है https://www.gravitech.us/7segmentshield.html सीरियल मॉनिटर का उपयोग करता है यदि आपके पास SAA1064 शील्ड नहीं है */ #include "Wire.h" #define q1 8 #define q2 9 # q4 10 को परिभाषित करें #q8 11 शून्य सेटअप () {Serial.begin(9600) परिभाषित करें; वायर.बेगिन (); // i2c बस में शामिल हों (मास्टर के लिए वैकल्पिक पता) देरी (500); पिनमोड (क्यू 1, इनपुट); // थंबव्हील '1' पिनमोड (q2, INPUT); // थंबव्हील '2' पिनमोड (q4, INPUT); // थंबव्हील '4' पिनमोड (q8, INPUT); // थंबव्हील '8'} शून्य dispSAA1064 (इंट काउंट) // ग्रेविटेक SAA1064 शील्ड को पूर्णांक 'काउंट' भेजता है {कॉन्स्ट इंट लुकअप [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int हजारों, सैकड़ों, दसियों, आधार; वायर.बेगिनट्रांसमिशन (0x38); वायर.राइट (0); वायर.राइट (बी०१०००१११); वायर.एंडट्रांसमिशन (); वायर.बेगिनट्रांसमिशन (0x38); वायर.लिखें(1); हज़ारों = गिनती/1000; सैकड़ा = (गणना- (हजारों*1000))/100; दहाई = (गणना-((हजारों*1000)+(सौ*100)))/10; आधार = गणना- ((हजारों*1000)+(सैकड़ों*100)+(दसियों*10)); वायर.राइट (लुकअप [बेस]); Wire.write (लुकअप [दसियों]); Wire.write (लुकअप [सैकड़ों]); Wire.write (लुकअप [हजारों]); वायर.एंडट्रांसमिशन (); देरी(10); } इंट रीडस्विच () {इंट टोटल = 0; अगर (डिजिटल रीड (क्यू 1) == हाई) {कुल + = 1; } अगर (डिजिटल रीड (क्यू 2) == हाई) {कुल + = 2; } अगर (डिजिटल रीड (क्यू 4) == हाई) {कुल + = 4; } अगर (डिजिटल रीड (क्यू 8) == हाई) {कुल + = 8; } कुल वापसी; } शून्य लूप () {dispSAA1064 (रीडस्विच ()); // शील्ड Serial.println (readSwitch ()) प्रदर्शित करने के लिए स्विच वैल्यू भेजता है; // सीरियल मॉनिटर बॉक्स में स्विच वैल्यू भेजता है}

फ़ंक्शन रीडस्विच () कुंजी है। यह प्रत्येक स्विच आउटपुट के संख्यात्मक प्रतिनिधित्व को जोड़कर स्विच के मूल्य की गणना करता है और इसके परिणाम के रूप में कुल देता है। इस उदाहरण के लिए हमने एक संख्यात्मक डिस्प्ले शील्ड का उपयोग किया है जिसे NXP SAA1064 द्वारा नियंत्रित किया जाता है।

चरण 5:

Image
Image

फ़ंक्शन रीडस्विच () कुंजी है। यह प्रत्येक स्विच आउटपुट के संख्यात्मक प्रतिनिधित्व को जोड़कर स्विच के मूल्य की गणना करता है और इसके परिणाम के रूप में कुल देता है। इस उदाहरण के लिए हमने एक संख्यात्मक डिस्प्ले शील्ड का उपयोग किया है जिसे NXP SAA1064 द्वारा नियंत्रित किया जाता है।

यदि आपके पास एक नहीं है, तो ठीक है - परिणाम सीरियल मॉनिटर को भी भेजे जाते हैं। अब, आइए इसे वीडियो में कार्रवाई में देखें।

चरण 6:

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

इसलिए यह अब आपके पास है। क्या आप वास्तव में इन्हें किसी प्रोजेक्ट में उपयोग करेंगे? एक अंक के लिए - हाँ। चार के लिए? शायद नहीं - शायद 12-अंकीय कीपैड का उपयोग करना आसान होगा। एक विचार है…

चरण 7: एकाधिक स्विच

छवि
छवि

अब हम जांच करेंगे कि चार अंकों को कैसे पढ़ा जाए - और इस प्रक्रिया में उन सभी डिजिटल पिनों को बर्बाद न करें। इसके बजाय, हम माइक्रोचिप MCP23017 16-बिट पोर्ट विस्तारक IC का उपयोग करेंगे जो I2C बस के माध्यम से संचार करता है। इसमें सोलह डिजिटल इनपुट/आउटपुट पिन हैं जिनका उपयोग हम प्रत्येक स्विच की स्थिति को पढ़ने के लिए कर सकते हैं।

आगे बढ़ने से पहले, कृपया ध्यान दें कि इस लेख के लिए कुछ अनुमानित ज्ञान की आवश्यकता है - I2C बस (भाग एक और दो) और MCP23017। हम पहले हार्डवेयर कनेक्शन और फिर Arduino स्केच का वर्णन करेंगे। एकल स्विच उदाहरण के लिए उपयोग किए गए योजनाबद्ध को याद करें।

जब स्विच सीधे Arduino से जुड़ा था, हम स्विच के मूल्य को निर्धारित करने के लिए प्रत्येक पिन की स्थिति पढ़ते हैं। हम इसे फिर से करेंगे, MCP23017 का उपयोग करके बड़े पैमाने पर। पिनआउट आरेख पर विचार करें:

चरण 8:

हमारे पास 16 पिन हैं, जो चार स्विच को कनेक्ट करने की अनुमति देता है। प्रत्येक स्विच के लिए कॉमन्स अभी भी 5V से जुड़ते हैं, और प्रत्येक स्विच संपर्क में अभी भी GND के लिए 10k पुल-डाउन रेसिस्टर है। फिर हम अंक एक के 1, 2, 4, 8 पिन को GPBA0~3 से जोड़ते हैं; अंक दो का 1, 2, 4, 8 से GPA4~7; अंक तीन के 1, 2, 4, 8 से GPB0~3 और अंक चार के 1, 2, 4, 8 से GPB4~7 तक।

अब हम स्विच कैसे पढ़ते हैं? वे सभी तार आपको सोचने पर मजबूर कर सकते हैं कि यह मुश्किल है, लेकिन स्केच काफी सरल है। जब हम GPBA और B के मान को पढ़ते हैं, तो प्रत्येक बैंक के लिए एक बाइट लौटा दी जाती है, जिसमें सबसे महत्वपूर्ण बिट पहले होता है। प्रत्येक चार बिट मिलान करने वाले I/O पिन से जुड़े स्विच की सेटिंग से मेल खाएंगे। उदाहरण के लिए, यदि हम दोनों IO बैंकों के लिए डेटा का अनुरोध करते हैं और स्विच 1 2 3 4 पर सेट हैं - बैंक A 0010 0001 लौटाएगा और बैंक B 0100 0011 लौटाएगा।

हम प्रत्येक चार बिट्स को एक अलग चर में अलग करने के लिए कुछ बिटशिफ्ट संचालन का उपयोग करते हैं - जो हमें प्रत्येक अंक के मूल्य के साथ छोड़ देता है। उदाहरण के लिए, स्विच चार के मान को अलग करने के लिए, हम बैंक B >> 4 से बिट्स को स्थानांतरित करते हैं। यह स्विच के मान को तीन से बाहर धकेलता है, और बाईं ओर के रिक्त बिट्स शून्य हो जाते हैं।

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

चरण 9:

तो आइए देखते हैं प्रदर्शन स्केच:

/* उदाहरण 40a - MCP23017 के माध्यम से चार पुशव्हील बीसीडी स्विच पढ़ें, SAA1064/4-अंक 7-सेगमेंट एलईडी डिस्प्ले पर प्रदर्शित करें */// MCP23017 पिन 15 ~ 17 से GND, I2C बस का पता 0x20 है // SAA1064 I2C बस पता 0x38 # एलईडी अंक परिभाषाओं के लिए "वायर.एच" // शामिल करें int अंक [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; बाइट GPIOA, GPIOB, डिग1, डिग2, डिग3, डिग4; शून्य initSAA1064 () {//सेटअप 0x38 Wire.beginTransmission (0x38); वायर.राइट (0); वायर.राइट (बी०१०००१११); // 12mA आउटपुट, कोई डिजिट ब्लैंकिंग नहीं Wire.endTransmission (); } शून्य सेटअप () {Serial.begin (९६००); वायर.बेगिन (); // I2C बस शुरू करें initSAA1064 (); } शून्य लूप () {// बैंक ए वायर के इनपुट पढ़ें। बेगिनट्रांसमिशन (0x20); वायर.राइट (0x12); वायर.एंडट्रांसमिशन (); Wire.requestFrom (0x20, 1); GPIOA = वायर.रीड (); // इस बाइट में अंक 1 और 2 के लिए स्विच डेटा है // बैंक बी वायर के इनपुट पढ़ें। बेगिनट्रांसमिशन (0x20); वायर.राइट (0x13); वायर.एंडट्रांसमिशन (); Wire.requestFrom (0x20, 1); GPIOB = वायर.रीड (); // इस बाइट में अंक 3 और 4 के लिए स्विच डेटा होता है // प्रत्येक स्विच के लिए एक्सट्रेक्ट वैल्यू // डिग1 एलएचएस, डिग 4 आरएचएस डिग 4 = जीपीआईओबी >> 4; Dig3 = GPIOB और B00001111; डिग२=जीपीआईओए >> ४; डिग१=जीपीआईओए और बी००००११११; // सभी GPIO और व्यक्तिगत स्विच डेटा को सीरियल मॉनिटर पर भेजें // डिबग और रुचि के लिए Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); सीरियल.प्रिंट ("जीपीआईओबी ="); Serial.println (जीपीआईओबी, बिन); सीरियल.प्रिंट्लन (); सीरियल.प्रिंट ("अंक 1 ="); Serial.println (dig1, BIN); सीरियल.प्रिंट ("अंक 2 ="); Serial.println (dig2, BIN); सीरियल.प्रिंट ("अंक 3 ="); Serial.println (dig3, BIN); सीरियल.प्रिंट ("अंक 4 ="); Serial.println (dig4, BIN); सीरियल.प्रिंट्लन (); सीरियल.प्रिंट ("अंक 1 ="); Serial.println (dig1, DEC); सीरियल.प्रिंट ("अंक 2 ="); Serial.println(dig2, DEC); सीरियल.प्रिंट ("अंक 3 ="); Serial.println (dig3, DEC); सीरियल.प्रिंट ("अंक 4 ="); Serial.println (dig4, DEC); सीरियल.प्रिंट्लन (); // SAA1064 Wire.beginTransmission (0x38) के माध्यम से एलईडी डिस्प्ले पर स्विच वैल्यू भेजें; वायर.लिखें(1); Wire.write (अंक [dig4]); Wire.write (अंक [dig3]); Wire.write (अंक [dig2]); Wire.write (अंक [dig1]); वायर.एंडट्रांसमिशन (); देरी(10); देरी (1000); }

और अविश्वासियों के लिए … एक वीडियो प्रदर्शन।

इसलिए यह अब आपके पास है। एक के बजाय चार अंक, और Arduino डिजिटल I/O पिन का संरक्षण करने वाली I2C बस के ऊपर। आठ MCP23017s का उपयोग करके आप एक बार में 32 अंक पढ़ सकते हैं। ऐसा करने में मजा करो!

आप पीएमडी वे से विभिन्न आकारों में बीसीडी और दशमलव स्विच दोनों को दुनिया भर में मुफ्त डिलीवरी के साथ ऑर्डर कर सकते हैं।

यह पोस्ट आपके लिए pmdway.com द्वारा लाया गया है - निर्माताओं और इलेक्ट्रॉनिक्स के प्रति उत्साही लोगों के लिए, दुनिया भर में मुफ्त डिलीवरी के साथ।

सिफारिश की: