विषयसूची:

एल्गोरिथम मशीन: 13 चरण (चित्रों के साथ)
एल्गोरिथम मशीन: 13 चरण (चित्रों के साथ)

वीडियो: एल्गोरिथम मशीन: 13 चरण (चित्रों के साथ)

वीडियो: एल्गोरिथम मशीन: 13 चरण (चित्रों के साथ)
वीडियो: Genetic Algorithm with Solved Example(Selection,Crossover,Mutation) 2024, जुलाई
Anonim
Image
Image
LED बार: 3D प्रिंट द मास्क
LED बार: 3D प्रिंट द मास्क

मैं १५ वर्षों से कॉलेज स्तर पर कंप्यूटर विज्ञान पढ़ा रहा हूं, और हालांकि मेरी विशेषज्ञता प्रोग्रामिंग पक्ष पर अधिक है, फिर भी मैं खोज और सॉर्टिंग के लिए मानक एल्गोरिदम को कवर करने में काफी समय बिताता हूं। एक शिक्षण दृष्टिकोण से केंद्रीय मुद्दा कम्प्यूटेशनल जटिलता है: किसी विशेष आकार के इनपुट को देखते हुए प्रत्येक एल्गोरिदम को कितना समय चाहिए? लेकिन कई बारीकियां हैं। उदाहरण के लिए, क्या विशिष्ट इनपुट मानों (आकार के विपरीत) के आधार पर एल्गोरिदम के अलग-अलग रनटाइम होते हैं? आप किन मामलों में एक छँटाई एल्गोरिथ्म दूसरे पर चुनेंगे? यद्यपि हम इन मुद्दों पर सार में चर्चा करते हैं, इसने मुझे हमेशा परेशान किया कि यह देखने का कोई आसान तरीका नहीं था कि विभिन्न एल्गोरिदम विभिन्न परिस्थितियों में कैसे काम करते हैं।

लक्ष्य

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

विशिष्ट लक्ष्य हैं:

- विभिन्न प्रकार के खोज और सॉर्टिंग एल्गोरिदम प्रदान करें

- ऐरे में मानों को इस तरह से विज़ुअलाइज़ करें जो एल्गोरिथम प्रगति को हाइलाइट करता है

- एल्गोरिथम नियंत्रण की कल्पना करें; विशेष रूप से, तत्वों पर विचार किया जा रहा है।

- उपयोगकर्ताओं को हमेशा यादृच्छिक मान उत्पन्न करने के बजाय इनपुट डेटा पैटर्न चुनने की अनुमति दें

- उपयोगकर्ताओं को गति को नियंत्रित करने और एल्गोरिथम को रोकने की अनुमति दें

- उपयोगकर्ताओं को सर्वोत्तम-मामले, सबसे खराब-मामले, औसत-केस व्यवहार (एल्गोरिदम-विशिष्ट) को बाध्य करने की अनुमति दें

- एल्गोरिथम के आगे बढ़ने पर चरणों की संख्या दिखाएं

VISUALIZATION

एक भौतिक डिजाइन के दृष्टिकोण से इस परियोजना का सबसे दिलचस्प हिस्सा सरणी का दृश्य है। मैं डेटा और नियंत्रण दिखाने के तरीके और डिस्प्ले डिवाइस को स्वयं बनाने के तरीके के साथ संघर्ष कर रहा था। मेरा लक्ष्य डेटा मानों को रंगीन मंडलियों के रूप में और नियंत्रण बिंदुओं को रंगीन तीरों के रूप में दिखाना था जो डेटा मानों को इंगित करते हैं। कुछ प्रयोग के बाद मैं 100 आरजीबी एलईडी (WS2812) के दो समानांतर स्ट्रिप्स के साथ एक डिजाइन पर बस गया, जिसमें प्रत्येक डेटा एलईडी पर एक गोलाकार मुखौटा और प्रत्येक नियंत्रण एलईडी पर एक त्रिकोणीय मुखौटा था। मैंने 10 जोड़े वृत्तों और त्रिभुजों के साथ मुखौटा का एक 3D मॉडल बनाया, और फिर कुल 100 मंडलियों और 100 त्रिभुजों के लिए इनमें से 10 मॉड्यूल को 3D मुद्रित किया। मेरे मास्क का आकार और दूरी 100 एलईडी प्रति मीटर के साथ स्ट्रिप्स के लिए डिज़ाइन की गई है। 3D मॉडल फ़ाइलें इस विवरण में बाद में प्रदान की गई हैं।

इलेक्ट्रॉनिक्स और संलग्नक

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

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

सॉफ्टवेयर

इस उपकरण के लिए कोड GitHub पर स्वतंत्र रूप से उपलब्ध है, और मैंने यह दस्तावेज करने की पूरी कोशिश की है कि यह कैसे काम करता है और इसे कैसे कॉन्फ़िगर किया जाए। WS2812 स्ट्रिप्स को चलाने के लिए आपको केवल बाहरी लाइब्रेरी की आवश्यकता है FastLED।

आपूर्ति

इलेक्ट्रानिक्स

1 ESP32 विकास बोर्ड (जैसे, 2 WS2812 या समान LED स्ट्रिप्स, घनत्व 100 LED प्रति मीटर (उदा., 1 त्रिभुज "प्रारंभ" बटन (उदा., 12 क्षणिक बटन (जैसे, https://amzn.com/B01N4D4750) - यदि आप चाहें तो अलग-अलग आकार

1 पैक (20) प्रीवायर्ड बटन कनेक्टर (उदा., 1 पैक JST कनेक्टर (जैसे, 1 रोटरी एन्कोडर (उदा., रोटरी एन्कोडर के लिए 1 नॉब (जैसे, 1 पैक ड्यूपॉन्ट कनेक्टर (जैसे, https://amzn.com/B014YTPFT8) - यह crimping टूल भी प्राप्त करने लायक है।

1 बैरल जैक (पावर के लिए) (जैसे, 1 TM1637 7-सेगमेंट न्यूमेरिक डिस्प्ले (जैसे, सोल्डरिंग और वायरिंग गियर

3D मॉडल फ़ाइलें

आप Thingiverse पर 10-लाइट मॉड्यूल की एक जोड़ी के लिए 3D मॉडल पा सकते हैं:

www.thingiverse.com/thing:4178181

कुल 10 मॉड्यूल के लिए आपको इस मॉडल को पांच बार प्रिंट करना होगा।

सॉफ्टवेयर

github.com/samguyer/AlgorithmMachine

दीवार

लकड़ी, प्लेक्सीग्लस, स्टेनलेस स्टील बोल्ट और स्क्रू

प्रसार सामग्री। मेरा पसंदीदा ली फिल्टर # 216 पूर्ण सफेद प्रसार है, लेकिन अन्य विकल्प भी हैं। सादा श्वेत पत्र भी अच्छा काम करता है।

चरण 1: एल्गोरिदम 101

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

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

इसमें कितना समय लगेगा?

एक बार हमारे पास एक विस्तृत प्रक्रिया हो जाने के बाद एक स्वाभाविक प्रश्न यह है कि उत्तर प्राप्त करने में कितना समय लगेगा? हम समय की सामान्य इकाइयों का उपयोग नहीं कर सकते, क्योंकि यह इस बात पर निर्भर करता है कि कौन काम कर रहा है (तुलना करें कि कोई व्यक्ति किसी सुपर कंप्यूटर की तुलना में कितनी तेजी से गणना कर सकता है)। इसके अलावा, यह इस बात पर निर्भर करता है कि हमारे पास कितना डेटा है। स्पष्ट रूप से, सौ की सूची की तुलना में दस लाख फ़ोन नंबरों की सूची खोजने में अधिक समय लगता है।

एल्गोरिदम की लागत का वर्णन करने के लिए हम पहले उस प्रक्रिया में कुछ ऑपरेशन चुनते हैं जो एक "चरण" का प्रतिनिधित्व करता है - आमतौर पर कुछ सरल, जैसे दो संख्याओं की तुलना करना या जोड़ना, जिसे करने में निश्चित समय लगता है। फिर हम एक सूत्र के साथ आते हैं जो बताता है कि कुछ संख्या में डेटा आइटम दिए जाने पर एल्गोरिथ्म कितने कदम उठाएगा। ऐतिहासिक कारणों से, हम लगभग हमेशा एक पूंजी एन के साथ डेटा आइटम की संख्या को निरूपित करते हैं।

उदाहरण के लिए, N फ़ोन नंबरों की सूची को देखने पर N चरण लगते हैं। सूची को दो बार देखने पर 2N चरण लगते हैं। इन दोनों को रैखिक समय एल्गोरिदम कहा जाता है - चरणों की कुल संख्या इनपुट आकार के कुछ गुणक है। अन्य एल्गोरिदम द्विघात (एन वर्ग समय) या क्यूबिक (एन क्यूबेड) या लॉगरिदमिक (लॉग एन) या इनमें से कुछ संयोजन हैं। सबसे कठिन कम्प्यूटेशनल समस्याओं में से कुछ के लिए घातीय समय एल्गोरिदम (2 ^ एन) की आवश्यकता होती है।

ठीक है तो क्या हुआ?

जब डेटा आइटम्स की संख्या N कम होती है तो यह ज्यादा मायने नहीं रखता है। उदाहरण के लिए, N=10 के लिए, 10N वह नाम है जो N चुकता है। लेकिन एन = 1000 के बारे में क्या? या एन = 1000000? एक मिलियन वर्ग एक बहुत बड़ी संख्या है। बहुत तेज़ कंप्यूटर पर भी, यदि इनपुट काफी बड़ा है तो द्विघात एल्गोरिथ्म में लंबा समय लग सकता है। एक्सपोनेंशियल एल्गोरिदम बहुत अधिक परेशानी वाले होते हैं: एन = 50 के लिए एक घातीय एल्गोरिथ्म को कंप्यूटर पर भी समाप्त होने में दो सप्ताह लगेंगे, जहां प्रत्येक चरण सिर्फ एक नैनोसेकंड (एक सेकंड का 1 अरबवां) है। आउच!

पैमाने के दूसरे छोर पर हमारे पास लॉगरिदमिक समय एल्गोरिदम हैं, जो बहुत तेज़ हैं। लॉग समय घातीय समय के विपरीत है: इनपुट आकार एन दिया गया है, चरणों की संख्या सूत्र 2^टी = एन में एक्सपोनेंट टी है। उदाहरण के लिए, यदि हमारा इनपुट आकार एक अरब है, तो लॉग टाइम एल्गोरिदम को केवल 30 की आवश्यकता होती है कदम, 2^30 = 1, 000, 000, 000 के बाद से। वह कितना प्यारा है?!??!

आप सोच रहे होंगे कि लाखों या अरबों के इनपुट आकार की परवाह कौन करता है? इसके बारे में सोचें: फेसबुक पर कितने उपयोगकर्ता हैं? Google द्वारा कितने वेब पेजों को अनुक्रमित किया जाता है? मानव जीनोम में कितने आधार जोड़े होते हैं? मौसम सिमुलेशन में कितने माप जाते हैं?

चरण 2: एल्गोरिदम

एल्गोरिथम मशीन वर्तमान में निम्नलिखित एल्गोरिदम लागू करती है। उनमें से दो खोज एल्गोरिदम हैं (सूची में एक विशेष मूल्य खोजें), बाकी एल्गोरिदम सॉर्ट कर रहे हैं (मानों को क्रम में रखें)।

रैखिक खोज

शुरुआत से शुरू करके मूल्यों की सूची में एक-एक करके खोजें। रैखिक समय की आवश्यकता है।

द्विआधारी खोज

किसी सूची को बार-बार आधे में विभाजित करके खोजें। लॉग समय की आवश्यकता है, लेकिन इसके काम करने के लिए सूची को क्रमबद्ध किया जाना चाहिए।

बबल शॅाट

एक सूची को बार-बार आदान-प्रदान करने वाले पड़ोसी तत्वों को क्रमबद्ध करें जो क्रम में नहीं हैं। द्विघात समय की आवश्यकता है।

सम्मिलन सॉर्ट

पहले से छांटे गए मानों की सूची में प्रत्येक तत्व को उसके उचित स्थान पर रखकर सूची को क्रमबद्ध करें। द्विघात समय की आवश्यकता है।

जल्दी से सुलझाएं

सूची को बार-बार आधे में विभाजित करके और माध्यिका से कम के सभी मानों को पहली छमाही में स्थानांतरित करके, और मध्य से अधिक के सभी मानों को दूसरी छमाही में क्रमबद्ध करें। व्यवहार में, हम कुशलता से माध्यिका का पता नहीं लगा सकते हैं, इसलिए हम यादृच्छिक रूप से एक मान चुनते हैं। परिणामस्वरूप यह एल्गोरिथम सबसे खराब स्थिति में द्विघात हो सकता है, लेकिन आमतौर पर N * logN समय की आवश्यकता होती है।

मर्ज़ सॉर्ट

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

ढेर बनाएं और छांटें

एक ढेर नामक डेटा संरचना बनाकर एक सूची को क्रमबद्ध करें, जो आपको लॉग समय में सबसे छोटा मान खोजने की अनुमति देता है। हमेशा एन * लॉगएन समय की आवश्यकता होती है।

बिटोनिक सॉर्ट

मर्ज सॉर्ट और क्विकसॉर्ट के समान, सूची को आधे में विभाजित करें, हिस्सों को सॉर्ट करें और उन्हें फिर से संयोजित करें। इस एल्गोरिथ्म के लिए N * logN * logN समय की आवश्यकता होती है, लेकिन इसका लाभ यह है कि इसे समानांतर करना आसान है।

चरण 3: एलईडी बार: 3D मास्क को प्रिंट करें

LED बार: 3D प्रिंट द मास्क
LED बार: 3D प्रिंट द मास्क
LED बार: 3D प्रिंट द मास्क
LED बार: 3D प्रिंट द मास्क

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

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

चरण 4: एलईडी बार विकल्प

एलईडी बार विकल्प
एलईडी बार विकल्प
एलईडी बार विकल्प
एलईडी बार विकल्प
एलईडी बार विकल्प
एलईडी बार विकल्प

जब मैंने पहली बार इस परियोजना को शुरू किया तो मैंने एलईडी मास्क बनाने के अन्य तरीकों के साथ प्रयोग किया। यदि आपके पास 3D प्रिंटर नहीं है, तो आप इनमें से किसी एक विकल्प पर विचार कर सकते हैं। मैं ईमानदार रहूंगा: इन भागों को बनाने में बहुत बड़ा दर्द होता है।

मंडलियों के लिए, मैंने एक 13/32 पीतल की ट्यूब खरीदी, जो लगभग 1 सेमी व्यास की है। मैंने इसे एक सौ 1 सेमी खंडों में काटा और फिर स्प्रे ने उन्हें सफेद रंग में रंग दिया।

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

चरण 5: एलईडी बार संलग्नक

एलईडी बार संलग्नक
एलईडी बार संलग्नक
एलईडी बार संलग्नक
एलईडी बार संलग्नक
एलईडी बार संलग्नक
एलईडी बार संलग्नक

मेरा बाड़ा काफी सरल है: पक्षों के लिए लकड़ी के दो स्ट्रिप्स और ऊपर और नीचे के लिए प्लेक्सीग्लस के दो स्ट्रिप्स। सभी भाग लगभग 102 सेमी लंबे (एल ई डी के लिए 1 मीटर, साथ ही तारों को समायोजित करने के लिए थोड़ा अतिरिक्त) हैं। एलईडी स्ट्रिप्स के लिए जगह बनाने के लिए पक्ष 1 सेमी से थोड़ा लंबा होना चाहिए। स्ट्रिप्स को काटने के बाद मैंने plexiglass की चौड़ाई को मापने के लिए उनके बीच 3D प्रिंटेड मास्क के टुकड़ों को सैंडविच किया। प्लेक्सीग्लस के दो टुकड़ों को बार की चौड़ाई और लंबाई में काटें। अंत में, मास्क के ऊपर फिट होने के लिए प्रसार सामग्री की एक पट्टी काट लें।

प्रसार के लिए मुझे वास्तव में ली फिल्टर # 216 (पूर्ण सफेद प्रसार) पसंद है। यह एक पतली प्लास्टिक की शीट होती है जो बिना ज्यादा रोशनी खोए भी विसरण देती है। लेकिन यह महंगी चीज है। कभी-कभी आप ऑनलाइन बिक्री के लिए छोटी शीट पा सकते हैं, लेकिन एक पूरा रोल आपको लगभग $125 वापस कर देगा। कुछ अन्य विकल्प श्वेत पत्र या किसी अन्य प्रकार के साटन या फ्रॉस्टेड प्लास्टिक हैं। एक लोकप्रिय विकल्प पतली प्लास्टिक काटने वाली मैट है।

इससे पहले कि आप एलईडी बार को इकट्ठा करें, सुनिश्चित करें कि आपके पास एलईडी स्ट्रिप्स के लिए उपयुक्त कनेक्टर हैं। बहुत सी स्ट्रिप्स प्री-सोल्डरेड लीड के साथ आती हैं, इसलिए आप बस उनका उपयोग कर सकते हैं।

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

इसके बाद, दो एलईडी स्ट्रिप्स को मास्क के ऊपर एक साथ रखें। सुनिश्चित करें कि एलईडी नीचे की ओर हैं और सुनिश्चित करें कि प्रत्येक एलईडी लाइनें मास्क में संबंधित छेद के साथ हैं। एलईडी स्ट्रिप्स को जगह में रखने के लिए कुछ गर्म गोंद या टेप जोड़ें। अंत में, plexiglass के पिछले टुकड़े पर पेंच।

एक परीक्षण पैटर्न चलाएँ। अच्छी नौकरी! आपने सबसे कठिन काम किया है!

चरण 6: नियंत्रण कक्ष

कंट्रोल पैनल
कंट्रोल पैनल
कंट्रोल पैनल
कंट्रोल पैनल
कंट्रोल पैनल
कंट्रोल पैनल
कंट्रोल पैनल
कंट्रोल पैनल

नियंत्रण कक्ष वह हिस्सा है जो सबसे रचनात्मक स्वतंत्रता प्रदान करता है। इसे एलईडी बार के साथ-साथ सभी नियंत्रण और इलेक्ट्रॉनिक्स को पकड़ने की जरूरत है। सबसे सरल डिजाइन एक आयताकार बोर्ड है: बटन और नियंत्रण के लिए छेद ड्रिल करें, और एलईडी बार संलग्न करें। मुझे एक प्रकार का स्टीमपंक / रेट्रो-मॉडर्न लुक देने के लिए लकड़ी, plexiglass और अन्य सामग्रियों को मिलाना पसंद है। इस मामले में, मैंने मुख्य एल्गोरिथम पसंद बटन को पकड़ने के लिए भारी शुल्क वाले plexiglass का एक टुकड़ा काट दिया, और बाकी इलेक्ट्रॉनिक्स को पकड़ने के लिए एक लकड़ी की पट्टी। मैंने आर्केड बटनों के आकार से मेल खाने के लिए छेद ड्रिल किए। वायरिंग पीठ पर दिखाई देती है, लेकिन मुझे यह पसंद है!

मैंने 7-सेगमेंट डिस्प्ले, रोटरी एनकोडर और पीछे की कुछ वायरिंग के लिए जगह भी ड्रिल की। मैंने एलईडी बार को पकड़ने के लिए ऊपर से एक डेडो को काटा।

चरण 7: बटन हार्नेस

बटन हार्नेस
बटन हार्नेस
बटन हार्नेस
बटन हार्नेस
बटन हार्नेस
बटन हार्नेस

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

केबल के दूसरे छोर पर JST कनेक्टर (छोटी सफेद चीज़) है। इन कनेक्टरों के बारे में जो अच्छा है वह यह है कि वे केवल एक तरह से ग्रहण में जाते हैं, इसलिए गलती से वीसीसी और जमीन को उलटने का कोई तरीका नहीं है।

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

चरण 8: रोटरी एनकोडर

रोटरी कोडित्र
रोटरी कोडित्र

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

एक पोटेंशियोमीटर के विपरीत, एक रोटरी एन्कोडर के बारे में मुझे जो पसंद है, वह यह है कि यह माइक्रोकंट्रोलर को केवल रोटेशन (घड़ी की दिशा में बनाम काउंटर-क्लॉकवाइज) का संकेत देता है, इसलिए यह बदलना आसान है कि मूल्य की व्याख्या कैसे की जाती है। उदाहरण के लिए, जब उपयोगकर्ता इसे तेजी से घुमा रहा हो, तो आप इसे त्वरण (माउस की तरह) की भावना दे सकते हैं।

चरण 9: 7-खंड प्रदर्शन

7-खंड प्रदर्शन
7-खंड प्रदर्शन

यहां कहने के लिए बहुत कुछ नहीं है। ये चीजें हर जगह हैं। एल ई डी को TM1637 नामक एक चिप द्वारा नियंत्रित किया जाता है, जो एक साधारण सीरियल प्रोटोकॉल के माध्यम से माइक्रोकंट्रोलर के साथ संचार करता है। मैं एक मौजूदा पुस्तकालय का उपयोग करता हूं जो मुझे यह बताता है कि मैं कौन सा नंबर दिखाना चाहता हूं, और यह बाकी काम करता है।

बैक में चार पिन हैं: वीसीसी, ग्राउंड, और सीरियल प्रोटोकॉल के लिए दो तार। मैंने हेडर के 4-पिन टुकड़े को मिलाया, जो माइक्रोकंट्रोलर से जुड़े एक संबंधित ड्यूपॉन्ट कनेक्टर से जुड़ता है।

चरण 10: मुख्य नियंत्रक बोर्ड

मुख्य नियंत्रक बोर्ड
मुख्य नियंत्रक बोर्ड
मुख्य नियंत्रक बोर्ड
मुख्य नियंत्रक बोर्ड
मुख्य नियंत्रक बोर्ड
मुख्य नियंत्रक बोर्ड

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

नोट: हो सकता है कि आप मुख्य बोर्ड को वायर करना शुरू करने से पहले कोड (https://github.com/samguyer/AlgorithmMachine) देखना चाहें, ताकि आपका पिन कॉन्फ़िगरेशन मेरा मिलान कर सके।

मैंने बिजली के लिए बोर्ड पर एक बैरल जैक मिलाया, और दो बीफ़ तांबे के तारों को बोर्ड की शक्ति और जमीन की रेल से जोड़ा। इसका कारण यह है कि यदि ब्राइटनेस अधिक सेट की जाती है तो एलईडी बार बहुत अधिक शक्ति खींच सकता है, और मैं माइक्रोकंट्रोलर पर यूएसबी कनेक्टर के माध्यम से उस सारी शक्ति को नहीं खींचना चाहता।

बटन वायरिंग को सरल बनाने के लिए मैंने माइक्रोकंट्रोलर (बोर्ड के ऊपरी हिस्से में दिखाया गया है) के पूरे हिस्से में पुरुष-से-महिला समकोण हेडर की एक पट्टी को मिलाया। बटन हार्नेस से ड्यूपॉन्ट कनेक्टर सीधे इस हेडर में प्लग करते हैं।

महत्वपूर्ण: बटनों की शक्ति (लाल तार) को माइक्रोकंट्रोलर पर 3.3V पावर लाइन से जोड़ा जाना चाहिए। ESP32 एक 3.3V चिप है, इसलिए केवल 3.3V स्रोतों को कभी भी डेटा पिन से जोड़ा जाना चाहिए।

माइक्रोकंट्रोलर 5V USB पिन और ग्राउंड के माध्यम से रेल (बोर्ड के निचले हिस्से में दिखाया गया है) को पावर (या पुश पावर) खींचता है। अन्य सभी लाल/काले तार वीसीसी और जमीन हैं।

दो नीले तार एलईडी स्ट्रिप्स (WS2812s) के लिए डेटा लाइनें हैं।पीली/हरी जोड़ी रोटरी एनकोडर के लिए डेटा लाइनें हैं, और पीली जोड़ी 7-सेगमेंट डिस्प्ले का सीरियल कनेक्शन है।

चरण 11: विधानसभा

सभा
सभा
सभा
सभा
सभा
सभा
सभा
सभा

तस्वीरों की यह श्रृंखला अंतिम असेंबली और वायरिंग दिखाती है। मैंने मुख्य नियंत्रक बोर्ड को शीर्ष पर पीछे से भी जोड़ा।

इसे चालू करने से पहले मैंने किसी भी अप्रिय आश्चर्य से बचने के लिए कुछ जाँचें कीं। विशेष रूप से, यह सुनिश्चित करने के लिए कि मेरे पास कोई पावर/ग्राउंड कनेक्टर पीछे की ओर नहीं है, और कोई शॉर्ट सर्किट नहीं है। निरंतरता के परीक्षण के लिए अपना मल्टीमीटर सेट करें -- यह तब बीप करेगा जब दो लीडों के बीच विद्युत पथ होगा। बटनों के लिए सामान्य वीसीसी लाइन में एक लीड संलग्न करें। फिर हार्नेस के प्रत्येक पिन को एक-एक करके दूसरी लीड संलग्न करें। जब आप बटन दबाते हैं तो मल्टीमीटर केवल बीप करना चाहिए। यदि आप कोई अन्य बीप प्राप्त करते हैं तो इसका मतलब है कि आपके पास उलटा या छोटा है। इसे ट्रैक करें और बिजली चालू करने से पहले इसे ठीक करें!

चरण 12: कोड

सबसे पहले, अपना Arduino IDE खोलें और सुनिश्चित करें कि आपके पास FastLED लाइब्रेरी स्थापित है।

GitHub से एल्गोरिथम मशीन कोड डाउनलोड करें:

github.com/samguyer/AlgorithmMachine.git

आप या तो इसे सीधे अपने Arduino फ़ोल्डर में क्लोन कर सकते हैं, या इसे हाथ से कॉपी कर सकते हैं।

इसे अपलोड करने से पहले, सुनिश्चित करें कि पिन सेटिंग्स आपके हार्डवेयर कॉन्फ़िगरेशन से मेल खाती हैं। मैंने सभी पिन सेटिंग्स को फ़ाइल के शीर्ष पर रखा है।

अपलोड करें और आनंद लें!

चरण 13: कैसे उपयोग करें

एल्गोरिथम मशीन का उपयोग करना आसान है और बटनों का लगभग कोई भी संयोजन ठीक है!

सबसे पहले, सरणी में मानों को प्रारंभ करने के लिए डेटा बटन का उपयोग करें। तीन विकल्प हैं: (१) यादृच्छिक बनाना, (२) एक यादृच्छिक मान जोड़ना, और (३) सरणी को उलट देना। ध्यान दें कि मान स्थिर हैं, इसलिए आप पहले उन्हें सॉर्ट करने जैसे काम कर सकते हैं, फिर कुछ शोर जोड़ सकते हैं, फिर एक अलग सॉर्टिंग या खोज एल्गोरिदम चला सकते हैं।

अन्य बटन विकल्पों में से एक खोज या छँटाई एल्गोरिथ्म चुनें। वर्तमान में, जब आप यह चुनाव करते हैं तो कोई प्रतिक्रिया नहीं होती है (भविष्य के काम के लिए कुछ)। फिर "प्ले" बटन दबाएं।

घुंडी गति को नियंत्रित करती है। आप एल्गोरिथम को रोकने और रोकने के लिए "प्ले" को भी हिट कर सकते हैं।

यह हो जाने पर यह अपने आप बंद हो जाएगा। आप किसी अन्य एल्गोरिथम बटन को किसी भी समय हिट कर सकते हैं। मशीन वर्तमान एल्गोरिथम को रोक देगी और नए एल्गोरिथम को इनिशियलाइज़ करेगी, लेकिन डेटा को ठीक उसी तरह रखें जैसा कि पिछले एल्गोरिथम ने छोड़ा था।

स्टेम प्रतियोगिता
स्टेम प्रतियोगिता
स्टेम प्रतियोगिता
स्टेम प्रतियोगिता

एसटीईएम प्रतियोगिता में भव्य पुरस्कार

सिफारिश की: