Բովանդակություն:

Arduino բազայի ընտրություն և տեղադրում ռոբոտ. 8 քայլ
Arduino բազայի ընտրություն և տեղադրում ռոբոտ. 8 քայլ

Video: Arduino բազայի ընտրություն և տեղադրում ռոբոտ. 8 քայլ

Video: Arduino բազայի ընտրություն և տեղադրում ռոբոտ. 8 քայլ
Video: Ինչպե՞ս գրանցվել և գնում կատարել չինական Պինդուոդուո կայքից 💚 2024, Նոյեմբեր
Anonim
Arduino Base Pick and Place ռոբոտը
Arduino Base Pick and Place ռոբոտը
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 + կապում + մալուխներ

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. servo շարժիչի վարորդ arduino

Քայլ 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):

Fրագրաշարի տեղադրում

Միացնել միացնել ավելի նոր ժամկետի վրա: Օգտագործեք սերիական կապ և գրեք.

$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 համար

GRBL- ի համար քայլի/միավորների լռելյայն պարամետրեր օգտագործելիս (250 քայլ/միավոր) և

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"; // Linux

// Լարային նավահանգիստ = "COM6"; // Windows

բուլյան հոսք = կեղծ;

բոց արագություն = 0.001;

Լարային կոդ;

int i = 0;

դատարկ openSerialPort ()

{

if (portname == null) վերադարձ;

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

նավահանգիստ = նոր Սերիա (սա, նավահանգիստ, 115200);

port.bufferUntil ('\ n');

}

void selectSerialPort ()

{

Լարային արդյունք = (Լարային) JOptionPane.showInputDialog (սա, "Ընտրեք սերիական նավահանգիստ, որը համապատասխանում է ձեր Arduino տախտակին:", "Ընտրեք սերիական նավահանգիստ", JOptionPane. PLAIN_MESSAGE, դատարկ, Serial.list (), 0);

եթե (արդյունք! = null) {

նավահանգիստ = արդյունք;

openSerialPort ();

}

}

դատարկ կարգավորում ()

{

չափը (500, 250);

openSerialPort ();

}

դատարկ վիճակահանություն ()

{

ֆոն (0);

լրացնել (255);

int y = 24, dy = 12;

տեքստ («INԱՆՈՈՄՆԵՐ», 12, յ); y += dy;

տեքստ («p: ընտրել սերիական նավահանգիստ», 12, y); y += dy;

տեքստ («1. արագությունը սահմանել 0,001 դյույմ (1 մլն) մեկ վազքի համար», 12, յ); y += dy;

տեքստ («2: արագությունը սահմանել 0.010 դյույմ (10 մլն) մեկ վազքի համար», 12, յ); y += dy;

տեքստ («3. արագությունը սահմանել 0.100 դյույմ (100 մլն) մեկ վազքի համար», 12, յ); y += dy;

տեքստ («սլաքների ստեղներ. վազք x-y հարթությունում», 12, y); y += dy;

տեքստ («էջ վերև և ներքև. վազել z առանցքի վրա», 12, y); y += dy;

տեքստ ("$: ցուցադրել grbl կարգավորումները", 12, y); y+= dy;

տեքստ («ժ. գնա տուն», 12, յ); y += dy;

տեքստ («0: զրոյական մեքենա (տունը սահմանել ընթացիկ վայրում)», 12, y); y += dy;

տեքստ ("g: stream a g-code file", 12, y); y += dy;

տեքստ ("x: դադարեցնել հոսքը g-code (սա ՉԻ անմիջականորեն)", 12, y); y += dy;

y = բարձրություն - dy;

տեքստ ("ընթացիկ վազքի արագություն." + արագություն + "դյույմ մեկ քայլի համար", 12, y); y -= dy;

տեքստ («ընթացիկ սերիական նավահանգիստ.» + պորտ անուն, 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");

եթե (բանալին == '0') openSerialPort ();

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

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

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

}

եթե (! հոսք && բանալին == 'g') {

gcode = null; i = 0;

Ֆայլի ֆայլ = null;

println ("Ֆայլը բեռնվում է …");

selectInput ("Ընտրել ֆայլ մշակելու համար.", "fileSelected", ֆայլ);

}

եթե (բանալին == 'x') հոսք = կեղծ;

}

void fileSelected (Ֆայլի ընտրություն) {

եթե (ընտրություն == null) {

println ("Պատուհանը փակվեց կամ օգտվողը սեղմեց չեղարկել");

} ուրիշ {

println («Ընտրված է օգտվողը» + selection.getAbsolutePath ());

gcode = loadStrings (selection.getAbsolutePath ());

եթե (gcode == null) վերադարձ;

հոսք = ճշմարիտ;

հոսք ();

}

}

դատարկ հոսք ()

{

եթե (! հոսք) վերադառնա;

մինչդեռ (ճշմարիտ) {

եթե (i == gcode.length) {

հոսք = կեղծ;

վերադարձ;

}

if (gcode .trim (). երկարություն () == 0) i ++;

այլապես կոտրել;

}

println (gcode );

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

i ++;

}

void serialEvent (Սերիա p)

{

Տող s = p.readStringUntil ('\ n');

println (s.trim ());

if (s.trim (). սկսվում է («լավ»)) հոսքով ();

if (s.trim (). սկսվում է («սխալ»)) հոսքով (); // XXX: իսկապես?

}

Քայլ 5. Նախագծեք և տպեք ամբողջ մասը նրբատախտակի թերթիկում

Նախագծեք և տպեք ամբողջ մասը նրբատախտակի թերթիկով
Նախագծեք և տպեք ամբողջ մասը նրբատախտակի թերթիկով

Ներբեռնեք ռոբոտի մասն ու դիզայնը AutoCAD- ում և տպեք 12 մմ նրբատախտակի թերթիկի վրա և ավարտեք և ձևավորեք հատվածը: Եթե որևէ մեկին անհրաժեշտ է cad ֆայլ, խնդրում ենք թողնել մեկնաբանությունը մեկնաբանությունների բաժնում, ես ուղղակիորեն կուղարկեմ:

Քայլ 6: Հավաքում

Ժողով
Ժողով
Ժողով
Ժողով

հավաքեք ամբողջ մասը և դասավորեք տրված պատկերի հաջորդականությամբ և հետևեք պատկերի դիագրամին:

Քայլ 7: Կարգավորեք GBRL կարգավորումները

Այն կարգավորումը, որն ապացուցեց, որ աշխատում է մեր ռոբոտների վրա:

$ 0 = 10 (քայլի զարկերակ, օգտագործում) $ 1 = 255 (քայլ պարապուրդի ուշացում, վրկ) $ 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 $ (տնից դուրս գալը, վրկ) $ 27 = 1.000 (տնից դուրս գալը, մմ) $ 100 = 250.000 (x, քայլ/մմ) $ 101 = 250.000 (y, քայլ/մմ) $ 102 = 250.000 (z, քայլ/մմ) $ 110 = 500.000 (x max արագություն, մմ/րոպե) $ 111 = 500.000 (y առավելագույն արագություն, մմ/րոպե) $ 112 = 500.000 (z max փոխարժեք, մմ/րոպե) $ 120 = 10.000 (x accel, մմ/վ^2) $ 121 = 10.000 (y accel, mm/sec^2) $ 122 = 10.000 (z accel, mm/sec^2) $ 130 = 200.000 (x max ճանապարհորդություն, մմ) $ 131 = 200.000 (y առավելագույն ճանապարհորդություն, մմ) $ 132 = 200.000 (z առավելագույն ճանապարհորդություն, մմ)

Քայլ 8. Վերբեռնեք վերջնական ծածկագիրը և ստուգեք վիրտուալ արդյունքը Arduino Uno ծրագրաշարի վահանակում

// Միավորներ `CM

բոց բ_բարձրություն = 0;

բոց a1 = 92;

բոց a2 = 86;

բոց snude_len = 20;

բուլյան doZ = կեղծ;

float base_angle; // = 0;

float arm1_angle; // = 0;

float arm2_angle; // = 0;

բոց bx = 60; // = 25;

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

}

դատարկ վիճակահանություն () {

// 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) - ք;

V5 = ճառագայթներ (180) - V4 - ռադիաններ (90);

arm2_angle = ռադիաններ (180.0) - (V5 + V1);

բազային_անկյուն = աստիճաններ (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;

*/

// ինտերակտիվ:

// եթե (doZ)

//

// {

// բազայի_անկյուն = բազայի_անկյուն+ մուկX-pmouseX;

//} այլ

// {

// arm1_angle = arm1_angle+ pmouseX-mouseX;

// }

//

// arm2_angle = arm2_angle+ մուկ Y-pmouseY;

draw_robot (բազային_անկյուն,-(arm1_angle-90), arm2_angle+90-(-(arm1_angle-90)));

// println (բազային_անկյուն + "," + arm1_angle + "," + arm2_angle);

}

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

{

պտտել X (1.2);

պտտել Z (-1.2);

ֆոն (0);

լույսեր ();

pushMatrix ();

// ԲԱEԻՆ

լրացնել (150, 150, 150);

box_corner (50, 50, b_հասակը, 0);

պտտել (ռադիաններ (բազային_անկյուն), 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);

// ՍՆՈUDԴ

լրացնել (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, դ/2);

տուփ (w, h, d);

թարգմանել (0, 0, դ/2);

}

void keyPressed ()

{

եթե (բանալին == 'z')

{

doZ =! doZ;

}

եթե (բանալին == 'ժ')

{

// բոլորը զրոյի սահմանել

arm2_angle = 0;

arm1_angle = 90;

բազային_անկյուն = 0;

}

եթե (բանալին == 'g')

{

println (աստիճաններ (V1));

println (աստիճաններ (V5));

}

if (keyCode == UP)

{

z ++;

}

if (keyCode == DOWN)

{

z -;

}

եթե (բանալին == 'o')

{

y = 50;

z = 50;

println (q);

println (գ, «գ»);

println (V1, "V1");

println (V2);

println (V3);

println (arm1_angle);

println (V4);

println (V5);

println (arm2_angle);

}

}

Խորհուրդ ենք տալիս: