विषयसूची:

गति नियंत्रण जिम्बल: 12 कदम
गति नियंत्रण जिम्बल: 12 कदम

वीडियो: गति नियंत्रण जिम्बल: 12 कदम

वीडियो: गति नियंत्रण जिम्बल: 12 कदम
वीडियो: Best Budget Gimbal For Smartphone In 2023 ? | Digitek Mobile Gimbal 2024, जुलाई
Anonim
Image
Image

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

शब्द "गिम्बल" को एक धुरी समर्थन के रूप में परिभाषित किया गया है जो किसी भी वस्तु को एक धुरी में घुमाने की अनुमति देता है। तो एक थ्री-एक्सिस जिम्बल जिम्बल पर लगे किसी भी ऑब्जेक्ट को जिम्बल को पकड़े हुए की गति से स्वतंत्र होने की अनुमति देता है। जिम्बल वस्तु की गति को निर्धारित करता है, न कि उसे ले जाने वाला।

इसमें 3-अक्ष नियंत्रण के लिए 3 MG996R सर्वो मोटर्स शामिल हैं, और एक आधार जिस पर MPU6050 सेंसर, Arduino और बैटरी रखी जाएगी। इसका उपयोग बिना कंपन के कैमरे को स्थिर रखने के लिए किया जाता है। एक 3-अक्ष वाला जिम्बल सुनिश्चित करता है कि कैमरे की गति स्थिर हो, भले ही इसे रखने वाला ऊपर और नीचे, बाएँ और दाएँ, आगे और पीछे जा रहा हो। इसे हम यॉ, पिच और रोल स्टेबलाइजेशन कहते हैं।

चरण 1: घटक सूची

घटक सूची हैं:

१)अरुडिनो ऊनो

2) 8V, 1.5 Amp बैटरी Arduino Uno. को पावर देने के लिए

3) ७८०५ वोल्टेज नियामक आईसी या आप हिरन कंवर्टर का उपयोग कर सकते हैं

4)एमपीयू 6050

5)3*(MG995 सर्वो मोटर्स)

6) जम्पर तार

अन्य उपकरण:

1) सोल्डरिंग आयरन

2) गोंद बंदूक

3)ड्रिल मशीन

4)खाना कर सकते हैं

ब्रेडबोराड का उपयोग करने के बजाय मैंने सकारात्मक और नकारात्मक बस कनेक्शन के लिए छोटे कस्टम परफ बोर्ड का उपयोग किया है।

चरण 2: कोडांतरण

कोडांतरण
कोडांतरण
कोडांतरण
कोडांतरण

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

सबसे पहले मैंने फोम बोर्ड की मदद से सर्वो मोटर को माउंट करने के लिए एक DIY एल-आकार के ब्रैकेट बनाए।

चरण 3:

छवि
छवि

जिम्बल को असेंबल करना काफी आसान था। मैंने Yaw सर्वो, MPU 6050 सेंसर और ON-OFF स्विच को स्थापित करने के साथ शुरुआत की। बोल्ट और नट्स का उपयोग करके मैंने इसे आधार पर सुरक्षित किया

चरण 4: अगला, उसी विधि का उपयोग करके मैंने रोल सर्वो को सुरक्षित किया। भागों को विशेष रूप से MG995 सर्वो को आसानी से फिट करने के लिए डिज़ाइन किया गया है

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

चरण 5: अगला, उसी विधि का उपयोग करके मैंने रोल सर्वो को सुरक्षित किया। भागों को विशेष रूप से MG995 सर्वो को आसानी से फिट करने के लिए डिज़ाइन किया गया है

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

चरण 6: कनेक्शन

सम्बन्ध
सम्बन्ध

सर्किट आरेख में आप या तो हिरन कनवर्टर या 7805 वोल्टेज नियामक आईसी का उपयोग 8V से 5 V में परिवर्तित करने के लिए कर सकते हैं। माइक्रोकंट्रोलर जिसे सर्किट आरेख दिया जाता है वह Arduino Nano है आप Arduino Uno, Arduino Mega का भी उपयोग कर सकते हैं।

MPU 6050 के SCL और SDA पिन Arduino एनालॉग पिन A5 और A4 से जुड़े हैं। (SCL और SDA पिन भिन्न हो सकते हैं इसलिए SCl के लिए डेटाशीट और अन्य माइक्रोकंट्रोलर के लिए SDA पिन देखें)

चरण 7: 7805 वोल्टेज नियामक आईसी के साथ कनेक्शन

७८०५ वोल्टेज नियामक आईसी. के साथ कनेक्शन
७८०५ वोल्टेज नियामक आईसी. के साथ कनेक्शन

यह सर्किट डायग्राम 7805 वोल्टेज रेगुलेटर आईसी के कनेक्शन के लिए है, 8v बैटरी को विन से कनेक्ट करें और आपको 5v का आउटपुट वोल्टेज मिलेगा।

चरण 8: कोडिंग

आपको निम्नलिखित पुस्तकालयों को शामिल करना होगा:

1)#शामिल ज़िप फ़ाइल डाउनलोड करने के लिए यहां क्लिक करें

2)#शामिल ज़िप फ़ाइल डाउनलोड करने के लिए यहां क्लिक करें

ज़िप फ़ाइल डाउनलोड करने के बाद, arduino स्केच में ज़िप लाइब्रेरी जोड़ें

कोड. के लिए

/*

DIY Gimbal - MPU6050 Arduino Tutorial Code MPU6050_DMP6 उदाहरण के आधार पर i2cdevlib लाइब्रेरी से जेफ रोवबर्ग द्वारा: https://github.com/jrowberg/i2cdevlib *///I2Cdev और MPU6050 को पुस्तकालयों के रूप में स्थापित किया जाना चाहिए, अन्यथा.cpp/.h फ़ाइलें // दोनों वर्गों के लिए आपके प्रोजेक्ट के शामिल पथ में होनी चाहिए #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" //#include "MPU6050.h" // यदि MotionApps का उपयोग करने में फ़ाइल शामिल है तो आवश्यक नहीं है / / Arduino वायर लाइब्रेरी की आवश्यकता है यदि I2Cdev I2CDEV_ARDUINO_WIRE कार्यान्वयन // I2Cdev में उपयोग किया जाता है। यहां एक पैरामीटर के रूप में पारित किया गया // AD0 कम = 0x68 (स्पार्कफुन ब्रेकआउट और इनवेन्सेंस मूल्यांकन बोर्ड के लिए डिफ़ॉल्ट) // AD0 उच्च = 0x69 MPU6050 mpu; // एमपीयू 6050 एमपीयू (0x69); // <- AD0 उच्च के लिए उपयोग // 3 सर्वो मोटर्स सर्वो सर्वो को परिभाषित करें; सर्वो सर्वो1; सर्वो सर्वो २; फ्लोट सही; इंट जे = 0; #define OUTPUT_READABLE_YAWPITCHROLL #define INTERRUPT_PIN 2 // Arduino Uno पर पिन 2 का उपयोग करें और अधिकांश बोर्ड bool blinkState = false; // एमपीयू नियंत्रण / स्थिति संस्करण बूल dmpReady = false; // सही सेट करें यदि DMP init सफल uint8_t mpuIntStatus था; // एमपीयू uint8_t devStatus से वास्तविक इंटरप्ट स्थिति बाइट रखता है; // प्रत्येक डिवाइस ऑपरेशन के बाद वापसी की स्थिति (0 = सफलता, !0 = त्रुटि) uint16_t packageSize; // अपेक्षित डीएमपी पैकेट आकार (डिफ़ॉल्ट 42 बाइट्स है) uint16_t फीफोकाउंट; // वर्तमान में फीफो uint8_t फीफोबफर [64] में सभी बाइट्स की गिनती; // फीफो स्टोरेज बफर // ओरिएंटेशन / मोशन वर्जन क्वाटरनियन क्यू; // [डब्ल्यू, एक्स, वाई, जेड] क्वाटरनियन कंटेनर वेक्टरइंट 16 आ; // [एक्स, वाई, जेड] एक्सेल सेंसर माप वेक्टरइंट१६ आरियल; // [x, y, z] ग्रेविटी-फ्री एक्सेल सेंसर माप VectorInt16 aaWorld; // [एक्स, वाई, जेड] विश्व-फ्रेम एक्सेल सेंसर माप वेक्टरफ्लोट गुरुत्वाकर्षण; // [एक्स, वाई, जेड] गुरुत्वाकर्षण वेक्टर फ्लोट यूलर [3]; // [साई, थीटा, फी] यूलर एंगल कंटेनर फ्लोट ypr[3]; // [यॉ, पिच, रोल] यॉ/पिच/रोल कंटेनर और ग्रेविटी वेक्टर // इनवेन्सेंस टीपोट डेमो के लिए पैकेट संरचना uint8_t teapotPacket [14] = {'$', 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x00, '\r', '\n' }; // =========================================== =============== // === इंटरप्ट डिटेक्शन रूटीन === // =================== ===================================== अस्थिर बूल एमपीयूइंटरप्ट = झूठा; // इंगित करता है कि क्या एमपीयू इंटरप्ट पिन उच्च शून्य हो गया है dmpDataReady () {mpuInterrupt = true; } // ========================================= ================ // === प्रारंभिक सेटअप === // ================== ==================================== शून्य सेटअप () {// I2C बस में शामिल हों (I2Cdev पुस्तकालय स्वचालित रूप से ऐसा नहीं करता है) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin(); वायर.सेटक्लॉक (400000); // 400kHz I2C घड़ी। संकलन में कठिनाई होने पर इस पंक्ति पर टिप्पणी करें #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif // इनिशियलाइज़ सीरियल कम्युनिकेशन // (115200 चुना गया क्योंकि यह चायदानी डेमो आउटपुट के लिए आवश्यक है, लेकिन यह // वास्तव में आपके प्रोजेक्ट के आधार पर आप पर निर्भर है) Serial.begin(38400); जबकि (! सीरियल); // लियोनार्डो एन्यूमरेशन की प्रतीक्षा करें, अन्य तुरंत जारी रखें // इनिशियलाइज़ डिवाइस //Serial.println (F ("I2C डिवाइसेस को इनिशियलाइज़ करना …")); mpu.initialize (); पिनमोड (INTERRUPT_PIN, INPUT); devStatus = mpu.dmpInitialize (); // यहां अपने स्वयं के जाइरो ऑफसेट की आपूर्ति करें, न्यूनतम संवेदनशीलता के लिए स्केल किया गया mpu.setXGyroOffset(17); mpu.setYGyroOffset(-69); mpu.setZGyroOffset(27); mpu.setZAccelOffset(1551); // मेरी टेस्ट चिप के लिए 1688 फ़ैक्टरी डिफ़ॉल्ट // सुनिश्चित करें कि यह काम कर रहा है (यदि ऐसा है तो 0 लौटाता है) डीएमपी…")); mpu.setDMPEnabled (सच); अटैचइंटरप्ट (डिजिटलपिनटोइंटरप्ट (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // हमारे डीएमपी रेडी फ्लैग को सेट करें ताकि मुख्य लूप () फ़ंक्शन को पता चले कि इसका उपयोग करना ठीक है //Serial.println(F("DMP तैयार! पहले इंटरप्ट की प्रतीक्षा कर रहा है …")); डीएमपीरेडी = सच; // बाद में तुलना के लिए अपेक्षित डीएमपी पैकेट आकार प्राप्त करें पैकेट आकार = mpu.dmpGetFIFOPacketSize (); } और {//त्रुटि! // 1 = प्रारंभिक मेमोरी लोड विफल // 2 = डीएमपी कॉन्फ़िगरेशन अपडेट विफल // (यदि यह टूटने वाला है, तो आमतौर पर कोड 1 होगा) // सीरियल.प्रिंट (एफ ("डीएमपी इनिशियलाइज़ेशन विफल (कोड")); // सीरियल.प्रिंट (देवस्टैटस); // सीरियल.प्रिंट्लन (एफ (")")); } // उन पिनों को परिभाषित करें जिनसे 3 सर्वो मोटर्स जुड़े हुए हैं सर्वो0.अटैच(10); सर्वो1.अटैच(9); सर्वो2.अटैच(8); } // ========================================= ================ // === मुख्य कार्यक्रम लूप === // ================== ===================================== शून्य लूप() { / / अगर प्रोग्रामिंग विफल हो जाती है, तो कुछ भी करने की कोशिश न करें अगर (!dmpReady) वापस आ जाए; // एमपीयू इंटरप्ट या अतिरिक्त पैकेट उपलब्ध होने की प्रतीक्षा करें जबकि (!mpuInterrupt && fifoCount <पैकेटसाइज) {if (mpuInterrupt && fifoCount)

= 1024) {

// रीसेट करें ताकि हम सफाई से जारी रख सकें mpu.resetFIFO (); फीफोकाउंट = mpu.getFIFOCount (); Serial.println (एफ ("फीफो अतिप्रवाह!")); // अन्यथा, डीएमपी डेटा तैयार इंटरप्ट की जांच करें (यह अक्सर होना चाहिए) } और अगर (mpuIntStatus और _BV (MPU6050_INTERRUPT_DMP_INT_BIT)) {// सही उपलब्ध डेटा लंबाई के लिए प्रतीक्षा करें, बहुत कम प्रतीक्षा होनी चाहिए जबकि (फीफोकाउंट 1 पैकेट उपलब्ध है / / (यह हमें बिना किसी रुकावट की प्रतीक्षा किए तुरंत और अधिक पढ़ने देता है) फीफोकाउंट -= पैकेटसाइज; // यॉ, पिच और रोल वैल्यू प्राप्त करें #ifdef OUTPUT_READABLE_YAWPITCHROLL mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); // यॉ, पिच, रोल वैल्यू - रेडियन से डिग्री ypr[0] = ypr[0] * 180 / M_PI; ypr[1] = ypr[1] * 180 / M_PI; ypr[2] = ypr[2] * 180 / M_PI; // ३०० रीडिंग छोड़ें (स्व-अंशांकन प्रक्रिया) अगर (j <= ३००) { सही = ypr [०]; // याव यादृच्छिक मूल्य पर शुरू होता है, इसलिए हम ३०० रीडिंग j++ के बाद अंतिम मान कैप्चर करें; } // ३०० रीडिंग के बाद {ypr[0] = ypr[0] - सही; // Yaw को 0 डिग्री पर सेट करें - अंतिम यादृच्छिक Yaw मान को वर्तमान मान से घटाएं यॉ 0 डिग्री es // MPU6050 सेंसर के मानों को -90 से 90 तक सर्वो नियंत्रण के लिए 0 से 180 int सर्वो0Value = map(ypr[0], -90, 90, 0, 180); int सर्वो१वैल्यू = नक्शा (ypr[1], -९०, ९०, ०, १८०); int सर्वो२वैल्यू = नक्शा (ypr[2], -९०, ९०, १८०, ०); // MPU6050 ओरिएंटेशन सर्वो.राइट (servo0Value) के अनुसार सर्वो को नियंत्रित करें; सर्वो1.लिखें (सर्वो1वैल्यू); सर्वो २.राइट (सर्वो २ वेल्यू); } #अगर अंत } }

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

चरण 9: जब सभी घटक जुड़े हुए हैं, तो यह इस चित्र के समान दिखता है

जब सभी अवयव जुड़े हुए हैं, तो यह इस चित्र के समान दिखता है
जब सभी अवयव जुड़े हुए हैं, तो यह इस चित्र के समान दिखता है

स्टेप 10: अब सभी बेस स्टफ को फूड कैन के अंदर डालें

अब सभी बेस स्टफ को फूड कैन के अंदर डालें
अब सभी बेस स्टफ को फूड कैन के अंदर डालें

चरण 11: जब सभी तारों और घटकों को एक भोजन के अंदर रखा जाता है तो फोम बोर्ड के आधार पर गोंद बंदूक लगाई जा सकती है।

जब सभी तारों और घटकों को एक भोजन के अंदर रखा जाता है तो फोम बोर्ड के आधार पर गोंद बंदूक लगाई जा सकती है।
जब सभी तारों और घटकों को एक भोजन के अंदर रखा जाता है तो फोम बोर्ड के आधार पर गोंद बंदूक लगाई जा सकती है।

चरण 12: निष्कर्ष

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

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

सिफारिश की: