विषयसूची:

द बटर रोबोट: अरुडिनो रोबोट विद एक्ज़िस्टेंशियल क्राइसिस: 6 स्टेप्स (चित्रों के साथ)
द बटर रोबोट: अरुडिनो रोबोट विद एक्ज़िस्टेंशियल क्राइसिस: 6 स्टेप्स (चित्रों के साथ)

वीडियो: द बटर रोबोट: अरुडिनो रोबोट विद एक्ज़िस्टेंशियल क्राइसिस: 6 स्टेप्स (चित्रों के साथ)

वीडियो: द बटर रोबोट: अरुडिनो रोबोट विद एक्ज़िस्टेंशियल क्राइसिस: 6 स्टेप्स (चित्रों के साथ)
वीडियो: Vir vs Cemento - Vir : The Robo Boy WITH ENGLISH, SPANISH & FRENCH SUBTITLES 2024, जुलाई
Anonim
Image
Image

यह परियोजना एनिमेटेड श्रृंखला "रिक एंड मोर्टी" पर आधारित है। एक एपिसोड में, रिक एक रोबोट बनाता है जिसका एकमात्र उद्देश्य मक्खन लाना है। ब्रुफेस (ब्रुसेल्स फैकल्टी ऑफ इंजीनियरिंग) के छात्रों के रूप में हमारे पास मेक्ट्रोनिक्स प्रोजेक्ट के लिए एक असाइनमेंट है जो सुझाए गए विषय पर आधारित रोबोट का निर्माण करना है। इस परियोजना के लिए असाइनमेंट है: एक ऐसा रोबोट बनाएं जो केवल मक्खन परोसता हो। इससे अस्तित्व का संकट हो सकता है। बेशक रिक और मोर्टी के एपिसोड में रोबोट काफी जटिल रोबोट है और कुछ सरलीकरण किए जाने की जरूरत है:

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

मक्खन के परिवहन के अलावा, रोबोट को यह जानना होगा कि उसे मक्खन कहाँ लाना है। एपिसोड में, रिक रोबोट को कॉल करने और कमांड करने के लिए अपनी आवाज का उपयोग करता है। इसके लिए एक महंगी आवाज पहचान प्रणाली की आवश्यकता होती है और यह जटिल होगी। इसके बजाय, टेबल पर सभी को एक बटन मिलता है: एक बार जब यह बटन सक्रिय हो जाता है, तो रोबोट इस बटन का पता लगा सकता है और उसकी ओर बढ़ सकता है।

संक्षेप में, रोबोट को निम्नलिखित आवश्यकताओं को पूरा करने की आवश्यकता है:

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

चरण 1: मुख्य अवधारणा

पिछली उल्लिखित आवश्यकताओं को विभिन्न तकनीकों का उपयोग करके पूरा किया जा सकता है। मुख्य डिजाइन के बारे में जो निर्णय लिए गए थे, उन्हें इस चरण में समझाया गया है। इन विचारों को कैसे लागू किया जाता है, इसके बारे में विवरण निम्नलिखित चरणों में पाया जा सकता है।

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

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

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

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

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

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

चरण 2: सामग्री

मशीनी भागों

  • 3डी प्रिंटर और लेजर काटने की मशीन

    • PLA का उपयोग 3D प्रिंटिंग के लिए किया जाएगा लेकिन आप ABS का भी उपयोग कर सकते हैं
    • लेजर काटने के लिए 3 मिमी बर्च प्लाईवुड की एक प्लेट का उपयोग किया जाएगा क्योंकि यह बाद में आसानी से संशोधन करने की संभावना देता है, प्लेक्सीग्लस का भी उपयोग किया जा सकता है लेकिन इसे नष्ट किए बिना लेजर कट होने के बाद इसे संशोधित करना अधिक कठिन होता है
  • बोल्ट, नट, वाशर

    अधिकांश घटकों को M3 बटनहेड बोल्ट, वाशर और नट्स का उपयोग करके एक साथ रखा जाता है, लेकिन उनमें से कुछ को M2 या M4 बोल्ट सेट की आवश्यकता होती है। बोल्ट की लंबाई 8-12 मिमी की सीमा में है।

  • पीसीबी स्पेसर, 25 मिमी और 15 मिमी
  • संगत पहियों के साथ 2 सर्वो मोटर्स
  • लगभग 1-2 मिमी व्यास के कुछ मोटे धातु के तार

इलेक्ट्रॉनिक पुर्ज़े

  • microcontroller

    1 आर्डिनो यूएनओ बोर्ड

  • सर्वो मोटर्स

    • 2 बड़े सर्वो मोटर्स: फीटेक निरंतर 6Kg 360 डिग्री
    • 2 माइक्रो सर्वो मोटर्स: फीटेक FS90
  • सेंसर

    • 1 अल्ट्रासोनिक सेंसर
    • 2 आईआर निकटता सेंसर
    • 2 आईआर फोटोडायोड्स
  • बैटरियों

    • 1 9वी बैटरी धारक + बैटरी
    • 1 4AA बैटरी धारक + बैटरी
    • 1 9वी बैटरी बॉक्स + बैटरी
  • अतिरिक्त घटक

    • कुछ कूदने वाले तार, तार और सोल्डरिंग प्लेट
    • कुछ प्रतिरोधक
    • 1 आईआर एलईडी
    • 3 स्विच
    • १ बजर
    • 1 बटन
    • 1 Arduino से 9V बैटरी कनेक्टर

चरण 3: इलेक्ट्रॉनिक्स का परीक्षण

इलेक्ट्रॉनिक्स का परीक्षण
इलेक्ट्रॉनिक्स का परीक्षण
इलेक्ट्रॉनिक्स का परीक्षण
इलेक्ट्रॉनिक्स का परीक्षण

बटन का निर्माण:

बटन को केवल एक स्विच, एक इन्फ्रारेड एलईडी, और श्रृंखला में एक 220 ओम रोकनेवाला द्वारा बनाया गया है, जो 9वी बैटरी द्वारा संचालित है। इसे एक कॉम्पैक्ट और साफ डिजाइन के लिए 9वी बैटरी पैक में रखा गया है।

इन्फ्रारेड रिसीवर मॉड्यूल का निर्माण:

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

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

  • सतत सर्वो मोटर्स;
  • अतिध्वनि संवेदक;
  • गैर निरंतर सर्वो मोटर्स;
  • बजर;
  • आईआर बटन दिशा का पता लगाना;
  • निकटता सेंसर द्वारा एज डिटेक्शन;

ये कोड शुरुआत में घटकों को समझने में मदद कर सकते हैं, लेकिन यह बाद के चरणों में डिबगिंग के लिए भी बहुत उपयोगी है। यदि कोई निश्चित समस्या होती है, तो सभी घटकों का अलग-अलग परीक्षण करके बग का अधिक आसानी से पता लगाया जा सकता है।

चरण 4: 3डी प्रिंटेड और लेजर कट पीस डिजाइन

3डी प्रिंटेड और लेजर कट पीस डिजाइन
3डी प्रिंटेड और लेजर कट पीस डिजाइन
3डी प्रिंटेड और लेजर कट पीस डिजाइन
3डी प्रिंटेड और लेजर कट पीस डिजाइन
3डी प्रिंटेड और लेजर कट पीस डिजाइन
3डी प्रिंटेड और लेजर कट पीस डिजाइन

लेजर कट टुकड़े

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

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

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

3डी प्रिंटेड टुकड़े

लेजर कटिंग के अलावा, कुछ टुकड़ों को 3D प्रिंट करने की आवश्यकता होगी:

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

    • नीचे वाला जो ऊपर की प्लेट में लगा होगा
    • और शीर्ष जो एक काज द्वारा नीचे से जुड़ा हुआ है, और एक मोटी धातु के तार का उपयोग करके सर्वो द्वारा क्रियान्वित किया गया है। हमने रोबोट को सिर देकर उसमें थोड़ा सा व्यक्तित्व जोड़ने का फैसला किया।

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

सभी सॉलिडवर्क्स-फाइलें ज़िप्ड फोल्डर में मिल सकती हैं।

चरण 5: असेंबली और वायरिंग

Image
Image
असेंबली और वायरिंग
असेंबली और वायरिंग
असेंबली और वायरिंग
असेंबली और वायरिंग
असेंबली और वायरिंग
असेंबली और वायरिंग

असेंबली नीचे से ऊपर तक, तारों और घटकों को एक साथ पेंच करने का मिश्रण होगी।

नीचे की थाली

नीचे की प्लेट को 4AA बैटरी पैक, सर्वो मोटर्स, मुद्रित भाग (प्लेट के नीचे बॉल कॉस्टर संलग्न करना), दो किनारे सेंसर, और 6 पुरुष-महिला स्पेसर के साथ इकट्ठा किया गया है।

मध्य प्लेट

इसके बाद, दो प्लेटों के बीच सर्वो मोटर्स को संपीड़ित करते हुए, मध्य प्लेट को माउंट किया जा सकता है। इसके बाद इस प्लेट को इसके ऊपर स्पेसर्स का एक और सेट लगाकर ठीक किया जा सकता है। कुछ केबलों को केंद्र छेद के माध्यम से पारित किया जा सकता है।

अल्ट्रासोनिक मॉड्यूल को एक गैर-निरंतर सर्वो से जोड़ा जा सकता है, जो कि Arduino, 9V बैटरी पैक (arduino को शक्ति देने), और रोबोट के सामने दो अवरक्त रिसीवर मॉड्यूल के साथ मध्य प्लेट पर तय किया गया है। ये मॉड्यूल होल सोल्डरिंग बोर्ड के माध्यम से बनाए जाते हैं और प्लेट में स्क्रू के साथ जुड़े होते हैं। इन मॉड्यूल के सर्किट को सामान्य योजनाबद्ध में दर्शाया गया है।

ऊपर की प्लेट

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

जब यह सब हासिल कर लिया जाता है, तो शीर्ष प्लेट को स्पेसर्स के साथ तय किया जा सकता है। अंतिम घटक जो दो स्विच हैं, बटन, सर्वो, बजर और ढक्कन प्रणाली को अंत में असेंबली खत्म करने के लिए शीर्ष प्लेट पर तय किया जा सकता है।

परीक्षण और सही करने के लिए आखिरी चीज ढक्कन को सही ढंग से खोलने के लिए सर्वो का कोण है।

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

इस चरण के अंत में, असेंबली समाप्त हो गई है और अंतिम शेष भाग लापता कोड है।

चरण 6: कोडिंग: सब कुछ एक साथ रखना

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

सबसे पहले रोबोट की सामान्य गति को "रिमाइंड" चर के साथ परिभाषित किया जाता है। यह "रिमाइंड" एक ऐसा मान है जो याद रखता है कि रोबोट किस दिशा में मुड़ रहा था। यदि "रिमाइंड = 1" है, तो रोबोट बाएं मुड़ रहा था, यदि "रिमाइंड = 2", तो रोबोट दाएं मुड़ रहा था।

इंट स्पीड = 9; // रोबोट की सामान्य गति

इंट रिमाइंड = 1; // प्रारंभिक दिशा

रोबोट के सेटअप में, प्रोग्राम की विभिन्न सब-फाइल्स को इनिशियलाइज़ किया जाता है। इन सब-फाइलों में मोटर, सेंसर,… के नियंत्रण पर बुनियादी कार्य लिखे होते हैं। सेटअप में उन्हें इनिशियलाइज़ करके, इनमें से प्रत्येक फ़ाइल में वर्णित फ़ंक्शन का उपयोग मुख्य लूप में किया जा सकता है। फ़ंक्शन r2D2 () को सक्रिय करके, रोबोट स्टार वार्स मूवी फ्रैंचाइज़ी से R2D2 रोबोट की तरह शोर करेगा जब यह शुरू होता है। यहाँ r2D2 () फ़ंक्शन को अक्षम किया गया है ताकि बजर को बहुत अधिक धारा खींचने से रोका जा सके।

// सेटअप @ रीसेट //----------------

शून्य सेटअप () {initial_IR_sensors (); इनिशियलाइज़_बाधा_और_एजेस (); इनिशियलाइज़_मूवमेंट (); इनिशियलाइज़_लिड (); इनिशियलाइज़_बज़र (); // r2D2 (); इंट रिमाइंड = 1; // प्रारंभिक दिशा स्टार्टर (याद दिलाएं); }

स्टार्टर (रिमाइंड) फ़ंक्शन को पहले सेटअप में बुलाया जाता है। यह फ़ंक्शन रोबोट को घुमाता है और किसी एक बटन के IR सिग्नल की तलाश करता है। एक बार बटन मिल जाने के बाद, प्रोग्राम 'cond' वेरिएबल को असत्य में बदलकर स्टार्टर फ़ंक्शन से बाहर निकल जाएगा। रोबोट के रोटेशन के दौरान इसे अपने पर्यावरण के बारे में पता होना चाहिए: इसे किनारों और बाधाओं का पता लगाना है। इसे चालू करने से पहले हर बार इसकी जाँच की जाती है। एक बार जब रोबोट एक बाधा या किनारे का पता लगा लेता है, तो इन बाधाओं या किनारों से बचने के लिए प्रोटोकॉल निष्पादित किया जाएगा। इन प्रोटोकॉल को इस चरण में बाद में समझाया जाएगा। स्टार्टर फंक्शन में एक वेरिएबल होता है जो रिमाइंडर वेरिएबल है जिस पर पहले चर्चा की गई थी। स्टार्टर फंक्शन को रिमाइंड वैल्यू देकर, रोबोट जानता है कि बटन को देखने के लिए उसे किस दिशा में मुड़ना है।

// स्टार्टर लूप: चारों ओर मुड़ें और बटन खोजें //------------------------------------- ----------------

शून्य स्टार्टर (इंट रिमाइंड) { अगर (आइजेडलेफ्ट () || इसडगेराइट ()) {// किनारों के किनारे का पता लगाएं (याद दिलाएं); } और { बूल कोंड = सच; जबकि (cond == true) {if (buttonleft() == false && buttonright() == false && isButtonDetected() == true) {cond = false; } और { अगर (याद दिलाएं == 1) {// हम बाएं मुड़ रहे थे अगर (isobstacleleft ()) {stopspeed (); टालना_बाधा (याद दिलाना); } और अगर (isgeleft() || isedgeright ()) {// किनारों के किनारे का पता लगाएं (याद दिलाएं); } और {टर्नलेफ्ट (गति); } } और अगर (याद दिलाएं == 2) { अगर (isobstacleright ()) {स्टॉपस्पीड (); टालना_बाधा (याद दिलाना); } और अगर (isgeleft() || isedgeright ()) {// किनारों के किनारे का पता लगाएं (याद दिलाएं); } और { टर्नराइट (गति); } } } } } }

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

  • बाएँ और दाएँ सेंसर द्वारा पता लगाए गए IR प्रकाश के बीच का अंतर एक निश्चित सीमा से बड़ा है, और एक बटन है।
  • आईआर प्रकाश में अंतर दहलीज से छोटा है, और रोबोट के सामने एक बटन है।
  • आईआर प्रकाश में अंतर दहलीज से छोटा है, और रोबोट के सामने कोई बटन नहीं है।

ट्रैक रूटीन के काम करने का तरीका इस प्रकार है: जब बटन का पता चलता है, तो रोबोट उसी दिशा में मुड़कर बटन की ओर बढ़ता है (रिमाइंड वेरिएबल का उपयोग करके) और उसी समय थोड़ा आगे बढ़ता है। यदि रोबोट बहुत दूर हो जाता है, तो बटन फिर से खो जाएगा, और इस बिंदु पर रोबोट को याद है कि उसे दूसरी दिशा में मुड़ने की जरूरत है। यह थोड़ा आगे बढ़ते हुए भी किया जाता है। ऐसा करने से रोबोट लगातार बाएँ मुड़ता है और दाएँ मुड़ता है, लेकिन इस बीच अभी भी बटन की ओर बढ़ रहा है। हर बार जब रोबोट को बटन मिल जाता है, तो वह तब तक मुड़ता रहता है जब तक कि वह उसे खो नहीं देता, जिस स्थिति में वह दूसरी दिशा में चलना शुरू कर देता है। स्टार्टर लूप और मुख्य लूप में उपयोग किए जाने वाले कार्यों में अंतर देखें: स्टार्टर लूप का उपयोग करता है "टर्नलेफ्ट ()" या "टर्नराइट ()", जबकि मुख्य लूप "मूवलेफ्ट ()" और "मूवराइट ()" का उपयोग करता है। लेफ्ट/राइट फंक्शन न केवल रोबोट को घुमाते हैं बल्कि उसे एक ही समय में आगे बढ़ने के लिए भी प्रेरित करते हैं।

/* फंक्शनल लूप ---------------------------- यहाँ, केवल ट्रैक रूटीन है */

इंट लॉस्ट = 0; // यदि खो गया है = 0 बटन मिल गया है, यदि खो गया है = 1 बटन खो गया है, तो शून्य लूप () { अगर (आइजेडलेफ्ट () || इसडगेराइट ()) {

अगर (! बाधा ()) {

आगे बढ़ना (गति); देरी(५); } और {बचाव_बाधा (याद दिलाएं); } और {अगर (रिमाइंड == 1 && खोया == 1) {// हम बाएं स्टॉपस्पीड (); अगर (! isobstacleright ()) { गतिमान (गति); // बटन खोजने के लिए चारों ओर मुड़ें} और {बचाव_बाधा (याद दिलाएं); } याद दिलाना = २; } और अगर (याद दिलाएं == 2 && खोया == 1) {स्टॉपस्पीड (); अगर (! isobstacleleft ()) {चाल बाएं (गति); // हम दाएं मुड़ रहे थे } और {बचाव_बाधा (याद दिलाएं); } याद दिलाना = १; } और अगर (खोया == 0) { अगर (याद दिलाएं == 1) {// हम बाएं मुड़ रहे थे अगर (! isobstacleleft ()) { चाल बाएं (गति); // हम दाएं मुड़ रहे थे } और { स्टॉपस्पीड (); टालना_बाधा (याद दिलाना); } // } और अगर (याद दिलाएं == 2) { अगर (! isobstacleright ()) { गतिमान (गति); // बटन खोजने के लिए चारों ओर मुड़ें} और {स्टॉपस्पीड (); टालना_बाधा (याद दिलाना); } } } देरी(10); खोया = 0; } } //} }

अब, दो सबसे जटिल दिनचर्या की एक छोटी सी व्याख्या दी गई है:

किनारों से बचें

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

बाधाओं से बचें

बचें_बाधा () फ़ंक्शन "आंदोलन" उप-फ़ाइल में भी स्थित है। बाधाओं से बचने के बारे में कठिन बात यह है कि रोबोट के पास एक बहुत बड़ा अंधा स्थान है। अल्ट्रासोनिक सेंसर को रोबोट के सामने रखा गया है, जिसका अर्थ है कि यह बाधाओं का पता लगा सकता है, लेकिन यह नहीं जानता कि वह इसे कब पास करता है। इसे हल करने के लिए, निम्नलिखित सिद्धांत का उपयोग किया जाता है: एक बार जब रोबोट एक बाधा का सामना करता है, तो वह दूसरी दिशा में मुड़ने के लिए रेमिंग चर का उपयोग करता है। इस तरह रोबोट बाधा से टकराने से बचता है। रोबोट तब तक घूमता रहता है जब तक अल्ट्रासोनिक सेंसर बाधा का पता नहीं लगाता। जिस समय रोबोट मुड़ रहा होता है, उस समय तक एक काउंटर बढ़ा दिया जाता है जब तक कि बाधा का पता नहीं चलता। यह काउंटर तब बाधा की लंबाई का अनुमान देता है। फिर आगे बढ़ने और साथ ही काउंटर को कम करने से बाधा से बचा जा सकता है। एक बार जब काउंटर 0 पर पहुंच जाता है, तो बटन को स्थानांतरित करने के लिए स्टार्टर फ़ंक्शन का फिर से उपयोग किया जा सकता है। बेशक रोबोट स्टार्टर फ़ंक्शन को उस दिशा में मोड़कर करता है जिसे याद था कि वह बाधा का सामना करने से पहले जा रहा था (फिर से अनुस्मारक चर का उपयोग करके)।

अब जब आप कोड को पूरी तरह से समझ गए हैं, तो आप इसका उपयोग शुरू कर सकते हैं!

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

सिफारिश की: