विषयसूची:

रोबोट आर्म बजाना पियानो टाइलें: 5 कदम
रोबोट आर्म बजाना पियानो टाइलें: 5 कदम

वीडियो: रोबोट आर्म बजाना पियानो टाइलें: 5 कदम

वीडियो: रोबोट आर्म बजाना पियानो टाइलें: 5 कदम
वीडियो: Piano Tiles 2 Robot | Beginner 21.079 Record 2024, नवंबर
Anonim
रोबोट आर्म बजाते हुए पियानो टाइलें
रोबोट आर्म बजाते हुए पियानो टाइलें

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

चरण 1: उपकरण

उपकरण
उपकरण

रोबोट भुजा:

Phantomx Pincher रोबोट आर्म किट Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)

रोबोट के लिए सॉफ्टवेयर- https://www.arduino.cc/en/Main/OldSoftwareRelease… कलर डिटेक्शन कैमरा:

CMUcam5 पिक्सी कैमरा - (https://charmedlabs.com/default/pixy-cmucam5/)

सॉफ्टवेयर - पिक्सीमोन (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)

चरण 2: Arduino सेटअप

Arduino सेटअप
Arduino सेटअप

आप यहां बोर्ड पर सेटअप देख सकते हैं, जो बहुत आसान है।

बाईं ओर बिजली की आपूर्ति है।

बीच वाला पहला सर्वो के लिए है, जो बाद में अन्य सर्वो से जुड़ा है, सर्वो द्वारा सर्वो।

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

चरण 3: अंतिम कार्यक्रम

||| कार्यक्रम |||

#शामिल

#include #include "poses.h" #include //Pixy Library #include

#POSECOUNT 5 परिभाषित करें

BioloidController bioloid = BioloidController(1000000);

कॉन्स्ट इंट सर्वोकाउंट = 5; इंट आईडी; इंट पॉज़; बूलियन आईडीचेक; बूलियन रनचेक;

शून्य सेटअप () {पिनमोड (0, आउटपुट); ax12SetRegister2(1, 32, 50);//सेट संयुक्त संख्या 1 रजिस्टर 32 को गति 50 के लिए सेट करें। ax12SetRegister2(2, 32, 50);//सेट संयुक्त संख्या 2 रजिस्टर 32 को गति 50 करने के लिए। ax12SetRegister2(3, 32, 50);//सेट जॉइंट नंबर ३ रजिस्टर ३२ से स्पीड ५०. ax12SetRegister2(४, ३२, ५०);//सेट ज्वाइंट नंबर ४ रजिस्टर ३२ से स्पीड ५०. ax12SetRegister2(५, ३२, १००);//सेट ज्वाइंट नंबर ५ रजिस्टर ३२ से गति १००. // वैरिएबल आईडी = १ शुरू करें; स्थिति = 0; आईडीचेक = 1; रनचेक = 0; // ओपन सीरियल पोर्ट Serial.begin (९६००); देरी (500); Serial.println ("#########################"); Serial.println ("सीरियल संचार स्थापित।");

// चेक लाइपो बैटरी वोल्टेज चेक वोल्टेज ();

// स्कैन सर्वो, वापसी की स्थिति MoveTest (); घर को स्थानांतरित(); व्यंजना सूची(); रनचेक = 1; }

शून्य लूप () {// सेंसर पढ़ें: int inByte = Serial.read ();

स्विच (इनबाइट) {

मामला '1': MovePose1 (); टूटना;

मामला '2': MovePose2 (); टूटना; केस '3': MovePose3 (); टूटना;

केस '4': MovePose4 (); टूटना;

केस '5': मूवहोम (); टूटना; मामला '6': पकड़ो (); टूटना;

केस '7': एलईडीटेस्ट (); टूटना;

केस '8': रिलैक्ससर्वोस (); टूटना; } }

शून्य चेक वोल्टेज () {// प्रतीक्षा करें, फिर वोल्टेज (LiPO सुरक्षा) फ्लोट वोल्टेज की जांच करें = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("#########################"); सीरियल.प्रिंट ("सिस्टम वोल्टेज:"); सीरियल.प्रिंट (वोल्टेज); Serial.println ("वोल्ट।"); अगर (वोल्टेज 10.0) {Serial.println ("वोल्टेज स्तर नाममात्र।"); } अगर (रनचेक == 1){ मेनूऑप्शन (); } Serial.println ("#########################"); }

शून्य मूवहोम () {देरी (100); // अनुशंसित विराम bioloid.loadPose (होम); // फ्लैश से पोज को नेक्स्ट पोज बफर बायोलॉइड में लोड करें। // वर्तमान सर्वो पदों में curPose बफर को पढ़ें Serial.println ("########################"); Serial.println ("सर्वो को होम पोजीशन में ले जाना"); Serial.println ("#########################"); देरी (1000); bioloid.interpolateSetup(1000); // करंट से इंटरपोलेशन के लिए सेटअप-> अगले 1/2 से अधिक सेकंड जबकि (bioloid.interpolating> 0){// ऐसा तब करें जब हम अपने नए पोज़ bioloid.interplateStep() तक नहीं पहुंचे हैं; // यदि आवश्यक हो, तो सर्वो को स्थानांतरित करें। देरी(3); } अगर (रनचेक == 1){ मेनूऑप्शन (); } }

शून्य MovePose1 () {देरी (100); // अनुशंसित विराम bioloid.loadPose(Pose1); // फ्लैश से पोज को नेक्स्ट पोज बफर बायोलॉइड में लोड करें। // वर्तमान सर्वो पदों में curPose बफर को पढ़ें Serial.println ("########################"); Serial.println ("सर्वो को पहली स्थिति में ले जाना"); Serial.println ("#########################"); देरी (1000); bioloid.interpolateSetup(1000); // करंट से इंटरपोलेशन के लिए सेटअप-> अगले 1/2 से अधिक सेकंड जबकि (bioloid.interpolating> 0){// ऐसा तब करें जब हम अपने नए पोज़ bioloid.interplateStep() तक नहीं पहुँचे हैं; // यदि आवश्यक हो, तो सर्वो को स्थानांतरित करें। देरी(3); } सेटपोजिशन(3, 291); // संयुक्त 3 की स्थिति को '0' विलंब (100) पर सेट करें; // संयुक्त के स्थानांतरित होने की प्रतीक्षा करें यदि (रनचेक == 1) {मेनूऑप्शन (); } }

शून्य MovePose2 () {देरी (100); // अनुशंसित विराम bioloid.loadPose(Pose2); // फ्लैश से पोज को नेक्स्ट पोज बफर बायोलॉइड में लोड करें। // वर्तमान सर्वो पदों में curPose बफर को पढ़ें Serial.println ("########################"); Serial.println ("सर्वो को दूसरे स्थान पर ले जाना"); Serial.println ("#########################"); देरी (1000); bioloid.interpolateSetup(1000); // करंट से इंटरपोलेशन के लिए सेटअप-> अगले 1/2 से अधिक सेकंड जबकि (bioloid.interpolating> 0){// ऐसा तब करें जब हम अपने नए पोज़ bioloid.interplateStep() तक नहीं पहुंचे हैं; // यदि आवश्यक हो, तो सर्वो को स्थानांतरित करें। देरी(3); } सेटपोजिशन(3, 291); // संयुक्त 3 की स्थिति को '0' विलंब (100) पर सेट करें; // संयुक्त के स्थानांतरित होने की प्रतीक्षा करें यदि (रनचेक == 1) {मेनूऑप्शन (); } } शून्य MovePose3 () {देरी (१००); // अनुशंसित विराम bioloid.loadPose(Pose3); // फ्लैश से पोज को नेक्स्ट पोज बफर बायोलॉइड में लोड करें। // वर्तमान सर्वो पदों में curPose बफर को पढ़ें Serial.println ("########################"); Serial.println ("सर्वो को तीसरे स्थान पर ले जाना"); Serial.println ("#########################"); देरी (1000); bioloid.interpolateSetup(1000); // करंट से इंटरपोलेशन के लिए सेटअप-> अगले 1/2 से अधिक सेकंड जबकि (bioloid.interpolating> 0){// ऐसा तब करें जब हम अपने नए पोज़ bioloid.interplateStep() तक नहीं पहुंचे हैं; // यदि आवश्यक हो, तो सर्वो को स्थानांतरित करें। देरी(3); } सेटपोजिशन(3, 291); // संयुक्त 3 की स्थिति को '0' विलंब (100) पर सेट करें; // संयुक्त के स्थानांतरित होने की प्रतीक्षा करें यदि (रनचेक == 1) {मेनूऑप्शन (); } }

शून्य MovePose4 () {देरी (100); // अनुशंसित विराम bioloid.loadPose(Pose4); // फ्लैश से पोज को नेक्स्ट पोज बफर बायोलॉइड में लोड करें। // वर्तमान सर्वो पदों में curPose बफर को पढ़ें Serial.println ("########################"); Serial.println ("सर्वो को चौथे स्थान पर ले जाना"); Serial.println ("#########################"); देरी (1000); bioloid.interpolateSetup(1000); // करंट से इंटरपोलेशन के लिए सेटअप-> अगले 1/2 से अधिक सेकंड जबकि (bioloid.interpolating> 0){// ऐसा तब करें जब हम अपने नए पोज़ bioloid.interplateStep() तक नहीं पहुंचे हैं; // यदि आवश्यक हो, तो सर्वो को स्थानांतरित करें। देरी(3); } सेटपोजिशन(3, 291); // संयुक्त 3 की स्थिति को '0' विलंब (100) पर सेट करें; // संयुक्त के स्थानांतरित होने की प्रतीक्षा करें यदि (रनचेक == 1) {मेनूऑप्शन (); } }

शून्य मूवटेस्ट () { Serial.println ("########################"); Serial.println ("आंदोलन साइन टेस्ट शुरू करना"); Serial.println ("#########################"); देरी (500); आईडी = 1; स्थिति = 512; जबकि (आईडी <= सर्वोकाउंट) { सीरियल.प्रिंट ("मूविंग सर्वो आईडी:"); सीरियल.प्रिंट्लन (आईडी);

जबकि (स्थिति> = 312) {सेटपोजिशन (आईडी, पॉज़); स्थिति = स्थिति--; देरी(10); }

जबकि (स्थिति <= 512) {सेटपोजिशन (आईडी, पॉज़); पॉज़ = पॉज़ ++; देरी(10); }

// अगली सर्वो आईडी आईडी = आईडी ++ पर पुनरावृति करें;

} अगर (रनचेक == 1){ मेनूऑप्शन (); } }

शून्य मेनू विकल्प () { Serial.println ("########################"); Serial.println ("कृपया व्यक्तिगत परीक्षण फिर से चलाने के लिए विकल्प 1-5 दर्ज करें।"); Serial.println ("1) प्रथम स्थान"); Serial.println ("2) दूसरी स्थिति"); Serial.println ("3) तीसरी स्थिति"); Serial.println ("4) चौथा स्थान"); Serial.println ("5) होम पोजिशन"); Serial.println ("6) सिस्टम वोल्टेज जांचें"); Serial.println ("7) एलईडी टेस्ट करें"); Serial.println ("8) रिलैक्स सर्वोस"); Serial.println ("#########################"); }

शून्य रिलैक्स सर्वोस () {आईडी = 1; Serial.println ("#########################"); Serial.println ("आराम करने वाले सर्वो।"); Serial.println ("#########################"); जबकि (आईडी <= सर्वोकाउंट) {रिलैक्स (आईडी); आईडी = (आईडी ++)% सर्वोकाउंट; देरी (50); } अगर (रनचेक == 1){ मेनूऑप्शन (); } }

शून्य एलईडीटेस्ट () {आईडी = 1; Serial.println ("#########################"); Serial.println ("रनिंग एलईडी टेस्ट"); Serial.println ("#########################"); जबकि (आईडी <= सर्वोकाउंट) { ax12SetRegister (आईडी, 25, 1); सीरियल.प्रिंट ("एलईडी ऑन - सर्वो आईडी:"); सीरियल.प्रिंट्लन (आईडी); देरी (3000); ax12SetRegister (आईडी, 25, 0); सीरियल.प्रिंट ("एलईडी ऑफ - सर्वो आईडी:"); सीरियल.प्रिंट्लन (आईडी); देरी (3000); आईडी = आईडी ++; } अगर (रनचेक == 1){ मेनूऑप्शन (); } }

शून्य पकड़ो () {सेटपोजिशन (5, 800); // संयुक्त 1 से '0' विलंब (100) की स्थिति निर्धारित करें;//संयुक्त के स्थानांतरित होने की प्रतीक्षा करें

}

हमने पोजिशनिंग के मामले में कुछ प्रमुख बदलावों के साथ निर्माताओं के पिंचरटेस्ट कार्यक्रम पर अपना कार्यक्रम आधारित किया है। हमने रोबोट के लिए मेमोरी में पोजीशन रखने के लिए poses.h का इस्तेमाल किया। सबसे पहले हमने पिक्सीकैम के साथ अपने प्लेइंग आर्म को ऑटोमैटिक बनाने की कोशिश की, लेकिन लाइट और छोटे स्क्रीन की समस्याओं के कारण ऐसा नहीं हो सका। रोबोट की एक बुनियादी घरेलू स्थिति है, प्रोग्राम को अपलोड करने के बाद, यह रोबोट में पाए जाने वाले सभी सर्वो का परीक्षण करेगा। हमने 1-4 बटन के लिए पोज़ सेट किए हैं, इसलिए इसे याद रखना आसान होगा। कार्यक्रम का उपयोग करने के लिए स्वतंत्र महसूस करें।

चरण 4: वीडियो गाइड

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

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

सिफारिश की: