جدول المحتويات:

ذراع روبوت يتم التحكم فيه بسلك: 31 خطوة
ذراع روبوت يتم التحكم فيه بسلك: 31 خطوة

فيديو: ذراع روبوت يتم التحكم فيه بسلك: 31 خطوة

فيديو: ذراع روبوت يتم التحكم فيه بسلك: 31 خطوة
فيديو: أردوينو للمبتدئين - (16) التحكم في محركات السيرفو باستعمال عصا التحكم 2025, كانون الثاني
Anonim
ذراع روبوت يتم التحكم فيه بسلك
ذراع روبوت يتم التحكم فيه بسلك

هذا برنامج تعليمي حول كيفية صنع ذراع روبوت يتم التحكم فيه بواسطة الأسلاك. تتمثل ميزة استخدام الأسلاك في أن ذراعك أخف وزناً ويمكنك وضع جميع محركاتك في أسفل ذراعك ، مما يجعل البناء والصيانة أسهل. هذا شريط فيديو للذراع وهي تعمل. أخطط لإضافة مخلب في المستقبل حتى يتمكن من التقاط الأشياء وليس فقط دفعها.

3D Printables:

هنا وهنا

اللوازم

6 محركات مؤازرة (MG995)

اردوينو اونو

حوالي 6 أمتار من الأسلاك الفولاذية المطلية بالبلاستيك (0.5 مم)

مربع 23x33x10 (قد يكون أضيق ، بالتأكيد لا يجب أن يكون أقصر)

لوح من الخشب 33x10

الصواميل و البراغي

أنبوب 14 سم (هذا ضروري لتوجيه الخيوط)

4 L- بين قوسين

محول 5 فولت

2 كتل طرفية 7 اتجاهات

أسلاك اللوح

مكونات مطبوعة ثلاثية الأبعاد (لم أقم بتصميمها ، روابط لعناصر في الوصف):

3 "البراغي"

2 "العنصر 1"

1 "العنصر 2"

2 "العنصر 3"

1 موصل قاعدة

الخطوة 1: طباعة جميع المكونات ثلاثية الأبعاد

قد تحتاج إلى دعم فتحات المسامير والأقواس ولكن تأكد من عدم إضافة دعم لجسم المكونات الخاصة بك ؛ سيؤدي ذلك إلى إغلاق فتحات الأسلاك الصغيرة وستحتاج إلى عمل ثقوب جديدة

الخطوة 2: (اختياري) قم بتثبيت لوح من الخشب بأسفل الصندوق لتقويته

كان صندوقي ضعيفًا جدًا ، وقد لا يكون صندوقك كذلك

الخطوة 3: قم بقياس وقطع لوح من الخشب لتناسب الصندوق

الخطوة 4: حدد مواقف المحركات

تأكد من عدم لمس أي من الذراعين لبعضهما البعض

الخطوة 5: حدد مواضع الأقواس والأنبوب

حدد مواضع الأقواس والأنبوب
حدد مواضع الأقواس والأنبوب

يجب وضع الأنبوب على بعد سنتيمتر واحد أمام الحفرة

الخطوة 6: حفر حفرة للكابلات الخارجة من صندوقك (USB والطاقة)

حفر حفرة للكابلات الخارجة من صندوقك (USB والطاقة)
حفر حفرة للكابلات الخارجة من صندوقك (USB والطاقة)

الخطوة 7: حفر ورأى جميع الثقوب المحددة

حفر ورأى جميع الثقوب المحددة
حفر ورأى جميع الثقوب المحددة

الخطوة 8: قم بتوصيل المحركات والأنبوب باللوح

الخطوة 9: قم بتوصيل اللوح بالصندوق باستخدام الأقواس L

الخطوة 10: خذ الكتل الطرفية وقم بتوصيل الأسلاك معًا

خذ الكتل الطرفية وقم بتوصيل الأسلاك معًا
خذ الكتل الطرفية وقم بتوصيل الأسلاك معًا

الخطوة 11: قم بقطع نهاية كبل طاقة المهايئ وقم بفصل الأسلاك

الخطوة 12: تحديد وتمييز الأسلاك الموجبة والناقص

الخطوة 13: قم بتوصيل الأسلاك بالكتل الطرفية بحيث يتم توصيل جميع أسلاك + المؤازرة والسلك + من سلك الطاقة ، وينطبق نفس الشيء على الأسلاك

قم بتوصيل الأسلاك بالكتل الطرفية بحيث يتم توصيل جميع أسلاك + المؤازرة والسلك + من سلك الطاقة ، وينطبق نفس الشيء على الأسلاك
قم بتوصيل الأسلاك بالكتل الطرفية بحيث يتم توصيل جميع أسلاك + المؤازرة والسلك + من سلك الطاقة ، وينطبق نفس الشيء على الأسلاك

الخطوة 14: قطع الرأس من سلك اللوح

قطع الرأس من سلك اللوح
قطع الرأس من سلك اللوح

قم بتوصيل الطرف المجرد من سلك اللوح بالكتلة الطرفية الناقص وطرف الدبوس بالدبوس الأرضي في اردوينو الخاص بك. إذا لم تفعل ذلك ، فستتحرك المحركات بشكل متقطع دون أي إدخال.

الخطوة 15: حفر ثلاثة ثقوب في أسفل الصندوق للأسلاك الخارجة من ذراعك

يجب أن تتطابق الثقوب مع الثقوب الموجودة في موصل القاعدة.

الخطوة 16: قم بتوصيل موصل القاعدة بالمربع

قم بتوصيل موصل القاعدة بالصندوق
قم بتوصيل موصل القاعدة بالصندوق

الخطوة 17: استخدم سكينًا أو مبرد أظافر لجعل الأخاديد السلكية أعمق

استخدم سكينًا أو مبرد أظافر لتعميق الأخاديد السلكية
استخدم سكينًا أو مبرد أظافر لتعميق الأخاديد السلكية

أخاديد الأسلاك للعنصرين 2 و 3 ضحلة جدًا.

الخطوة 18: بناء الذراع

بناء الذراع
بناء الذراع

قم ببناء الذراع وفقًا للتعليمات الواردة هنا ، فقد تحتاج إلى حفظ الأجزاء حتى تناسبها

الخطوة 19: تثبيت المعالجة و Arduino

المعالجة والاردوينو

الخطوة 20: الصق برامج الكود

الرمز في أسفل هذه الصفحة

الخطوة 21: قم بتوصيل دبابيس التحكم المؤازرة بـ Arduino

قم بتوصيل دبابيس التحكم المؤازرة بـ Arduino
قم بتوصيل دبابيس التحكم المؤازرة بـ Arduino

لقد قمت بتوصيل المحرك الأول بالدبوس الرقمي الثالث ، والمحرك الثاني بالدبوس الرقمي الرابع وما إلى ذلك. تأكد من أن الدبوس الأرضي لا يزال متصلاً بالكتلة الطرفية.

الخطوة 22: اضغط على زر إعادة التعيين في المعالجة ، سيؤدي ذلك إلى ضبط جميع الأسلحة على 90 درجة

الخطوة 23: إصلاح أذرع المؤازرة إلى المحرك أفقيًا

الخطوة 24: قم بربط الأسلاك من خلال الذراعين حتى لا يكون هناك ارتخاء

تأكد من تمرير السلك عبر أكبر عدد ممكن من الثقوب ، فهذا سيحمله مؤقتًا ويسهل إزالته.

الخطوة 25: اختبر الذراع وشد أو فك الأسلاك حسب الحاجة

الخطوة 26: قم بلصق الأسلاك الساخنة بأذرع المؤازرة لجعلها دائمة

الخطوة 27: الملاحظات

ملحوظات
ملحوظات

لقد استخدمت سلك مجوهرات 0.5 مم ولكن يجب أن يكون 0.4 مم جيدًا. استخدم التصميم الأصلي سلك PVC ولكن هذا كسر بسهولة وكان من الصعب العمل معه.

إذا كنت ستحرك ذراعك في سيارة أو دراجة ، فلف مفاصل الذراع بشريط للتأكد من عدم خروجها. هذا مهم بشكل خاص للعنصر 1.

عندما بدأت هذا المشروع ، كنت أتساءل لماذا لم أجد سوى برنامج تعليمي واحد حول كيفية صنع ذراع تتحكم فيه الأسلاك. الآن أفهم لماذا هذه ليست الطريقة الأكثر شيوعًا لصنع ذراع آلي للهواية. أحيانًا تسقط الأسلاك من أخاديدها وكل شيء واهية نوعًا ما. لا أعرف ما إذا كانت المشاكل بسبب عدم وجود الكثير من الخبرة أو إذا كانت الفكرة بأكملها مشكلة على الرغم من أنني متأكد من أنها ستكون أكثر صلابة إذا كنت أعرف ما كنت أفعله.

الخطوة 28: استكشاف الأخطاء وإصلاحها

يتم إغلاق فتحات الأسلاك في العناصر المطبوعة ثلاثية الأبعاد:

لقد أضفت دعمًا للعنصر بأكمله بدلاً من ثقوب البراغي فقط. قم بإعادة طباعة العنصر أو فتح الثقوب بإبرة ساخنة حقًا.

منفذ COM مغلق ، لا يمكنك التواصل مع اردوينو:

قد لا يقبل Arduino الخاص بك منافذ USB 3 (لم أفعل ذلك) ، يمكنك إما شراء كابل تمديد USB 2 أو استخدام جهاز كمبيوتر به منافذ USB 2

الرمز لا يعمل:

اتبع هذا البرنامج التعليمي وقم بتعديله لإنشاء التعليمات البرمجية الخاصة بك

جزء من الذراع لا يتحرك:

ربما تكون الأسلاك متشابكة ، للتحقق من ذلك ، انزع ذراع المؤازرة من المؤازرة وحاول سحب الأسلاك يدويًا. قم بفك تشابك الأسلاك وإذا كان لا يزال من الصعب سحب الأسلاك ، فحاول استخدام بعض WD-40 أو مادة تشحيم لتسهيل الحركة

الخطوة 29: الروابط

الذراع غير الروبوتية:

طابعات الذراع ثلاثية الأبعاد:

ذراعي ثلاثية الأبعاد للطباعة:

Arduino والمعالجة:

الخطوة 30: الكود

معدل من هذا الرمز

كود اردوينو:

# تضمين // قم بتعريف المحركات Servo myservo1 ؛ مضاعفات myservo2 ؛ مضاعفات myservo3 ؛ مضاعفات myservo4 ؛ مضاعفات myservo5 ؛ مؤازرة myservo6 ؛ // يتم ضبط جميع المحركات عند 90 درجة افتراضيًا int current1 = 90 ؛ كثافة العمليات الحالية 2 = 90 ؛ int current3 = 90 ؛ int current4 = 90 ؛ كثافة العمليات الحالية 5 = 90 ؛ كثافة العمليات الحالية 6 = 90 ؛ // الحد الأدنى والحد الأقصى للدرجات التي يمكن أن تصل إليها المحركات int mini1 = 0 ؛ int maxi1 = 180 ؛ int mini2 = 0 ؛ int maxi2 = 180 ؛ كثافة العمليات mini3 = 0 ؛ int maxi3 = 180 ؛ كثافة العمليات mini4 = 0 ؛ int maxi4 = 180 ؛ كثافة العمليات mini5 = 0 ؛ int maxi5 = 180 ؛ كثافة العمليات mini6 = 0 ؛ int maxi6 = 180 ؛ // الدرجات المراد إضافتها أو طرحها من الموضع الحالي int درجاتFoward = 5 ؛ // تأخير حتى لا تحدث وظيفتان بترتيب خاطئ int delayBetweenSteps = 100 ؛ إعداد باطل () {// تعيين دبابيس التحكم لكل محرك myservo1.attach (3) ؛ myservo2.attach (4) ، myservo3.attach (5) ، myservo4.attach (6) ، myservo5.attach (7) ، myservo6.attach (8) ، // اضبط جميع المحركات على الإعداد الافتراضي myservo1.write (current1) ؛ myservo2.write (current2) ، myservo3.write (current3) ، myservo4.write (current4) ؛ myservo5.write (current5) ؛ myservo6.write (current6) ؛ // بدء الاتصال التسلسلي @ 9600 بت في الثانية Serial.begin (9600) ؛ } void loop () {if (Serial.available ()) {// إذا كانت البيانات متاحة لقراءة char val = Serial.read () ؛ // ضعها في char // Motor Controls if (val == 'a' && current1 + degreesFoward mini1) {myservo1.write (current1 - degreesFoward)؛ current1 = current1 - درجات إلى الأمام ؛ تأخير (تأخير بين الخطوات) ؛ } if (val == 'c' && current2 mini2) {myservo2.write (current2 - degreesFoward)؛ current2 = current2 - درجات إلى الأمام ؛ تأخير (تأخير بين الخطوات) ؛ } if (val == 'e' && current3 mini3) {myservo3.write (current3 - degreesFoward)؛ Current3 = current3 - درجات تأخير (تأخير بين الخطوات) ؛ } if (val == 'g' && current4 mini4) {myservo4.write (current4 - degreesFoward)؛ Current4 = current4 - درجات تأخير (تأخير بين الخطوات) ؛ } if (val == 'i' && current5 mini5) {myservo5.write (current5 - degreesFoward)؛ Current5 = current5 - درجات إلى الأمام ؛ تأخير (تأخير بين الخطوات) ؛ } if (val == 'k' && current6 mini6) {myservo6.write (current6 - degreesFoward)؛ current6 = current6 - درجات إلى الأمام ؛ تأخير (تأخير بين الخطوات) ؛ } // يتحكم في السرعة (val == 'w') {// إذا تم الضغط على زر السرعة 1 درجات Foward = 1 ؛ تأخير (تأخير بين الخطوات) ؛ } إذا (val == 'x') {// إذا تم الضغط على زر السرعة 5 درجات Foward = 5 ؛ تأخير (تأخير بين الخطوات) ؛ } إذا (val == 'y') {// إذا تم الضغط على زر السرعة 10 درجات Foward = 10 ؛ تأخير (تأخير بين الخطوات) ؛ } إذا (val == 'z') {// إذا تم الضغط على زر السرعة 20 درجة Foward = 20 ؛ تأخير (تأخير بين الخطوات) ؛ } إذا (val == 'r') {// إذا تم الضغط على زر السرعة 20 myservo1.write (90) ؛ التيار 1 = 90 ؛ myservo2.write (90) ، التيار 2 = 90 ؛ myservo3.write (90) ، Current3 = 90 ؛ myservo4.write (90) ، Current4 = 90 ؛ myservo5.write (90) ؛ الحالي 5 = 90 ؛ myservo6.write (90) ، تيار 6 = 90 ؛ تأخير (تأخير بين الخطوات) ؛ }}}

كود المعالجة:

معالجة الاستيراد. تسلسلي. * ؛ مراقبة الاستيراد // استيراد مكتبة ControlP5 المنفذ التسلسلي ؛ التحكم P5 cp5 ؛ // إنشاء خط PFont الكائن ControlP5 ؛ إعداد باطل () {// مثل حجم برنامج اردوينو (300 ، 700) ؛ // حجم النافذة ، (العرض ، الارتفاع) printArray (Serial.list ()) ؛ // يطبع جميع المنافذ التسلسلية المتاحة // إذا كنت تواجه مشكلة فمن المحتمل أن تأتي من هنا String portName = Serial.list () [0]؛ المنفذ = مسلسل جديد (هذا ، portName ، 9600) ؛ // لقد قمت بتوصيل arduino بـ com3 ، سيكون مختلفًا في نظام التشغيل Linux و mac os // يتيح إضافة buton إلى نافذة فارغة cp5 = new ControlP5 (هذا) ؛ font = createFont ("Arial"، 13)؛ // خطوط مخصصة للأزرار والعنوان // أزرار التحكم في السرعة cp5.addButton ("واحد") // "واحد" هو اسم الزر.setPosition (50 ، 50) // إحداثيات x و y للركن الأيسر العلوي للزر.setSize (55، 25) // (width، height).setFont (font) ؛ cp5.addButton ("Five").setPosition (110، 50).setSize (55، 25).setFont (font) ؛ cp5.addButton ("Ten").setPosition (170، 50).setSize (55، 25).setFont (font) ؛ cp5.addButton ("عشرون").setPosition (230، 50).setSize (55، 25).setFont (font) ؛ cp5.addButton ("إعادة تعيين").setPosition (110، 2).setSize (55، 25).setFont (font) ؛ cp5.addButton ("Servo_1_Foward").setPosition (50، 90).setSize (190، 40).setFont (font) ؛ // أزرار التحكم في المحرك cp5.addButton ("Servo_1_Back").setPosition (50، 140).setSize (190، 40).setFont (font) ؛ cp5.addButton ("Servo_2_Foward").setPosition (50، 190).setSize (190، 40).setFont (font) ؛ cp5.addButton ("Servo_2_Back").setPosition (50، 240).setSize (190، 40).setFont (font) ؛ cp5.addButton ("Servo_3_Foward").setPosition (50، 290).setSize (190، 40).setFont (font) ؛ cp5.addButton ("Servo_3_Back").setPosition (50، 340).setSize (190، 40) // (width، height).setFont (font) ؛ cp5.addButton ("Servo_4_Foward").setPosition (50، 390).setSize (190، 40).setFont (font) ؛ cp5.addButton ("Servo_4_Back").setPosition (50، 440).setSize (190، 40) // (width، height).setFont (font) ؛ cp5.addButton ("Servo_5_Foward").setPosition (50، 490).setSize (190، 40).setFont (font) ؛ cp5.addButton ("Servo_5_Back").setPosition (50، 540).setSize (190، 40).setFont (font) ؛ cp5.addButton ("Servo_6_Foward").setPosition (50، 590).setSize (190، 40).setFont (font) ؛ cp5.addButton ("Servo_6_Back").setPosition (50، 640).setSize (190، 40).setFont (font) ؛ } void draw () {// نفس الحلقة في خلفية اردوينو (192، 215، 249)؛ // لون خلفية النافذة (ص ، ز ، ب) أو (من 0 إلى 255) // أضف نصًا يقول إن التحكم في السرعة هو تعبئة التحكم في السرعة (0 ، 10 ، 25) ؛ // لون النص (ص ، ز ، ب) textFont (الخط) ؛ نص ("التحكم في السرعة" ، 50 ، 40) ؛ // ("نص" ، تنسيق س ، ص تنسيق)} // دعنا نضيف بعض الوظائف إلى أزرارنا // لذلك عندما تضغط على أي زر ، فإنه يرسل حرفًا معينًا عبر المنفذ التسلسلي // أنا متأكد من أنه من الممكن إرسال سلاسل بدلاً من الأحرف ، سيكون ذلك منطقيًا أكثر ولكني لا أعرف كيف أفعل ذلك // Speed Control Commands void One () {port.write ('w')؛ } void Five () {port.write ('x')؛ } void Ten () {port.write ('y')؛ } void Twenty () {port.write ('z')؛ } // أوامر التحكم في المحرك void Servo_1_Foward () {port.write ('a')؛ } void Servo_1_Back () {port.write ('b')؛ } void Servo_2_Foward () {port.write ('c') ؛ } باطل Servo_2_Back () {port.write ('d') ؛ } void Servo_3_Foward () {port.write ('e') ؛ } void Servo_3_Back () {port.write ('f') ؛ } void Servo_4_Foward () {port.write ('g') ؛ } باطل Servo_4_Back () {port.write ('h') ؛ } void Servo_5_Foward () {port.write ('i')؛ } باطل Servo_5_Back () {port.write ('j') ؛ } void Servo_6_Foward () {port.write ('k')؛ } باطل Servo_6_Back () {port.write ('l') ؛ } void Reset () {port.write ('r')؛ }

الخطوة 31: المزيد من الصور