विषयसूची:

एक पूर्ण Arduino रोटरी समाधान: 5 कदम
एक पूर्ण Arduino रोटरी समाधान: 5 कदम

वीडियो: एक पूर्ण Arduino रोटरी समाधान: 5 कदम

वीडियो: एक पूर्ण Arduino रोटरी समाधान: 5 कदम
वीडियो: How to use Rotary Encoder with Arduino 2024, जुलाई
Anonim
एक पूर्ण Arduino रोटरी समाधान
एक पूर्ण Arduino रोटरी समाधान

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

रोटरी एनकोडर के कार्य विवरण और उपयोग के तरीकों के बारे में अनगिनत लेख हैं, और उनका उपयोग करने के तरीके पर कई नमूना कोड और पुस्तकालय हैं। एकमात्र समस्या यह है कि उनमें से कोई भी सबसे कम कीमत सीमा वाले चीनी रोटरी मॉड्यूल के साथ 100% सटीक काम नहीं करता है।

चरण 1: अंदर रोटरी एनकोडर

रोटरी एनकोडर अंदर
रोटरी एनकोडर अंदर
रोटरी एनकोडर अंदर
रोटरी एनकोडर अंदर
रोटरी एनकोडर अंदर
रोटरी एनकोडर अंदर

एन्कोडर के रोटरी भाग में तीन पिन होते हैं (और वैकल्पिक स्विच भाग के लिए दो और)। एक आम जमीन (काला जीएनडी) है, अन्य दो दिशा निर्धारित करने के लिए है जब घुंडी को घुमाया जाता है (उन्हें अक्सर नीला सीएलके और लाल डीटी कहा जाता है)। ये दोनों माइक्रोकंट्रोलर के एक PULLUP इनपुट पिन से जुड़े होते हैं, जिससे लेवल हाई उनकी डिफ़ॉल्ट रीडिंग हो जाती है। जब नॉब को आगे (या दक्षिणावर्त) घुमाया जाता है, तो पहले नीला CLK LOW के स्तर तक गिरता है, फिर लाल DT उसके बाद आता है। आगे की ओर मुड़ते हुए, नीला CLK वापस हाई पर आ जाता है, फिर जैसे ही सामान्य GND पैच दोनों कनेक्शन पिन छोड़ता है, लाल DT भी वापस हाई पर आ जाता है। इस प्रकार एक पूर्ण टिक FWD (या दक्षिणावर्त) को पूरा करना। वही दूसरी दिशा BWD (या वामावर्त) जाता है, लेकिन अब लाल पहले गिरता है, और नीला वापस ऊपर उठता है जैसा कि क्रमशः दो स्तर की छवियों में दिखाया गया है।

चरण 2: दुख जो बहुतों के लिए वास्तविक दर्द का कारण बनता है

दुख जो बहुतों के लिए वास्तविक दर्द का कारण बनता है
दुख जो बहुतों के लिए वास्तविक दर्द का कारण बनता है
दुख जो बहुतों के लिए वास्तविक दर्द का कारण बनता है
दुख जो बहुतों के लिए वास्तविक दर्द का कारण बनता है
दुख जो बहुतों के लिए वास्तविक दर्द का कारण बनता है
दुख जो बहुतों के लिए वास्तविक दर्द का कारण बनता है

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

चरण 3: परिमित राज्य मशीन (FSM) समाधान

परिमित राज्य मशीन (एफएसएम) समाधान
परिमित राज्य मशीन (एफएसएम) समाधान

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

चरण 4: Arduino कोड

Arduino कोड
Arduino कोड

नीचे दिया गया कोड सीरियल मॉनीटर पर FWD और BWD टिकों को गिनता है और वैकल्पिक स्विच फ़ंक्शन को भी एकीकृत करता है।

// पीटर सेर्गे 2019-04-10

// रोटरी के पिन Arduino पोर्ट पर मैप किए गए

#SW 21 को परिभाषित करें #CLK 22 को परिभाषित करें #DT 23 को परिभाषित करें

// रोटरी द्वारा ट्यून किए गए काउंटर का वर्तमान और पिछला मान

इंट कर्वल = 0; इंट प्रचलित = 0;

// FSM के सात राज्य (परिमित राज्य मशीन)

#define IDLE_11 0 #define SCLK_01 1 #define SCLK_00 2 #define SCLK_10 3 #define SDT_10 4 #define SDT_00 5 #define SDT_01 6 int State = IDLE_11;

व्यर्थ व्यवस्था() {

सीरियल.बेगिन (250000); Serial.println ("प्रारंभ …"); // लेवल हाई सभी पिन पिनमोड (SW, INPUT_PULLUP) के लिए डिफ़ॉल्ट होगा; पिनमोड (सीएलके, INPUT_PULLUP); पिनमोड (डीटी, INPUT_PULLUP); // सीएलके और डीटी दोनों सभी स्तर के परिवर्तनों के लिए इंटरप्ट को ट्रिगर करेंगे अटैचइंटरप्ट (डिजिटलपिनटोइंटरप्ट (सीएलके), रोटरीसीएलके, चेंज); अटैचइंटरप्ट (डिजिटलपिनटोइंटरप्ट (डीटी), रोटरीडीटी, चेंज); }

शून्य लूप () {

// कुछ रोटरी एन्कोडर में एकीकृत वैकल्पिक स्विच की हैंडलिंग अगर (डिजिटल रीड (एसडब्ल्यू) == कम) {Serial.println ("दबाया गया"); जबकि (! डिजिटल रीड (एसडब्ल्यू)); } // काउंटर वैल्यू में कोई भी बदलाव सीरियल मॉनिटर में प्रदर्शित होता है अगर (curVal!=prevVal) { Serial.println(curVal); prevVal = curVal; } }

// सीएलके स्तर में परिवर्तन के लिए राज्य मशीन संक्रमण

शून्य रोटरीसीएलके () { अगर (डिजिटल रीड (सीएलके) == कम) { अगर (राज्य == आईडीएलई_11) राज्य = एससीएलके_01; और अगर (राज्य == SCLK_10) राज्य = SCLK_00; और अगर (राज्य == SDT_10) राज्य = SDT_00; } और { अगर (राज्य == SCLK_01) राज्य = IDLE_11; और अगर (राज्य == SCLK_00) राज्य = SCLK_10; और अगर (राज्य == एसडीटी_00) राज्य = एसडीटी_10; और अगर (राज्य == एसडीटी_01) {राज्य = आईडीएलई_11; वक्रवल--; } } }

// डीटी स्तर में परिवर्तन के लिए राज्य मशीन संक्रमण

शून्य रोटरीडीटी () { अगर (डिजिटल रीड (डीटी) == कम) { अगर (राज्य == आईडीएलई_11) राज्य = एसडीटी_10; और अगर (राज्य == एसडीटी_01) राज्य = एसडीटी_00; और अगर (राज्य == SCLK_01) राज्य = SCLK_00; } और { अगर (राज्य == SDT_10) राज्य = IDLE_11; और अगर (राज्य == एसडीटी_00) राज्य = एसडीटी_01; और अगर (राज्य == SCLK_00) राज्य = SCLK_01; और अगर (राज्य == SCLK_10) {राज्य = IDLE_11; वक्रवल++; } } }

चरण 5: निर्दोष एकीकरण

आप संलग्न वीडियो में देख सकते हैं कि विभिन्न छिटपुट बाउंस प्रभावों के साथ कम दूरी के रोटरी एन्कोडर के मामले में भी FSM समाधान सटीक और तेज़ काम करता है।

सिफारिश की: