תוכן עניינים:

זרוע רובוט נשלטת על חוטים: 31 שלבים
זרוע רובוט נשלטת על חוטים: 31 שלבים

וִידֵאוֹ: זרוע רובוט נשלטת על חוטים: 31 שלבים

וִידֵאוֹ: זרוע רובוט נשלטת על חוטים: 31 שלבים
וִידֵאוֹ: Ten Truly Strange UFO Encounters 2024, נוֹבֶמבֶּר
Anonim
זרוע רובוט נשלטת באמצעות חוטים
זרוע רובוט נשלטת באמצעות חוטים

זו הדרכה כיצד לייצר זרוע רובוט הנשלטת על ידי חוטים. היתרון בשימוש בחוטים הוא בכך שהזרוע שלך קלה יותר ותוכל לקבל את כל המנועים שלך בחלק התחתון של היד, מה שהופך את הבנייה והתחזוקה לקלה יותר. לפניכם סרטון של הזרוע בפעולה. אני מתכוון להוסיף טופר בעתיד כדי שהוא יוכל להרים דברים ולא רק לדחוף אותם.

ניתן להדפיס תלת מימד:

כאן וכאן

אספקה

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: התקן את עיבוד וארדואינו

עיבוד וארדואינו

שלב 20: הדבק את תוכניות הקוד

הקוד נמצא בתחתית דף זה

שלב 21: חבר את סיכות הבקרה של סרוו ל- Arduino

חבר את סיכות השליטה בסרוו ל- Arduino
חבר את סיכות השליטה בסרוו ל- Arduino

חיברתי את המנוע הראשון לסיכה הדיגיטלית השלישית, המנוע השני לסיכה הדיגיטלית הרביעית וכן הלאה. וודא שסיכת הארקה עדיין מחוברת לבלוק המסוף -.

שלב 22: לחץ על לחצן איפוס בעיבוד, זה יגדיר את כל הזרועות ל -90 מעלות

שלב 23: קבע את זרועות סרוו למנוע אופקית

שלב 24: השחילו את החוטים בזרועות כך שלא יהיה רפיון

הקפד להשחיל את החוט דרך חורים רבים ככל שתוכל, הדבר יחזיק אותו באופן זמני ויהיה קל להסרה.

שלב 25: בדוק את הזרוע והדק או שחרר את החוטים לפי הצורך

שלב 26: הדבק חם את החוטים בזרועות הסרוו כדי להפוך אותו לצמיתות

שלב 27: הערות

הערות
הערות

השתמשתי בחוט תכשיטים 0.5 מ"מ אבל 0.4 מ"מ אמור להיות בסדר. העיצוב המקורי השתמש בחוט PVC אך הוא נשבר בקלות רבה מדי והיה קשה לעבוד איתו.

אם אתה עומד להזיז את הזרוע במכונית או באופניים, עטוף את מפרקי הזרוע בקלטת כדי לוודא שהם לא יוצאים החוצה. זה חשוב במיוחד עבור אלמנט 1.

כשהתחלתי את הפרויקט הזה תהיתי מדוע אני יכול למצוא רק הדרכה אחת כיצד לייצר זרוע הנשלטת על ידי חוטים. עכשיו אני מבין מדוע זו לא הדרך הנפוצה ביותר לייצר זרוע רובוט תחביב. החוטים לפעמים נופלים מהחריצים שלהם וכל העניין דקיק. אני לא יודע אם הבעיות הן בגלל שאין לי הרבה ניסיון או אם כל הרעיון בעייתי למרות שאני בטוח שזה יהיה יותר מוצק אם הייתי יודע מה אני עושה.

שלב 28: פתרון בעיות

חורי החוט סגורים באלמנטים המודפסים בתלת מימד:

הוספת תמיכה לכל האלמנט במקום רק את חורי הבריח. או הדפס מחדש את האלמנט או פתח את החורים בעזרת מחט חמה ממש.

יציאת ה- COM סגורה, אינך יכול לתקשר עם הארדואינו:

ייתכן שהארדואינו שלך לא יקבל יציאות USB 3 (שלי לא), אתה יכול לקנות כבל מאריך USB 2 או להשתמש במחשב בעל יציאות USB 2

הקוד לא עובד:

עקוב אחר מדריך זה ושנה אותו ליצירת קוד משלך

חלק מהזרוע אינו זז:

החוטים עשויים להסתבך, כדי לבדוק זאת הורידו את זרוע הסרוו מהסרוו ונסו למשוך את החוטים ביד. נתק את החוטים ואם עדיין קשה למשוך את החוטים נסה להשתמש בכמה WD-40 או בחומר סיכה כדי להקל על התנועה.

שלב 29: קישורים

זרוע לא רובוטית:

זמינות 3D להדפסה:

ניתן להדפיס את הזרוע שלי בתלת מימד:

Arduino ועיבוד:

שלב 30: קוד

שונה מהקוד הזה

קוד ארדואינו:

#include // הצהירו על המנועים Servo myservo1; סרוו myservo2; סרוו myservo3; סרוו myservo4; סרוו myservo5; סרוו myservo6; // כל המנועים מוגדרים על 90 מעלות כברירת מחדל int current1 = 90; int current2 = 90; int current3 = 90; int current4 = 90; int current5 = 90; int current6 = 90; // מינימום ומקסימום המנועים יכולים להגיע int mini1 = 0; int maxi1 = 180; int mini2 = 0; int maxi2 = 180; int mini3 = 0; int maxi3 = 180; int mini4 = 0; int maxi4 = 180; int mini5 = 0; int maxi5 = 180; int mini6 = 0; int maxi6 = 180; // מעלות שיש להוסיף או להפחית מהמיקום הנוכחי int degreesFoward = 5; // עיכוב כך ששתי פונקציות לא יקרו בסדר הלא נכון int delayBetweenSteps = 100; הגדרת void () {// הגדר סיכות שליטה לכל מנוע 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 bps Serial.begin (9600); } void loop () {if (Serial.available ()) {// אם נתונים זמינים לקריאה char val = Serial.read (); // הכנס אותו לתו הזה // בקרת מנוע אם (val == 'a' && current1 + degreesFoward mini1) {myservo1.write (current1 - degreesFoward); current1 = current1 - degreesFoward; עיכוב (delayBetweenSteps); } if (val == 'c' && current2 mini2) {myservo2.write (current2 - degreesFoward); current2 = current2 - degreesFoward; עיכוב (delayBetweenSteps); } if (val == 'e' && current3 mini3) {myservo3.write (current3 - degreesFoward); current3 = current3 - degreesFoward; עיכוב (delayBetweenSteps); } if (val == 'g' && current4 mini4) {myservo4.write (current4 - degreesFoward); current4 = current4 - degreesFoward; עיכוב (delayBetweenSteps); } if (val == 'i' && current5 mini5) {myservo5.write (current5 - degreesFoward); current5 = current5 - degreesFoward; עיכוב (delayBetweenSteps); } if (val == 'k' && current6 mini6) {myservo6.write (current6 - degreesFoward); current6 = current6 - degreesFoward; עיכוב (delayBetweenSteps); } // בקרות מהירות אם (val == 'w') {// אם כפתור מהירות 1 נלחץ מעלות Foward = 1; עיכוב (delayBetweenSteps); } if (val == 'x') {// אם כפתור המהירות 5 נלחץ מעלות מעלות = 5; עיכוב (delayBetweenSteps); } if (val == 'y') {// אם כפתור מהירות 10 נלחץ מעלות ° 10 =; עיכוב (delayBetweenSteps); } if (val == 'z') {// אם כפתור מהירות 20 נלחץ מעלות ° 20 =; עיכוב (delayBetweenSteps); } if (val == 'r') {// אם לחצן מהירות 20 לחץ על myservo1.write (90); הנוכחי 1 = 90; myservo2.write (90); הנוכחי 2 = 90; myservo3.write (90); הנוכחי 3 = 90; myservo4.write (90); הנוכחי 4 = 90; myservo5.write (90); הנוכחי 5 = 90; myservo6.write (90); זרם 6 = 90; עיכוב (delayBetweenSteps); }}}

קוד עיבוד:

ייבוא עיבוד. סדרה.*; בקרת יבוא P5.*; // ייבוא יציאה טורית של ספריית ControlP5; ControlP5 cp5; // צור גופן PFont אובייקט ControlP5; הגדרת void () {// זהה לגודל התוכנית של arduino (300, 700); // גודל חלון, (רוחב, גובה) printArray (Serial.list ()); // מדפיס את כל היציאות הטורקיות הזמינות // אם יש לך בעיה זה כנראה מגיע מכאן String portName = Serial.list () [0]; port = סידורי חדש (זה, portName, 9600); // חיברתי את arduino ל- com3, זה יהיה שונה בלינוקס וב- mac os // מאפשר להוסיף בוטון לחלון ריק cp5 = new ControlP5 (זה); font = createFont ("Arial", 13); // גופנים מותאמים אישית לכפתורים וכותרת // לחצני בקרת מהירות cp5.addButton ("אחד") // "אחד" הוא שם הכפתור.setPosition (50, 50) // קואורדינטות x ו- y של הפינה השמאלית העליונה של הכפתור.setSize (55, 25) // (רוחב, גובה).setFont (גופן); cp5.addButton ("Five").setPosition (110, 50).setSize (55, 25).setFont (פונט); cp5.addButton ("עשר").setPosition (170, 50).setSize (55, 25).setFont (פונט); cp5.addButton ("עשרים").setPosition (230, 50).setSize (55, 25).setFont (פונט); cp5.addButton ("איפוס").setPosition (110, 2).setSize (55, 25).setFont (פונט); cp5.addButton ("Servo_1_Foward").setPosition (50, 90).setSize (190, 40).setFont (פונט); // לחצני בקרת מנוע cp5.addButton ("Servo_1_Back").setPosition (50, 140).setSize (190, 40).setFont (פונט); cp5.addButton ("Servo_2_Foward").setPosition (50, 190).setSize (190, 40).setFont (פונט); cp5.addButton ("Servo_2_Back").setPosition (50, 240).setSize (190, 40).setFont (פונט); cp5.addButton ("Servo_3_Foward").setPosition (50, 290).setSize (190, 40).setFont (פונט); cp5.addButton ("Servo_3_Back").setPosition (50, 340).setSize (190, 40) // (רוחב, גובה).setFont (פונט); cp5.addButton ("Servo_4_Foward").setPosition (50, 390).setSize (190, 40).setFont (פונט); cp5.addButton ("Servo_4_Back").setPosition (50, 440).setSize (190, 40) // (רוחב, גובה).setFont (פונט); cp5.addButton ("Servo_5_Foward").setPosition (50, 490).setSize (190, 40).setFont (פונט); cp5.addButton ("Servo_5_Back").setPosition (50, 540).setSize (190, 40).setFont (פונט); cp5.addButton ("Servo_6_Foward").setPosition (50, 590).setSize (190, 40).setFont (פונט); cp5.addButton ("Servo_6_Back").setPosition (50, 640).setSize (190, 40).setFont (פונט); } צייר חלל () {// זהה ללולאה ברקע ארדואינו (192, 215, 249); // צבע רקע של החלון (r, g, b) או (0 עד 255) // הוסף טקסט שאומר שליטת מהירות היא מילוי בקרת מהירות (0, 10, 25); // צבע טקסט (r, g, b) textFont (פונט); טקסט ("בקרת מהירות", 50, 40); // ("טקסט", x קואורדינטות, y קואורדינטות)} // מאפשר להוסיף כמה פונקציות לכפתורים שלנו // כך שכאשר אתה לוחץ על כפתור כלשהו, הוא שולח צ'ר מסוים על יציאה טורית // אני בטוח שאפשר לשלוח מחרוזות במקום תווים, זה יהיה יותר הגיוני אבל אני לא יודע איך לעשות את זה // פקודות בקרת מהירות void One () {port.write ('w'); } void Five () {port.write ('x'); } void Ten () {port.write ('y'); } void Twenty () {port.write ('z'); } // פקודות בקרת המנוע חלות על Servo_1_Foward () {port.write ('a'); } בטל Servo_1_Back () {port.write ('b'); } בטל Servo_2_Foward () {port.write ('c'); } בטל Servo_2_Back () {port.write ('d'); } void Servo_3_Foward () {port.write ('e'); } בטל 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: תמונות נוספות

מוּמלָץ: