Orodha ya maudhui:

Chagua na Kuweka Roboti ya Msingi ya Arduino: Hatua 8
Chagua na Kuweka Roboti ya Msingi ya Arduino: Hatua 8

Video: Chagua na Kuweka Roboti ya Msingi ya Arduino: Hatua 8

Video: Chagua na Kuweka Roboti ya Msingi ya Arduino: Hatua 8
Video: Управление 16 серводвигателями с использованием модуля PCA9685 и Arduino V2 2024, Novemba
Anonim
Chagua na Kuweka Roboti ya Msingi ya Arduino
Chagua na Kuweka Roboti ya Msingi ya Arduino
Chagua na Kuweka Roboti ya Msingi ya Arduino
Chagua na Kuweka Roboti ya Msingi ya Arduino
Chagua na Kuweka Roboti ya Msingi ya Arduino
Chagua na Kuweka Roboti ya Msingi ya Arduino

Nimetengeneza mkono wa roboti ya viwandani yenye bei rahisi (chini ya dola 1000) kuwezesha wanafunzi kudanganya roboti kubwa na kuwezesha uzalishaji mdogo wa ndani kutumia roboti katika michakato yao bila kuvunja benki. Eassy yake kujenga na kufanya kikundi cha watu wa miaka 15 hadi 50.

Hatua ya 1: Mahitaji ya Vipengele

Vipengele vya Mahitaji
Vipengele vya Mahitaji
Vipengele vya Mahitaji
Vipengele vya Mahitaji
Vipengele vya Mahitaji
Vipengele vya Mahitaji
Vipengele vya Mahitaji
Vipengele vya Mahitaji

1. Arduino + Shield + Pini + Cables

2. Mdhibiti wa Pikipiki: dm860A (Ebay)

3. Msaidizi wa kambo: 34hs5435c-37b2 (Ebay)

4. M8x45 + 60 + 70 bolts na M8 bolts.

5. Plywood ya 12mm.

6. 5mm Nylon.

7. Washers vipofu 8mm.

8. Screws za kuni 4.5x40mm.

9. Kaunta ya M3 imezama, Ugavi wa umeme wa 12v

11. dereva wa servo arduino

Hatua ya 2: Pakua Gui

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

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

Hatua ya 3: Uunganisho

Uhusiano
Uhusiano
Uhusiano
Uhusiano
Uhusiano
Uhusiano

Unganisha waya ambazo zimetolewa kwenye picha ni uelewa zaidi kwako.

tunahitaji kuunganisha dereva wa gari kwa Arduino na viunganisho vingine ambavyo vinahitajika kulingana na roboti yako.

Hatua ya 4: Pakia Firmware na Angalia Matokeo ya Msimbo katika Dashibodi ya Arduino

Kuweka firmware kwenye Arduino - GRBL:

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

Kumbuka: Unaweza kupata mzozo wakati wa kukusanya katika Arduino. Ondoa maktaba mengine yote kutoka kwa folda yako ya maktaba (../documents/Arduino/libraries).

Usanidi wa firmware

Weka kuwezesha muda mpya zaidi. Tumia unganisho la serial na andika:

$1=255

Weka nyumba:

$22=1

Kumbuka kuweka serial kwa baud: 115200

Nambari muhimu za G

Weka sifuri kwa roboti:

G10 L2 Xnnn Ynnn Znnn

Tumia nukta sifuri:

G54

Uanzishaji wa kawaida kwa kituo cha robot:

G10 L2 X1.5 Y1.2 Z1.1

G54

Sogeza roboti ili kusimama haraka:

G0 Xnnn Ynnn Znnn

Mfano:

G0 X10.0 Y3.1 Z4.2 (kurudi)

Sogeza roboti kwenye nafasi kwa kasi maalum:

G1 Xnnn Ynnn Znnn Fnnn

G1 X11 Y3 Z4 F300 (kurudi)

F inapaswa kuwa kati ya 10 (slooooow) na 600 (haraka)

Vitengo chaguo-msingi vya X, Y na Z

Unapotumia mipangilio chaguomsingi ya hatua / vitengo (hatua 250 / kitengo) cha GRBL na

stepper drive iliyowekwa kwa hatua ya 800 / rev vitengo vifuatavyo vinatumika kwa mhimili wote:

+ - vitengo 32 = + - digrii 180

Inasindika mfano wa nambari:

Nambari hii inaweza kuwasiliana moja kwa moja na Arduino GRBL.

github.com/damellis/gctrl

Kumbuka kuweka serial kwa baud: 115200

Kanuni za uoload katika ardunio

kuagiza java.awt.event. KeyEvent;

kuagiza javax.swing. JOptionPane;

usindikaji wa kuagiza.serial. *;

Bandari ya serial = batili;

// chagua na urekebishe laini inayofaa kwa mfumo wako wa uendeshaji

// kuondoka kama batili kutumia bandari inayoingiliana (bonyeza 'p' katika programu)

Jina la bandari ya kamba = batili;

// Jina la bandari ya kamba = Serial.list () [0]; // Mac OS X.

// Jina la bandari ya kamba = "/ dev / ttyUSB0"; // Linux

// Jina la bandari ya kamba = "COM6"; // Windows

utiririshaji wa boolean = uwongo;

kasi ya kuelea = 0.001;

Kamba gcode;

int i = 0;

batili openSerialPort ()

{

ikiwa (portname == null) kurudi;

ikiwa (bandari! = batili) bandari.acha ();

bandari = mpya Serial (hii, jina la bandari, 115200);

bandari. BufferUntil ('\ n');

}

chagua batiliSerialPort ()

{

Matokeo ya kamba = (Kamba) JOptionPane.showInputDialog (hii, "Chagua bandari ya serial ambayo inalingana na bodi yako ya Arduino.", "Chagua bandari ya serial", JOptionPane. PLAIN_MESSAGE, batili, Orodha ya serial (), 0);

ikiwa (matokeo! = batili) {

jina la bandari = matokeo;

openSerialPort ();

}

}

kuanzisha batili ()

{

saizi (500, 250);

openSerialPort ();

}

chora batili ()

{

msingi (0);

jaza (255);

int y = 24, dy = 12;

maandishi ("MAELEKEZO", 12, y); y + = rangi;

maandishi ("p: chagua bandari ya serial", 12, y); y + = rangi;

maandishi ("1: weka kasi hadi inchi 0.001 (mil 1) kwa kila jog", 12, y); y + = rangi;

maandishi ("2: weka kasi hadi inchi 0.010 (mil 10) kwa kila jog", 12, y); y + = rangi;

maandishi ("3: weka kasi hadi inchi 0.100 (mil 100) kwa kila jog", 12, y); y + = rangi;

maandishi ("funguo za mshale: jog katika ndege ya x-y", 12, y); y + = rangi;

maandishi ("ukurasa juu & ukurasa chini: jog katika z mhimili", 12, y); y + = rangi;

maandishi ("$: onyesha mipangilio ya grbl", 12, y); y + = rangi;

maandishi ("h: nenda nyumbani", 12, y); y + = rangi;

maandishi ("0: mashine sifuri (weka nyumbani kwa eneo la sasa)", 12, y); y + = rangi;

maandishi ("g: sambaza faili ya g-code", 12, y); y + = rangi;

maandishi ("x: acha kutiririsha g-kificho (hii SI ya haraka)", 12, y); y + = rangi;

y = urefu - dy;

maandishi ("kasi ya sasa ya jog:" + kasi + "inchi kwa kila hatua", 12, y); y - = rangi;

maandishi ("bandari ya sasa ya serial:" + jina la bandari, 12, y); y - = rangi;

}

kitufe cha utupuBonyeza ()

{

ikiwa (ufunguo == '1') kasi = 0.001;

ikiwa (ufunguo == '2') kasi = 0.01;

ikiwa (ufunguo == '3') kasi = 0.1;

ikiwa (! kutiririsha) {

ikiwa (keyCode == LEFT) bandari. andika ("G91 / nG20 / nG00 X-" + kasi + "Y0.000 Z0.000 / n");

ikiwa (keyCode == HAKI) bandari. andika ("G91 / nG20 / nG00 X" + kasi + "Y0.000 Z0.000 / n");

ikiwa (keyCode == UP) bandari. andika ("G91 / nG20 / nG00 X0.000 Y" + kasi + "Z0.000 / n");

ikiwa (keyCode == DOWN) bandari. andika ("G91 / nG20 / nG00 X0.000 Y-" + kasi + "Z0.000 / n");

ikiwa (keyCode == KeyEvent. VK_PAGE_UP) bandari. andika ("G91 / nG20 / nG00 X0.000 Y0.000 Z" + speed + "\ n");

ikiwa (keyCode == KeyEvent. VK_PAGE_DOWN) bandari.andika ("G91 / nG20 / nG00 X0.000 Y0.000 Z-" + kasi + "\ n");

// ikiwa (ufunguo == 'h') bandari. andika ("G90 / nG20 / nG00 X0.000 Y0.000 Z0.000 / n");

ikiwa (ufunguo == 'v') bandari. andika ("$ 0 = 75 / n $ 1 = 74 / n $ 2 = 75 / n");

// ikiwa (ufunguo == 'v') bandari. andika ("$ 0 = 100 / n $ 1 = 74 / n $ 2 = 75 / n");

ikiwa (key == 's') bandari.andika ("$ 3 = 10 / n");

ikiwa (ufunguo == 'e') bandari. andika ("$ 16 = 1 / n");

ikiwa (ufunguo == 'd') bandari.andika ("$ 16 = 0 / n");

ikiwa (ufunguo == '0') openSerialPort ();

ikiwa (ufunguo == 'p') chaguaSerialPort ();

ikiwa (ufunguo == '$') bandari.andika ("$$ / n");

ikiwa (ufunguo == 'h') bandari andika ("$ H / n");

}

ikiwa (! kutiririka && key == 'g') {

gcode = batili; i = 0;

Faili ya faili = batili;

println ("Inapakia faili…");

chagua Ingiza ("Chagua faili ya kuchakata:", "faili Imechaguliwa", faili);

}

ikiwa (ufunguo == 'x') utiririshaji = uwongo;

}

faili batili Imechaguliwa (Uteuzi wa faili) {

ikiwa (selection == null) {

println ("Dirisha lilifungwa au mtumiaji alighairi");

} mwingine {

println ("Mtumiaji aliyechaguliwa" + uteuzi.getAbsolutePath ());

gcode = mzigoStrings (uteuzi.getAbsolutePath ());

ikiwa (gcode == null) inarudi;

kutiririka = kweli;

mkondo ();

}

}

mtiririko batili ()

{

ikiwa (! kutiririsha) kurudi;

wakati (kweli) {

ikiwa (i == gcode.length) {

kutiririka = uwongo;

kurudi;

}

ikiwa (gcode .trim (). urefu () == 0) i ++;

pengine kuvunja;

}

println (gcode );

andika bandari (gcode + '\ n');

i ++;

}

tupu serialEvent (Serial p)

{

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

println (s.trim ());

ikiwa (s.trim (). startsWith ("ok")) mkondo ();

ikiwa (s.trim (). startsWith ("kosa")) mkondo (); // XXX: kweli?

}

Hatua ya 5: Tengeneza na Uchapishe Sehemu Yote kwenye Karatasi ya Plywood

Kubuni na Kuchapisha Sehemu Yote katika Karatasi ya Plywood
Kubuni na Kuchapisha Sehemu Yote katika Karatasi ya Plywood

Pakua sehemu ya robot na muundo katika AutoCAD na uchapishe kwenye karatasi ya plywood ya 12mm na kumaliza na kubuni sehemu. Ikiwa mtu yeyote anahitaji faili ya cad plz acha maoni kwenye sanduku la sehemu ya maoni nitakutumia moja kwa moja.

Hatua ya 6: Mkutano

Mkutano
Mkutano
Mkutano
Mkutano

kukusanya sehemu yote na upange katika mlolongo kwenye picha ambayo imepewa na ufuate mchoro wa picha.

Hatua ya 7: Sanidi Mipangilio ya GBRL

Kuweka ambayo imethibitishwa kufanya kazi kwenye roboti zetu.

$ 0 = 10 (mapigo ya hatua, usec) $ 1 = 255 (ucheleweshaji wa hatua bila kuchelewa, msec) $ 2 = 7 (bandari ya kuingiza bandari ya hatua: 00000111) $ 3 = 7 (kinyago band ya kinyago: 00000111) $ 4 = 0 (hatua ya kuwezesha kugeuza, bool $ 5 = 0 (pini pindua pindua, bool) $ 6 = 1 (pindua ubadilishaji wa pini, bool) $ 10 = 3 (mask ya ripoti ya hali: 00000011) $ 11 = 0.020 (kupotoka kwa makutano, mm) $ 12 = 0.002 (uvumilivu wa arc, mm) $ 13 = 0 (ripoti inchi, bool) $ 20 = 0 (mipaka laini, bool) $ 21 = 0 (mipaka ngumu, bool) $ 22 = 1 (mzunguko wa homing, bool) $ 23 = 0 (homing dir invert mask: 00000000) $ 24 = 100.000 (kulisha homing, mm / min) $ 25 = 500.000 (homing tafuta, mm / min) $ 26 = 250 (homing debounce, msec) $ 27 = 1.000 (homing kuvuta, mm) $ 100 = 250.000 (x, hatua / mm) $ 101 = 250.000 (y, hatua / mm) $ 102 = 250.000 (z, hatua / mm) $ 110 = 500.000 (x kiwango cha juu, mm / min) $ 111 = 500.000 (y max rate, mm / min) $ 112 = 500.000 (z max rate, 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 max kusafiri, mm) $ 131 = 200.000 (y max kusafiri, mm) $ 132 = 200.000 (z max kusafiri, mm)

Hatua ya 8: Pakia Nambari ya Mwisho na Angalia Matokeo ya Virtual katika Dashibodi ya Programu ya Arduino Uno

// Vitengo: CM

kuelea b_height = 0;

kuelea a1 = 92;

kuelea a2 = 86;

kuelea snude_len = 20;

boolean doZ = uwongo;

msingi wa kuelea; // = 0;

kuelea mkono1_angle; // = 0;

kuelea arm2_angle; // = 0;

kuelea bx = 60; // = 25;

kuelea kwa = 60; // = 0;

kuelea bz = 60; // = 25;

kuelea x = 60;

kuelea y = 60;

kuelea z = 60;

kuelea q;

kuelea c;

kuelea V1;

kuelea V2;

kuelea V3;

kuelea V4;

kuelea V5;

usanidi batili () {

saizi (700, 700, P3D);

cam = PeasyCam mpya (hii, 300);

cam.setMinimumDistance (50);

seti ya upeo wa upeo (500);

}

chora batili () {

// ligninger:

y = (panyaX - upana / 2) * (- 1);

x = (panyaY - urefu / 2) * (- 1);

bz = z;

na = y;

bx = x;

kuelea y3 = sqrt (bx * bx + na * na);

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;

mkono1_angle = q;

V4 = radians (90.0) - q;

V5 = radians (180) - V4 - radians (90);

arm2_angle = radians (180.0) - (V5 + V1);

base_angle = digrii (atan2 (bx, na));

mkono1_angle = digrii (mkono1_angle);

arm2_angle = digrii (arm2_angle);

// println (na, bz);

// mkono1_angle = 90;

// mkono2_angle = 45;

/*

mkono2_angle = 23;

mkono1_angle = 23;

mkono2_angle = 23;

*/

// maingiliano:

// ikiwa (doZ)

//

// {

// base_angle = base_angle + panyaX-pmouseX;

//} mwingine

// {

// arm1_angle = arm1_angle + pmouseX-mouseX;

// }

//

// arm2_angle = arm2_angle + panyaY-nyumba ya jioniY;

kuteka_botot (msingi_mlalo, - (arm1_angle-90), arm2_angle + 90 - (- ((arm1_angle-90)));

// println (base_angle + "," + arm1_angle + "," + arm2_angle);

}

batili ya kuchora_joto (msingi wa kuelea, kuelea mkono1_angle, mkono wa kuelea2_angle)

{

zungushaX (1.2);

zungusha Z (-1.2);

msingi (0);

taa ();

PushMatrix ();

// Msingi

kujaza (150, 150, 150);

box_corner (50, 50, b_ urefu, 0);

zunguka (radians (base_angle), 0, 0, 1);

// SANAA 1

jaza (150, 0, 150);

box_corner (10, 10, a1, mkono1_angle);

// SANAA 2

jaza (255, 0, 0);

box_corner (10, 10, a2, arm2_angle);

// SNUDE

jaza (255, 150, 0);

box_corner (10, 10, snude_len, -arm1_angle-mkono2_angle + 90);

popMatrix ();

PushMatrix ();

kuelea action_box_size = 100;

kutafsiri (0, -action_box_size / 2, action_box_size / 2 + b_ urefu);

PushMatrix ();

kutafsiri (x, action_box_size- y-action_box_size / 2, z-action_box_size / 2);

jaza (255, 255, 0);

sanduku (20);

popMatrix ();

jaza (255, 255, 255, 50);

sanduku (action_box_size, action_box_size, action_box_size);

popMatrix ();

}

box_corner batili (kuelea w, kuelea h, kuelea d, kuelea zunguka)

{

zunguka (radians (zunguka), 1, 0, 0);

kutafsiri (0, 0, d / 2);

sanduku (w, h, d);

kutafsiri (0, 0, d / 2);

}

kitufe cha utupuBonyeza ()

{

ikiwa (ufunguo == 'z')

{

doZ =! doZ;

}

ikiwa (ufunguo == 'h')

{

// weka yote kwa sifuri

mkono2_angle = 0;

mkono1_angle = 90;

msingi_angle = 0;

}

ikiwa (ufunguo == 'g')

{

println (digrii (V1));

println (digrii (V5));

}

ikiwa (Msimbo wa Msimbo == UP)

{

z ++;

}

ikiwa (Msimbo wa Msimbo == CHINI)

{

z -;

}

ikiwa (ufunguo == 'o')

{

y = 50;

z = 50;

println (q);

println (c, "c");

println (V1, "V1");

println (V2);

println (V3);

println (mkono1_angle);

println (V4);

println (V5);

println (mkono2_angle);

}

}

Ilipendekeza: