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

רובוט בסיס ובחירה של ארדואינו: 8 שלבים
רובוט בסיס ובחירה של ארדואינו: 8 שלבים

וִידֵאוֹ: רובוט בסיס ובחירה של ארדואינו: 8 שלבים

וִידֵאוֹ: רובוט בסיס ובחירה של ארדואינו: 8 שלבים
וִידֵאוֹ: הרובוט למסחר בבורסה הטוב בעולם - עכשיו זמין לסוחרי אלגוטריידינג [הסרטון המלא] 2024, יולי
Anonim
רובוט בסיס ובחר ארדואינו
רובוט בסיס ובחר ארדואינו
רובוט בסיס ובחר ארדואינו
רובוט בסיס ובחר ארדואינו
רובוט בסיס ובחר ארדואינו
רובוט בסיס ובחר ארדואינו

עשיתי זרוע רובוט תעשייתי זולה במיוחד (פחות מ -1000 דולר) כדי לאפשר לתלמידים לפרוץ רובוטיקה בקנה מידה גדול יותר ולאפשר להפקות מקומיות קטנות להשתמש ברובוטים בתהליכים שלהם מבלי לשבור את הבנק. קל לבנות ולהפוך את קבוצת הגילאים לגילאי 15 עד 50 שנים.

שלב 1: דרישת רכיבים

דרישת רכיבים
דרישת רכיבים
דרישת רכיבים
דרישת רכיבים
דרישת רכיבים
דרישת רכיבים
דרישת רכיבים
דרישת רכיבים

1. ארדואינו + מגן + סיכות + כבלים

2. בקר מוטורי: dm860A (Ebay)

3. מנוע צעד: 34hs5435c-37b2 (Ebay)

4. ברגים M8x45+60+70 וברגים M8.

5. דיקט 12 מ מ.

6. ניילון 5 מ מ.

7. מכונות כביסה עיוורות 8 מ מ.

8. ברגי עץ 4.5x40 מ מ.

9. מונה M3 שקועה, 10. ספק כוח 12v

11. נהג מנועי סרוו ארדואינו

שלב 2: הורד את Gui

zapmaker.org/projects/grbl-controller-3-0/

github.com/grbl/grbl/wiki/Using-Grbl

שלב 3: חיבור

חיבור
חיבור
חיבור
חיבור
חיבור
חיבור

חבר את החוטים המופיעים בתמונה היא הבנה רבה יותר עבורך.

עלינו לחבר את נהג המנוע ל- Arduino ומחברים אחרים הדרושים לפי הרובוט שלך.

שלב 4: העלה קושחה ובדוק את תוצאת הקוד בלוח המחוונים של Arduino

התקנת הקושחה ב- Arduino - GRBL:

github.com/grbl/grbl/wiki/Compiling-Grbl

הערה: אתה עלול לקבל התנגשות בעת חיבור בארדואינו. הסר את כל הספריות האחרות מתיקיית הספרייה שלך (../documents/Arduino/libraries).

הגדרת קושחה

הגדר הפעלה לפסק זמן חדש יותר. השתמש בחיבור טורי וכתוב:

$1=255

הגדר דירה:

$22=1

זכור להגדיר סדרה ל- baud: 115200

קודי G שימושיים

הגדר נקודת אפס עבור רובוט:

G10 L2 Xnnn Ynnn Znnn

השתמש בנקודת אפס:

G54

אתחול אופייני למרכז רובוט:

G10 L2 X1.5 Y1.2 Z1.1

G54

העבר את הרובוט למיקום מהיר:

G0 Xnnn Ynnn Znnn

דוגמא:

G0 X10.0 Y3.1 Z4.2 (החזרה)

העבר את הרובוט למיקום במהירות מסוימת:

G1 Xnnn Ynnn Znnn Fnnn

G1 X11 Y3 Z4 F300 (החזרה)

F צריך להיות בין 10 (slooooow) ל 600 (מהיר)

יחידות ברירת מחדל עבור X, Y ו- Z

בעת שימוש בהגדרות ברירת המחדל של שלב/יחידות (250 צעד/יחידה) עבור GRBL ו-

כונן צעד מוגדר עבור 800 צעדים/סיבובים היחידות הבאות חלות על כל הציר:

+- 32 יחידות = +- 180 מעלות

דוגמת קוד עיבוד:

קוד זה יכול לתקשר ישירות עם ה- Arduino GRBL.

github.com/damellis/gctrl

זכור להגדיר סדרה ל- baud: 115200

קוד uoload בארדוניו

יבוא java.awt.event. KeyEvent;

יבוא javax.swing. JOptionPane;

ייבוא עיבוד. סדרה.*;

יציאה טורית = null;

// בחר ושנה את השורה המתאימה למערכת ההפעלה שלך

// השאר כבטל לשימוש ביציאה אינטראקטיבית (הקש על 'p' בתוכנית)

שם מחרוזת מחרוזת = null;

// String portname = Serial.list () [0]; // Mac OS X

// String portname = "/dev/ttyUSB0"; // לינוקס

// String portname = "COM6"; // חלונות

סטרימינג בוליאני = שקר;

מהירות צף = 0.001;

מחרוזת gcode;

int i = 0;

void openSerialPort ()

{

if (portname == null) לחזור;

if (port! = null) port.stop ();

port = סידורי חדש (זה, שם יציאה, 115200);

port.bufferUntil ('\ n');

}

void selectSerialPort ()

{

תוצאת מחרוזת = (String) JOptionPane.showInputDialog (זה, "בחר את היציאה הטורית המתאימה ללוח ה- Arduino שלך.", "בחר יציאה טורית", JOptionPane. PLAIN_MESSAGE, ריק, Serial.list (), 0);

אם (תוצאה! = null) {

portname = תוצאה;

openSerialPort ();

}

}

הגדרת חלל ()

{

גודל (500, 250);

openSerialPort ();

}

תיקו חלל ()

{

רקע (0);

מילוי (255);

int y = 24, dy = 12;

text ("הוראות", 12, y); y += dy;

text ("p: בחר יציאה טורית", 12, y); y += dy;

text ("1: הגדר את המהירות ל- 0.001 אינץ '(1 מיל) לריצה", 12, y); y += dy;

text ("2: הגדר את המהירות ל- 0.010 אינץ '(10 מיל) לכל ריצה", 12, y); y += dy;

text ("3: הגדר את המהירות ל- 0.100 אינץ '(100 מיל) לריצה", 12, y); y += dy;

text ("מקשי החצים: ריצה במישור x-y", 12, y); y += dy;

text ("דף למעלה ודף למטה: ריצה בציר z", 12, y); y += dy;

text ("$: display grbl settings", 12, y); y+= dy;

text ("h: לך הביתה", 12, y); y += dy;

text ("0: מכונת אפס (הגדר את הבית למיקום הנוכחי)", 12, y); y += dy;

text ("g: הזרמת קובץ קוד g", 12, y); y += dy;

text ("x: הפסק הזרמת קוד g (זה לא מיידי)", 12, y); y += dy;

y = גובה - dy;

text ("מהירות ריצה נוכחית:" + מהירות + "סנטימטרים לכל שלב", 12, y); y -= dy;

text ("יציאה טורית נוכחית:" + שם יציאה, 12, y); y -= dy;

}

void keyPressed ()

{

אם (מפתח == '1') מהירות = 0.001;

אם (מפתח == '2') מהירות = 0.01;

אם (מפתח == '3') מהירות = 0.1;

אם (! סטרימינג) {

if (keyCode == LEFT) port.write ("G91 / nG20 / nG00 X-" + מהירות + "Y0.000 Z0.000 / n");

if (keyCode == RIGHT) port.write ("G91 / nG20 / nG00 X" + מהירות + "Y0.000 Z0.000 / n");

if (keyCode == UP) port.write ("G91 / nG20 / nG00 X0.000 Y" + מהירות + "Z0.000 / n");

if (keyCode == DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y-" + מהירות + "Z0.000 / n");

if (keyCode == KeyEvent. VK_PAGE_UP) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z" + מהירות + "\ n");

if (keyCode == KeyEvent. VK_PAGE_DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z-" + מהירות + "\ n");

// if (key == 'h') port.write ("G90 / nG20 / nG00 X0.000 Y0.000 Z0.000 / n");

if (key == 'v') port.write ("$ 0 = 75 / n $ 1 = 74 / n $ 2 = 75 / n");

// if (key == 'v') port.write ("$ 0 = 100 / n $ 1 = 74 / n $ 2 = 75 / n");

if (key == 's') port.write ("$ 3 = 10 / n");

if (key == 'e') port.write ("$ 16 = 1 / n");

if (key == 'd') port.write ("$ 16 = 0 / n");

if (key == '0') openSerialPort ();

if (key == 'p') selectSerialPort ();

if (key == '$') port.write ("$$ / n");

if (key == 'h') port.write ("$ H / n");

}

if (! streaming && key == 'g') {

gcode = null; i = 0;

קובץ קובץ = null;

println ("טוען קובץ …");

selectInput ("בחר קובץ לעיבוד:", "fileSelected", קובץ);

}

אם (key == 'x') streaming = false;

}

void fileSelected (בחירת קובץ) {

אם (בחירה == null) {

println ("החלון נסגר או שהמשתמש בטל ביטול.");

} אחר {

println ("משתמש נבחר" + selection.getAbsolutePath ());

gcode = loadStrings (selection.getAbsolutePath ());

אם (gcode == null) החזרה;

סטרימינג = נכון;

זרם();

}

}

זרם חלל ()

{

if (! streaming) return;

בעוד (נכון) {

אם (i == gcode.length) {

סטרימינג = שקר;

לַחֲזוֹר;

}

if (gcode .trim (). length () == 0) i ++;

עוד שבירה;

}

println (gcode );

port.write (gcode + '\ n');

i ++;

}

void serialEvent (Serial p)

{

מחרוזת s = p.readStringUntil ('\ n');

println (s.trim ());

if (s.trim (). startsWith ("ok")) stream ();

if (s.trim (). startsWith ("error")) stream (); // XXX: באמת?

}

שלב 5: עיצוב והדפסה של כל החלק בגיליון דיקט

עיצוב והדפסה של כל החלק בגיליון דיקט
עיצוב והדפסה של כל החלק בגיליון דיקט

הורד את חלק הרובוט והעיצוב ב- AutoCAD והדפס את גיליון הדיקט בגודל 12 מ מ וקטע גימור ועיצוב. אם מישהו צריך קובץ cad plz השאר את ההערה בתיבת סעיף ההערות אני אשלח לך ישירות.

שלב 6: הרכבה

הַרכָּבָה
הַרכָּבָה
הַרכָּבָה
הַרכָּבָה

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

שלב 7: הגדר את הגדרות GBRL

הגדרה שהוכיחה שהיא עובדת על הרובוטים שלנו.

$ 0 = 10 (דופק צעד, usec) $ 1 = 255 (עיכוב סרק של צעדים, msec) $ 2 = 7 (מסכת היפוך של יציאת צעד: 00000111) $ 3 = 7 (מסכת היפוך היציאה: 00000111) $ 4 = 0 (הפעל צעד הפוך, בול) $ 5 = 0 (סיכות הגבלה הפוך, בול) $ 6 = 1 (היפוך סיכת בדיקה, בול) $ 10 = 3 (מסכת דיווח סטטוס: 00000011) $ 11 = 0.020 (סטיית צומת, מ"מ) $ 12 = 0.002 (סובלנות קשת, מ"מ) $ 13 = 0 (דיווח סנטימטרים, בול) $ 20 = 0 (גבולות רכים, בול) $ 21 = 0 (גבולות קשים, בול) $ 22 = 1 (מחזור דיור, בול) $ 23 = 0 (מסכת היפוך דירה: 00000000) $ 24 = 100.000 (הזנת דירה, מ"מ/דקה) $ 25 = 500.000 (חיפוש דירה, מ"מ/דקה) $ 26 = 250 (ירידה ביתית, msec) $ 27 = 1.000 (משיכת דירה, מ"מ) $ 100 = 250.000 (x, צעד/מ"מ) $ 101 = 250.000 (y, צעד/מ"מ) $ 102 = 250.000 (z, צעד/מ"מ) $ 110 = 500.000 (שיעור מקסימלי, מ"מ/דקה) $ 111 = 500.000 (שיעור מקסימום y, מ"מ/דקה) $ 112 = 500.000 (שיעור מקסימום z, mm/min) $ 120 = 10.000 (x accel, mm/sec^2) $ 121 = 10.000 (y accel, mm/sec^2) $ 122 = 10.000 (z accel, mm/sec^2) $ 130 = 200.000 (x נסיעה מקסימלית, מ"מ) $ 131 = 200.000 (נסיעות מקסימום y, מ"מ) $ 132 = 200.000 (נסיעות מקסימום z, מ"מ)

שלב 8: העלה את הקוד הסופי ובדוק את התוצאה הווירטואלית בלוח המחוונים של תוכנת Arduino Uno

// יחידות: CM

צף b_height = 0;

לצוף a1 = 92;

לצוף a2 = 86;

float snude_len = 20;

doZ = בוליאנית בוליאנית;

צף בסיס_לחץ; // = 0;

arm float1_angle; // = 0;

צף arm2_angle; // = 0;

צף bx = 60; // = 25;

לצוף לפי = 60; // = 0;

לצוף bz = 60; // = 25;

צף x = 60;

לצוף y = 60;

צף z = 60;

לצוף q;

לצוף ג;

לצוף V1;

לצוף V2;

לצוף V3;

לצוף V4;

לצוף V5;

הגדרת בטל () {

גודל (700, 700, P3D);

cam = PeasyCam חדש (זה, 300);

cam.setMinimumDistance (50);

cam.setMaximumDistance (500);

}

צייר חלל () {

// לינינגר:

y = (mouseX - רוחב/2)*(- 1);

x = (עכבר Y - גובה/2)*(- 1);

bz = z;

על ידי = y;

bx = x;

float y3 = sqrt (bx*bx+by*by);

c = sqrt (y3*y3 + bz*bz);

V1 = acos ((a2*a2+a1*a1-c*c)/(2*a2*a1));

V2 = acos ((c*c+a1*a1-a2*a2)/(2*c*a1));

V3 = acos ((y3*y3+c*c-bz*bz)/(2*y3*c));

q = V2 + V3;

arm1_angle = q;

V4 = רדיאנים (90.0) - q;

V5 = רדיאנים (180) - V4 - רדיאנים (90);

arm2_angle = רדיאנים (180.0) - (V5 + V1);

base_angle = מעלות (atan2 (bx, by));

arm1_angle = מעלות (arm1_angle);

arm2_angle = מעלות (arm2_angle);

// println (by, bz);

// arm1_angle = 90;

// arm2_angle = 45;

/*

arm2_angle = 23;

arm1_angle = 23;

arm2_angle = 23;

*/

// אינטראקטיבי:

// אם (doZ)

//

// {

// base_angle = base_angle+ mouseX-pmouseX;

//} אחר

// {

// arm1_angle = arm1_angle+ pmouseX-mouseX;

// }

//

// arm2_angle = arm2_angle+ mouseY-pmouseY;

draw_robot (base_angle,-(arm1_angle-90), arm2_angle+90-(-(arm1_angle-90)));

// println (base_angle + "," + arm1_angle + "," + arm2_angle);

}

void draw_robot (float base_angle, float arm1_angle, float arm2_angle)

{

rotateX (1.2);

rotateZ (-1.2);

רקע (0);

אורות ();

pushMatrix ();

// בסיס

מילוי (150, 150, 150);

box_corner (50, 50, b_height, 0);

לסובב (radians (base_angle), 0, 0, 1);

// ARM 1

מילוי (150, 0, 150);

box_corner (10, 10, a1, arm1_angle);

// ARM 2

מילוי (255, 0, 0);

box_corner (10, 10, a2, arm2_angle);

// SNUDE

מילוי (255, 150, 0);

box_corner (10, 10, snude_len, -arm1_angle -arm2_angle+90);

popMatrix ();

pushMatrix ();

float action_box_size = 100;

תרגם (0, -action_box_size/2, action_box_size/2+b_height);

pushMatrix ();

תרגם (x, action_box_size- y-action_box_size/2, z-action_box_size/2);

מילוי (255, 255, 0);

קופסה (20);

popMatrix ();

מילוי (255, 255, 255, 50);

תיבה (action_box_size, action_box_size, action_box_size);

popMatrix ();

}

void box_corner (float w, float h, float d, float rotate)

{

לסובב (רדיאנים (לסובב), 1, 0, 0);

תרגם (0, 0, d/2);

תיבה (w, h, d);

תרגם (0, 0, d/2);

}

void keyPressed ()

{

אם (מפתח == 'z')

{

doZ =! doZ;

}

אם (מפתח == 'h')

{

// הגדר הכל לאפס

arm2_angle = 0;

arm1_angle = 90;

base_angle = 0;

}

אם (מפתח == 'g')

{

println (מעלות (V1));

println (מעלות (V5));

}

אם (keyCode == UP)

{

z ++;

}

אם (keyCode == למטה)

{

z -;

}

אם (מפתח == 'o')

{

y = 50;

z = 50;

println (q);

println (c, "c");

println (V1, "V1");

println (V2);

println (V3);

println (arm1_angle);

println (V4);

println (V5);

println (arm2_angle);

}

}

מוּמלָץ: