فهرست مطالب:

ربات انتخاب و مکان آردوینو: 8 مرحله
ربات انتخاب و مکان آردوینو: 8 مرحله

تصویری: ربات انتخاب و مکان آردوینو: 8 مرحله

تصویری: ربات انتخاب و مکان آردوینو: 8 مرحله
تصویری: ترکید😱😭 2024, نوامبر
Anonim
ربات پایه آردوینو Pick and Place
ربات پایه آردوینو Pick and Place
ربات انتخاب و مکان آردوینو
ربات انتخاب و مکان آردوینو
ربات پایه آردوینو Pick and Place
ربات پایه آردوینو Pick and Place

من یک بازوی ربات صنعتی بسیار ارزان (کمتر از 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. منبع تغذیه 12 ولت

11. سروو موتور راننده آردوینو

مرحله 2: Gui را بارگیری کنید

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

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

مرحله 3: اتصال

ارتباط
ارتباط
ارتباط
ارتباط
ارتباط
ارتباط

سیمهایی که در تصویر نشان داده شده است را برای شما درک کنید.

ما باید راننده موتور را به آردوینو و دیگر اتصالات مورد نیاز ربات خود متصل کنیم.

مرحله 4: سیستم عامل را بارگذاری کرده و نتیجه کد را در داشبورد آردوینو بررسی کنید

نصب سیستم عامل در 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 (آرام) و 600 (سریع) باشد

واحدهای پیش فرض برای X ، Y و Z

هنگام استفاده از تنظیمات پیش فرض گام/واحد (250 مرحله/واحد) برای GRBL و

درایو استپر برای 800 مرحله/دور تنظیم شده است ، واحدهای زیر برای همه محورها اعمال می شود:

+- 32 واحد = +- 180 درجه

مثال پردازش کد:

این کد می تواند مستقیماً با Arduino GRBL ارتباط برقرار کند.

github.com/damellis/gctrl

به یاد داشته باشید که سریال را روی baud: 115200 تنظیم کنید

کد uoload in ardunio

واردات java.awt.event. KeyEvent ؛

واردات javax.swing. JOptionPane؛

پردازش واردات. سریال.*؛

پورت سریال = null؛

// خط مناسب سیستم عامل خود را انتخاب و اصلاح کنید

// برای استفاده از پورت تعاملی به عنوان null ترک کنید ('p' را در برنامه فشار دهید)

نام پورت رشته = null؛

// رشته پورت رشته = Serial.list () [0]؛ // Mac OS X

// رشته پورت رشته = "/dev/ttyUSB0"؛ // لینوکس

// رشته پورت رشته = "COM6"؛ // پنجره ها

جریان بولی = false ؛

سرعت شناور = 0.001 ؛

رشته gcode؛

int i = 0 ؛

void openSerialPort ()

{

if (portname == null) return؛

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

پورت = سریال جدید (این ، نام پورت ، 115200) ؛

port.bufferUntil ('\ n')؛

}

void selectSerialPort ()

{

String result = (String) JOptionPane.showInputDialog (این ،

"پورت سریال مربوط به برد Arduino خود را انتخاب کنید."،

"انتخاب پورت سریال" ،

JOptionPane. PLAIN_MESSAGE ،

خالی،

Serial.list () ،

0);

if (نتیجه! = null) {

نام بندر = نتیجه ؛

openSerialPort ()؛

}

}

void setup ()

{

اندازه (500 ، 250) ؛

openSerialPort ()؛

}

خلاء قرعه کشی ()

{

پس زمینه (0) ؛

پر (255) ؛

int y = 24 ، dy = 12 ؛

متن ("دستورالعمل" ، 12 ، y) ؛ y += dy؛

متن ("p: پورت سریال را انتخاب کنید" ، 12 ، y) ؛ y += dy؛

متن ("1: سرعت را روی 0.001 اینچ (1 میل) در هر دویدن تنظیم کنید" ، 12 ، y) ؛ y += dy؛

متن ("2: سرعت را روی 0.010 اینچ (10 میل) در هر دویدن تنظیم کنید" ، 12 ، y) ؛ y += dy؛

متن ("3: سرعت را روی 0.100 اینچ (100 میل) در هر دویدن تنظیم کنید" ، 12 ، y) ؛ y += dy؛

متن ("کلیدهای جهت دار: حرکت در صفحه x-y" ، 12 ، y) ؛ y += dy؛

متن ("صفحه بالا و پایین صفحه: حرکت در محور z" ، 12 ، y) ؛ y += dy؛

متن ("$: نمایش تنظیمات grbl" ، 12 ، y) ؛ y+= dy؛

متن ("h: go home" ، 12 ، y) ؛ y += dy؛

متن ("0: صفر دستگاه (تنظیم خانه در محل فعلی)" ، 12 ، y) ؛ y += dy؛

متن ("g: جریان فایل g-code" ، 12 ، y) ؛ y += dy؛

متن ("x: توقف پخش g-code (این فوری نیست)" ، 12 ، y) ؛ y += dy؛

y = ارتفاع - dy؛

متن ("سرعت دویدن فعلی:" + سرعت + "اینچ در هر مرحله" ، 12 ، y) ؛ y -= dy؛

متن ("پورت سریال فعلی:" + نام پورت ، 12 ، y) ؛ y -= dy؛

}

کلید خالی فشرده ()

{

if (کلید == '1') سرعت = 0.001 ؛

if (کلید == '2') سرعت = 0.01 ؛

if (کلید == '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 (! جریان && key == 'g') {

gcode = null؛ i = 0 ؛

فایل فایل = null؛

println ("در حال بارگیری فایل …") ؛

selectInput ("انتخاب پرونده برای پردازش:" ، "fileSelected" ، فایل) ؛

}

if (key == 'x') streaming = false؛

}

void fileSelected (انتخاب فایل) {

if (selection == null) {

println ("پنجره بسته شد یا کاربر لغو لغو کرد.")؛

} دیگری {

println ("کاربر انتخاب شده" + selection.getAbsolutePath ()) ؛

gcode = loadStrings (selection.getAbsolutePath ()) ؛

if (gcode == null) return؛

جریان = درست؛

جریان ()؛

}

}

جریان خالی ()

{

اگر (! جریان) بازگشت ؛

در حالی که (درست) {

if (i == gcode.length) {

جریان = false؛

برگشت؛

}

if (gcode .trim (). طول () == 0) i ++ ؛

در غیر این صورت شکستن ؛

}

println (gcode )؛

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

من ++ ؛

}

void serialEvent (سریال p)

{

رشته s = p.readStringUntil ('\ n')؛

println (s.trim ()) ؛

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

if (s.trim (). beginWith ("خطا")) جریان ()؛ // XXX: واقعاً؟

}

مرحله 5: طراحی و چاپ تمام قسمتها در ورق تخته سه لا

طراحی و چاپ تمام قسمت ها در ورق تخته سه لا
طراحی و چاپ تمام قسمت ها در ورق تخته سه لا

قسمت و طراحی ربات را در اتوکد بارگیری کنید و قسمت ورق تخته سه لا 12 میلی متری را چاپ کرده و قسمت را به پایان برسانید و طراحی کنید. اگر کسی به فایل cad احتیاج دارد لطفاً نظر خود را در کادر بخش نظرات ارسال کنید ، من مستقیماً برای شما ارسال می کنم.

مرحله ششم: مونتاژ

مونتاژ
مونتاژ
مونتاژ
مونتاژ

تمام قسمت ها را جمع آوری کرده و ترتیب تصویر را در ترتیب داده شده ترتیب دهید و نمودار تصویر را دنبال کنید.

مرحله 7: تنظیمات GBRL را تنظیم کنید

تنظیماتی که ثابت شده روی روبات های ما کار می کند.

$ 0 = 10 (نبض گام ، usec) $ 1 = 255 (تاخیر در حالت آماده به کار ، msec) $ 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 (x ، مرحله/میلی متر) 101 دلار = 250.000 (y ، گام/میلی متر) $ 102 = 250.000 (z ، گام/میلی متر) $ 110 = 500.000 (x حداکثر نرخ ، میلی متر در دقیقه) $ 111 = 500.000 (y حداکثر نرخ ، میلی متر در دقیقه) $ 112 = 500.000 (نرخ حداکثر z ، میلی متر در دقیقه) $ 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 (حداکثر حداکثر سفر ، میلی متر) $ 131 = 200.000 (y حداکثر سفر ، میلی متر) $ 132 = 200.000 (z حداکثر سفر ، میلی متر)

مرحله 8: کد نهایی را بارگذاری کرده و نتیجه مجازی را در داشبورد نرم افزار Arduino Uno بررسی کنید

// واحدها: CM

شناور b_height = 0 ؛

شناور a1 = 92؛

شناور a2 = 86 ؛

شناور snude_len = 20؛

boolean doZ = false؛

شناور base_angle ؛ // = 0 ؛

شناور arm1_angle؛ // = 0 ؛

شناور arm2_angle؛ // = 0 ؛

شناور bx = 60 ؛ // = 25 ؛

شناور = 60 ؛ // = 0 ؛

float bz = 60؛ // = 25؛

شناور x = 60؛

شناور y = 60 ؛

شناور z = 60 ؛

شناور q؛

شناور c ؛

شناور V1 ؛

شناور V2 ؛

شناور V3 ؛

شناور V4 ؛

شناور V5 ؛

void setup () {

اندازه (700 ، 700 ، P3D) ؛

cam = PeasyCam جدید (این ، 300) ؛

cam.setMinimumDistance (50)؛

cam.setMaximumDistance (500)؛

}

void draw () {

// ligninger:

y = (mouseX - عرض/2)*(- 1) ؛

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

bz = z ؛

توسط = y ؛

bx = x ؛

شناور 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 (توسط ، bz) ؛

// arm1_angle = 90؛

// arm2_angle = 45؛

/*

arm2_angle = 23؛

arm1_angle = 23؛

arm2_angle = 23؛

*/

// در ارتباط بودن:

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

چرخش (رادیان (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) ؛

}

کلید خالی فشرده ()

{

if (کلید == 'z')

{

doZ =! doZ؛

}

if (key == 'h')

{

// همه را روی صفر قرار دهید

arm2_angle = 0؛

arm1_angle = 90 ؛

base_angle = 0 ؛

}

if (کلید == 'g')

{

println (درجه (V1)) ؛

println (درجه (V5)) ؛

}

if (keyCode == UP)

{

z ++ ؛

}

if (keyCode == DOWN)

{

z -؛

}

if (key == '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) ؛

}

}

توصیه شده: