- सामग्री की आवश्यकता
- एक रोटरी एनकोडर कैसे काम करता है?
- रोटरी एनकोडर के प्रकार
- KY-040 रोटरी एनकोडर पिनआउट और विवरण
- Arduino रोटरी एनकोडर सर्किट आरेख
- रोटरी एनकोडर के लिए अपने Arduino प्रोग्रामिंग
- Arduino के साथ रोटरी एनकोडर का कार्य
एक रोटरी एनकोडर एक इनपुट डिवाइस है जो उपयोगकर्ता को सिस्टम के साथ बातचीत करने में मदद करता है। यह एक रेडियो पोटेंशियोमीटर की तरह अधिक दिखता है लेकिन यह दालों की एक ट्रेन का उत्पादन करता है जो इसके अनुप्रयोग को अद्वितीय बनाता है। जब एनकोडर के नॉब को घुमाया जाता है तो यह छोटे चरणों के रूप में घूमता है जो इसे स्टेपर / सर्वो मोटर को नियंत्रित करने के लिए उपयोग करने में मदद करता है, मेनू के अनुक्रम के माध्यम से नेविगेट करता है और एक संख्या के मूल्य को बढ़ाता / घटाता है और बहुत कुछ।
इस लेख में हम विभिन्न प्रकार के रोटरी एनकोडर के बारे में जानेंगे और यह कैसे काम करेगा । हम इसे Arduino के साथ भी इंटरफेस करेंगे और एनकोडर को घुमाकर एक पूर्णांक के मान को नियंत्रित करेंगे और 16 * LCD स्क्रीन पर इसका मान प्रदर्शित करेंगे। इस ट्यूटोरियल के अंत में आप अपनी परियोजनाओं के लिए रोटरी एनकोडर का उपयोग करने में सहज होंगे। तो चलो शुरू करते है…
सामग्री की आवश्यकता
- रोटरी एनकोडर (KY-040)
- Arduino UNO
- 16 * 2 अल्फ़ान्यूमेरिक एलसीडी
- पोटेंशियोमीटर 10 कि
- ब्रेड बोर्ड
- तारों को जोड़ना
एक रोटरी एनकोडर कैसे काम करता है?
एक रोटरी एनकोडर एक इलेक्ट्रोमैकेनिकल ट्रांसड्यूसर है, जिसका अर्थ है कि यह यांत्रिक आंदोलनों को इलेक्ट्रॉनिक दालों में परिवर्तित करता है। इसमें एक घुंडी होती है जो जब घूमती है तो चरण दर चरण आगे बढ़ती है और प्रत्येक चरण के लिए पूर्व-परिभाषित चौड़ाई के साथ पल्स ट्रेनों का एक क्रम उत्पन्न करती है। अपने स्वयं के कार्य तंत्र के साथ प्रत्येक प्रकार के कई एनकोडर हैं, हम बाद में प्रकारों के बारे में जानेंगे लेकिन अब हम केवल KY040 इंक्रीमेंटल एनकोडर पर ध्यान केंद्रित करते हैं क्योंकि हम इसे अपने ट्यूटोरियल के लिए उपयोग कर रहे हैं।
एनकोडर के लिए आंतरिक यांत्रिक संरचना नीचे दिखाई गई है। यह मूल रूप से इस गोलाकार डिस्क के शीर्ष पर रखे गए प्रवाहकीय पैड (तांबे के रंग) के साथ एक परिपत्र डिस्क (ग्रे रंग) के होते हैं । ये प्रवाहकीय पैड एक समान दूरी पर रखे गए हैं जैसा कि नीचे दिखाया गया है। आउटपुट पिन इस परिपत्र डिस्क के ऊपर तय किए जाते हैं, इस तरह से कि जब घुंडी घूमती है तो प्रवाहकीय पैड आउटपुट पिन के संपर्क में आते हैं। यहां दो आउटपुट पिन, आउटपुट ए और आउटपुट बी हैं जैसा कि नीचे दिए गए आंकड़े में दिखाया गया है।
आउटपुट पिन ए और आउटपुट बी द्वारा उत्पादित आउटपुट तरंग क्रमशः नीले और हरे रंग में दिखाई देती है। जब प्रवाहकीय पैड सीधे पिन के नीचे होता है तो यह समय पर उच्च हो जाता है और जब प्रवाहकीय पैड चलता है तो पिन नीचे चला जाता है जिसके परिणामस्वरूप ऊपर दिखाए गए वेवफॉर्म का समय समाप्त हो जाता है। अब, यदि हम दालों की संख्या की गणना करते हैं, तो हम यह निर्धारित करने में सक्षम होंगे कि एनकोडर को कितने चरणों में स्थानांतरित किया गया है।
अब सवाल यह उठ सकता है कि, जब घुंडी घुमाने के दौरान उठाए गए कदमों की संख्या को गिनने के लिए पर्याप्त है, तो हमें दो नाड़ी संकेतों की आवश्यकता क्यों है। ऐसा इसलिए है क्योंकि हमें यह पहचानने की आवश्यकता है कि किस दिशा में घुंडी को घुमाया गया है। यदि आप दो दालों पर एक नज़र डालें तो आप देख सकते हैं कि वे दोनों चरण से 90 ° बाहर हैं। इसलिए जब नॉब को क्लॉकवाइज घुमाया जाएगा तो आउटपुट ए पहले हाई जाएगा और जब नॉब को एंटी-क्लॉकवाइज घुमाया जाएगा तो आउटपुट बी पहले हाई जाएगा।
रोटरी एनकोडर के प्रकार
बाजार में कई प्रकार के रोटरी एनकोडर हैं, जो डिजाइनर अपने आवेदन के अनुसार चुन सकते हैं। सबसे सामान्य प्रकार नीचे सूचीबद्ध हैं
- वृद्धिशील एनकोडर
- पूर्ण एनकोडर
- चुंबकीय एनकोडर
- ऑप्टिकल एनकोडर
- लेजर एनकोडर
इन एन्कोडर्स को आउटपुट सिग्नल और सेंसिंग टेक्नोलॉजी के आधार पर वर्गीकृत किया गया है, इंक्रीमेंटल एनकोडर और एब्सोल्यूट एनकोडर्स को आउटपुट सिग्नल के आधार पर वर्गीकृत किया गया है और मैग्नेटिक, ऑप्टिकल और लेजर एनकोडर को सेंसिंग टेक्नोलॉजी के आधार पर वर्गीकृत किया गया है। एनकोडर यहां इस्तेमाल एक वृद्धिशील प्रकार एनकोडर है ।
KY-040 रोटरी एनकोडर पिनआउट और विवरण
KY-040 वृद्धिशील प्रकार रोटरी एनकोडर के पिनआउट नीचे दिखाए गए हैं
एनकोडर को पावर देने के लिए पहले दो पिन (ग्राउंड और वीसीसी) का उपयोग किया जाता है, आमतौर पर + 5 वी आपूर्ति का उपयोग किया जाता है। नॉब और घड़ी की दिशा में एंटी-क्लॉकवाइज दिशा में घुमाने के अलावा, एनकोडर में एक स्विच (एक्टिव लो) भी होता है जिसे नॉब को अंदर दबाकर दबाया जा सकता है। इस स्विच से संकेत पिन 3 (स्विच) के माध्यम से प्राप्त किया जाता है। अंत में इसके दो आउटपुट पिन हैं जो पहले से ऊपर चर्चा की गई तरंगों का उत्पादन करते हैं। अब हम सीखते हैं कि इसे Arduino के साथ कैसे इंटरफ़ेस करें।
Arduino रोटरी एनकोडर सर्किट आरेख
Arduino के साथ Interfacing रोटरी एनकोडर के लिए पूरा सर्किट आरेख नीचे दी गई तस्वीर में दिखाया गया है
रोटरी एनकोडर के ऊपर लेबल में दिखाए गए क्रम में 5 पिन हैं। पहले दो पिन ग्राउंड और Vcc हैं जो ग्राउंड और Arduino के + 5V पिन से जुड़े हैं। एनकोडर का स्विच डिजिटल पिन D10 से जुड़ा होता है और 1k रेसिस्टर होते हुए भी हाई खींचा जाता है। दो आउटपुट पिन क्रमशः D9 और D8 से जुड़े हैं।
चर के मान को प्रदर्शित करने के लिए जो रोटरी एनकोडर को घुमाकर बढ़ाया या घटाया जाएगा हमें एक डिस्प्ले मॉड्यूल की आवश्यकता होती है। यहां उपयोग किया जाने वाला एक आम तौर पर 16 * 2 अल्फा न्यूमेरिक एलसीडी डिस्प्ले है। हमने डिस्प्ले को 4-बिट मोड में संचालित करने के लिए कनेक्ट किया है और इसे Arduino के + 5V पिन का उपयोग करके संचालित किया है। पोटेंशियोमीटर का उपयोग एलसीडी डिस्प्ले के विपरीत को समायोजित करने के लिए किया जाता है। यदि आप Arduino के साथ Interfacing एलसीडी डिस्प्ले के बारे में अधिक जानना चाहते हैं तो लिंक का अनुसरण करें। पूरा सर्किट एक ब्रेडबोर्ड के ऊपर बनाया जा सकता है, सभी कनेक्शन किए जाने के बाद मैंने नीचे कुछ ऐसा देखा।
रोटरी एनकोडर के लिए अपने Arduino प्रोग्रामिंग
यदि आप एक रोटरी एनकोडर के कार्य सिद्धांत को समझ गए थे, तो इसके साथ एक रोटरी एनकोडर को बदलने के लिए Arduino बोर्ड को प्रोग्राम करना काफी आसान और सीधा है। हमें बस यह निर्धारित करने के लिए पल्स की संख्या को पढ़ना है कि एन्कोडर ने कितने मोड़ किए हैं और जांचें कि कौन सा पल्स पहले किस दिशा में एनकोडर घुमाया गया था, खोजने के लिए उच्च गया। इस ट्यूटोरियल में हम उस संख्या को प्रदर्शित करेंगे जो एलसीडी की पहली पंक्ति पर इंक्रीमेंट या डिक्रीमेंट हो रही है और दूसरी लाइन में एनकोडर की दिशा। ऐसा करने का पूरा कार्यक्रम एक प्रदर्शन वीडियो के साथ इस पृष्ठ के निचले भाग में पाया जा सकता है, इसके लिए किसी पुस्तकालय की आवश्यकता नहीं है। अब, कार्य को समझने के लिए कार्यक्रम को छोटे-छोटे भाग में विभाजित करें।
चूंकि हमने एलसीडी डिस्प्ले का उपयोग किया है, इसलिए हम लिक्विड क्रिस्टल लाइब्रेरी को शामिल करते हैं जो कि अरुडिनो आईडीई में डिफ़ॉल्ट रूप से मौजूद है। फिर हम Arduino के साथ एलसीडी को जोड़ने के लिए पिन को परिभाषित करते हैं । अंत में हम उन पिंस पर एलसीडी डिस्प्ले को इनिशियलाइज़ करते हैं।
#शामिल
सेटअप फ़ंक्शन के अंदर, हम एलसीडी स्क्रीन पर एक परिचयात्मक संदेश प्रदर्शित करते हैं, और फिर 2 सेकंड तक प्रतीक्षा करते हैं ताकि यह संदेश उपयोगकर्ता के पढ़ने योग्य हो। यह सुनिश्चित करना है कि एलसीडी ठीक से काम कर रहा है।
lcd.print ("रोटरी एनकोडर"); // इंट्रो मैसेज लाइन 1 lcd.setCursor (0, 1); lcd.print ("Arduino के साथ"); // इंट्रो मैसेज लाइन 2 देरी (2000); lcd.clear ();
रोटरी एनकोडर में तीन आउटपुट पिन होते हैं जो Arduino के लिए एक INPUT पिन होंगे। ये तीन पिन क्रमशः स्विच, आउटपुट ए और आउटपुट बी हैं। इन्हें पिनमोड फ़ंक्शन का उपयोग करके इनपुट के रूप में घोषित किया गया है जैसा कि नीचे दिखाया गया है।
// पिन मोड घोषणा पिनमोड (एनकोडर_ओपुत, INPUT); pinMode (एनकोडर_ओपुतब, INPUT); पिनमोड (एनकोडर_स्विच, INPUT);
शून्य सेटअप फ़ंक्शन के अंदर, हम पिन की अंतिम स्थिति की जांच करने के लिए आउटपुट ए पिन की स्थिति पढ़ते हैं। फिर हम इस जानकारी का उपयोग नए मान के साथ तुलना करने के लिए करेंगे कि कौन सा पिन (आउटपुट ए या आउटपुट बी) उच्च गया है।
Previous_Output = digitalRead (Encoder_OuputA); // आउटपुट ए का inital मान पढ़ें
अंत में मुख्य लूप फ़ंक्शन के अंदर, हमें आउटपुट ए और आउटपुट बी के मूल्य की तुलना पिछले आउटपुट के साथ करनी है ताकि यह जांचा जा सके कि कौन सा उच्च है। यह केवल नीचे दिखाए गए अनुसार पिछले आउटपुट के साथ ए और बी के वर्तमान आउटपुट के मूल्य की तुलना करके किया जा सकता है।
if (digitalRead (Encoder_OuputA)! = Previous_Output) { if (digitalRead (Encoder_OuputB)! = Previous_Output) { Encoder_Count ++ lcd.clear (); lcd.print (एनकोडर_काउंट); lcd.setCursor (0, 1); lcd.print ("दक्षिणावर्त"); }
उपरोक्त कोड में दूसरा अगर अगर आउटपुट बी पिछले उत्पादन से बदल गया है हालत मार डाला जाता है। उस स्थिति में एनकोडर चर का मूल्य बढ़ जाता है और एलसीडी प्रदर्शित करता है कि एनकोडर को दक्षिणावर्त दिशा में घुमाया जाता है। इसी प्रकार यदि है कि अगर हालत में विफल रहता है, बाद में किसी और शर्त हम चर और प्रदर्शन है कि एनकोडर में घुमाया जाता है घटती घड़ी की विपरीत दिशा। उसी के लिए कोड नीचे दिखाया गया है।
और { एनकोडर_काउंट--; lcd.clear (); lcd.print (एनकोडर_काउंट); lcd.setCursor (0, 1); lcd.print ("एंटी - क्लॉकवाइज़"); } }
अंत में, मुख्य लूप के अंत में हमें वर्तमान आउटपुट मान के साथ पिछले आउटपुट मान को अपडेट करना होगा ताकि लूप को उसी तर्क के साथ दोहराया जा सके। निम्न कोड समान है
Previous_Output = digitalRead (Encoder_OuputA);
एक और वैकल्पिक चीज यह जांचना है कि क्या एनकोडर पर स्विच दबाया गया है । रोटरी कोडर पर स्विच पिन की जांच करके इस पर नजर रखी जा सकती है। यह पिन एक सक्रिय कम पिन है, जिसका अर्थ है कि यह बटन दबाए जाने पर कम हो जाएगा। यदि नहीं दबाया जाता है तो पिन उच्च रहता है, हमने स्विच को रोकने के लिए पुल-अप अवरोधक का भी उपयोग किया है जब स्विच को दबाया नहीं जाता है, तो इस प्रकार फ्लोटिंग पॉइंट स्थिति से बचा जाता है।
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("स्विच दबाया"); }
Arduino के साथ रोटरी एनकोडर का कार्य
एक बार हार्डवेयर और कोड तैयार हो जाने के बाद, बस कोड को Arduino बोर्ड पर अपलोड करें और Arduino Board को पावर अप करें। आप इसे USB केबल के माध्यम से पावर कर सकते हैं या 12V एडॉप्टर का उपयोग कर सकते हैं। जब संचालित एलसीडी को इंट्रो संदेश प्रदर्शित करना चाहिए और फिर खाली हो जाना चाहिए। अब रोटरी एनकोडर को घुमाएं और आपको यह देखना चाहिए कि आपके द्वारा घुमाए गए दिशा के आधार पर मूल्य बढ़ाना या घटाना शुरू होता है। दूसरी पंक्ति आपको दिखाएगी कि एनकोडर को दक्षिणावर्त या विरोधी-दक्षिणावर्त दिशा में घुमाया जा रहा है या नहीं। नीचे दी गई तस्वीर समान दिखाती है
साथ ही जब बटन दबाया जाता है, तो दूसरी पंक्ति प्रदर्शित करेगी कि बटन दबाया गया है। पूरा काम नीचे दिए गए वीडियो में पाया जा सकता है । यह Arduino के साथ एनकोडर को इंटरफेस करने और यह जांचने के लिए कि क्या यह उम्मीद के मुताबिक काम कर रहा है, यह सिर्फ एक नमूना कार्यक्रम है। एक बार जब आप यहां पहुंच जाते हैं तो आपको अपने किसी भी प्रोजेक्ट और प्रोग्राम के अनुसार एनकोडर का उपयोग करने में सक्षम होना चाहिए।
आशा है कि आपने ट्यूटोरियल और चीजों को समझ लिया होगा जैसा कि माना जाता है। यदि आपको कोई समस्या है तो टिप्पणी अनुभाग या तकनीकी सहायता के लिए मंचों का उपयोग करें।