Sisukord:
- 1. samm: komponentide nõuded
- Samm: laadige alla Gui
- 3. samm: ühendamine
- Samm: laadige püsivara üles ja kontrollige koodi tulemust Arduino armatuurlaual
- Samm: kujundage ja printige kõik osad vineerilehele
- 6. samm: kokkupanek
- Samm: seadistage GBRL -i sätted
- Samm: laadige üles lõplik kood ja kontrollige virtuaalset tulemust Arduino Uno tarkvara juhtpaneelil
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-13 06:57
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
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
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
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
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);
}
}