Sisukord:

Arduino aluse valimine ja paigutamine robot: 8 sammu
Arduino aluse valimine ja paigutamine robot: 8 sammu

Video: Arduino aluse valimine ja paigutamine robot: 8 sammu

Video: Arduino aluse valimine ja paigutamine robot: 8 sammu
Video: Leap Motion SDK 2024, November
Anonim
Arduino baasvalik ja robot
Arduino baasvalik ja robot
Arduino baasvalik ja kohtrobot
Arduino baasvalik ja kohtrobot
Arduino baasvalik ja robot
Arduino baasvalik ja robot

Olen teinud üliodava (alla 1000 dollari) tööstusroboti käe, et võimaldada õpilastel häkkida suuremahulist robootikat ja võimaldada kohalikel väikestel tootmistel kasutada oma protsessides roboteid ilma panka purustamata. Selle lihtsus on ehitada ja muuta vanuserühmaks inimesed vanuses 15 kuni 50 aastat.

1. samm: komponentide nõuded

Komponentide nõue
Komponentide nõue
Komponentide nõue
Komponentide nõue
Komponentide nõue
Komponentide nõue
Komponentide nõue
Komponentide nõue

1. Arduino + kilp + tihvtid + kaablid

2. Mootorikontroller: dm860A (Ebay)

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

4. M8x45+60+70 poldid ja M8 poldid.

5. 12mm vineer.

6. 5mm nailon.

7. Pimedad seibid 8mm.

8. Puukruvid 4,5x40mm.

9. M3 loendur on vajunud, 10. 12v toide

11. servomootori juht arduino

Samm: laadige alla Gui

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

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

3. samm: ühendamine

Ühendus
Ühendus
Ühendus
Ühendus
Ühendus
Ühendus

Pildil toodud juhtmete ühendamine aitab teil paremini aru saada.

peame ühendama mootori draiveri Arduino ja muude pistikutega, mida teie robot vajab.

Samm: laadige püsivara üles ja kontrollige koodi tulemust Arduino armatuurlaual

Püsivara installimine Arduino - GRBL -i:

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

Märkus: Arduinos koostamisel võib tekkida konflikt. Eemaldage oma raamatukogu kaustast kõik muud teegid (../documents/Arduino/libraries).

Püsivara seadistamine

Määrake lubamine uuemale ajalõpule. Kasutage jadaühendust ja kirjutage:

$1=255

Seadistage:

$22=1

Pidage meeles, et seeria on seadistatud baudiks: 115200

Kasulikud G-koodid

Roboti jaoks nullpunkti määramine:

G10 L2 Xnnn Ynnn Znnn

Kasutage nullpunkti:

G54

Keskmise roboti tüüpiline lähtestamine:

G10 L2 X1.5 Y1.2 Z1.1

G54

Liigutage robot kiiresti asendisse:

G0 Xnnn Ynnn Znnn

Näide:

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

Liigutage robot kindla kiirusega asendisse:

G1 Xnnn Ynnn Znnn Fnnn

G1 X11 Y3 Z4 F300 (tagasi)

F peaks olema vahemikus 10 (slooooow) kuni 600 (kiire)

X, Y ja Z vaikeühikud

Kui kasutate GRBL ja

samm -ajam, mis on seadistatud kiirusele 800 sammu/pööret, kehtivad kõikide telgede jaoks järgmised ühikud:

+- 32 ühikut = +- 180 kraadi

Töötluskoodi näide:

See kood võib suhelda otse Arduino GRBL -iga.

github.com/damellis/gctrl

Ärge unustage seeriat seadistada baudiks: 115200

Kood udolaadimine ardunios

import java.awt.event. KeyEvent;

import javax.swing. JOptionPane;

impordi töötlemine.seriaalne.*;

Jadaport = null;

// valige ja muutke oma operatsioonisüsteemi jaoks sobivat rida

// jätke interaktiivse pordi kasutamiseks tühjaks (vajutage programmis 'p')

Stringi pordi nimi = null;

// Stringi portinimi = Serial.list () [0]; // Mac OS X

// Stringi portinimi = "/dev/ttyUSB0"; // Linux

// Stringi portinimi = "COM6"; // Windows

boolean streaming = vale;

ujuki kiirus = 0,001;

String gcode;

int i = 0;

tühine openSerialPort ()

{

if (pordi nimi == null) return;

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

port = uus seeria (see, pordi nimi, 115200);

port.bufferUntil ('\ n');

}

tühine selectSerialPort ()

{

Stringi tulemus = [String] JOptionPane.showInputDialog (see, "Valige jadaport, mis vastab teie Arduino plaadile.", "Valige jadaport", JOptionPane. PLAIN_MESSAGE, null, Serial.list (), 0);

kui (tulemus! = null) {

pordi nimi = tulemus;

openSerialPort ();

}

}

tühine seadistus ()

{

suurus (500, 250);

openSerialPort ();

}

tühine viik ()

{

taust (0);

täitma (255);

int y = 24, dy = 12;

tekst ("JUHISED", 12, y); y += dy;

tekst ("p: valige jadaport", 12, y); y += dy;

tekst ("1: seadke kiiruseks 0,001 tolli (1 mil) jooksu kohta", 12, y); y += dy;

tekst ("2: seadke kiiruseks 0,010 tolli (10 mil) jooksu kohta", 12, y); y += dy;

tekst ("3: seadke kiiruseks 10000 tolli (100 mil) jooksu kohta", 12, y); y += dy;

tekst ("nooleklahvid: jooks x-y tasapinnas", 12, y); y += dy;

tekst ("leht üles ja leht alla: jooks z -teljel", 12, y); y += dy;

text ("$: display grbl settings", 12, y); y+= dy;

tekst ("h: mine koju", 12, y); y += dy;

text ("0: nullmasin (seadistage kodu praegusele asukohale)", 12, y); y += dy;

tekst ("g: voogesitage g-koodifaili", 12, y); y += dy;

text ("x: lõpetage g-koodi voogesitus (see EI OLE kohe)", 12, y); y += dy;

y = kõrgus - dy;

tekst ("praegune jooksukiirus:" + kiirus + "tolli sammu kohta", 12, y); y -= dy;

tekst ("praegune jadaport:" + pordi nimi, 12, y); y -= dy;

}

tühi võti Vajutatud ()

{

kui (võti == '1') kiirus = 0,001;

kui (võti == '2') kiirus = 0,01;

kui (võti == '3') kiirus = 0,1;

kui (! voogesitus) {

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

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

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

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

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

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

// if (võti == 'h') port.write ("G90 / nG20 / nG00 X0.000 Y0.000 Z0.000 / n");

if (võti == 'v') port.write ("$ 0 = 75 / n $ 1 = 74 / n $ 2 = 75 / n");

// if (võti == 'v') port.write ("$ 0 = 100 / n $ 1 = 74 / n $ 2 = 75 / n");

if (võti == 's') port.write ("$ 3 = 10 / n");

if (võti == 'e') port.write ("$ 16 = 1 / n");

if (võti == 'd') port.write ("$ 16 = 0 / n");

if (võti == '0') openSerialPort ();

if (võti == 'p') selectSerialPort ();

if (võti == '$') port.write ("$$ / n");

if (võti == 'h') port.write ("$ H / n");

}

if (! streaming && key == 'g') {

gcode = null; i = 0;

Failifail = null;

println ("Faili laadimine …");

selectInput ("Vali töödeldav fail:", "fileSelected", fail);

}

if (võti == 'x') voogesitus = vale;

}

tühine failValitud (faili valik) {

if (valik == null) {

println ("Aken suleti või kasutaja vajutas tühista.");

} muud {

println ("Kasutaja valitud" + selection.getAbsolutePath ());

gcode = loadStrings (selection.getAbsolutePath ());

if (gcode == null) return;

voogesitus = tõsi;

oja ();

}

}

tühi voog ()

{

kui (! voogesitus) naaseb;

samas (tõsi) {

kui (i == gcode.length) {

voogesitus = vale;

tagasipöördumine;

}

kui (gcode .trim (). pikkus () == 0) i ++;

muidu murda;

}

println (gcode );

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

i ++;

}

void serialEvent (jada p)

{

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

println (s.trim ());

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

if (s.trim (). startsWith ("error")) stream (); // XXX: tõesti?

}

Samm: kujundage ja printige kõik osad vineerilehele

Kujundage ja printige kõik osad vineerilehel
Kujundage ja printige kõik osad vineerilehel

Laadige robotiosa ja disain AutoCAD -i alla ning printige 12 mm vineerilehele ning viimistlus- ja kujundusosale. Kui kellelgi on vaja cad -faili plz, jätke kommentaar kommentaaride lahtrisse, saadan selle teile otse.

6. samm: kokkupanek

Kokkupanek
Kokkupanek
Kokkupanek
Kokkupanek

koguge kõik osad kokku ja korraldage etteantud järjekorras ning järgige pildiskeemi.

Samm: seadistage GBRL -i sätted

Seade, mis on tõestanud meie robotite tööd.

$ 0 = 10 (sammimpulss, usec) $ 1 = 255 (samm tühikäigu viivitus, msek)) $ 5 = 0 (piiravad tihvtid ümber, bool) $ 6 = 1 (sondi tihvti ümberpööramine, bool) $ 10 = 3 (olekuaruande mask: 00000011) $ 11 = 0,020 (ristmiku hälve, mm) $ 12 = 0,002 (kaare tolerants, mm) $ 13 = 0 (aruande tolli, bool) $ 20 = 0 (pehmed piirid, bool) $ 21 = 0 (kõvad piirid, bool) $ 22 = 1 (homing tsükkel, bool) $ 23 = 0 (homing dir invert mask: 00000000) $ 24 = 100.000 (suunamisvoog, mm/min) $ 25 = 500.000 (sihtimisotsing, mm/min) $ 26 = 250 (suunamise tagasilöök, ms) $ 27 = 1.000 (väljatõmbetõmme, mm) $ 100 = 250.000 (x, samm/mm) $ 101 = 250.000 (y, samm/mm) $ 102 = 250.000 (z, samm/mm) $ 110 = 500.000 (x max kiirus, mm/min) $ 111 = 500.000 (y max kiirus, mm/min) $ 112 = 500.000 (z max määr, 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 käik, mm) $ 131 = 200 000 (y max käik, mm) $ 132 = 200 000 (z max käik, mm)

Samm: laadige üles lõplik kood ja kontrollige virtuaalset tulemust Arduino Uno tarkvara juhtpaneelil

// Ühikud: CM

ujuk b_kõrgus = 0;

ujuk a1 = 92;

ujuk a2 = 86;

float snude_len = 20;

boolean doZ = vale;

float base_angle; // = 0;

float arm1_angle; // = 0;

float arm2_angle; // = 0;

ujuk bx = 60; // = 25;

hõljuda = 60; // = 0;

ujuk bz = 60; // = 25;

ujuk x = 60;

ujuk y = 60;

ujuk z = 60;

ujuk q;

ujuk c;

ujuk V1;

ujuk V2;

ujuk V3;

ujuk V4;

ujuk V5;

tühine seadistus () {

suurus (700, 700, P3D);

nukk = uus PeasyCam (see, 300);

cam.setMinimumDistance (50);

cam.setMaximumDistance (500);

}

tühine viik () {

// ligninger:

y = (hiirX - laius/2)*(- 1);

x = (hiirY - kõrgus/2)*(- 1);

bz = z;

poolt = y;

bx = x;

ujuk 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;

käe_nurk = q;

V4 = radiaanid (90,0) - q;

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

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

alusnurk = kraadid (atan2 (bx, by));

arm1_angle = kraadid (arm1_angle);

arm2_angle = kraadid (arm2_angle);

// println (by, bz);

// arm1_angle = 90;

// arm2_angle = 45;

/*

arm2_angle = 23;

käe_nurk = 23;

arm2_angle = 23;

*/

// interaktiivne:

// kui (doZ)

//

// {

// base_angle = base_angle+ mouseX-pmouseX;

//} muud

// {

// arm1_angle = arm1_angle+ pmouseX-mouseX;

// }

//

// arm2_angle = arm2_angle+ mouseY-pmouseY;

joonistusrobot (alusnurk,-(käe_nurk-90), käe_nurk+90-(-(käe_nurk-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);

taust (0);

valgus();

pushMatrix ();

// ALUS

täitke (150, 150, 150);

kasti_nurk (50, 50, b_height, 0);

pöörlema (radiaanid (alusnurk), 0, 0, 1);

// ARM 1

täitke (150, 0, 150);

kast_nurk (10, 10, a1, käe_nurk);

// ARM 2

täitke (255, 0, 0);

kast_nurk (10, 10, a2, arm2_angle);

// SUDE

täitke (255, 150, 0);

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

popMatrix ();

pushMatrix ();

float action_box_size = 100;

tõlkima (0, -action_box_size/2, action_box_size/2+b_height);

pushMatrix ();

tõlkima (x, action_box_size- y-action_box_size/2, z-action_box_size/2);

täitke (255, 255, 0);

kast (20);

popMatrix ();

täitke (255, 255, 255, 50);

kast (action_box_size, action_box_size, action_box_size);

popMatrix ();

}

void box_corner (ujuk w, ujuk h, ujuk d, ujukpööre)

{

pöörlema (radiaanid (pöörlema), 1, 0, 0);

tõlkima (0, 0, d/2);

kast (w, h, d);

tõlkima (0, 0, d/2);

}

tühi võti Vajutatud ()

{

kui (võti == 'z')

{

doZ =! doZ;

}

kui (võti == 'h')

{

// seadke kõik nulli

arm2_angle = 0;

käe_nurk = 90;

alusnurk = 0;

}

kui (võti == 'g')

{

println (kraadid (V1));

println (kraadid (V5));

}

if (keyCode == ÜLES)

{

z ++;

}

if (keyCode == ALLA)

{

z -;

}

kui (võti == '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);

}

}

Soovitan: