विषयसूची:

वेब नियंत्रित रोवर: 14 कदम (चित्रों के साथ)
वेब नियंत्रित रोवर: 14 कदम (चित्रों के साथ)

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

वीडियो: वेब नियंत्रित रोवर: 14 कदम (चित्रों के साथ)
वीडियो: The Earth Oceans - Full Episode - Hindi – Web Series - Quick Support 2024, नवंबर
Anonim
वेब नियंत्रित रोवर
वेब नियंत्रित रोवर
वेब नियंत्रित रोवर
वेब नियंत्रित रोवर

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

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

इस तरह की एक परियोजना के लिए, हमें एक अच्छे ठोस सिंगल बोर्ड कंप्यूटर की आवश्यकता होगी और इस बॉट के लिए मैंने रास्पबेरी पाई (आरपीआई) एक लिनक्स आधारित कंप्यूटर का उपयोग करना चुना। RPI (और Linux) हमें बहुत सारे कोडिंग विकल्प देता है और Python का उपयोग कोडिंग पक्ष के लिए किया जाएगा। वेब इंटरफेस के लिए मैं फ्लास्क का उपयोग करता हूं, जो कि पायथन के लिए एक हल्का वेब ढांचा है।

मोटरों को चलाने के लिए, मैंने रोबोक्ला 2x5a चुना। यह इसे कमांड करने के लिए सरल धारावाहिक संचार की अनुमति देता है और RPI और Gooseneck पर मोटर्स के साथ अच्छी तरह से काम करता है।

अंत में, इसमें दूर से चलाने के लिए पीओवी टाइप वीडियो फीडबैक के लिए एक वेबकैम है। मैं प्रत्येक विषय को बाद में और अधिक विस्तार से कवर करूंगा।

चरण 1: हार्डवेयर की आवश्यकता

हार्डवेयर की जरूरत
हार्डवेयर की जरूरत
हार्डवेयर की जरूरत
हार्डवेयर की जरूरत
हार्डवेयर की जरूरत
हार्डवेयर की जरूरत
हार्डवेयर की जरूरत
हार्डवेयर की जरूरत
  • Actobotics Gooesneck चेसिस या अपनी पसंद का उपयुक्त प्रतिस्थापन
  • आपकी पसंद का रास्पबेरी पाई (या क्लोन) - इस बॉट पर एक आरपीआई मॉडल बी का उपयोग किया जाता है, लेकिन कम से कम दो यूएसबी पोर्ट वाला कोई भी काम करेगा
  • मानक सर्वो प्लेट बी X1
  • 90° सिंगल एंगल चैनल ब्रैकेट X1
  • रोबोक्ला 2x5a मोटर चालक
  • S3003 या समान मानक आकार सर्वो
  • छोटा ब्रेडबोर्ड या मिनी ब्रेडबोर्ड
  • महिला से महिला जम्पर तार
  • पुरुष से महिला जम्पर तार
  • वेब कैमरा (वैकल्पिक) - मैं लॉजिटेक सी110 का उपयोग करता हूं, और यहां आरपीआई के लिए समर्थित कैम की एक सूची है
  • सर्वो शक्ति के लिए 5v-6v शक्ति स्रोत
  • ड्राइव मोटर पावरिंग के लिए 7.2v-11.1v बैटरी
  • RPI के लिए 5v 2600mah (या उच्चतर) USB पावर बैंक
  • यूएसबी वाईफ़ाई एडाप्टर

अपने बॉट पर, मैं इसे थोड़ा और ऑल-टेरेन-इनडोर बनाने के लिए 4 पहियों का उपयोग करता हूं। इस विकल्प के लिए आपको निम्न की आवश्यकता होगी:

  • 4 "हैवी ड्यूटी व्हील x2
  • 4 मिमी बोर सेट स्क्रू हब (0.770 इंच) x2

चरण 2: चेसिस को असेंबल करना

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

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

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

चरण 3: इलेक्ट्रॉनिक्स को माउंट करना

इलेक्ट्रॉनिक्स को माउंट करना
इलेक्ट्रॉनिक्स को माउंट करना
इलेक्ट्रॉनिक्स को माउंट करना
इलेक्ट्रॉनिक्स को माउंट करना
इलेक्ट्रॉनिक्स को माउंट करना
इलेक्ट्रॉनिक्स को माउंट करना

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

चरण 4: वेबकैम जोड़ना

वेबकैम जोड़ना
वेबकैम जोड़ना
वेबकैम जोड़ना
वेबकैम जोड़ना
वेबकैम जोड़ना
वेबकैम जोड़ना

इस चरण के लिए 90 डिग्री ब्रैकेट, लाइटवेट सर्वो हब और.3125 स्क्रू के चार (4) लें:

  • सर्वो हब लें और इसे ब्रैकेट के एक तरफ रखें और उन्हें.2125 "स्क्रू जैसे चित्र के साथ सुरक्षित करें
  • अगला सर्वो को सर्वो ब्रैकेट में माउंट करें
  • सर्वो हॉर्न के साथ 90 डिग्री ब्रैकेट को सर्वो स्पाइन में संलग्न करें और उन्हें एक साथ जोड़ने के लिए सर्वो के साथ आए हॉर्न स्क्रू का उपयोग करें
  • अब बचे हुए स्क्रू के साथ सर्वो को हंस-गर्दन के शीर्ष पर ब्रैकेट में माउंट करें
  • 90 डिग्री ब्रैकेट पर ज़िप-टाई या दो तरफा टेप के साथ कैमरा माउंट करें

यदि आवश्यक हो तो गाइड के लिए चित्रों का प्रयोग करें।

चरण 5: यह सब ऊपर तारों

वायरिंग इट ऑल अप
वायरिंग इट ऑल अप
वायरिंग इट ऑल अप
वायरिंग इट ऑल अप
वायरिंग इट ऑल अप
वायरिंग इट ऑल अप
वायरिंग इट ऑल अप
वायरिंग इट ऑल अप

इस रोबोट के लिए वायरिंग काफी स्ट्रेट फॉरवर्ड है।

मोटर्स:

यदि आपने पहले से ऐसा नहीं किया है तो सोल्डर दोनों मोटरों पर ले जाता है

रोबोट के सामने (हंस-गर्दन के साथ अंत) आप से दूर का सामना करना पड़ रहा है:

  • बाएं मोटर पर मोटर तारों को चैनल M1A और M1B. से कनेक्ट करें
  • मोटर तारों को दाहिने मोटर पर चैनल M2A और M2B. से कनेक्ट करें

ग्राउंड (जीएनडी) कनेक्शन:

  • रोबोक्ला पर एक ग्राउंड पिन को ग्राउंड जम्पर बोर्ड से कनेक्ट करें। रोबोक्ला पर ग्राउंड पिन लाइन केंद्र के सबसे करीब है (तस्वीर देखें)
  • RPI पर पिन 6 को जम्पर बोर्ड से कनेक्ट करें। पिन असाइनमेंट के लिए RPI हैडर पिक देखें।
  • जीएनडी को सर्वो बैटरी पैक से जम्पर बोर्ड पर किसी एक पिन से कनेक्ट करें।
  • जम्पर बोर्ड से सर्वो जीएनडी तार तक एक जम्पर तार चलाएं।

RPI से RoboClaw:

RPI GPIO14 TXD पिन को RoboClaw S1 पिन से कनेक्ट करें

शक्ति:

  • पीओएस तार को सर्वो बैटरी से सर्वोस पीओएस लीड से कनेक्ट करें
  • POS तार को मोटर बैटरी से RoboClaw मोटर पावर इनपुट टर्मिनल के POS (+) से कनेक्ट करें। हम GND टर्मिनल को अभी के लिए डिस्कनेक्ट कर देंगे।

चरण 6: आरपीआई की स्थापना

आरपीआई की स्थापना
आरपीआई की स्थापना

मुझे लगता है कि यहां उपयोगकर्ता लिनक्स और आरपीआई के बारे में कुछ जानता है। मैं यह नहीं बताता कि किसी एक को कैसे सेटअप या कनेक्ट किया जाए। यदि आपको इसके लिए सहायता चाहिए तो नीचे दिए गए पृष्ठों का उपयोग करें।

अपना RPI सेटअप प्राप्त करने के लिए, निम्नलिखित पृष्ठों पर एक नज़र डालें:

  • आरपीआई मूल सेटअप
  • आरपीआई क्विक स्टार्ट गाइड
  • NOOBS सेटअप गिल्ड

सामान्य जम्प-ऑफ पृष्ठों के लिए, आरपीआई मुख्य पृष्ठ और ईलिनक्स पृष्ठ शुरू करने के लिए बेहतरीन स्थान हैं।

आरपीआई सामान्य वाईफाई सेटअप के लिए यह लिंक देखें।

यदि आप बॉट पर किसी प्रकार के कैमरे या वेब कैम का उपयोग करने की योजना बना रहे हैं, तो मूलभूत आवश्यक फ़ाइलें प्राप्त करने के लिए इन पृष्ठों पर एक नज़र डालें।

  • आरपीआई कैम सेटअप
  • eLinix RPI कैम सेटअप

वीडियो की स्ट्रीमिंग:

आरपीआई पर वीडियो स्ट्रीमिंग काम करने के कुछ तरीके हैं, लेकिन मुझे जो तरीका पसंद है वह मोशन का उपयोग कर रहा है।

इसे अपने आरपीआई पर स्थापित करने के लिए इसे चलाएं: sudo apt-get install motion

यह इंस्ट्रक्टेबल इसे स्ट्रीमिंग के लिए भी सेट अप करता है।

चरण 7: RPI सीरियल पोर्ट को कॉन्फ़िगर करना

RX और TX का उपयोग करने के लिए हमें Linux कंसोल मोड को अक्षम करना होगा क्योंकि हम इस पोर्ट से RoboClaw मोटर नियंत्रक से बात करना चाहते हैं। ऐसा करने के लिए, आप इस विधि या इस उपकरण का उपयोग कर सकते हैं। विधि पर चुनाव आपका है क्योंकि वे दोनों अंत में एक ही काम करते हैं।

चरण 8: पायथन मॉड्यूल स्थापित करना

आपको आरपीआई के साथ-साथ पायथन पैकेज इंस्टालर पाइप पर स्थापित अजगर की आवश्यकता होगी।

पाइप स्थापित करने के लिए करें:

  1. sudo apt-पायथन-सेटअपटूल स्थापित करें
  2. sudo easy_install pip

फिर:

  1. सुडो पाइप स्थापित फ्लास्क
  2. sudo pip pyserial स्थापित करें
  3. sudo pip RPIO स्थापित करें

यह कोड चलाने के लिए आवश्यक सभी मॉड्यूल होंगे।

चरण 9: रोबोक्लाव की स्थापना

मेरे पास 19200 बॉड में मानक सीरियल मोड में रोबोक्ला से बात करने वाला रोबोट कोड है।

RoboClaw को इसके लिए सेट अप करने के लिए:

  1. रोबोक्लाव पर "मोड" बटन दबाएं
  2. सेट बटन को तब तक दबाएं जब तक कि देरी के बीच एलईडी 5 (पांच) बार फ्लैश न हो जाए
  3. स्टोर करने के लिए "LIPO" बटन दबाएं
  4. अगला "सेट" बटन दबाएं जब तक कि एलईडी देरी के बीच 3 (तीन) बार फ्लैश न हो जाए
  5. स्टोर करने के लिए LIPO बटन दबाएं

यह मोटर नियंत्रक स्थापित करने के लिए है। यदि आवश्यक हो तो अधिक जानकारी के लिए ऊपर लिंक किया गया पीडीएफ देखें।

चरण 10: रोवर प्रोग्राम/फ़ाइलें स्थापित करना

अपने pi उपयोगकर्ता निर्देशिका में अपने RPI में rover.zip फ़ाइल को डाउनलोड करें और कॉपी करें।

यदि आप Linux या Mac चला रहे हैं, तो आप इसे करने के लिए 'scp' का उपयोग कर सकते हैं:

scp ~/location/of/the/file/rover.zip pi@your_rpi_ip:/~

विंडोज़ के लिए, आप पीएससीपी डाउनलोड और उपयोग कर सकते हैं और फिर कर सकते हैं:

pscp /location/of/the/file/rover.zip pi@your_rpi_ip:/~

एक बार zipfile को RPI में कॉपी कर लेने के बाद, इसमें pi उपयोगकर्ता के रूप में लॉग इन करें।

अब चलाएँ:

अनज़िप रोवर.ज़िप

यह फ़ाइलों को 'रोवर' नामक फ़ोल्डर में खोल देगा और उस फ़ोल्डर के अंतर्गत निम्नलिखित होंगे:

  • Restrover.py (रोबोट के लिए अजगर कोड)
  • स्थिर (नियंत्रण पृष्ठ पर बटन के लिए छवि फ़ाइलें रखता है)
  • टेम्पलेट्स (index.htlm फ़ाइल, नियंत्रण वेब पेज रखता है)

यदि आप एक वेब कैम का उपयोग कर रहे हैं, तो टेम्प्लेट फ़ोल्डर में index.html फ़ाइल के निचले भाग के पास की रेखा को संशोधित करें। अपने वीडियो स्ट्रीम के src URL से मिलान करने के लिए IFRAME लाइन में URL बदलें।

चरण 11: बॉट अप शुरू करना

बॉट अप शुरू करना
बॉट अप शुरू करना

USB पावर को RPI से कनेक्ट करें।

बॉट कोड शुरू करने के लिए, पीआई उपयोगकर्ता के रूप में लॉग इन करें और चलाएं:

  • सीडी रोवर
  • सूडो अजगर

यदि सब ठीक था, तो आपको इस चरण में छवि के समान एक स्क्रीन देखनी चाहिए

यदि आपको कोई त्रुटि या समस्या दिखाई देती है, तो आगे बढ़ने से पहले आपको उन्हें ठीक करना होगा।

अब, RoboClaw मोटर पावर इनपुट पर GND (-) वायर को NEG (-) टर्मिनल से कनेक्ट करें।

चरण 12: बॉट कंट्रोल पेज तक पहुंचना

बॉट कंट्रोल पेज तक पहुंचना
बॉट कंट्रोल पेज तक पहुंचना
बॉट कंट्रोल पेज तक पहुंचना
बॉट कंट्रोल पेज तक पहुंचना

रोबोट की पायथन स्क्रिप्ट चलने के बाद, रोबोक्ला को पावर दें और फिर अपने आरपीआई के आईपी पर नेविगेट करें जैसे:

your_rpi_ip

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

एक बार पृष्ठ पर, आप बॉट को नियंत्रित करने के लिए तैयार हैं।

रोबोट "मेड रन" सेटिंग में और मध्यम गति से शुरू होगा।

बॉट को पेज पर मौजूद बटनों या कीबोर्ड की कुंजियों के ज़रिए नियंत्रित किया जा सकता है।

चाबियाँ हैं:

  • डब्ल्यू - आगे
  • z - उल्टा/पिछड़ा
  • ए - लंबा बायां मोड़
  • एस - लंबा दायां मोड़
  • क्यू - छोटा बायां मोड़
  • ई - शॉर्ट राइट टर्न
  • 1 - पैन कैमरा बचा है
  • 2 - पैन कैमरा राइट
  • 3 - पैन फुल लेफ्ट
  • ४ - पैन पूरी तरह से दाएं
  • / - घर / केंद्र कैमरा
  • एच - रोबोट को रोकें / रोकें

भेजे गए आदेशों के बीच आधा सेकंड विलंब बफर है। मैंने अवांछित दोहराए गए आदेशों को खत्म करने के लिए ऐसा किया। यदि आप चाहें तो निश्चित रूप से आप इसे कोड से हटा सकते हैं (index.html में)

शेष नियंत्रण और इसे नियंत्रित करना स्वयं व्याख्यात्मक होना चाहिए।

चरण 13: पायथन / फ्लास्क कोड

यह बॉट पायथन और फ्लास्क वेब फ्रेमवर्क का उपयोग करता है। यदि आप रुचि रखते हैं तो आप यहां फ्लास्क के बारे में अधिक जान सकते हैं।

फ्लास्क ऐप और सामान्य पायथन स्क्रिप्ट से बड़ा अंतर @app.route क्लास/विधि है जो URI को संभालने के लिए उपयोग किया जाता है। इसके अलावा अधिकांश भाग के लिए यह काफी सामान्य पायथन है।

#!/usr/bin/env python

# # वाईफाई/वेब संचालित रोवर # # स्कॉट बेस्ली द्वारा लिखित - 2015 # # RPIO, pyserial और फ्लास्क का उपयोग करता है # RPIO से आयात समय आयात सीरियल फ्लास्क आयात फ्लास्क से PWM आयात करें, रेंडर_टेम्पलेट, अनुरोध ऐप = फ्लास्क (_name_, static_url_path = '') # रोबोक्लॉ मोटर कंट्रोलर से बात करने के लिए कॉम पोर्ट से कनेक्ट करें कोशिश करें: # बॉड रेट यहां बदलें अगर 19200 से अलग है रोबोक्ला = सीरियल। सीरियल ('/ dev/ttyAMA0', 19200) IOError को छोड़कर: प्रिंट ("कॉम पोर्ट नहीं पाया") sys.exit (0) # गति और ड्राइव नियंत्रण चर last_direction = -1 speed_offset = 84 turn_tm_offset = 0.166 run_time = 0.750 # सर्वो तटस्थ स्थिति (होम) सर्वो_पॉस = 1250 सर्वो = पीडब्लूएम। सर्वो () सर्वो.सेट_सर्वो (18), सर्वो_पॉस) # समय का समय तय करने के लिए थोड़ा रुकें। नींद (3) # # यूआरआई हैंडलर - सभी बॉट पेज क्रियाएं यहां की जाती हैं # # बॉट्स कंट्रोल पेज (होम पेज) भेजें @app.route ("/") def index (): return render_template ('index.html', name = कोई नहीं) @app.route ("/forward") def आगे (): ग्लोबल last_direction, run_ti मैं प्रिंट "फॉरवर्ड" गो_फॉरवर्ड () last_direction = 0 # स्लीप 100ms + रन_टाइम टाइम। स्लीप (0.100 + रन_टाइम) # यदि निरंतर नहीं है, तो देरी के बाद रुकें यदि रन_टाइम> 0: last_direction = -1 हॉल्ट () रिटर्न "ओके" @ app.route ("/पिछड़ा") पीछे की ओर (): वैश्विक last_direction, run_time प्रिंट "पिछड़ा" go_backward () last_direction = 1 # नींद 100ms + run_time समय। नींद (0.100 + रन_टाइम) # यदि निरंतर नहीं है, तो देरी के बाद रुकें अगर रन_टाइम> 0: last_direction = -1 हॉल्ट () "ओके" @ ऐप.रूट ("/ लेफ्ट") डिफ लेफ्ट (): ग्लोबल लास्ट_डायरेक्शन, टर्न_टीएम_ऑफसेट प्रिंट "लेफ्ट" गो_लेफ्ट () लास्ट_डायरेक्शन = -1 # स्लीप @ 1 /2 दूसरी बार। नींद (0.500 - टर्न_tm_offset) # स्टॉप हॉल्ट () समय। नींद (0.100) वापसी "ओके" @ ऐप.रूट ("/ राइट") डेफ राइट (): ग्लोबल लास्ट_डायरेक्शन, टर्न_टीएम_ऑफसेट प्रिंट "राइट" गो_राइट () # नींद @ 1/2 दूसरी बार। नींद (0.500 - टर्न_tm_offset) last_direction = -1 # स्टॉप हॉल्ट () समय। नींद (0.100) वापसी "ओके" @ ऐप। रूट ("/ ltforward") def ltforward (): वैश्विक अंतिम_दिशा, बारी_टी m_offset प्रिंट "लेफ्ट फॉरवर्ड टर्न" go_left () # स्लीप @ 1/8 सेकेंड टाइम। स्लीप (0.250 - (टर्न_tm_offset / 2)) last_direction = -1 # स्टॉप हॉल्ट () टाइम। स्लीप (0.100) रिटर्न "ओके" @app.route ("/ rtforward") def rtforward (): ग्लोबल last_direction, turn_tm_offset प्रिंट "राइट फॉरवर्ड टर्न" go_right () # स्लीप @ 1/8 सेकेंड टाइम। स्लीप (0.250 - (टर्न_tm_offset / 2)) last_direction = -1 # स्टॉप हॉल्ट () टाइम.स्लीप (0.100) रिटर्न "ओके" @ ऐप.रूट ("/स्टॉप") डेफ स्टॉप (): ग्लोबल लास्ट_डायरेक्शन प्रिंट "स्टॉप" हॉल्ट () last_direction = -1 # स्लीप 100ms टाइम। स्लीप (0.100)) रिटर्न "ओके" @ ऐप.रूट ("/ पैनल्ट") डिफ पैनल्फ (): ग्लोबल सर्वो_पॉस प्रिंट "पैनल्ट" सर्वो_पोस - = 100 अगर सर्वो_पॉस 2500: सर्वो_पोस = 2500 सर्वो.सेट_सर्वो (18, सर्वो_पॉस) # 150 एमएमएस समय सोएं। स्लीप (0.150) रिटर्न "ओके" @ ऐप.रूट ("/ होम") डिफ होम (): ग्लोबल सर्वो_पॉस प्रिंट "होम" सर्वो_पोस = 1250 सर्वो.सेट_सर्वो (18, सर्वो_पॉस) # स्लीप 150ms टाइम। स्लीप (0.150) रिटर्न "ठीक है" @app.route ("/panfull_lt") def panfull_lt (): ग्लोबल सर्वो_पॉस प्रिंट "पैन फुल एल eft" सर्वो_पोस = ५०० सर्वो.सेट_सर्वो (१८, सर्वो_पोस) # नींद १५०ms समय। नींद (०.१५०) वापसी "ठीक है" @app.route ("/panfull_rt") def panfull_rt (): वैश्विक सर्वो_पॉस प्रिंट "पैन फुल राइट" सर्वो_पॉस = २५०० सर्वो.सेट_सर्वो (१८, सर्वो_पोस) # १५०ms समय सोएं। नींद (०.१५०) वापसी "ठीक" @ ऐप.मार्ग ("/ speed_low") def speed_low (): वैश्विक speed_offset, last_direction, turn_tm_offset speed_offset = 42 turn_tm_offset = 0.001 # नई गति प्राप्त करने के लिए वर्तमान दिशा अपडेट करें यदि last_direction == 0: go_forward () if last_direction == 1: go_backward () # नींद 150ms समय। नींद (0.150) वापसी "ठीक" @ app.route ("/ speed_mid") def speed_mid (): वैश्विक speed_offset, last_direction, turn_tm_offset speed_offset = 84 turn_tm_offset = 0.166 # नई गति प्राप्त करने के लिए वर्तमान दिशा अपडेट करें यदि last_direction == 0: go_forward () if last_direction == 1: go_backward () # 150ms समय सोएं। सोएं (0.150) वापसी "ठीक" @ app.route ("/ speed_hi") def speed_hi (): वैश्विक speed_offset, last_direction, turn_tm_offset speed_offset = 126 tur n_tm_offset = 0.332 # नई गति प्राप्त करने के लिए वर्तमान दिशा अपडेट करें यदि last_direction == 0: go_forward () if last_direction == 1: go_backward () # 150ms समय सोएं। नींद (0.150) वापसी "ठीक" @ app.route ("/ निरंतर ") डीफ़ कंटीन्यूअस (): ग्लोबल रन_टाइम प्रिंट "कंटीन्यूअस रन" रन_टाइम = 0 # स्लीप 100ms टाइम। स्लीप (0.100) रिटर्न "ओके" @ ऐप.रूट ("/ मिड_रन") डिफ मिड_रन (): ग्लोबल रन_टाइम प्रिंट "मिड" रन" रन_टाइम = 0.750 हॉल्ट () # स्लीप 100ms टाइम। स्लीप (0.100) रिटर्न "ओके" @ ऐप.रूट ("/ शॉर्ट_टाइम") डेफ शॉर्ट_टाइम (): ग्लोबल रन_टाइम प्रिंट "शॉर्ट रन" रन_टाइम = 0.300 हॉल्ट () # स्लीप 100ms टाइम.स्लीप (0.100) रिटर्न "ओके" # # मोटर ड्राइव फंक्शन # डेफ गो_फॉरवर्ड (): ग्लोबल स्पीड_ऑफसेट अगर स्पीड_ऑफसेट! = 42: रोबोक्ला। राइट (chr (1 + स्पीड_ऑफसेट)) रोबोक्ला। राइट (chr (128 +) speed_offset)) और: robolaw.write (chr (127 - speed_offset)) robolaw.write (chr (255 - speed_offset)) def go_backward (): ग्लोबल speed_offset अगर speed_offset != 42: robocla.write (chr (127 - speed_offset))) रोबोक्ला.wri ते (chr (255 - speed_offset)) और: robolaw.write (chr (1 + speed_offset)) robolaw.write (chr (128 + speed_offset)) def go_left (): Global speed_offset if speed_offset != 42: robocla.write (chr (127 - speed_offset)) robolaw.write (chr (128 + speed_offset)) और: robolaw.write (chr (1 + speed_offset)) robolaw.write (chr (255 - speed_offset)) def go_right (): वैश्विक speed_offset अगर speed_offset != 42: robolaw.write (chr (1 + speed_offset)) robolaw.write (chr (255 - speed_offset)) और: robolaw.write (chr (127 - speed_offset)) robolaw.write (chr (128 + speed_offset))) डेफ हॉल्ट (): रोबोक्ला.राइट (chr (0)) अगर _name_ == "_main_": ऐप.रन (होस्ट = '0.0.0.0', पोर्ट = 80, डिबग = ट्रू)

यदि आप फ्लास्क से डिबग जानकारी नहीं चाहते हैं या इसकी आवश्यकता नहीं है, तो app.run लाइन पर डिबग को 'गलत' पर सेट करें।

अगर _name_ == "_main_":

app.run (होस्ट = '0.0.0.0', पोर्ट = 80, डिबग = गलत)

आप उस पोर्ट को भी बदल सकते हैं जिसे फ्लास्क http सर्वर यहां भी सुनता है।

चरण 14: अन्य हार्डवेयर का उपयोग करना

यदि आप अन्य हार्डवेयर का उपयोग करना चाहते हैं, जैसे कि एक अन्य प्रकार का SBC (सिंगल बोर्ड कंप्यूटर) तो आपको अन्य बोर्डों जैसे बीगल बोन, PCDuino आदि पर पायथन और फ्लास्क को चलाने में थोड़ी समस्या होनी चाहिए… आपको GPIO से मिलान करने के लिए कोड बदलना होगा। लेआउट और नए बोर्ड की सर्वो ड्राइविंग क्षमताओं का उपयोग करें।

किसी अन्य प्रकार के मोटर चालक का उपयोग करने के लिए, आपको बस go_forward, go_backward, go_left, go_right और हॉल्ट फ़ंक्शंस को संशोधित करने की आवश्यकता है ताकि मोटर को उस विशेष कार्य को करने के लिए कभी भी प्रतिस्थापन मोटर चालक की आवश्यकता हो।

सिफारिश की: