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

روبوت اختيار ووضع قاعدة اردوينو: 8 خطوات
روبوت اختيار ووضع قاعدة اردوينو: 8 خطوات

فيديو: روبوت اختيار ووضع قاعدة اردوينو: 8 خطوات

فيديو: روبوت اختيار ووضع قاعدة اردوينو: 8 خطوات
فيديو: مشروع أردوينو - التحكم في سيارة روبوت بهاتفك الذكي 2024, شهر نوفمبر
Anonim
اردوينو قاعدة اختيار ووضع الروبوت
اردوينو قاعدة اختيار ووضع الروبوت
اردوينو قاعدة اختيار ووضع الروبوت
اردوينو قاعدة اختيار ووضع الروبوت
اردوينو قاعدة اختيار ووضع الروبوت
اردوينو قاعدة اختيار ووضع الروبوت

لقد صنعت ذراع روبوت صناعي رخيص للغاية (أقل من 1000 دولار) لتمكين الطلاب من اختراق الروبوتات على نطاق واسع وتمكين الإنتاج المحلي الصغير من استخدام الروبوتات في عملياتهم دون كسر البنك. إنها سهلة لبناء وجعل الفئة العمرية من 15 إلى 50 عامًا.

الخطوة 1: متطلبات المكونات

متطلبات المكونات
متطلبات المكونات
متطلبات المكونات
متطلبات المكونات
متطلبات المكونات
متطلبات المكونات
متطلبات المكونات
متطلبات المكونات

1. اردوينو + درع + دبابيس + كابلات

2. متحكم: dm860A (إيباي)

3. محرك متدرج: 34hs5435c-37b2 (Ebay)

4. مسامير M8x45 + 60 + 70 ومسامير M8.

5. 12mm الخشب الرقائقي.

6. 5mm النايلون.

7. غسالات أعمى 8mm.

8. مسامير الخشب 4.5x40mm.

9. M3 غرق عداد ،

10. 12 فولت امدادات الطاقة

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

ملاحظة: قد يحدث تعارض عند الترجمة في Arduino. قم بإزالة جميع المكتبات الأخرى من مجلد مكتبتك (../documents/Arduino/libraries).

إعداد البرامج الثابتة

قم بتعيين التمكين على مهلة أحدث. استخدم اتصال تسلسلي واكتب:

$1=255

تعيين صاروخ موجه:

$22=1

تذكر ضبط المسلسل على الباود: 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

تذكر ضبط المسلسل على الباود: 115200

كود uoload في ardunio

استيراد java.awt.event. KeyEvent ؛

استيراد javax.swing. JOptionPane ؛

معالجة الاستيراد. تسلسلي. * ؛

المنفذ التسلسلي = فارغ ؛

// حدد السطر المناسب لنظام التشغيل الخاص بك وقم بتعديله

// اتركه فارغًا لاستخدام المنفذ التفاعلي (اضغط على "p" في البرنامج)

سلسلة portname = خالية ؛

// String portname = Serial.list () [0] ، // نظام التشغيل Mac OS X

// String portname = "/ dev / ttyUSB0" ؛ // لينكس

// String portname = "COM6" ؛ // شبابيك

تدفق منطقي = خطأ ؛

سرعة الطفو = 0.001 ؛

سلسلة gcode؛

كثافة العمليات أنا = 0 ؛

openSerialPort باطلة ()

{

إذا كان (اسم المنفذ == فارغ) يعود ؛

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

المنفذ = مسلسل جديد (هذا ، اسم المنفذ ، 115200) ؛

port.bufferUntil ('n') ،

}

selectSerialPort () باطلة

{

نتيجة السلسلة = (سلسلة) JOptionPane.showInputDialog (هذه ،

"حدد المنفذ التسلسلي الذي يتوافق مع لوحة Arduino الخاصة بك." ،

"حدد المنفذ التسلسلي" ،

JOptionPane. PLAIN_MESSAGE ،

باطل،

Serial.list () ،

0);

إذا كانت (النتيجة! = خالية) {

portname = نتيجة ؛

openSerialPort () ،

}

}

الإعداد باطل()

{

الحجم (500 ، 250) ؛

openSerialPort () ،

}

رسم باطل ()

{

الخلفية (0) ؛

ملء (255) ؛

int y = 24 ، dy = 12 ؛

نص ("التعليمات" ، 12 ، ذ) ؛ ص + = دى ؛

نص ("p: حدد المنفذ التسلسلي" ، 12 ، ص) ؛ ص + = دى ؛

نص ("1: ضبط السرعة على 0.001 بوصة (1 مل) لكل هرولة" ، 12 ، ص) ؛ ص + = دى ؛

نص ("2: ضبط السرعة على 0.010 بوصات (10 مل) لكل هرولة" ، 12 ، ص) ؛ ص + = دى ؛

text ("3: ضبط السرعة على 0.100 بوصة (100 ميل) لكل هرولة" ، 12 ، ص) ؛ ص + = دى ؛

النص ("مفاتيح الأسهم: الركض في المستوى x-y" ، 12 ، y) ؛ ص + = دى ؛

نص ("الصفحة لأعلى والصفحة لأسفل: الركض في المحور z" ، 12 ، ص) ؛ ص + = دى ؛

نص ("$: عرض إعدادات grbl"، 12 ، ص) ؛ ص + = دى ؛

نص ("h: go home"، 12، y) ؛ ص + = دى ؛

نص ("0: آلة صفر (تعيين المنزل إلى الموقع الحالي)" ، 12 ، ص) ؛ ص + = دى ؛

نص ("g: دفق ملف g-code"، 12، y) ؛ ص + = دى ؛

text ("x: stop streaming g-code (هذا ليس فوريًا)" ، 12 ، y) ؛ ص + = دى ؛

ص = الارتفاع - دى ؛

نص ("سرعة الركض الحالية:" + السرعة + "بوصة لكل خطوة" ، 12 ، ص) ؛ ص - = دى ؛

نص ("المنفذ التسلسلي الحالي:" + اسم المنفذ ، 12 ، ص) ؛ ص - = دى ؛

}

مفتاح باطل

{

إذا (المفتاح == '1') السرعة = 0.001 ؛

إذا (المفتاح == '2') السرعة = 0.01 ؛

إذا (المفتاح == '3') السرعة = 0.1 ؛

إذا (! يتدفقون) {

إذا (keyCode == LEFT) port.write ("G91 / nG20 / nG00 X-" + speed + "Y0.000 Z0.000 / n") ؛

إذا (keyCode == RIGHT) port.write ("G91 / nG20 / nG00 X" + السرعة + "Y0.000 Z0.000 / n") ؛

إذا (keyCode == UP) port.write ("G91 / nG20 / nG00 X0.000 Y" + speed + "Z0.000 / n") ؛

إذا (keyCode == DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y-" + speed + "Z0.000 / n") ؛

if (keyCode == KeyEvent. VK_PAGE_UP) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z" + speed + "\ n") ؛

if (keyCode == KeyEvent. VK_PAGE_DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z-" + speed + "\ 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") ؛

إذا (المفتاح == '0') openSerialPort () ؛

إذا (المفتاح == 'p') selectSerialPort () ؛

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

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

}

إذا (! streaming && key == 'g') {

gcode = لاغية ؛ أنا = 0 ؛

ملف الملف = فارغ ؛

println ("تحميل الملف …") ؛

selectInput ("حدد ملفًا لمعالجة:" ، "fileSelected" ، ملف) ؛

}

إذا (مفتاح == 'x') تدفق = خطأ ؛

}

ملف باطل محدد (اختيار ملف) {

إذا (التحديد == فارغة) {

println ("تم إغلاق النافذة أو نقر المستخدم على إلغاء.") ؛

} آخر {

println ("تحديد المستخدم" + select.getAbsolutePath ()) ؛

gcode = loadStrings (select.getAbsolutePath ()) ؛

إذا (gcode == null) يعود ؛

تدفق = صحيح ؛

مجرى()؛

}

}

تيار باطل ()

{

إذا (! تدفق) العودة ؛

احيانا صحيح) {

إذا (i == gcode.length) {

تدفق = خطأ ؛

إرجاع؛

}

إذا (gcode .trim (). length () == 0) i ++؛

كسر آخر

}

println (gcode ) ؛

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

أنا ++ ؛

}

مسلسل باطل (مسلسل ص)

{

String s = p.readStringUntil ('\ n') ؛

println (s.trim ()) ؛

if (s.trim (). beginWith ("ok")) stream () ؛

if (s.trim (). beginWith ("error")) stream ()؛ // XXX: حقًا؟

}

الخطوة 5: تصميم وطباعة كل جزء في ورقة الخشب الرقائقي

تصميم وطباعة كل جزء في ورقة الخشب الرقائقي
تصميم وطباعة كل جزء في ورقة الخشب الرقائقي

قم بتنزيل جزء الروبوت والتصميم في AutoCAD واطبع على لوح الخشب الرقائقي 12 مم وجزء التشطيب والتصميم. إذا احتاج أي شخص إلى ملف cad ، فالرجاء ترك التعليق في مربع قسم التعليقات سأرسله مباشرة.

الخطوة 6: التجميع

المجسم
المجسم
المجسم
المجسم

اجمع كل الأجزاء وقم بترتيب التسلسل على الصورة المعطاة واتبع مخطط الصورة.

الخطوة 7: إعداد إعدادات GBRL

الإعداد الذي أثبت فعاليته على روبوتاتنا.

$ 0 = 10 (نبضة الخطوة ، usec) 1 دولار = 255 (تأخير الخطوة الخمول ، مللي ثانية) 2 دولار = 7 (قناع عكس المنفذ التدريجي: 00000111) 3 دولارات = 7 (قناع عكس منفذ dir: 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 (ارتداد صاروخ موجه ، ميللي ثانية) 27 دولارًا = 1.000 (صاروخ موجه ، مم) 100 دولار = 250.000 (س ، خطوة / مم) 101 دولار = 250.000 (ص ، خطوة / مم) 102 دولار = 250.000 (z ، خطوة / مم) 110 دولار = 500.000 (x أقصى معدل ، مم / دقيقة) 111 دولار = 500.000 (y max rate ، mm / min) 112 $ = 500.000 (z max rate ، mm / min) مم / دقيقة) 120 دولارًا = 10.000 (تسريع × ، مم / ثانية ^ 2) 121 دولارًا = 10.000 (تسريع ص ، مم / ثانية ^ 2) 122 دولارًا = 10.000 (تسريع z ، مم / ثانية ^ 2) 130 دولارًا = 200.000 (x أقصى مسافة سفر ، مم) 131 دولارًا أمريكيًا = 200.000 دولار أمريكي (السفر الأقصى ، مم) 132 دولارًا أمريكيًا = 200.000 دولار أمريكي (الحد الأقصى للسفر ، مم)

الخطوة 8: قم بتحميل الكود النهائي وتحقق من النتيجة الافتراضية في لوحة تحكم برنامج Arduino Uno

// الوحدات: سم

تعويم b_height = 0 ؛

تعويم a1 = 92 ؛

تعويم a2 = 86 ؛

تعويم snude_len = 20 ؛

منطقية doZ = خطأ ؛

تعويم base_angle ؛ // = 0 ؛

تعويم arm1_angle ؛ // = 0 ؛

تعويم arm2_angle ؛ // = 0 ؛

تعويم bx = 60 ؛ // = 25 ؛

تعويم بنسبة = 60 ؛ // = 0 ؛

تعويم bz = 60 ؛ // = 25 ؛

تعويم س = 60 ؛

تعويم ص = 60 ؛

تعويم ض = 60 ؛

تعويم q ؛

تعويم ج ؛

تعويم V1 ؛

تعويم V2 ؛

تعويم V3 ؛

تعويم V4 ؛

تعويم V5 ؛

الإعداد باطل() {

الحجم (700 ، 700 ، P3D) ؛

كام = جديد PeasyCam (هذا ، 300) ؛

cam.set الحد الأدنى للمسافة (50) ؛

cam.setMaximumDistance (500) ؛

}

رسم باطل () {

// قشور:

ص = (mouseX - العرض / 2) * (- 1) ؛

x = (mouseY - الارتفاع / 2) * (- 1) ؛

ب = ض ؛

بواسطة = y ؛

ب س = س ؛

تعويم y3 = sqrt (bx * bx + by * by) ؛

ج = الجذر التربيعي (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 = أكوس ((y3 * y3 + c * c-bz * bz) / (2 * y3 * c)) ؛

ف = V2 + V3 ؛

arm1_angle = q ؛

V4 = راديان (90.0) - ف ؛

V5 = راديان (180) - V4 - راديان (90) ؛

arm2_angle = راديان (180.0) - (V5 + V1) ؛

base_angle = الدرجات (atan2 (bx ، by)) ؛

arm1_angle = درجات (arm1_angle) ؛

arm2_angle = درجات (arm2_angle) ؛

// println (بواسطة ، bz) ؛

// arm1_angle = 90 ؛

// arm2_angle = 45 ؛

/*

arm2_angle = 23 ؛

arm1_angle = 23 ؛

arm2_angle = 23 ؛

*/

// تفاعلي:

// إذا (دوز)

//

// {

// 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) ؛

}

روبوت رسم باطل (عائم قاعدة _ مثلث ، ذراع عائم 1_ مثلث ، ذراع عائم 2 _ مثلث)

{

rotateX (1.2) ؛

rotateZ (-1.2) ؛

الخلفية (0) ؛

أضواء()؛

pushMatrix () ؛

// يتمركز

ملء (150 ، 150 ، 150) ؛

box_corner (50، 50، b_height، 0) ؛

استدارة (راديان (قاعدة _ مثلث) ، 0 ، 0 ، 1) ؛

// ذراع 1

ملء (150 ، 0 ، 150) ؛

box_corner (10، 10، a1، arm1_angle) ؛

// ذراع 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 () ؛

تعويم 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) ؛

box (action_box_size ، action_box_size ، action_box_size) ؛

popMatrix () ،

}

مربع فارغ (تعويم w ، عائم h ، تعويم d ، تدوير تعويم)

{

استدارة (راديان (تدوير) ، 1 ، 0 ، 0) ؛

ترجمة (0 ، 0 ، د / 2) ؛

صندوق (ث ، ح ، د) ؛

ترجمة (0 ، 0 ، د / 2) ؛

}

مفتاح باطل

{

إذا (مفتاح == 'z')

{

doZ =! doZ؛

}

إذا (مفتاح == 'ح')

{

// اضبط الكل على الصفر

arm2_angle = 0 ؛

arm1_angle = 90 ؛

base_angle = 0 ؛

}

إذا (مفتاح == 'ز')

{

println (درجات (V1)) ؛

println (درجات (V5)) ؛

}

إذا (keyCode == UP)

{

z ++ ؛

}

إذا (keyCode == DOWN)

{

ض - ؛

}

إذا (مفتاح == 'س')

{

ص = 50 ؛

ض = 50 ؛

println (q) ؛

println (ج ، "ج") ؛

println (V1، "V1") ؛

println (V2) ؛

println (V3) ؛

println (arm1_angle) ؛

println (V4) ؛

println (V5) ؛

println (arm2_angle) ؛

}

}

موصى به: