विषयसूची:

लेगो मिनी मेमोरी गेम: 5 कदम (चित्रों के साथ)
लेगो मिनी मेमोरी गेम: 5 कदम (चित्रों के साथ)

वीडियो: लेगो मिनी मेमोरी गेम: 5 कदम (चित्रों के साथ)

वीडियो: लेगो मिनी मेमोरी गेम: 5 कदम (चित्रों के साथ)
वीडियो: UNBOXING INSTANT PHOTO CAMERA | 5 सेकंड में फोटो खींचो और निकालो | 2024, जुलाई
Anonim
Image
Image
लेगो मिनी मेमोरी गेम
लेगो मिनी मेमोरी गेम

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

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

"अगर यह टूटा नहीं था, तो उसने इसे तब तक ठीक कर दिया जब तक कि" मेरा एपिटाफ होगा, सबसे अच्छा, इसलिए जब मिनी क्रिसमस के लिए घर लौटा, तो यह लेगो मिनी 2.0 का समय था। आखिरकार, अगर टेस्ला अपनी कारों में सॉफ्टवेयर अपडेट को आगे बढ़ा सकती है, तो यह कितना मुश्किल हो सकता है?

मेरे पास कुछ विचार थे:

  • बल्कि क्लंकी यूजर इंटरफेस में सुधार करें
  • एक सींग जोड़ें!
  • "ऑटो लाइट्स" सुविधा में सुधार करें; और, सबसे महत्वपूर्ण
  • एक गेम फंक्शन जोड़ें (यहां तक कि मैंने भी माना कि आपके फोन के साथ मिनी की लाइट को चालू और बंद करने की नवीनता जल्द या बाद में कम होने वाली थी)

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

एक साल के फलहीन विचार के बाद, मुझे हैकस्टर पर एक प्रोजेक्ट मिला, जिसमें एक Arduino Uno का उपयोग 1970 के दशक के साइमन नामक एक मेमोरी गेम टॉय का अनुकरण करने के लिए किया जाता है। संक्षेप में, साइमन डिवाइस ने रोशनी का एक क्रम चलाया जिसे खिलाड़ी को तब याद रखना था और बटन दबाकर वापस खेलना था। हर सफल दौर के बाद क्रम की लंबाई बढ़ाई गई।

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

लेकिन पहले, मुझे हार्डवेयर में कुछ मामूली संशोधन करने की आवश्यकता थी।

चरण 1: अवयव, उपकरण और संसाधन

अवयव, उपकरण और संसाधन
अवयव, उपकरण और संसाधन

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

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

इसी तरह, मूल परियोजना के लिए सूचीबद्ध उपकरणों से अधिक किसी अतिरिक्त उपकरण या संसाधनों की आवश्यकता नहीं है।

यदि आप उन मुट्ठी भर लोगों में से हैं जो मूल परियोजना विवरण पढ़ते हैं, तो आपको पता चलेगा कि लेगो मिनी मूल रूप से मेरी बड़ी हो चुकी बेटी को उपहार के रूप में खरीदी गई थी, जिसके पास लगभग समान "असली" मिनी है, या लगभग समान है यह दिया जा सकता है कि यह एक नया मिनी है, न कि "क्लासिक"। किसी भी सार्थक अतिरिक्त घटकों की कमी ने इस नई परियोजना को और अधिक आकर्षक बना दिया क्योंकि यह मुझे लेगो मिनी 2.0 को नए क्रिसमस उपहार के रूप में प्रभावी ढंग से फिर से उपहार देने में सक्षम बनाता है, बिना एक पैसा खर्च किए। प्रतिभावान!

चरण 2: हार्डवेयर संशोधन

हार्डवेयर संशोधन
हार्डवेयर संशोधन

मूल परियोजना में व्यक्तिगत रूप से नियंत्रित आरजीबी आंतरिक एल ई डी थे। ये NodeMCU पर तीन पिन की खपत करते हैं, जिसे मैं विकास बोर्ड के रूप में उपयोग कर रहा था। लेगो मिनी के मालिक के साथ असतत परामर्श के बाद, यह निर्धारित किया गया था कि आरजीबी एलईडी एक अप्रयुक्त विशेषता थी। यह महत्वपूर्ण बुद्धिमत्ता थी क्योंकि मुझे बजर/सींग के लिए एक पिन खाली करने की आवश्यकता थी।

उपरोक्त सर्किट आरेख मूल परियोजना से है। इस परियोजना के लिए आवश्यक एकमात्र परिवर्तन आरजीबी एलईडी को हटाना और तीन मुक्त-अप पिनों का उपयोग निम्नानुसार करना था:

  • बजर नियंत्रण संकेत के लिए D1 (जिसे सीधे 5VDC बिजली आपूर्ति के लिए भी तार दिया जाता है)
  • एक सफेद इंटीरियर एलईडी के लिए D7
  • उन चमकती रंगीन एल ई डी में से एक के लिए डी 8, जिसे मैंने "डिस्को" लाइट करार दिया है

बजर अपने आप में इंजन के डिब्बे के नीचे बड़े करीने से टिक जाता है इसलिए तारों को NodeMCU में वापस चलाना एक स्नैप था।

चरण 3: GUI को अपडेट करना

जीयूआई अपडेट कर रहा है
जीयूआई अपडेट कर रहा है
जीयूआई अपडेट कर रहा है
जीयूआई अपडेट कर रहा है
जीयूआई अपडेट कर रहा है
जीयूआई अपडेट कर रहा है

GUI को अपडेट करने का पहला चरण चार अलग-अलग वेब पेज बनाना था:

  • एक "स्प्लैश स्क्रीन" जो आपके स्मार्टफ़ोन पर एक कस्टम आइकन के माध्यम से लॉन्च होती है और अन्य पृष्ठों से लिंक होती है
  • "नियंत्रण" पृष्ठ, जो, ठीक है, रोशनी को नियंत्रित करता है (और अब, निश्चित रूप से, हॉर्न)
  • "गेम" पेज
  • एक सेट-अप पृष्ठ जिसमें कॉन्फ़िगरेशन विकल्प होते हैं जैसे:

    • ध्वनि को चालू और बंद करना
    • समय क्षेत्र निर्धारित करना (मिनी को इंटरनेट से समय मिलता है ताकि वह उचित समय के साथ घंटे पर अपनी रोशनी फ्लैश कर सके)
    • जब "ऑटो लाइट्स" परिवेशी प्रकाश स्तर के आधार पर हेडलाइट्स को चालू और बंद कर देगी तब एडजस्ट करना
    • उच्च स्कोर और उच्च स्कोरर नाम को रीसेट करना (EEPROM में संग्रहीत)

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

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

चरण 4: गेम कोड

गेम कोड
गेम कोड

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

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

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

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

उच्च स्कोर EEPROM (या ESP8266 दुनिया में EEPROM के लिए क्या गुजरता है) में संग्रहीत किया जाता है और यदि कोई खिलाड़ी एक नया उच्च स्कोर हिट करता है तो एक पॉप-अप बॉक्स उन्हें अपनी पसंद का नाम दर्ज करने की अनुमति देता है, जो EEPROM में भी संग्रहीत होता है। इन मानों को सेट-अप पृष्ठ के माध्यम से रीसेट किया जा सकता है (मुझे यकीन है कि इसके वैध कारण हो सकते हैं)।

उस सब के साथ, मैंने हैकस्टर गेम कोड के एक अच्छे हिस्से का फिर से उपयोग किया, जिसने चीजों को बहुत तेज कर दिया।

चरण 5: शेष कोड

बाकी कोड
बाकी कोड

Hackster प्रोजेक्ट कोड की तुलना में, मेरा Arduino स्केच बहुत बड़ा दिखता है, यहां तक कि डेटा फ़ाइलों में सभी HTML, CSS और Javascript के बिना भी। लेकिन स्केच का बड़ा हिस्सा बुनियादी संचालन से संबंधित कार्यों का एक समूह है जैसे कि सर्वर बनाना और प्रबंधित करना, एनटीपी समय प्राप्त करना, एमडीएनएस, ओवर-द-एयर अपडेट प्रदान करना, वाईफाई प्रबंधन, एसपीआईएफएफएस फ़ाइल प्रबंधन और इसी तरह।

एचटीएमएल फाइलों में जावास्क्रिप्ट मुख्य रूप से वेबसोकेट संदेशों (प्राप्त और भेजे गए) को संभालने और जीयूआई की अंतःक्रियाशीलता को बढ़ाने के लिए है।

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

ओह, लगभग भूल गया। कोड यहाँ GitHub पर है। डाउनलोड करने के बाद, पूरे पैकेज को एक नए फ़ोल्डर में रखें, Arduino स्केच अपलोड करें, फिर डेटा फ़ोल्डर की सामग्री को SPIFFS में अपलोड करें।

सिफारिश की: