Агуулгын хүснэгт:

Arduino баазыг сонгох ба байрлуулах робот: 8 алхам
Arduino баазыг сонгох ба байрлуулах робот: 8 алхам

Видео: Arduino баазыг сонгох ба байрлуулах робот: 8 алхам

Видео: Arduino баазыг сонгох ба байрлуулах робот: 8 алхам
Видео: #2 Как запрограммировать ПЛК Outseal Arduino — обзор студии 2024, Арваннэгдүгээр
Anonim
Arduino баазыг сонгох ба байрлуулах робот
Arduino баазыг сонгох ба байрлуулах робот
Arduino Base Pick and Place робот
Arduino Base Pick and Place робот
Arduino Base Pick and Place робот
Arduino Base Pick and Place робот

Би оюутнуудад илүү том хэмжээтэй робот техникийг хакердах, дотоодын жижиг үйлдвэрүүдийг банкаа эвдэхгүйгээр роботуудаа ашиглах боломжийг олгох үүднээс супер хямд (1000 доллараас бага) үйлдвэрлэлийн робот гар хийжээ. 15 -аас 50 насны хүмүүсийг бүтээх, бүтээхэд хялбар байдаг.

Алхам 1: Бүрэлдэхүүн хэсгүүдэд тавигдах шаардлага

Бүрэлдэхүүн хэсгүүдийн шаардлага
Бүрэлдэхүүн хэсгүүдийн шаардлага
Бүрэлдэхүүн хэсгүүдийн шаардлага
Бүрэлдэхүүн хэсгүүдийн шаардлага
Бүрэлдэхүүн хэсгүүдийн шаардлага
Бүрэлдэхүүн хэсгүүдийн шаардлага
Бүрэлдэхүүн хэсгүүдийн шаардлага
Бүрэлдэхүүн хэсгүүдийн шаардлага

1. Arduino + Shield + Pins + Cables

2. Мотор хянагч: dm860A (Ebay)

3. Steppermotor: 34hs5435c-37b2 (Ebay)

4. M8x45+60+70 боолт ба M8 боолт.

5. 12 мм фанер.

6. 5 мм нейлон.

7. Сохор угаагч 8мм.

8. Модон эрэг 4.5x40мм.

9. М3 тоолуур живсэн, 10. 12в цахилгаан хангамж

11. servo мотор жолооч arduino

Алхам 2: Gui татаж авах

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

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

Алхам 3: Холболт

Холболт
Холболт
Холболт
Холболт
Холболт
Холболт

Зураг дээр заасан утсыг холбох нь танд илүү ойлгомжтой болно.

Бид мотор драйверийг Arduino болон таны роботын дагуу шаардлагатай бусад холбогчтой холбох хэрэгтэй.

Алхам 4: Firmware -ийг байршуулж, Arduino хяналтын самбарт кодын үр дүнг шалгана уу

Arduino - GRBL дээр програмыг суулгах:

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

Тэмдэглэл: Arduino дээр эмхэтгэх явцад зөрчилдөөн гарч болзошгүй. Номын сангийн фолдероос бусад бүх номын санг устгаарай (../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 алхам/эргэлтэнд тохируулсан stepper drive нь бүх тэнхлэгт дараах нэгжүүдийг хэрэглэнэ.

+- 32 нэгж = +- 180 градус

Код боловсруулах жишээ:

Энэ код нь Arduino GRBL -тэй шууд холбогдох боломжтой.

github.com/damellis/gctrl

Цувралыг baud: 115200 болгож тохируулахаа бүү мартаарай

Ардунио дахь код uoload

java.awt.event. KeyEvent импортлох;

javax.swing. JOptionPane импортлох;

импорт боловсруулах.сериал.*;

Цуваа порт = null;

// өөрийн үйлдлийн системд тохирох мөрийг сонгож өөрчлөх

// интерактив портыг ашиглахын тулд null гэж үлдээнэ үү (програм дээр 'p' дарна уу)

String portname = null;

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

// String portname = "/dev/ttyUSB0"; // Линукс

// String portname = "COM6"; // Windows

логик урсгал = худал;

хөвөх хурд = 0.001;

String gcode;

int i = 0;

хүчингүй openSerialPort ()

{

if (portname == null) буцах;

if (порт! = null) port.stop ();

порт = шинэ сериал (энэ, порт нэр, 115200);

port.bufferUntil ('\ n');

}

хоосон сонгохSerialPort ()

{

String үр дүн = (String) JOptionPane.showInputDialog (энэ, "Arduino самбартай тохирох цуваа портыг сонгоно уу.", "Цуваа порт сонгох", JOptionPane. PLAIN_MESSAGE, хоосон, Serial.list (), 0);

if (үр дүн! = тэг) {

порт нэр = үр дүн;

openSerialPort ();

}

}

хүчингүй тохиргоо ()

{

хэмжээ (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;

текст ("page up & page down: jog in z axis", 12, y); y += dy;

текст ("$: display grbl settings", 12, y); y+= dy;

текст ("h: гэртээ харих", 12, y); y += dy;

текст ("0: тэг машин (гэрийг одоогийн байршилд тохируулах)", 12, y); y += dy;

текст ("g: g-код файлыг дамжуулах", 12, y); y += dy;

текст ("x: g-кодыг цацахыг зогсоох (энэ нь шууд биш)", 12, y); y += dy;

y = өндөр - dy;

текст ("одоогийн гүйлтийн хурд:" + хурд + "инч тутамд", 12, y); y -= dy;

текст ("одоогийн цуваа порт:" + портын нэр, 12, y); y -= dy;

}

хоосон товчлуур дарагдсан ()

{

if (key == '1') speed = 0.001;

if (key == '2') speed = 0.01;

if (key == '3') speed = 0.1;

if (! урсгал) {

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; би = 0;

Файлын файл = null;

println ("Файлыг ачаалж байна …");

selectInput ("Боловсруулах файлыг сонгоно уу:", "fileSelected", файл);

}

if (key == 'x') урсгал = худал;

}

void fileSelected (Файлын сонголт) {

хэрэв (сонголт == null) {

println ("Цонх хаагдсан эсвэл хэрэглэгч цуцлах товчийг дарсан.");

} өөр {

println ("Хэрэглэгч сонгосон" + selection.getAbsolutePath ());

gcode = loadStrings (selection.getAbsolutePath ());

if (gcode == null) буцах;

урсгал = үнэн;

урсгал ();

}

}

хоосон урсгал ()

{

хэрэв (! урсгал) буцах;

байхад (үнэн) {

хэрэв (i == gcode.length) {

урсгал = худал;

буцах;

}

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

өөр завсарлага;

}

println (gcode );

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

би ++;

}

void serialEvent (Цуваа p)

{

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

println (s.trim ());

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

if (s.trim (). beginWith ("алдаа")) урсгал (); // XXX: үнэхээр үү?

}

Алхам 5: Бүх хэсгийг фанер хуудсан дээр загварчилж, хэвлэх

Бүх хэсгийг фанер хуудсан дээр дизайн хийж хэвлэх
Бүх хэсгийг фанер хуудсан дээр дизайн хийж хэвлэх

Роботын хэсэг, дизайныг AutoCAD дээр татаж аваад 12 мм фанер хуудас, өнгөлгөө, дизайны хэсгийг хэвлэ. Хэрэв хэн нэгэн cad файл хэрэгтэй бол сэтгэгдлээ коммент хэсэгт бичээрэй, би танд шууд илгээх болно.

Алхам 6: Чуулган

Чуулган
Чуулган
Чуулган
Чуулган

бүх хэсгийг цуглуулж, өгөгдсөн зургийн дарааллаар байрлуулж, зургийн диаграмыг дагана уу.

Алхам 7: GBRL тохиргоог тохируулна уу

Энэ тохиргоо нь манай робот дээр ажилладаг болох нь батлагдсан.

$ 0 = 10 (алхам импульс, usec) $ 1 = 255 (алхам сул зогсолт, msec) $ 2 = 7 (алхам порт урвуу маск: 00000111) $ 3 = 7 (dir порт урвуу маск: 00000111) $ 4 = 0 (алхамыг идэвхжүүлэх, bool $ 5 = 0 (хязгаар зүү урвуу, bool) $ 6 = 1 (зүү зүү invert, bool) $ 10 = 3 (статусын тайлангийн маск: 00000011) $ 11 = 0.020 (уулзварын хазайлт, мм) $ 12 = 0.002 (нумын хүлцэл, мм) $ 13 = 0 (тайлан инч, bool) $ 20 = 0 (зөөлөн хязгаар, bool) $ 21 = 0 (хатуу хязгаар, bool) $ 22 = 1 (homing мөчлөг, bool) $ 23 = 0 (homing dir invert mask: 00000000) $ 24 = 100.000 (homing feed, mm/min) $ 25 = 500.000 (homing search, mm/min) $ 26 = 250 (homing debounce, msec) $ 27 = 1.000 (homing pull-off, mm) $ 100 = 250.000 (x, step/mm) $ 101 = 250.000 (y, step/mm) $ 102 = 250.000 (z, step/mm) $ 110 = 500.000 (x max rate, mm/min) $ 111 = 500.000 (y max rate, mm/min) $ 112 = 500.000 (z max rate, мм/мин) $ 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 max travel, мм) $ 131 = 200.000 (хамгийн их аялал, мм) $ 132 = 200.000 (z хамгийн их аялал, мм)

Алхам 8: Эцсийн кодыг байршуулж, Arduino Uno програм хангамжийн самбарт байгаа виртуал үр дүнг шалгана уу

// Нэгжүүд: CM

хөвөх b_height = 0;

хөвөх a1 = 92;

хөвөх a2 = 86;

float snude_len = 20;

boolean doZ = худал;

float base_angle; // = 0;

хөвөх гар1_angle; // = 0;

хөвөх гар2_angle; // = 0;

хөвөх bx = 60; // = 25;

хөвөх = 60; // = 0;

float 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 = (mouseY - өндөр/2)*(- 1);

bz = z;

by = 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 = radians (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);

эргүүлэхZ (-1.2);

дэвсгэр (0);

гэрэл ();

pushMatrix ();

// СУУРЬ

дүүргэх (150, 150, 150);

хайрцагны булан (50, 50, b_ өндөр, 0);

эргүүлэх (радианууд (суурь_аглан), 0, 0, 1);

// ARM 1

дүүргэх (150, 0, 150);

хайрцагны булан (10, 10, a1, arm1_angle);

// ARM 2

бөглөх (255, 0, 0);

хайрцагны булан (10, 10, a2, arm2_angle);

// УХАА

дүүргэх (255, 150, 0);

хайрцагны булан (10, 10, snude_len, -arm1_angle -arm2_angle+90);

popMatrix ();

pushMatrix ();

float action_box_size = 100;

орчуулах (0, -актив_боксын_хэмжээ/2, үйлдлийн_боксын_хэмжээ/2+b_ өндөр);

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 эргүүлэх)

{

эргүүлэх (радиан (эргүүлэх), 1, 0, 0);

орчуулах (0, 0, d/2);

хайрцаг (w, h, d);

орчуулах (0, 0, d/2);

}

хоосон товчлуур дарагдсан ()

{

хэрэв (түлхүүр == 'z')

{

doZ =! doZ;

}

хэрэв (түлхүүр == 'h')

{

// бүгдийг тэг болгох

arm2_angle = 0;

arm1_angle = 90;

base_angle = 0;

}

хэрэв (түлхүүр == 'g')

{

println (градус (V1));

println (градус (V5));

}

хэрэв (keyCode == UP)

{

z ++;

}

хэрэв (keyCode == DOWN)

{

z -;

}

хэрэв (түлхүүр == 'o')

{

y = 50;

z = 50;

хэвлэх (q);

println (c, "c");

println (V1, "V1");

println (V2);

println (V3);

println (arm1_angle);

println (V4);

хэвлэх (V5);

println (arm2_angle);

}

}

Зөвлөмж болгож буй: