Kazalo:

Robot za izbiro in postavitev baze Arduino: 8 korakov
Robot za izbiro in postavitev baze Arduino: 8 korakov

Video: Robot za izbiro in postavitev baze Arduino: 8 korakov

Video: Robot za izbiro in postavitev baze Arduino: 8 korakov
Video: Leap Motion SDK 2024, November
Anonim
Robot za izbiro in postavitev baze Arduino
Robot za izbiro in postavitev baze Arduino
Robot za izbiro in postavitev baze Arduino
Robot za izbiro in postavitev baze Arduino
Robot za izbiro in postavitev baze Arduino
Robot za izbiro in postavitev baze Arduino

Naredil sem super poceni (manj kot 1000 dolarjev) industrijsko robotsko roko, ki je študentom omogočila vdor v robotiko večjega obsega in majhnim lokalnim produkcijam omogočila uporabo robotov v svojih procesih, ne da bi pri tem bankrotirala. Njegov Eassy za gradnjo in oblikovanje starostne skupine ljudi od 15 do 50 let.

1. korak: Zahteve po komponentah

Zahteve po komponentah
Zahteve po komponentah
Zahteve po komponentah
Zahteve po komponentah
Zahteve po komponentah
Zahteve po komponentah
Zahteve po komponentah
Zahteve po komponentah

1. Arduino + ščit + zatiči + kabli

2. Krmilnik motorja: dm860A (Ebay)

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

4. Vijaki M8x45+60+70 in vijaki M8.

5. Vezan les 12 mm.

6. 5 mm najlon.

7. Slepe podložke 8 mm.

8. Leseni vijaki 4,5x40 mm.

9. Števec M3 potopljen, 10. 12v napajalnik

11. gonilnik servo motorja arduino

2. korak: Prenesite Gui

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

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

3. korak: Povezava

Povezava
Povezava
Povezava
Povezava
Povezava
Povezava

Povežite žice, ki so prikazane na sliki, da vas bolje razumejo.

moramo povezati gonilnik motorja z Arduinom in drugimi priključki, ki so potrebni po vašem robotu.

4. korak: Naložite vdelano programsko opremo in preverite rezultat kode na Arduino nadzorni plošči

Namestitev vdelane programske opreme na Arduino - GRBL:

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

Opomba: Pri sestavljanju v Arduinu lahko pride do spora. Odstranite vse druge knjižnice iz mape knjižnice (../documents/Arduino/libraries).

Nastavitev vdelane programske opreme

Omogoči na novejšo časovno omejitev. Uporabite serijsko povezavo in napišite:

$1=255

Nastavitev usmerjanja:

$22=1

Ne pozabite nastaviti serijske vrednosti na baud: 115200

Koristne G-kode

Nastavite ničelno točko za robota:

G10 L2 Xnnn Ynnn Znnn

Uporabite ničelno točko:

G54

Tipična inicializacija na sredinskega robota:

G10 L2 X1,5 Y1,2 Z1,1

G54

Hitro premaknite robota v položaj:

G0 Xnnn Ynnn Znnn

Primer:

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

Premaknite robota v položaj z določeno hitrostjo:

G1 Xnnn Ynnn Znnn Fnnn

G1 X11 Y3 Z4 F300 (vrnitev)

F naj bo med 10 (slooooow) in 600 (hitro)

Privzete enote za X, Y in Z

Ko uporabljate privzete nastavitve korakov/enot (250 korakov/enoto) za GRBL in

koračni pogon, nastavljen na 800 korakov/vrtljajev, za vse osi veljajo naslednje enote:

+- 32 enot = +- 180 stopinj

Primer obdelave kode:

Ta koda lahko komunicira neposredno z Arduino GRBL.

github.com/damellis/gctrl

Ne pozabite nastaviti serijske vrednosti na baud: 115200

Koda uoload v ardunionu

uvoz java.awt.event. KeyEvent;

import javax.swing. JOptionPane;

uvozna obdelava.serial.*;

Zaporedna vrata = nič;

// izberite in spremenite ustrezno vrstico za vaš operacijski sistem

// pustite kot ničelno za uporabo interaktivnih vrat (pritisnite 'p' v programu)

Niz portname = null;

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

// Niz portname = "/dev/ttyUSB0"; // Linux

// Niz portname = "COM6"; // Windows

logično pretakanje = napačno;

hitrost plavanja = 0,001;

Niz gcode;

int i = 0;

void openSerialPort ()

{

if (ime porta == null) vrne;

if (vrata! = nič) port.stop ();

vrata = nova zaporedna številka (to, ime vrat, 115200);

port.bufferUntil ('\ n');

}

void selectSerialPort ()

{

Niz rezultat = (String) JOptionPane.showInputDialog (to, "Izberite serijska vrata, ki ustrezajo vaši plošči Arduino.", "Izberite serijska vrata", JOptionPane. PLAIN_MESSAGE, nič, Serial.list (), 0);

if (rezultat! = nič) {

portname = rezultat;

openSerialPort ();

}

}

void setup ()

{

velikost (500, 250);

openSerialPort ();

}

void draw ()

{

ozadje (0);

napolni (255);

int y = 24, dy = 12;

besedilo ("NAVODILA", 12, y); y += dy;

besedilo ("p: izberite serijska vrata", 12, y); y += dy;

besedilo ("1: nastavite hitrost na 0,001 palca (1 milj) na tek", 12, y); y += dy;

besedilo ("2: nastavite hitrost na 0,010 palcev (10 milj) na tek", 12, y); y += dy;

text ("3: nastavite hitrost na 10000 milimetrov na tek", 12, y); y += dy;

text ("puščične tipke: tek v x-y ravnini", 12, y); y += dy;

besedilo ("stran navzgor in stran navzdol: premikanje po osi z", 12, y); y += dy;

text ("$: prikaz nastavitev grbl", 12, y); y+= dy;

text ("h: pojdi domov", 12, y); y += dy;

text ("0: ničelni stroj (nastavite dom na trenutno lokacijo)", 12, y); y += dy;

text ("g: tok datoteke g-kode", 12, y); y += dy;

text ("x: ustavite pretakanje g-kode (to NI takoj)", 12, y); y += dy;

y = višina - dy;

besedilo ("trenutna hitrost teka:" + hitrost + "palcev na korak", 12, y); y -= dy;

besedilo ("trenutna serijska vrata:" + ime vrat, 12, y); y -= dy;

}

void keyPressed ()

{

if (ključ == '1') hitrost = 0,001;

if (ključ == '2') hitrost = 0,01;

if (ključ == '3') hitrost = 0,1;

if (! pretakanje) {

if (keyCode == LEFT) port.write ("G91 / nG20 / nG00 X-" + hitrost + "Y0.000 Z0.000 / n");

if (keyCode == DESNO) port.write ("G91 / nG20 / nG00 X" + hitrost + "Y0.000 Z0.000 / n");

if (keyCode == UP) port.write ("G91 / nG20 / nG00 X0.000 Y" + hitrost + "Z0.000 / n");

if (keyCode == DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y-" + hitrost + "Z0.000 / n");

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

if (keyCode == KeyEvent. VK_PAGE_DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z-" + hitrost + "\ 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 (! pretakanje && key == 'g') {

gcode = ničelno; i = 0;

Datoteka datoteka = null;

println ("Nalaganje datoteke …");

selectInput ("Izberite datoteko za obdelavo:", "fileSelected", datoteka);

}

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

}

void fileSelected (izbira datoteke) {

if (izbor == nič) {

println ("Okno je bilo zaprto ali je uporabnik pritisnil preklic.");

} drugo {

println ("Uporabnik izbran" + selection.getAbsolutePath ());

gcode = loadStrings (selection.getAbsolutePath ());

if (gcode == null) vrne;

tok = res;

tok ();

}

}

void stream ()

{

če se (! pretakanje) vrne;

medtem ko (res) {

if (i == gcode.length) {

pretakanje = napačno;

vrnitev;

}

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

drugače pa odmor;

}

println (gcode );

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

i ++;

}

void serialEvent (Serijski p)

{

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

println (s.trim ());

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

if (s.trim (). StartWith ("napaka")) stream (); // XXX: res?

}

5. korak: Oblikujte in natisnite vse dele v vezanem listu

Oblikujte in natisnite vse dele v vezanem listu
Oblikujte in natisnite vse dele v vezanem listu

Prenesite robotski del in oblikovanje v AutoCAD -u ter natisnite na 12 mm vezanega lesa ter zaključni in oblikovalni del. Če kdo potrebuje datoteko cad plz, pustite komentar v polju za komentarje, ki ga bom poslal neposredno.

6. korak: Montaža

Montaža
Montaža
Montaža
Montaža

zberite ves del in ga razporedite po podani sliki ter sledite slikovnemu diagramu.

7. korak: Nastavite nastavitve GBRL

Nastavitev, ki se je izkazala za učinkovito pri naših robotih.

$ 0 = 10 (koračni impulz, usec) $ 1 = 255 (zakasnitev koraka v prostem teku, msec) $ 2 = 7 (obračalna maska koračnih vrat: 00000111) $ 3 = 7 (obrnjena maska vrat dir: 00000111) $ 4 = 0 (stopnja omogoči inverzijo, bool) 5 USD = 0 (mejni zatiči obrnjeni, bool) 6 USD = 1 (obrnjeni zatič sonde, bool) 10 USD = 3 (maska poročila o stanju: 00000011) 11 USD = 0,020 (odstopanje spoja, mm) 12 USD = 0,002 (toleranca loka, mm) 13 USD = 0 (poročilo v palcih, bool) 20 USD = 0 (mehke meje, bool) 21 USD = 0 (trde meje, bool) 22 USD = 1 (cikel samonaravnavanja, bool) 23 USD = 0 (obračalna maska za samonaravnavanje: 200000000) 24 USD = 100.000 (krmiljenje pri usmerjanju, mm/min) 25 USD = 500.000 (iskanje pri usmerjanju, mm/min) 26 USD = 250 (odpravljanje nameritve, msec) 27 USD = 1.000 (izvlečenje pri usmerjanju, mm) 100 USD = 250.000 (x, korak/mm) 101 $ = 250.000 (y, korak/mm) 102 $ = 250.000 (z, korak/mm) 110 $ = 500.000 (x max hitrost, mm/min) 111 $ = 500.000 (y max hitrost, mm/min) 112 $ = 500.000 (z max hitrost, mm/min) 120 $ = 10.000 (x pospešek, mm/s^2) 121 $ = 10.000 (y pospešek, mm/s^2) 122 $ = 10.000 (z pospeškom, mm/s^2) 130 = 200.000 (x največji hod, mm) 131 USD = 200.000 (y max hod, mm) 132 $ = 200.000 (z max travel, mm)

8. korak: Naložite končno kodo in preverite navidezni rezultat na nadzorni plošči programske opreme Arduino Uno

// Enote: CM

float b_height = 0;

plovec a1 = 92;

plovec a2 = 86;

float snude_len = 20;

boolean doZ = false;

float base_angle; // = 0;

float arm1_angle; // = 0;

float arm2_angle; // = 0;

plovec bx = 60; // = 25;

lebdi za = 60; // = 0;

plovec bz = 60; // = 25;

plovec x = 60;

plovec y = 60;

plovec z = 60;

float q;

float c;

plovec V1;

plovec V2;

plovec V3;

plovec V4;

plovec V5;

void setup () {

velikost (700, 700, P3D);

cam = nov PeasyCam (ta, 300);

cam.setMinimumDistance (50);

cam.setMaximumDistance (500);

}

void draw () {

// ligninger:

y = (mišX - širina/2)*(- 1);

x = (mišY - višina/2)*(- 1);

bz = z;

po = 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 = radiani (90,0) - q;

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

arm2_angle = radiani (180,0) - (V5 + V1);

base_angle = stopinje (atan2 (bx, by));

arm1_angle = stopinje (arm1_angle);

arm2_angle = stopinje (arm2_angle);

// println (by, bz);

// arm1_angle = 90;

// arm2_angle = 45;

/*

arm2_angle = 23;

arm1_angle = 23;

arm2_angle = 23;

*/

// interaktivno:

// če (doZ)

//

// {

// base_angle = base_angle+ mouseX-pmouseX;

//} drugo

// {

// arm1_angle = arm1_angle+ pmouseX-mouseX;

// }

//

// arm2_angle = arm2_angle+ miškaY-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);

vrtenjeZ (-1,2);

ozadje (0);

luči ();

pushMatrix ();

// OSNOVA

napolnite (150, 150, 150);

box_corner (50, 50, b_height, 0);

vrtenje (radiani (base_angle), 0, 0, 1);

// ARM 1

polni (150, 0, 150);

box_corner (10, 10, a1, arm1_angle);

// ARM 2

izpolni (255, 0, 0);

box_corner (10, 10, a2, arm2_angle);

// SNUD

izpolni (255, 150, 0);

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

popMatrix ();

pushMatrix ();

float action_box_size = 100;

translate (0, -action_box_size/2, action_box_size/2+b_height);

pushMatrix ();

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

izpolni (255, 255, 0);

škatla (20);

popMatrix ();

izpolnite (255, 255, 255, 50);

polje (velikost_delova_polja, velikost_polja

popMatrix ();

}

void box_corner (float w, float h, float d, float rotate)

{

vrtenje (radiani (vrti), 1, 0, 0);

prevesti (0, 0, d/2);

škatla (w, h, d);

prevesti (0, 0, d/2);

}

void keyPressed ()

{

če (ključ == 'z')

{

doZ =! doZ;

}

če (ključ == 'h')

{

// vse nastavim na nič

arm2_angle = 0;

arm1_angle = 90;

base_angle = 0;

}

če (ključ == 'g')

{

println (stopinje (V1));

println (stopinje (V5));

}

če (keyCode == GOR)

{

z ++;

}

če (keyCode == DOL)

{

z -;

}

če (ključ == '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);

}

}

Priporočena: