- सेल्फ बैलेंसिंग रोबोट के लिए पार्ट्स का चयन करना
- 3 डी प्रिंटिंग और हमारे सेल्फ बैलेंसिंग रोबोट को असेंबल करना
- सर्किट आरेख
- सेल्फ बैलेंसिंग रोबोट कोड
- Arduino Self Balancing Robot का कार्य करना
Segway के RYNO मोटर्स और अन्य सेल्फ बैलेंसिंग स्कूटर से प्रेरित होने के बाद, मैं हमेशा से कुछ अपने खुद के Arduino Segway रोबोट का निर्माण करना चाहता था । कुछ समय के लिए सोचते हुए, मैंने Arduino का उपयोग करके एक सेल्फ बैलेंसिंग रोबोट बनाने का निर्णय लिया । इस तरह से मैं इन सभी स्कूटरों के पीछे की अंतर्निहित अवधारणा को समझ पाऊंगा और यह भी सीखूंगा कि पीआईडी एल्गोरिदम कैसे काम करता है।
एक बार जब मैंने निर्माण करना शुरू किया, तो मैंने महसूस किया कि यह बॉट निर्माण की एक चुनौती है। से चुनने के लिए बहुत सारे विकल्प हैं और इसलिए भ्रम मोटरों का चयन करना शुरू करते हैं और पीआईडी मानों को ट्यून करने तक बने रहते हैं। और इस तरह की बैटरी, बैटरी की स्थिति, व्हील ग्रिप, मोटर ड्राइवर के प्रकार, कोग (गुरुत्वाकर्षण के केंद्र) को बनाए रखने के लिए और भी बहुत कुछ है।
लेकिन मुझे इसे तोड़ने के लिए, एक बार जब आप इसे बनाते हैं तो आप सहमत होंगे कि यह उतना मुश्किल नहीं है जितना लगता है। तो आइए इसका सामना करते हैं, इस ट्यूटोरियल में मैं सेल्फ बैलेंसिंग रोबोट बनाने के अपने अनुभव का दस्तावेजीकरण करूंगा। आप एक पूर्ण शुरुआत हो सकते हैं जो अभी शुरू हो रही है या आपके बॉट के काम नहीं करने की लंबी निराशा के बाद यहां उतरा हो सकता है। इस जगह का लक्ष्य आपका अंतिम गंतव्य होना है। तो चलो शुरू करते है……
सेल्फ बैलेंसिंग रोबोट के लिए पार्ट्स का चयन करना
इससे पहले कि मैं आपको बॉट के निर्माण के सभी विकल्प बताऊं मैं उन वस्तुओं को सूचीबद्ध करता हूं जो मैंने इस सेल्फ बैलेंसिंग रोबोट परियोजना में उपयोग किए हैं
- Arduino UNO
- गियर डीसी मोटर्स (पीले रंग का) - 2Nos
- L298N मोटर चालक मॉड्यूल
- MPU6050
- पहियों की एक जोड़ी
- 7.4 वी ली-आयन बैटरी
- तारों को जोड़ना
- 3 डी प्रिंटेड बॉडी
आप अपने स्वयं के बैलेंसिंग रोबोट किट बनाने के लिए उपलब्धता के आधार पर उपरोक्त घटकों में से किसी को भी चुन सकते हैं, बस यह सुनिश्चित कर सकते हैं कि घटक निम्नलिखित मानदंडों को पूरा करते हैं।
नियंत्रक: नियंत्रक जो मैंने यहां उपयोग किया है, वह Arduino UNO है, क्यों कि इसका उपयोग करना आसान है। आप एक Arduino नैनो या Arduino मिनी का भी उपयोग कर सकते हैं, लेकिन मैं आपको UNO के साथ रहने की सलाह दूंगा क्योंकि हम इसे बिना किसी बाहरी हार्डवेयर के सीधे प्रोग्राम कर सकते हैं।
मोटर्स: मोटर का सबसे अच्छा विकल्प जिसे आप एक आत्म संतुलन वाले रोबोट के लिए उपयोग कर सकते हैं, बिना किसी संदेह के स्टेपर मोटर होगा। लेकिन चीजों को सरल रखने के लिए मैंने डीसी गियर मोटर का उपयोग किया है। हाँ, स्टेपर होना अनिवार्य नहीं है; बॉट इन सस्ते आमतौर पर उपलब्ध पीले रंग के डीसी गियर मोटर्स के साथ ठीक काम करता है।
मोटर चालक: यदि आपने मेरी तरह डीसी गियर मोटर्स का चयन किया है, तो आप या तो मेरे जैसे L298N ड्राइवर मॉड्यूल का उपयोग कर सकते हैं, या यहां तक कि एक L293D को भी ठीक काम करना चाहिए। L293D और Arduino का उपयोग करके डीसी मोटर को नियंत्रित करने के बारे में अधिक जानें।
पहिए: इन लोगों के अनुमान के तहत न करें; मुझे पता था कि मेरे पहियों के साथ समस्या थी। तो सुनिश्चित करें कि आपके पहिये आपके द्वारा उपयोग किए जा रहे फर्श पर अच्छी पकड़ रखते हैं। बारीकी से देखें, आपकी पकड़ को कभी भी आपके पहियों को फर्श पर नहीं झुकना चाहिए।
एक्सेलेरोमीटर और जाइरोस्कोप: आपके बॉट के लिए एक्सेलेरोमीटर और जाइरोस्कोप का सबसे अच्छा विकल्प MP606050 होगा। तो एक सामान्य एक्सेलेरोमीटर के साथ ADXL345 या ऐसा कुछ बनाने की कोशिश न करें, यह सिर्फ काम नहीं करेगा। आपको पता चल जाएगा कि इस लेख के अंत में क्यों। आप Arduino के साथ MPU6050 का उपयोग करने पर हमारे समर्पित लेख को भी देख सकते हैं।
बैटरी: हमें एक ऐसी बैटरी की आवश्यकता होती है जो जितना संभव हो उतना हल्का हो और ऑपरेटिंग वोल्टेज 5V से अधिक होना चाहिए ताकि हम एक बढ़ावा मॉड्यूल के बिना सीधे अपने Arduino को शक्ति प्रदान कर सकें। इसलिए आदर्श विकल्प 7.4 वी ली-पॉलिमर बैटरी होगी। यहाँ, चूंकि मेरे पास 7.4 वी ली-आयन बैटरी आसानी से उपलब्ध है, इसलिए मैंने इसका उपयोग किया है। लेकिन याद रखें कि ली-आयन ली-आयन से अधिक फायदेमंद है।
चेसिस: एक अन्य स्थान जहां आपको समझौता नहीं करना चाहिए, वह आपके बॉट्स चेसिस के साथ है। आप कार्डबोर्ड, लकड़ी, प्लास्टिक किसी भी चीज का उपयोग कर सकते हैं, जिसके साथ आप अच्छे हैं। लेकिन, बस यह सुनिश्चित करें कि चेसिस मजबूत है और बॉट को संतुलित करने की कोशिश कर रहे हैं, तो इसे नहीं झकझोरना चाहिए। मैंने अन्य बॉट्स से सॉलिडवर्क्स पर स्वयं चेसिस द्वारा डिजाइन किया है और 3 डी ने इसे मुद्रित किया है। यदि आपके पास प्रिंटर है तो आप डिज़ाइन को प्रिंट भी कर सकते हैं, डिज़ाइन की फाइलें आगामी शीर्षक में संलग्न की जाएंगी।
3 डी प्रिंटिंग और हमारे सेल्फ बैलेंसिंग रोबोट को असेंबल करना
यदि आपने उसी चेसिस को 3 डी प्रिंट करने का निर्णय लिया है जिसका उपयोग मैं अपने बॉट को बनाने के लिए कर रहा हूं, तो एसटीएल फाइलें विविधताओं से डाउनलोड की जा सकती हैं। मैंने इसके साथ-साथ डिज़ाइन फ़ाइलों को भी जोड़ा है ताकि आप इसे अपने कर्मियों की प्राथमिकताओं के अनुसार संशोधित भी कर सकें।
भागों में कोई ओवरहैंगिंग संरचना नहीं है, इसलिए आप आसानी से उन्हें बिना किसी सहारे के प्रिंट कर सकते हैं और 25% का इंफिल ठीक काम करेगा। डिजाइन बहुत सादे हैं और किसी भी बुनियादी प्रिंटर को आसानी से संभालना चाहिए। मैंने मॉडल को स्लाइस करने के लिए Cura सॉफ़्टवेयर का उपयोग किया और अपने Tevo टारेंटुला का उपयोग करके मुद्रित किया, सेटिंग नीचे दिखाई गई है।
आपको शरीर के हिस्से के साथ-साथ चार मोटर बढ़ते भागों को भी प्रिंट करना होगा। कोडांतरण बहुत सीधे आगे है; मोटर और बोर्डों को सुरक्षित करने के लिए 3 मिमी नट और बोल्ट का उपयोग करें। कोडांतरण के बाद यह कुछ इस तरह दिखना चाहिए जैसा कि नीचे दी गई तस्वीर में दिखाया गया है।
वास्तविक डिज़ाइन को L298N ड्राइव मॉड्यूल के साथ नीचे रैक में Arduino और बैटरी को ऊपर दिखाए गए अनुसार बनाने की योजना बनाई गई थी। यदि आप एक ही आदेश का पालन कर रहे हैं, तो आप सीधे बोर्ड को दिए गए छेद को पेंच कर सकते हैं और ली-पो बैटरी के लिए तार टैग का उपयोग कर सकते हैं। यह व्यवस्था भी काम करनी चाहिए, सिवाय उस सादे मैदान के पहियों के जिसे मुझे बाद में बदलना पड़ा।
अपने बॉट में मैंने प्रोग्रामिंग की आसानी के लिए बैटरी और अरुडिनो यूएनओ बोर्ड की स्थिति की अदला-बदली की है और कनेक्शन पूरा करने के लिए एक परिपूर्ण बोर्ड भी पेश किया है। इसलिए मेरे बॉट को वैसा नहीं लगा जैसा मैंने शुरुआती चरण में योजना बनाई थी। वायरिंग प्रोग्रामिंग परीक्षण और सब कुछ पूरा करने के बाद, मेरा दो पहिया रोबोट आखिरकार ऐसा दिखता है
सर्किट आरेख
इस Arduino आधारित सेल्फ बैलेंसिंग रोबोट के लिए कनेक्शन बनाना बहुत सरल है। यह Arduino और MPU6050 का उपयोग करते हुए एक स्व-संतुलन वाला रोबोट है, इसलिए हम Arduino के साथ MPU6050 को इंटरफ़ेस करने और मोटर ड्राइवर मॉड्यूल के साथ मोटर्स को जोड़ने के लिए उपयुक्त हैं। पूरा सेट-अप 7.4V ली-आयन बैटरी द्वारा संचालित है। उसी के लिए सर्किट आरेख नीचे दिखाया गया है।
Arduino और L298N मोटर ड्राइवर मॉड्यूल क्रमशः विन पिन और 12V टर्मिनल के माध्यम से सीधे संचालित होते हैं। Arduino बोर्ड पर ऑन-बोर्ड नियामक इनपुट 7.4V को 5V में बदल देगा और ATmega IC और MPU6050 इसके द्वारा संचालित होंगे। डीसी मोटर वोल्टेज 5 वी से 12 वी तक चल सकते हैं। लेकिन हम बैटरी से मोटर चालक मॉड्यूल के 12V इनपुट टर्मिनल के लिए 7.4V सकारात्मक तार को जोड़ेंगे। इससे मोटर्स 7.4V के साथ काम करेगी। निम्न तालिका सूचीबद्ध करेगी कि MPU6050 और L298N मोटर चालक मॉड्यूल Arduino के साथ कैसे जुड़े हैं।
घटक पिन |
अरुडिनो पिन |
MPU6050 |
|
Vcc |
+ 5 वी |
भूमि |
गाण्ड |
एससीएल |
A5 |
एसडीए |
ए 4 |
पूर्णांक |
डी 2 |
L298N |
|
1 में |
डी 6 |
दो में |
डी 9 |
IN3 |
D10 |
IN4 |
D11 |
MPU6050 I2C इंटरफ़ेस के माध्यम से Arduino के साथ संचार करता है, इसलिए हम Arduino के SPI पिन A4 और A5 का उपयोग करते हैं। DC मोटर्स क्रमशः PWM पिन D6, D9 D10 और D11 से जुड़ी हैं। हमें उन्हें पीडब्लूएम पिन से जोड़ने की आवश्यकता है क्योंकि हम पीडब्लूएम संकेतों के कर्तव्य चक्र को अलग करके डीसी मोटर की गति को नियंत्रित करेंगे। यदि आप इन दो घटकों से परिचित नहीं हैं, तो MPU6050 इंटरफेसिंग और L298N मोटर ड्राइवर ट्यूटोरियल के माध्यम से पढ़ने की सिफारिश की जाती है।
सेल्फ बैलेंसिंग रोबोट कोड
अब हमें रोबोट को संतुलित करने के लिए अपने Arduino UNO बोर्ड को प्रोग्राम करना होगा। यह वह जगह है जहां सभी जादू होता है; इसके पीछे की अवधारणा सरल है। हमें यह जांचना होगा कि क्या बॉट MPU6050 का उपयोग करते हुए आगे या पीछे की ओर झुक रहा है और फिर यदि यह सामने की ओर झुक रहा है तो हमें पहियों को आगे की दिशा में घुमाना होगा और यदि यह पीछे की ओर झुक रहा है तो हमें पहियों को घुमाना होगा उल्टी दिशा में।
उसी समय हमें उस गति को भी नियंत्रित करना है जिस पर पहिए घूम रहे हैं, अगर बॉट केंद्र की स्थिति से थोड़ा सा भटका हुआ है तो पहिए धीरे-धीरे घूमते हैं और गति में वृद्धि होती है क्योंकि यह केंद्र की स्थिति से अधिक दूर हो जाता है। इस तर्क को प्राप्त करने के लिए हम पीआईडी एल्गोरिथ्म का उपयोग करते हैं, जिसमें सेट के रूप में केंद्र की स्थिति और आउटपुट के रूप में भटकाव का स्तर होता है।
बॉट की वर्तमान स्थिति जानने के लिए हम MPU6050 का उपयोग करते हैं, जो कि 6-एक्सिस एक्सेलेरोमीटर और जाइरोस्कोप सेंसर संयुक्त है। सेंसर से स्थिति का एक विश्वसनीय मूल्य प्राप्त करने के लिए हमें एक्सेलेरोमीटर और जाइरोस्कोप दोनों के मूल्य का उपयोग करने की आवश्यकता होती है, क्योंकि एक्सेलेरोमीटर के मूल्यों में शोर की समस्याएं होती हैं और गायरोस्कोप से मान समय के साथ बहाव करने लगते हैं। इसलिए हमें दोनों को मिलाना होगा और हमारे रोबोट के yaw पिच और रोल का मूल्य प्राप्त करना होगा, जिसमें से हम केवल yaw के मूल्य का उपयोग करेंगे।
लगता है सिर का थोड़ा सा सही? लेकिन चिंता न करें, Arduino समुदाय के लिए धन्यवाद, हमारे पास आसानी से उपलब्ध पुस्तकालय हैं जो पीआईडी गणना कर सकते हैं और MPU6050 से yaw का मूल्य भी प्राप्त कर सकते हैं। पुस्तकालय क्रमशः br3ttb और jrowberg द्वारा विकसित किया गया है। आगे बढ़ने से पहले उनके पुस्तकालयों को निम्न लिंक बनाते हैं और उन्हें अपनी Arduino lib निर्देशिका में जोड़ते हैं।
github.com/br3ttb/Arduino-PID-Library/blob/master/PID_11.h
github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050
अब, हमारे पास Arduino IDE में जोड़े गए पुस्तकालय हैं। चलो हमारे स्व संतुलन रोबोट के लिए प्रोग्रामिंग शुरू करें। हमेशा की तरह MPU6050 बैलेंसिंग रोबोट के लिए पूरा कोड इस पेज के अंत में दिया गया है, यहाँ मैं कोड में सबसे महत्वपूर्ण स्निपेट समझा रहा हूँ। पहले बताया गया कोड MPU6050 उदाहरण कोड के शीर्ष पर निर्मित होता है, हम सिर्फ अपने उद्देश्य के लिए कोड को अनुकूलित करने और अपने आत्म संतुलन रोबोट के लिए PID और नियंत्रण तकनीक को जोड़ने जा रहे हैं।
पहले हम उन पुस्तकालयों को शामिल करते हैं जो इस कार्यक्रम के काम करने के लिए आवश्यक हैं। इनमें इन-बिल्ट I2C लाइब्रेरी, PID लाइब्रेरी और MPU6050 लाइब्रेरी शामिल हैं जिन्हें हमने अभी डाउनलोड किया है।
# किंकर्तव्यविमूढ़ "I2Cdev.h" #include
फिर हम उन चरों को घोषित करते हैं जो MPU6050 सेंसर से डेटा प्राप्त करने के लिए आवश्यक होते हैं । हम गुरुत्वाकर्षण सदिश और चतुर्धातुक मूल्यों दोनों को पढ़ते हैं और फिर बॉट की yaw पिच और रोल वैल्यू की गणना करते हैं। नाव सरणी YPR अंतिम परिणाम का आयोजन करेगा।
// MPU नियंत्रण / स्थिति var बूल dmpReady = false; // सेट सही है अगर DMP init सफल रहा uint8_t mpuIntStatus; // MPU uint8_t devStatus से वास्तविक व्यवधान स्थिति बाइट रखती है; // प्रत्येक डिवाइस ऑपरेशन के बाद वापसी की स्थिति (0 = सफलता; 0 = त्रुटि) uint16_t packetSize; // उम्मीद DMP पैकेट आकार (डिफ़ॉल्ट 42 बाइट्स) fifoCount uint16_t; // FIFO uint8_t में सभी बाइट्स की गिनती । // FIFO भंडारण बफर // अभिविन्यास / गति संस्करण Quaternion q; // quaternion कंटेनर वेक्टरफ्लोट गुरुत्वाकर्षण; // गुरुत्वाकर्षण वेक्टर फ्लोट ypr; // जबड़ा / पिच / रोल कंटेनर और गुरुत्वाकर्षण वेक्टर
अगला कोड का बहुत महत्वपूर्ण खंड आता है, और यह वह जगह है जहाँ आप मूल्यों के सही सेट के लिए ट्यूनिंग में एक लंबा समय बिताएंगे । यदि आप रोबोट गुरुत्वाकर्षण के एक बहुत अच्छे केंद्र के साथ निर्मित हैं और घटक सममित रूप से व्यवस्थित हैं (जो कि ज्यादातर मामलों में नहीं है) तो आपके सेट-पॉइंट का मूल्य 180 होगा। एल्स आपके बॉट को Arduino सीरियल मॉनिटर से जोड़ता है और तब तक इसे झुकाता है आप एक अच्छा संतुलन स्थिति पाते हैं, धारावाहिक मॉनिटर पर प्रदर्शित मूल्य पढ़ें और यह आपका निर्धारित बिंदु मान है। केपी, केडी और की के मूल्य को आपके बॉट के अनुसार ट्यून करना होगा। किसी भी दो समान बॉट में केपी, केडी और की के समान मूल्य नहीं होंगे, इसलिए इससे कोई बच नहीं सकता है। इन मूल्यों को समायोजित करने के तरीके के बारे में जानने के लिए इस पृष्ठ के अंत में वीडियो देखें ।
/ ********* अपने BOT के लिए ये 4 मान ट्यून करें ********* / डबल सेटपॉइंट = 176; // सेट करें जब बॉट सीरियल मॉनीटर का उपयोग करके जमीन के लंबवत है । // इन मानों को डबल केपी = 21 कैसे सेट करें, यह जानने के लिए सर्किटडाइजेस्ट.कॉम पर प्रोजेक्ट डॉक्यूमेंटेशन पढ़ें ; // यह पहला डबल केडी = 0.8 सेट करें ; // इस सेकेंड डबल की = 140 पर सेट करें ; // अंत में इसे सेट करें / ****** मूल्यों की स्थापना ********* /
अगली पंक्ति में हम इनपुट वैरिएबल इनपुट, आउटपुट, सेट पॉइंट, केपी, की और केडी को पास करके पीआईडी एल्गोरिदम को इनिशियलाइज़ करते हैं । इनमें से हमने कोड के ऊपर स्निपेट में पहले से ही सेट-पॉइंट केपी, की और केडी के मूल्यों को निर्धारित किया है। इनपुट का मूल्य yaw का वर्तमान मूल्य होगा जिसे MPU6050 सेंसर से पढ़ा जाता है और आउटपुट का मूल्य PID एल्गोरिदम द्वारा गणना की जाने वाली वैल्यू होगी। तो मूल रूप से पीआईडी एल्गोरिथ्म हमें आउटपुट मूल्य देगा जो कि इनपुट मूल्य को सही करने के लिए सेट बिंदु के करीब होने के लिए उपयोग किया जाना चाहिए।
पीआईडी पीआईडी (और इनपुट, और आउटपुट, और सेटपॉइंट, केपी, की, केडी, डाइरेक्ट);
शून्य सेटअप फ़ंक्शन के अंदर हम DMP (डिजिटल मोशन प्रोसेसर) को कॉन्फ़िगर करके MPU6050 को इनिशियलाइज़ करते हैं । यह हमें गाइरोस्कोप डेटा के साथ एक्सेलेरोमीटर डेटा के संयोजन में मदद करेगा और यव, पिच और रोल का एक विश्वसनीय मूल्य प्रदान करेगा। हम इसमें बहुत गहराई तक नहीं जाएंगे क्योंकि यह विषय से बहुत आगे होगा। किसी भी तरह से कोड का एक सेगमेंट जो आपको सेटअप फंक्शन में देखना है, वह है जाइरो ऑफसेट वैल्यूज। प्रत्येक MPU6050 सेंसर के अपने मूल्य हैं ऑफसेट आप इस सेंसर के ऑफसेट मूल्य की गणना करने के लिए और अपने कार्यक्रम के अनुसार निम्नलिखित लाइनों को अपडेट करने के लिए इस Arduino स्केच का उपयोग कर सकते हैं।
// यहाँ अपनी संवेदनशीलता की आपूर्ति करें, न्यूनतम संवेदनशीलता के लिए मापी गई mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1688);
हमें डिजिटल पीडब्लूएम पिंस को भी इनिशियलाइज़ करना होगा जो हम अपने मोटर्स को कनेक्ट करने के लिए उपयोग कर रहे हैं। हमारे मामले में यह डी 6, डी 9, डी 10 और डी 11 है। इसलिए हम इन पिंस को इनिशियलाइज़ करते हैं क्योंकि आउटपुट पिन उन्हें डिफ़ॉल्ट रूप से कम बनाते हैं।
// आरंभ मोटर outpu पिन pinMode (6, आउटपुट); पिनमोड (9, OUTPUT); पिनमोड (10, OUTPUT); पिनमोड (11, OUTPUT); // डिफ़ॉल्ट रूप से दोनों मोटर्स एनालॉगवाइट (6, LOW) को बंद करें; analogWrite (9, LOW); analogWrite (10, कम); analogWrite (11, LOW);
मुख्य लूप फ़ंक्शन के अंदर हम जांचते हैं कि एमपीयू 6050 का डेटा पढ़ने के लिए तैयार है या नहीं । यदि हाँ, तो हम इसका उपयोग पीआईडी मान की गणना करने के लिए करते हैं और फिर पीआईडी के इनपुट और आउटपुट मूल्य को सीरियल मॉनिटर पर प्रदर्शित करते हैं कि पीआईडी कैसे प्रतिक्रिया दे रहा है। फिर आउटपुट के मूल्य के आधार पर हम तय करते हैं कि क्या बॉट को आगे या पीछे जाना है या स्थिर रहना है।
चूँकि हम मानते हैं कि बॉट ईमानदार होने पर MPU6050 180 वापस आ जाएगा। जब बॉट आगे की ओर गिर रहा होगा तो हमें सुधार के मान सकारात्मक मिलेंगे और अगर बॉट पीछे की ओर गिर रहा है तो हमें नकारात्मक मूल्य मिलेंगे । इसलिए हम इस स्थिति की जांच करते हैं और बॉट को आगे या पीछे के वार्ड में स्थानांतरित करने के लिए उपयुक्त कार्यों को बुलाते हैं।
जबकि ((mpuInterrupt && tenoCount <packetSize) { // no mpu डेटा - पीआईडी गणना और मोटर्स के उत्पादन पीआईडी.कंप्यूट (); // यह कैसे काम कर रहा है यह जांचने के लिए सीरियल मॉनिटर पर इनपुट और आउटपुट के मूल्य को प्रिंट करें। Serial.print (इनपुट); सीरियल.प्रिंट ("=>"); Serial.println (आउटपुट); अगर (इनपुट> 150 && इनपुट <200) {// अगर बॉट गिर रहा है अगर (आउटपुट> 0) // सामने की ओर गिर रहा है (); // आगे पहियों को घुमाएं यदि (आउटपुट <0) // पीछे की ओर गिरता है (); // पहियों को पीछे की ओर घुमाएं } और // अगर बॉट गिर नहीं रहा है तो (); // पहिए अभी भी पकड़ें }
पीआईडी उत्पादन चर भी निर्णय लेता है कितनी तेजी से मोटर घुमाया जाना है । यदि बॉट गिरने वाला है, तो हम पहिया को धीरे-धीरे घुमाकर मामूली सुधार करते हैं। यदि ये मामूली सुधार काम करते हैं और फिर भी अगर बॉट नीचे गिर रहा है तो हम मोटर की गति बढ़ाते हैं। पीआई एल्गोरिथ्म द्वारा पहियों को कितनी तेजी से घुमाने का मूल्य तय किया जाएगा। ध्यान दें कि रिवर्स फ़ंक्शन के लिए हमने आउटपुट के मूल्य को -1 से गुणा किया है ताकि हम नकारात्मक मान को सकारात्मक में बदल सकें।
शून्य अग्रेषित () // पहिया आगे घुमाने के लिए कोड { analogWrite (6, आउटपुट); एनालॉगवर्इट (9,0); analogWrite (10, आउटपुट); एनालॉग वाइट (11,0); सिरियल.प्रिंट ("एफ"); // डिबगिंग जानकारी } शून्य उल्टा () // पहिया को घुमाने के लिए कोड { analogWrite (6,0); analogWrite (9, आउटपुट * -1); एनालॉगवर्इट (10,0); analogWrite (11, आउटपुट * -1); सिरियल.प्रिंट ("आर"); } void Stop () // कोड दोनों पहियों को रोकने के लिए { analogWrite (6,0); एनालॉगवर्इट (9,0); एनालॉगवर्इट (10,0); एनालॉग वाइट (11,0); सिरियल.प्रिंट ("एस"); }
Arduino Self Balancing Robot का कार्य करना
एक बार जब आप हार्डवेयर के साथ तैयार हो जाते हैं, तो आप कोड को अपने Arduino बोर्ड पर अपलोड कर सकते हैं। सुनिश्चित करें कि कनेक्शन उचित हैं क्योंकि हम एक ली-आयन बैटरी का उपयोग कर रहे हैं अत्यधिक सावधानी की आवश्यकता है। इसलिए शॉर्ट सर्किट की दोहरी जांच करें और यह सुनिश्चित करें कि आपके बॉट कुछ छोटे प्रभावों का अनुभव करने पर भी टर्मिनलों के संपर्क में नहीं आएंगे। अपने मॉड्यूल को पावर करें और अपने सीरियल मॉनिटर को खोलें, यदि आपका Arduino MPU6050 के साथ सफलतापूर्वक संचार कर सकता है और यदि सब कुछ उम्मीद के मुताबिक काम कर रहा है तो आपको निम्न स्क्रीन देखनी चाहिए।
यहाँ हम PID कलन विधि के इनपुट और आउटपुट मानों को फॉर्मेट इनपुट => आउटपुट में देखते हैं । यदि बॉट पूरी तरह से संतुलित है तो आउटपुट का मान 0 होगा । इनपुट मूल्य MPU6050 सेंसर से वर्तमान मूल्य है। वर्णमाला "एफ" दर्शाता है कि बॉट आगे बढ़ रहा है और "आर" बॉट का प्रतिनिधित्व करता है।
PID के प्रारंभिक चरणों के दौरान मैं आपके Arduino केबल को बॉट से जुड़ा हुआ छोड़ने की सलाह देता हूं ताकि आप इनपुट और आउटपुट के मूल्यों की आसानी से निगरानी कर सकें और इसके अलावा Kp, Ki और Kd मानों के लिए अपने प्रोग्राम को सही करना और अपलोड करना आसान होगा। बॉट की पूरी काम करने से पता चलता है नीचे दिए गए वीडियो अपने पीआईडी मूल्यों दूर करने के तरीकों और यह भी पता चलता है।
आशा है कि यह आपके स्वयं के बैलेंसिंग रोबोट को बनाने में मदद करता है यदि आपको इसे काम करने में कोई समस्या है, तो नीचे दिए गए टिप्पणी अनुभाग में अपने प्रश्नों को छोड़ दें या अधिक तकनीकी प्रश्नों के लिए मंचों का उपयोग करें। यदि आप अधिक मज़ेदार चाहते हैं तो आप बॉल बैलेंसिंग रोबोट बनाने के लिए उसी तर्क का उपयोग कर सकते हैं ।