विषयसूची:

एक माइक्रो प्रोग्रामिंग: बिट रोबोट और जॉयस्टिक: माइक्रोपायथन के साथ बिट नियंत्रक: 11 कदम
एक माइक्रो प्रोग्रामिंग: बिट रोबोट और जॉयस्टिक: माइक्रोपायथन के साथ बिट नियंत्रक: 11 कदम

वीडियो: एक माइक्रो प्रोग्रामिंग: बिट रोबोट और जॉयस्टिक: माइक्रोपायथन के साथ बिट नियंत्रक: 11 कदम

वीडियो: एक माइक्रो प्रोग्रामिंग: बिट रोबोट और जॉयस्टिक: माइक्रोपायथन के साथ बिट नियंत्रक: 11 कदम
वीडियो: Scratch, micro:bit - Interactive Story with Sensors 2024, जुलाई
Anonim
एक माइक्रो प्रोग्रामिंग: बिट रोबोट और जॉयस्टिक: माइक्रोपायथन के साथ बिट नियंत्रक
एक माइक्रो प्रोग्रामिंग: बिट रोबोट और जॉयस्टिक: माइक्रोपायथन के साथ बिट नियंत्रक

रोबोकैम्प 2019 के लिए, हमारे ग्रीष्मकालीन रोबोटिक्स शिविर, 10-13 आयु वर्ग के युवा सोल्डरिंग, प्रोग्रामिंग और बीबीसी माइक्रो: बिट आधारित 'एंटीवेट रोबोट' का निर्माण कर रहे हैं, साथ ही रिमोट कंट्रोल के रूप में उपयोग करने के लिए माइक्रो: बिट की प्रोग्रामिंग कर रहे हैं।

यदि आप वर्तमान में रोबोकैंप में हैं, तो चरण 3 पर जाएं, क्योंकि हमने समूह के रूप में पहले दो चरण किए हैं

जॉयस्टिक: बिट कंट्रोलर के साथ संचार करने वाला माइक्रो: बिट रोबोट प्राप्त करने के लिए यह एक चरण-दर-चरण मार्गदर्शिका है।

यह सब कुछ काम करने के लिए सबसे तेज़ रास्ता नहीं लेता है, लेकिन चीजों को छोटे-छोटे हिस्सों में आज़माता है ताकि आप कोड का परीक्षण कर सकें जैसे आप जा रहे हैं, उस पर अपनी मुहर लगाएं, और समझें कि हम वह काम क्यों कर रहे हैं जो हम कर रहे हैं !

इस गतिविधि के लिए, हम अपने स्वयं के कस्टम रोबोट का उपयोग कर रहे हैं, लेकिन यह समान मोटर चालक का उपयोग करने वाले किसी भी रोबोट के साथ काम करेगा, जैसे कि L9110s।

हमारे रोबोट के लिए डिज़ाइन फ़ाइलें यहां पाई जा सकती हैं:

यह मार्गदर्शिका शुरुआती लोगों के लिए लिखी गई है, लेकिन यदि आपने पहले कभी माइक्रोपायथन के साथ माइक्रो: बिट का उपयोग नहीं किया है, तो हम अनुशंसा करते हैं कि आप पहले एक सरल प्रोग्राम आज़माएं, जैसे कि हमारा नाम बैज इंस्ट्रक्शनल: https://www.instructables.com/id/Felt -माइक्रोबिट-नाम…

आपूर्ति

2x बीबीसी माइक्रो: बिट

बीबीसी माइक्रो: बिट के साथ काम करने वाला रोबोट (ऊपर स्पष्टीकरण देखें)

जॉयस्टिक: बिट कंट्रोलर (हमें कूल कंपोनेंट्स से मिला)

चरण 1: रोबोट सेट-अप

अपने माइक्रो: बिट के लिए माइक्रोपायथन कोड लिखने के लिए आपके पास कुछ विकल्प हैं:

  • म्यू, जिसे आप यहां से डाउनलोड और इंस्टॉल कर सकते हैं:
  • ऑनलाइन संपादक, जिसे आप यहां देख सकते हैं:

ये निर्देश मानते हैं कि आप म्यू का उपयोग कर रहे हैं।

म्यू खोलें, और अपने माइक्रो: बिट को अपने कंप्यूटर में प्लग करें। म्यू को यह पहचानना चाहिए कि आप माइक्रो: बिट का उपयोग कर रहे हैं और माइक्रो: बिट 'मोड' का चयन करें, लेकिन अगर ऐसा नहीं होता है, तो इसे मैन्युअल रूप से बदलें।

मोड चुनें
मोड चुनें

रोबोट मोटर परीक्षण कोड की एक प्रति यहाँ से प्राप्त करें:

यदि आप जीथब के अभ्यस्त नहीं हैं, तो यह अनपेक्षित हो सकता है! इस कोड को प्राप्त करने के दो आसान तरीके हैं:

  1. रॉ फाइल को अपने कंप्यूटर में सेव करें, फिर उसे म्यू में लोड करें:
  2. दिए गए सभी कोड को म्यू में एक नई फ़ाइल में कॉपी और पेस्ट करें।
कच्ची फ़ाइल सहेजें
कच्ची फ़ाइल सहेजें

अब अपना नया कोड माइक्रो: बिट पर भेजने के लिए, म्यू के टूलबार से 'फ्लैश' बटन पर क्लिक करें।

यह तब तक काम नहीं करेगा जब तक कि माइक्रो: बिट प्लग इन न हो जाए

माइक्रो: बिट के पीछे पीली रोशनी चमकने लगेगी। जब यह समाप्त हो गया है, तो आपका कोड स्थानांतरित कर दिया गया है।

मोटर दिशाओं की स्थापना-अप

जब आप माइक्रो: बिट पर 'ए' बटन दबाते हैं तो यह प्रोग्राम मोटर्स को अलग-अलग दिशाओं में चालू कर देगा।

आप जो करना चाहते हैं वह है:

  • जब 'ए' प्रदर्शित होता है, बाएं मोटर आगे की ओर
  • जब 'बी' प्रदर्शित होता है, बाएं मोटर पीछे की ओर
  • जब 'सी' प्रदर्शित होता है, दायां मोटर आगे की ओर
  • जब 'D' प्रदर्शित होता है, तो दायां मोटर पीछे की ओर होता है

यह शायद ऐसा नहीं होगा, क्योंकि यह इस बात पर निर्भर करता है कि आपने अपने रोबोट को कैसे तार-तार किया है!

कोड के शीर्ष पर, आपको चर की एक सूची मिलेगी, जो यह निर्धारित करती है कि माइक्रो पर कौन सा पिन: बिट किस मोटर दिशा को नियंत्रित करता है।

यदि आप हमारे किसी रोबोट (फाइल) का उपयोग कर रहे हैं, तो रोबोट को सही दिशा में ले जाने के लिए चर नामों को चारों ओर स्वैप करें:

स्वैप पिन चर
स्वैप पिन चर

यदि आप अपने स्वयं के रोबोट का उपयोग कर रहे हैं, तो कोड संपादित करने से पहले जांच लें कि मोटर चालक किस पिन से जुड़ा है।

ड्राइव का परीक्षण

अब जांचें कि आपका रोबोट मुख्य लूप में परीक्षण कोड को अपने स्वयं के कुछ कोड से बदलकर कैसे ड्राइव करता है।

आप ड्राइव () फ़ंक्शन को कॉल करके रोबोट को ड्राइव करने के लिए कहते हैं। यह दो तर्क लेता है - बाएं मोटर के लिए एक मान और दाएं मोटर्स के लिए एक मान, 0 (बंद) और 1023 (अधिकतम गति) के बीच।

उदाहरण के लिए, ड्राइव (500, 500) को कॉल करके, आप दोनों मोटर्स को आगे की दिशा में, लगभग आधी गति से चालू करने के लिए कह रहे हैं।

यह महसूस करने के लिए कुछ विकल्प आज़माएं कि यह कितनी सीधी ड्राइव करता है और कितनी अच्छी तरह मुड़ता है।

संकेत: मोटर परीक्षण थोड़ी देर के अंदर थे ट्रू लूप, और एक अगर कथन - जब तक आप माइक्रो: बिट पर ए बटन दबाते हैं, तब तक मोटर चालू नहीं होंगे, और यह हमेशा जांच कर रहा है कि आपने ए बटन दबाया है या नहीं।

संकेत: जब तक आप उन्हें नहीं बताएंगे, तब तक मोटरें बंद नहीं होंगी! वे हमेशा अपना अंतिम निर्देश करते रहेंगे।

वैकल्पिक: एक सीधी रेखा में ड्राइविंग में सुधार करना

यदि आपका रोबोट एक सीधी रेखा में ड्राइव नहीं करेगा, तो हो सकता है कि आपका एक मोटर दूसरे की तुलना में तेजी से घूम रहा हो।

यह जाँचने के बाद कि पहिया को स्वतंत्र रूप से घूमने से भौतिक रूप से कोई रोक नहीं रहा है, आप तेज मोटर की गति को कम करने के लिए ड्राइव फ़ंक्शन में कोड को संपादित कर सकते हैं।

ड्राइव फ़ंक्शन की परिभाषा खोजने के लिए ऊपर स्क्रॉल करें, और शीर्ष दो निर्देशों को देखें:

डीईएफ़ ड्राइव (एल, आर):

# मोटर गति विसंगति एल = int(L*1) R = int(R*1) को ठीक करने के लिए समायोजन नीचे दिया गया है

ये दो पंक्तियाँ वर्तमान में L और R का मान लेती हैं, उन्हें 1 से गुणा करें, फिर सुनिश्चित करें कि वे अभी भी पूर्ण संख्याएँ (int) हैं।

उदाहरण के लिए, यदि आपकी बाईं मोटर तेज है, तो इसकी लाइन पर *1 को *0.9 में बदलें, और देखें कि क्या इससे चीजें बेहतर होती हैं।

आप इसे सही नहीं बना पाएंगे, लेकिन आप तब तक एडजस्ट करते रह सकते हैं जब तक कि यह स्ट्राइटर न हो जाए।

रेडियो की स्थापना

अब अपने कोड के शीर्ष पर निम्नलिखित पंक्तियों को जोड़कर रेडियो सेट करें:

आयात रेडियो

Radio.config (चैनल = 7, समूह = 0, कतार = 1) Radio.on ()

यह आपके रोबोट को किसी अन्य माइक्रो:बिट से निर्देश प्राप्त करने की अनुमति देगा, लेकिन फिलहाल यह किसी अन्य माइक्रो:बिट से निर्देश प्राप्त करेगा।

ऐसा इसलिए है क्योंकि चैनल 7 और समूह 0 डिफ़ॉल्ट चैनल हैं।

0-82 और 0-255 के बीच के समूह को चुनकर, इन नंबरों को बदलें। अब आपका माइक्रो: बिट केवल उसी कॉन्फ़िगरेशन जानकारी वाले अन्य लोगों से निर्देश प्राप्त करेगा।

कतार = 1 का अर्थ है कि माइक्रो: बिट एक समय में केवल एक आने वाला संदेश रखेगा - यह डिफ़ॉल्ट की तुलना में थोड़ा तेज प्रतिक्रिया समय देता है, जो कि 3 है।

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

निम्नलिखित कोड को एक परीक्षण के रूप में आज़माएं (यह तब तक कुछ नहीं करेगा जब तक आप चरण 2 में जॉयस्टिक सेट नहीं कर लेते):

जबकि सच:

संदेश = रेडियो। प्राप्त करें () यदि संदेश == 'आगे': ड्राइव (500, 500)

चरण 2: जॉयस्टिक सेट-अप

अपने रोबोट के माइक्रो: बिट को अनप्लग करें, और इसके बजाय अपने जॉयस्टिक के माइक्रो: बिट में प्लग करें।

जॉयस्टिक सेट अप कोड की एक प्रति यहां से प्राप्त करें:

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

कार्यक्रम के अंत में, अपना मुख्य लूप शुरू करें:

जबकि सच:

अगर बटन_ए.वास_प्रेस्ड (): रेडियो.सेंड ('फॉरवर्ड')

यह कोड अभी तक जॉयस्टिक: बिट का उपयोग नहीं करता है। यह संदेश भेजने के लिए माइक्रो: बिट पर बटन ए का उपयोग करता है।

सुनिश्चित करें कि आपके रोबोट और आपके नियंत्रक माइक्रो:बिट्स दोनों में पावर है, फिर अपना संदेश भेजने के लिए बटन दबाएं।

यदि संदेश सफलतापूर्वक प्राप्त हो जाता है, और आपका रोबोट चलता है… बहुत अच्छा! आप सेट-अप निर्देशों के साथ समाप्त कर चुके हैं।

समस्या निवारण युक्तियों

यदि आपको अपने नियंत्रक माइक्रो: बिट… पर एक त्रुटि संदेश मिलता है, तो अपना नियंत्रक कोड डीबग करें

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

अगर कुछ नहीं होता

  • सुनिश्चित करें कि आपने प्रत्येक माइक्रो पर सही कोड फ्लैश किया है: बिट - गलती से गलत को फ्लैश करना आसान है!
  • सुनिश्चित करें कि आपका चैनल और समूह संख्या प्रत्येक माइक्रो: बिट. पर मेल खाते हैं

चरण 3: जॉयस्टिक मूल्यों की जाँच करना

अगले कुछ चरण सभी नियंत्रक कोड का उपयोग कर रहे हैं।

इससे पहले कि आप अपने नियंत्रक पर जॉयस्टिक का उपयोग कर सकें, आपको यह जानना होगा कि जब आप स्टिक को धक्का देते हैं तो आपको किस प्रकार के मूल्य मिलते हैं।

अपने मुख्य लूप को निम्न कोड से बदलें:

जबकि सच:

जॉयस्टिक = जॉयस्टिक_पुश () प्रिंट (जॉयस्टिक) नींद (500)

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

आरईपीएल खोलें
आरईपीएल खोलें

यह तब तक काम नहीं करेगा जब तक कि माइक्रो: बिट प्लग इन न हो जाए

आरईपीएल ओपन होने के साथ, अपने माइक्रो: बिट के पीछे रीसेट बटन दबाएं।

छवि
छवि

आपको कुछ मानों को अपनी स्क्रीन पर 'मुद्रित' लाते हुए देखना चाहिए:

टर्मिनल में मान
टर्मिनल में मान

जॉयस्टिक की छड़ी को धक्का दें और देखें कि संख्याओं का क्या होता है।

जॉयस्टिक के केंद्र की स्थिति में होने पर दिए गए मानों को नोट करें - मेरे मामले में (518, 523)।

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

चरण 4: X और Y चर को समायोजित करना

आप जॉयस्टिक फ़ंक्शन द्वारा दिए गए मानों को बदलना चाहते हैं, ताकि:

  • केंद्र में यह शून्य है
  • ऊपर सकारात्मक है
  • नीचे नकारात्मक है।

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

अंतिम चरण में आपको मिले नंबरों को देखें। पहली संख्या x है, और दूसरी संख्या y है।

जॉयस्टिक_पुश () परिभाषा को संपादित करें जो पहले से ही प्रोग्राम में है, अपने मूल्यों को मूल से घटाकर:

डीईएफ़ जॉयस्टिक_पुश ():

x = pin0.read_analog() - 518 y = pin1.read_analog() - 523 रिटर्न x, y

अपने स्वयं के नंबरों का प्रयोग करें, वे मेरे से भिन्न हो सकते हैं

अपना नया कोड फ्लैश करें, आरईपीएल खोलें, माइक्रो: बिट का रीसेट बटन दबाएं और अपने मूल्यों की जांच करें।

क्या आप (0, 0) प्राप्त कर रहे हैं?

चरण 5: बाएँ और दाएँ मोटर्स के लिए X और Y को मानों में बदलना

फिलहाल, यह जॉयस्टिक रोबोट को चलाने के लिए बहुत उपयोगी नहीं होगा। सभी तरह से आगे बढ़ाया, आपको एक मान मिलेगा जैसे (0, 500)।

यदि आपने रोबोट को ये नंबर दिए हैं, तो यह दाएं मोटर को चालू करेगा लेकिन बाएं को नहीं, जो कि आप नहीं करना चाहते हैं!

यह आरेख दिखाता है कि जब आप जॉयस्टिक को घुमाते हैं तो x और y मानों का क्या होता है, और जब आप जॉयस्टिक को हिलाते हैं तो हम चाहते हैं कि रोबोट क्या करे।

आरेख
आरेख

आपको कुछ और उपयोगी देने के लिए, आपको x और y मानों को मिलाने के लिए कुछ गणित का उपयोग करने की आवश्यकता है।

एन

गणित

आइए जॉयस्टिक को आगे की ओर धकेल कर प्रारंभ करें।

आपके द्वारा प्राप्त किए जा सकने वाले मानों का एक उदाहरण है:

एक्स = 0

वाई = 500

रोबोट के लिए उपयोगी होने के लिए, आप इस तरह के मान प्राप्त करना चाहते हैं:

बाएं = 500

सही = 500

आइए x और y को अलग-अलग तरीकों से जोड़कर देखें कि हमें कौन-सी संख्याएँ मिलती हैं:

एक्स + वाई = 0 + 500 = 500

x - y = 0 - 500 = -500 y + x = 500 + 0 = 500 y - x = 500 - 0 = 500

अब देखते हैं कि क्या होता है यदि हम जॉयस्टिक को दाईं ओर धकेलते हैं।

आपके द्वारा प्राप्त किए जा सकने वाले मानों का एक उदाहरण है:

एक्स = 500

वाई = 0

रोबोट को दाएँ मुड़ने के लिए, आप चाहते हैं कि बायाँ मोटर आगे बढ़े, और दायाँ मोटर पीछे की ओर चलाए:

बाएं = 500

सही = -500

आइए हमारे सूत्र को फिर से देखें:

एक्स + वाई = 500 + 0 = 500

x - y = 500 - 0 = 500 y + x = 0 + 500 = 500 y - x = 0 - 500 = -500

सूत्र के दो सेटों की तुलना करके पता लगाएं कि कौन सा विकल्प आपको सही बायां मान देगा और कौन सा विकल्प आपको सही सही मान देगा।

अपने स्वयं के जॉयस्टिक से प्राप्त कुछ मूल्यों के साथ इसे आज़माएं, यह सुनिश्चित करने के लिए कि आपके द्वारा चुना गया सूत्र हर समय काम करता है।

एन

जॉयस्टिक समारोह का विस्तार

बाएँ और दाएँ दो नए चर बनाने के लिए जॉयस्टिक फ़ंक्शन का विस्तार और संपादन करें, और x और y के बजाय उन मानों को वापस करने के लिए:

डीईएफ़ जॉयस्टिक_पुश ():

x = pin0.read_analog() - ५१८ y = pin1.read_analog () - ५२३ बाएँ = दाएँ = बाएँ, दाएँ लौटें

अपना नया कोड फ्लैश करें, आरईपीएल खोलें, माइक्रो: बिट का रीसेट बटन दबाएं और अपने मूल्यों की जांच करें।

क्या आपको वे मूल्य मिल रहे हैं जिनकी आप अपेक्षा करते हैं?

यदि आपको कुछ और सहायता की आवश्यकता है, तो हमारे उदाहरण कोड को यहां देखें:

चरण 6: मानों को रेडियो संदेशों के रूप में भेजना

अब आपके पास अपने रोबोट को भेजने के लिए कुछ मूल्य तैयार हैं।

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

जबकि सच:

जॉयस्टिक = जॉयस्टिक_पुश () संदेश = स्ट्र (जॉयस्टिक [0]) + "" + स्ट्र (जॉयस्टिक [1])

यह वास्तव में अभी तक संदेश नहीं भेजेगा!

कोड की इस नई लाइन में क्या हो रहा है?

  • जॉयस्टिक [0] का अर्थ है जॉयस्टिक फ़ंक्शन से निकलने वाली पहली जानकारी (बाएं)
  • जॉयस्टिक[1] अगली सूचना है (दाएं)
  • str() इन दोनों नंबरों को स्ट्रिंग प्रारूप (संख्याओं के बजाय पाठ) में परिवर्तित करता है - रेडियो पर जानकारी भेजने में सक्षम होने के लिए यह आवश्यक है।

आप + का अर्थ जोड़ देखने के आदी होंगे - यह दोनों संख्याओं को एक साथ जोड़ सकता है और स्ट्रिंग्स को जोड़ सकता है, जिसका अर्थ है कि यह जानकारी के दो बिट्स को एक साथ चिपका देगा।

उदाहरण:

150 + 100 = 250

str(150) + str(100) = १५०१००

तो संयोजन आपके बाएं और दाएं मूल्यों को एक साथ रखेगा।

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

अंत में, इस नव निर्मित संदेश को रेडियो पर भेजने के लिए अपने कोड का विस्तार करें:

रेडियो भेजें (संदेश)

नींद(10)

नींद संदेश भेजने को धीमा कर देती है ताकि प्राप्त करने वाला माइक्रो: बिट बहुत अधिक जानकारी के साथ अतिभारित न हो!

इस कोड को अपने नियंत्रक माइक्रो: बिट पर फ्लैश करें और अगले चरण पर जाने से पहले किसी भी त्रुटि को डीबग करें।

चरण 7: अपने रोबोट पर संदेश प्राप्त करना

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

अपने मुख्य लूप तक नीचे स्क्रॉल करें - परीक्षण कोड निकालें और इसके बजाय इसे जोड़ें:

जबकि सच:

संदेश = रेडियो। प्राप्त () प्रिंट (संदेश) नींद (100)

यह आने वाले संदेश के बराबर एक चर सेट करता है, और संदेश को आरईपीएल को प्रिंट करता है - यह जांचने के लिए कि संदेश अपेक्षित रूप से आ रहे हैं।

आरईपीएल से जुड़ा अपना नया कोड फ्लैश करें, फिर जॉयस्टिक को पुश करें।

आपको कुछ इस तरह मिलना चाहिए:

आरईपीएल मान
आरईपीएल मान

समस्या निवारण युक्तियों

यदि आपको अपने नियंत्रक माइक्रो: बिट… पर एक त्रुटि संदेश मिलता है, तो अपना नियंत्रक कोड डीबग करें

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

अगर कुछ नहीं होता

  • सुनिश्चित करें कि आपने प्रत्येक माइक्रो पर सही कोड फ्लैश किया है: बिट - गलती से गलत को फ्लैश करना आसान है!
  • सुनिश्चित करें कि आपका चैनल और समूह संख्या प्रत्येक माइक्रो: बिट. पर मेल खाते हैं

चरण 8: रोबोट के मोटर्स को नियंत्रित करने के लिए आने वाले संदेशों का उपयोग करना

अब आपको दो नंबर रेडियो पर एक स्ट्रिंग के रूप में भेजे जा रहे हैं।

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

ऐसा करने से पहले, आपको यह जांचना होगा कि आपको जो संदेश मिल रहा है वह सही प्रारूप में है।

यदि कोई संदेश नहीं भेजा जा रहा है, तो आपको इसके बजाय 'कोई नहीं' प्राप्त होगा। यदि आप इसे विभाजित करने का प्रयास करते हैं, तो आपको एक त्रुटि संदेश प्राप्त होगा।

जबकि सच:

संदेश = रेडियो। प्राप्त करें () यदि संदेश कोई नहीं है: संदेश = संदेश। विभाजन () ड्राइव (इंट (संदेश [0]), इंट (संदेश [1]))

यहाँ क्या हो रहा है?

  • यदि संदेश 'कोई नहीं' के अलावा कुछ और है तो नया कोड चलेगा।
  • message.split() संदेश में एक स्थान के लिए जाँच करता है (जिसे हमने अंतिम चरण में जोड़ा था), और इसका उपयोग संदेश को दो में विभाजित करने के लिए करता है।
  • int(message[0]), int(message[1]) पिछले चरण में हमने जो किया उसके विपरीत करता है - जानकारी के प्रत्येक टुकड़े को व्यक्तिगत रूप से प्राप्त करता है और इसे एक पूर्णांक (एक पूर्ण संख्या) में परिवर्तित करता है।
  • int(message[0]) का उपयोग ड्राइव फ़ंक्शन में बाईं मोटर के मान के रूप में किया जाता है, और int(message[1]) का उपयोग दाएँ मोटर के मान के रूप में किया जाता है।

जांचें कि यह काम करता है - जब आप जॉयस्टिक को धक्का देते हैं तो क्या मोटरें मुड़ जाती हैं?

यदि नहीं - कुछ डिबगिंग के लिए समय!

यदि हाँ, शानदार! आपके पास एक कार्यशील रिमोट कंट्रोल रोबोट है!

अगले चरण पर जाने से पहले अपने रोबोट के साथ अभ्यास करने में कुछ समय बिताएं। क्या यह आपकी अपेक्षा के अनुरूप ड्राइव करता है?

अगले चरण आपको दिखाएंगे कि अपने रोबोट में अतिरिक्त कार्यक्षमता जोड़ने के लिए जॉयस्टिक के बटनों का उपयोग कैसे करें।

यदि आप इस कोड का अब तक का हमारा संस्करण देखना चाहते हैं:

  • रोबोट:
  • नियंत्रक:

चरण 9: बटनों का उपयोग करना -- अतिरिक्त संदेश प्राप्त करना

फिलहाल, आपका कोड ऐसे किसी भी संदेश को विभाजित करने का प्रयास करेगा जो कोई नहीं है। इसका मतलब है कि अगर यह प्राप्त करता है, उदाहरण के लिए, 'हैलो', तो आपको एक त्रुटि संदेश मिलेगा।

अपने माइक्रो: बिट को अन्य संदेशों की व्याख्या करने की अनुमति देने के लिए, इसे पहले प्रत्येक अपेक्षित संदेश की जांच करनी होगी, फिर संदेश को तभी विभाजित करना होगा जब उसे इसके साथ कुछ और करने के लिए नहीं कहा गया हो।

अपना कोड इस प्रकार विस्तृत करें:

अगर संदेश कोई नहीं है:

अगर संदेश == 'हैलो': डिस्प्ले.शो (इमेज। हैप्पी) एलिफ मैसेज == 'डक': डिस्प्ले.शो (इमेज। डक) और: मैसेज = मैसेज। स्प्लिट () ड्राइव (इंट (मैसेज [0]), इंट (संदेश [1]))

सबसे पहले, यह जांच करेगा कि क्या उसे 'हैलो' संदेश प्राप्त हुआ है। यदि यह है, तो यह एक खुश छवि प्रदर्शित करेगा, फिर लूप के शीर्ष पर वापस जाएं और अगले संदेश की जांच करें।

यदि संदेश हैलो नहीं है, तो यह अगली जांच करेगा कि संदेश 'बतख' है या नहीं।

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

डबल बराबर चिह्न महत्वपूर्ण है - इसका अर्थ है 'बराबर है', एकल बराबर चिह्न की तुलना में, जो कुछ सेट कर रहा है (इसलिए संदेश = 'हैलो' का अर्थ है कि हम चर को 'हैलो' पर सेट कर रहे हैं, संदेश == 'हैलो' इसका मतलब है कि हम पूछ रहे हैं कि क्या संदेश 'हैलो' के बराबर है)।

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

वर्किंग कोड का लिंक:

चरण 10: नियंत्रक के बटनों का उपयोग करके अतिरिक्त संदेश भेजना

अपने रोबोट के माइक्रो: बिट को अनप्लग करें, और इसके बजाय अपने जॉयस्टिक के माइक्रो: बिट में प्लग करें।

संपादित करने के लिए अपने नियंत्रक कोड पर वापस जाएं।

रोबोट कोड के समान, हम चाहते हैं कि जॉयस्टिक मान भेजने से पहले नियंत्रक यह जांच ले कि क्या आप कोई अन्य संदेश भेजने का प्रयास कर रहे हैं।

लूप के शीर्ष पर, हम अभी भी चाहते हैं कि यह जॉयस्टिक के वर्तमान मूल्यों की जाँच करे, लेकिन हम यह भी जाँचना चाहते हैं कि क्या कोई बटन वर्तमान में दबाया जा रहा है:

जबकि सच:

जॉयस्टिक = जॉयस्टिक_पुश () बटन = बटन_प्रेस ()

बटन_प्रेस () एक मान ए, बी, सी, डी, ई या एफ देता है जो इस बात पर निर्भर करता है कि वर्तमान में कौन सा बटन दबाया जा रहा है (यदि कुछ भी नहीं दबाया जा रहा है, तो यह कोई नहीं देता है)।

अब हम एक if-elif-else स्टेटमेंट बना सकते हैं, जैसा कि हमने रोबोट कोड के लिए किया था - दो बटनों का उपयोग करके, और यदि कोई बटन दबाया नहीं जा रहा है तो जॉयस्टिक मान भेज सकते हैं।

अगर बटन == 'ए':

Radio.send('hello') sleep(500) elif button == 'B': Radio.send('duck') sleep(500) और: message = str(joystick[0]) + "" + str(joystick [१] रेडियो। भेजें (संदेश) नींद(१०)

जब एक बटन दबाया जाता है, तो उन संदेशों में से एक भेजें जिन्हें आपने रोबोट को पिछले चरण में देखने के लिए कहा था।

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

संदेश भेजने के बाद की नींद इसे धीमा कर देती है, ताकि यह इतनी जल्दी बटन की दोबारा जांच न करे - आपके लिए सही समय प्राप्त करने के लिए यहां कुछ संख्याएं आज़माएं - बहुत धीरे-धीरे और यह उत्तरदायी भी नहीं होगा जल्दी से और आपके रोबोट को इतने सारे बटन संदेश प्राप्त होंगे कि वह जॉयस्टिक का जवाब देना बंद कर सकता है!

क्या यह काम करता है?

यदि आपको त्रुटि संदेश मिल रहे हैं, तो ध्यान से सोचें कि आपने अभी-अभी क्या बदला है और क्या हो रहा है।

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

वर्किंग कोड का लिंक:

चरण 11: अगले चरण

अब आपके पास अपने रोबोट के मोटरों और अपने जॉयस्टिक: बिट नियंत्रक के साथ काम करने के लिए आवश्यक ज्ञान है।

इस ज्ञान का उपयोग दो कार्यक्रमों को बेहतर बनाने और उन्हें अपना बनाने के लिए करें। नीचे कुछ विचार!

आपके नियंत्रक पर आपके पास छह बटन हैं! आप क्या चाहते हैं कि वे क्या करें?

  • अपने रोबोट को कमांड पर करने के लिए डांस रूटीन की प्रोग्रामिंग कैसे करें? स्लीप () कमांड द्वारा अलग किए गए ड्राइव () कमांड का एक एल्गोरिथ्म लिखें!
  • क्या आप रोबोट की चाल की दिशा बदलना चाहते हैं ताकि वह आसानी से उल्टा ड्राइव कर सके? अपने जॉयस्टिक के x और y मानों के बारे में सोचें। वे किसका प्रतिनिधित्व करते हैं और आप उन्हें कैसे हेरफेर कर सकते हैं?
  • क्या आपके रोबोट में एलईडी, स्पीकर या सेंसर जैसी अतिरिक्त सुविधाएं हैं (या आप जोड़ सकते हैं!)?

कोड में सुधार के लिए विचार

  • क्या आप कोशिश/कोड को छोड़कर अपने रोबोट को अज्ञात संदेशों से निपटने में मदद कर सकते हैं?
  • जॉयस्टिक से बाएँ और दाएँ मानों की गणना करने के लिए उपयोग किए जाने वाले गणित हमें मूल्यों की पूरी श्रृंखला नहीं देते हैं (रोबोट की ड्राइव 1023 तक की संख्या को स्वीकार कर सकती है)। क्या आप बेहतर श्रेणी प्राप्त करने के लिए इस कोड को संपादित कर सकते हैं?
  • जॉयस्टिक मूल्यों को मिलाने के अन्य तरीके हैं - क्या आप इसे करने का एक बेहतर तरीका बता सकते हैं?

सिफारिश की: