সুচিপত্র:

পিয়ানো টাইলস বাজানো রোবট আর্ম: 5 টি ধাপ
পিয়ানো টাইলস বাজানো রোবট আর্ম: 5 টি ধাপ

ভিডিও: পিয়ানো টাইলস বাজানো রোবট আর্ম: 5 টি ধাপ

ভিডিও: পিয়ানো টাইলস বাজানো রোবট আর্ম: 5 টি ধাপ
ভিডিও: 🔴 CLINT kończy karierę, Się dzieje w MARVELU | LIVE 2024, নভেম্বর
Anonim
রোবট আর্ম বাজানো পিয়ানো টাইলস
রোবট আর্ম বাজানো পিয়ানো টাইলস

গ্রুপটি UCN এর 2 অটোমেশন ইঞ্জিনিয়ারদের নিয়ে গঠিত, যারা একটি উজ্জ্বল ধারণা নিয়ে এসেছিল যে আমরা করতে এবং বিকাশে অনুপ্রাণিত। ধারণাটি একটি Arduino বোর্ডের উপর ভিত্তি করে একটি রোবোটিক বাহু নিয়ন্ত্রণ করে। আরডুইনো বোর্ড হল অপারেশনের মস্তিষ্ক এবং তারপর অপারেশনের অ্যাকচুয়েটর, রোবোটিক আর্ম, যা প্রয়োজন তা করবে। আরও গভীরভাবে ব্যাখ্যা পরে আসবে।

ধাপ 1: সরঞ্জাম

সরঞ্জাম
সরঞ্জাম

রোবট বাহু:

ফ্যান্টমক্স পিনচার রোবট আর্ম কিট মাইক II (https://learn.trossenrobotics.com/38-interbotix-ro…)

রোবটের জন্য সফটওয়্যার- https://www.arduino.cc/en/Main/OldSoftwareRelease… রঙ সনাক্তকরণ ক্যামেরা:

CMUcam5 পিক্সি ক্যামেরা - (https://charmedlabs.com/default/pixy-cmucam5/)

সফটওয়্যার - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)

ধাপ 2: Arduino সেটআপ

Arduino সেটআপ
Arduino সেটআপ

আপনি এখানে বোর্ডে সেটআপ দেখতে পারেন, যা খুবই সহজ।

বাম দিকে পাওয়ার সাপ্লাই।

মাঝেরটি প্রথম সার্ভোর জন্য, যা পরবর্তীতে অন্যান্য সার্ভোসের সাথে সংযুক্ত, সার্ভো দ্বারা সার্ভো।

নিচের এক যেখানে আমরা পিসি বা ল্যাপটপ থেকে বোর্ড নিয়ন্ত্রণ করি, অন্য প্রান্তে একটি ইউএসবি ইনপুট থাকে।

ধাপ 3: চূড়ান্ত প্রোগ্রাম

||| প্রোগ্রাম |||

#অন্তর্ভুক্ত

#অন্তর্ভুক্ত #অন্তর্ভুক্ত "poses.h" #অন্তর্ভুক্ত // পিক্সি লাইব্রেরি #অন্তর্ভুক্ত

#পোসকন্ট 5 নির্ধারণ করুন

বায়োলয়েড কন্ট্রোলার বায়োলয়েড = বায়োলয়েড কন্ট্রোলার (1000000);

const int SERVOCOUNT = 5; int id; int pos; বুলিয়ান IDCheck; বুলিয়ান রানচেক;

অকার্যকর সেটআপ () {পিনমোড (0, আউটপুট); ax12SetRegister2 (1, 32, 50); // সেট জয়েন্ট নম্বর 1 রেজিস্টার 32 স্পিড 50. ax12SetRegister2 (2, 32, 50); // সেট যৌথ নম্বর 2 রেজিস্টার 32 স্পিড 50. ax12SetRegister2 (3, 32, 50); // সেট যৌথ সংখ্যা 3 নিবন্ধন 32 গতি 50. ax12SetRegister2 (4, 32, 50); // সেট যৌথ সংখ্যা 4 নিবন্ধন 32 গতি 32. ax12SetRegister2 (5, 32, 100); // সেট যৌথ সংখ্যা 5 নিবন্ধন 32 গতিতে 100. // ভেরিয়েবল আইডি = 1 শুরু করুন; অবস্থান = 0; IDCheck = 1; রানচেক = 0; // খোলা সিরিয়াল পোর্ট Serial.begin (9600); বিলম্ব (500); Serial.println ("###########################" Serial.println ("সিরিয়াল যোগাযোগ প্রতিষ্ঠিত।");

// লাইপো ব্যাটারি ভোল্টেজ চেক ভোল্টেজ () চেক করুন;

// সার্ভিস স্ক্যান করুন, রিটার্ন পজিশন MoveTest (); MoveHome (); মেনু অপশন (); রানচেক = 1; }

অকার্যকর লুপ () {// সেন্সর পড়ুন: int inByte = Serial.read ();

সুইচ (ইনবাইট) {

কেস '1': MovePose1 (); বিরতি;

কেস '2': MovePose2 (); বিরতি; কেস '3': MovePose3 (); বিরতি;

কেস '4': MovePose4 (); বিরতি;

কেস '5': মুভহোম (); বিরতি; কেস '6': ধরুন (); বিরতি;

কেস '7': LEDTest (); বিরতি;

কেস '8': RelaxServos (); বিরতি; }}

অকার্যকর CheckVoltage () {// অপেক্ষা করুন, তারপর ভোল্টেজ (LiPO নিরাপত্তা) ভাসা ভোল্টেজ = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0 চেক করুন; Serial.println ("###########################" "; সিরিয়াল.প্রিন্ট ("সিস্টেম ভোল্টেজ:"); সিরিয়াল.প্রিন্ট (ভোল্টেজ); Serial.println ("ভোল্ট।"); যদি (ভোল্টেজ 10.0) {Serial.println ("ভোল্টেজ মাত্রা নামমাত্র।"); } যদি (RunCheck == 1) {MenuOptions (); } Serial.println ("###########################") }

অকার্যকর MoveHome () {বিলম্ব (100); // প্রস্তাবিত বিরতি bioloid.loadPose (হোম); // ফ্ল্যাশ থেকে পোজ লোড করুন, নেক্সটপোজ বাফার বায়োলয়েডে। readPose (); // curPose বাফার Serial.println ("###########################" ") Serial.println ("সার্ভিসকে হোম অবস্থানে সরানো"); Serial.println ("###########################" "; বিলম্ব (1000); bioloid.interpolateSetup (1000); // বর্তমান থেকে প্রবাহের জন্য সেটআপ-> পরবর্তী 1/2 সেকেন্ডের বেশি সময় ধরে // সরানো servos, প্রয়োজন হলে। বিলম্ব (3); } যদি (RunCheck == 1) {MenuOptions (); }}

অকার্যকর MovePose1 () {বিলম্ব (100); // প্রস্তাবিত বিরতি bioloid.loadPose (Pose1); // ফ্ল্যাশ থেকে পোজ লোড করুন, নেক্সটপোজ বাফার বায়োলয়েডে। readPose (); // curPose বাফার Serial.println ("###########################" ") Serial.println ("1 ম অবস্থানে servos সরানো"); Serial.println ("###########################" বিলম্ব (1000); bioloid.interpolateSetup (1000); // বর্তমান থেকে প্রবাহের জন্য সেটআপ-> পরবর্তী 1/2 সেকেন্ডের বেশি সময় ধরে // সরানো servos, প্রয়োজন হলে। বিলম্ব (3); } SetPosition (3, 291); // যৌথ 3 এর অবস্থান '0' বিলম্ব (100) সেট করুন; // যৌথ সরানোর জন্য অপেক্ষা করুন যদি (RunCheck == 1) {MenuOptions (); }}

অকার্যকর MovePose2 () {বিলম্ব (100); // প্রস্তাবিত বিরতি bioloid.loadPose (Pose2); // ফ্ল্যাশ থেকে পোজ লোড করুন, নেক্সটপোজ বাফার বায়োলয়েডে। readPose (); // curPose বাফার Serial.println ("############################") Serial.println ("দ্বিতীয় অবস্থানে servos সরানো"); Serial.println ("###########################" বিলম্ব (1000); bioloid.interpolateSetup (1000); // বর্তমান থেকে প্রবাহের জন্য সেটআপ-> পরবর্তী 1/2 সেকেন্ডের বেশি সময় ধরে // সরানো servos, প্রয়োজন হলে। বিলম্ব (3); } SetPosition (3, 291); // জয়েন্ট 3 এর অবস্থান '0' বিলম্ব (100) সেট করুন; // যৌথ সরানোর জন্য অপেক্ষা করুন যদি (RunCheck == 1) {MenuOptions (); }} অকার্যকর MovePose3 () {বিলম্ব (100); // প্রস্তাবিত বিরতি bioloid.loadPose (Pose3); // ফ্ল্যাশ থেকে পোজ লোড করুন, নেক্সটপোজ বাফার বায়োলয়েডে। readPose (); // curPose বাফার Serial.println ("###########################" ") Serial.println ("3 য় অবস্থানে servos সরানো"); Serial.println ("###########################" বিলম্ব (1000); bioloid.interpolateSetup (1000); // বর্তমান থেকে প্রবাহের জন্য সেটআপ-> পরবর্তী 1/2 সেকেন্ডের বেশি সময় ধরে // সরানো servos, প্রয়োজন হলে। বিলম্ব (3); } SetPosition (3, 291); // যৌথ 3 এর অবস্থান '0' বিলম্ব (100) সেট করুন; // যৌথ সরানোর জন্য অপেক্ষা করুন যদি (RunCheck == 1) {MenuOptions (); }}

অকার্যকর MovePose4 () {বিলম্ব (100); // প্রস্তাবিত বিরতি bioloid.loadPose (Pose4); // ফ্ল্যাশ থেকে পোজ লোড করুন, নেক্সটপোজ বাফার বায়োলয়েডে। readPose (); // curPose বাফার Serial.println ("###########################" ") Serial.println ("সার্ভিসকে 4th র্থ অবস্থানে নিয়ে যাওয়া"); Serial.println ("###########################" বিলম্ব (1000); bioloid.interpolateSetup (1000); // বর্তমান থেকে প্রবাহের জন্য সেটআপ-> পরবর্তী 1/2 সেকেন্ডের বেশি সময় ধরে // সরানো servos, প্রয়োজন হলে। বিলম্ব (3); } SetPosition (3, 291); // জয়েন্ট 3 এর অবস্থান '0' বিলম্ব (100) সেট করুন; // যৌথ সরানোর জন্য অপেক্ষা করুন যদি (RunCheck == 1) {MenuOptions (); }}

অকার্যকর MoveTest () {Serial.println ("###########################"); Serial.println ("মুভমেন্ট সাইন টেস্ট শুরু করা"); Serial.println ("###########################" বিলম্ব (500); আইডি = 1; অবস্থান = 512; while (id <= SERVOCOUNT) {Serial.print ("Servo ID সরানো:"); Serial.println (id);

while (pos> = 312) {SetPosition (id, pos); pos = pos--; বিলম্ব (10); }

while (pos <= 512) {SetPosition (id, pos); pos = pos ++; বিলম্ব (10); }

// পরবর্তী সার্ভো আইডি আইডি = আইডি ++ এ পুনরাবৃত্তি;

} যদি (RunCheck == 1) {MenuOptions (); }}

void MenuOptions () {Serial.println ("###########################" "; Serial.println ("আবার ব্যক্তিগত পরীক্ষা চালানোর জন্য অনুগ্রহ করে বিকল্প 1-5 লিখুন।"); Serial.println ("1) 1 ম অবস্থান"); Serial.println ("2) দ্বিতীয় অবস্থান"); Serial.println ("3) 3 য় অবস্থান"); Serial.println ("4) চতুর্থ অবস্থান"); Serial.println ("5) হোম অবস্থান"); Serial.println ("6) সিস্টেম ভোল্টেজ পরীক্ষা করুন"); Serial.println ("7) LED টেস্ট করুন"); Serial.println ("8) Relax Servos"); Serial.println ("###########################" }

অকার্যকর RelaxServos () {id = 1; Serial.println ("###########################" Serial.println ("রিলাক্সিং সার্ভোস।"); Serial.println ("###########################" while (id <= SERVOCOUNT) {আরাম (id); id = (id ++)%SERVOCOUNT; বিলম্ব (50); } যদি (RunCheck == 1) {MenuOptions (); }}

অকার্যকর LEDTest () {id = 1; Serial.println ("###########################" Serial.println ("LED টেস্টিং চলছে"); Serial.println ("###########################" যখন (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ON - Servo ID:"); Serial.println (id); বিলম্ব (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Servo ID:"); Serial.println (id); বিলম্ব (3000); আইডি = আইডি ++; } যদি (RunCheck == 1) {MenuOptions (); }}

অকার্যকর দখল () {SetPosition (5, 800); // জয়েন্ট 1 এর অবস্থান '0' বিলম্ব (100) সেট করুন; // জয়েন্ট সরানোর জন্য অপেক্ষা করুন

}

আমরা পজিশনিংয়ের ক্ষেত্রে কিছু প্রধান পরিবর্তন করে নির্মাতাদের PincherTest প্রোগ্রামের উপর আমাদের প্রোগ্রাম ভিত্তিক করেছি। আমরা রোবটের মেমরিতে অবস্থান রাখার জন্য poses.h ব্যবহার করেছি। প্রথমে আমরা স্বয়ংক্রিয় হওয়ার জন্য পিক্সাইক্যাম দিয়ে আমাদের বাজানো বাহু তৈরির চেষ্টা করেছি, কিন্তু হালকা এবং ছোট পর্দার সমস্যার কারণে তা সম্ভব হয়নি। রোবটটির একটি বেসিক হোম পজিশন আছে, প্রোগ্রামটি আপলোড করার পর, এটি রোবটে পাওয়া সমস্ত সার্ভোস পরীক্ষা করবে। আমরা 1-4 বোতামের জন্য পোজ সেট করেছি, তাই এটি মনে রাখা সহজ হবে। প্রোগ্রামটি নির্দ্বিধায় ব্যবহার করুন।

ধাপ 4: ভিডিও গাইড

ধাপ 5: উপসংহার

উপসংহারে, রোবটটি আমাদের জন্য একটি মজার ছোট প্রকল্প এবং চারপাশে খেলতে এবং পরীক্ষা করার জন্য একটি মজাদার থাইং। আমি আপনাকে এটি চেষ্টা করার পাশাপাশি এটি কাস্টমাইজ করার জন্য উৎসাহিত করি।

প্রস্তাবিত: