תוכן עניינים:
- שלב 1: דרישת רכיבים
- שלב 2: הורד את Gui
- שלב 3: חיבור
- שלב 4: העלה קושחה ובדוק את תוצאת הקוד בלוח המחוונים של Arduino
- שלב 5: עיצוב והדפסה של כל החלק בגיליון דיקט
- שלב 6: הרכבה
- שלב 7: הגדר את הגדרות GBRL
- שלב 8: העלה את הקוד הסופי ובדוק את התוצאה הווירטואלית בלוח המחוונים של תוכנת Arduino Uno
וִידֵאוֹ: רובוט בסיס ובחירה של ארדואינו: 8 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:14
עשיתי זרוע רובוט תעשייתי זולה במיוחד (פחות מ -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);
}
}
מוּמלָץ:
DIY "בסיס שימוש במחשב מחשב ROG" באמצעות ארדואינו ופייתון: 5 שלבים (עם תמונות)
DIY "בסיס שימוש במחשב מחשב ROG" באמצעות Arduino ו- Python: ************************************ +קודם כל, הוראות אלו נכתבו על ידי דובר אנגלית שאינה שפת אם … לא פרופסור לאנגלית, אז אנא הודע על כל טעות דקדוקית לפני שאתה עושה לי צחוק .:p +ובבקשה אל תחקה
רובוט איזון / רובוט 3 גלגלים / רובוט STEM: 8 שלבים
רובוט איזון / רובוט 3 גלגלים / רובוט STEM: בנינו רובוט איזון משולב ושלושה גלגלים לשימוש חינוכי בבתי ספר ובתוכניות חינוכיות לאחר הלימודים. הרובוט מבוסס על Arduino Uno, מגן מותאם אישית (כל פרטי הבנייה מסופקים), חבילת סוללות לי יון (כל מבנה
[רובוט ארדואינו] כיצד ליצור רובוט לכידת תנועה - רובוט אגודל - מנוע סרוו - קוד מקור: 26 שלבים (עם תמונות)
[רובוט ארדואינו] כיצד ליצור רובוט לכידת תנועה | רובוט אגודל | מנוע סרוו | קוד מקור: רובוט אגודל. השתמש בפוטנציומטר של מנוע סרוו MG90S. זה מאוד כיף וקל! הקוד פשוט מאוד. זה בסביבות 30 קווים בלבד. זה נראה כמו לכידת תנועה. אנא השאר כל שאלה או משוב! [הוראה] קוד מקור https: //github.c
בסיס רובוט רב תכליתי ומגן מנוע: 21 שלבים (עם תמונות)
בסיס רובוט רב תכליתי DIY ומגן מוטורי: שלום לכולם, לאחרונה התחלתי לעבוד על פרויקטים של רובוטיקה באמצעות Arduino. אבל לא היה לי בסיס מתאים לעבוד עליו, התוצאה הסופית לא נראתה מצוין והדבר היחיד שיכולתי לראות הוא שכל הרכיבים שלי מסתבכים בחוטים. בעיות באיתור כל
בסיס רובוט מחשב נייד מהיר: 8 שלבים (עם תמונות)
בסיס רובוט מחשב נייד מהיר: כשיתוף פעולה בין TeleToyland ו- RoboRealm, בנינו בסיס מהיר עבור רובוט מבוסס מחשבים ניידים בעזרת Parallax Motor Mount & ערכת גלגלים. עבור הפרויקט הזה, רצינו לשמור על זה מהיר ופשוט, ורצינו לעזוב את החלק העליון של