Obsah:
- Krok 1: Požadavek na součásti
- Krok 2: Stáhněte si Gui
- Krok 3: Připojení
- Krok 4: Nahrajte firmware a zkontrolujte výsledek kódu na řídicím panelu Arduino
- Krok 5: Navrhněte a vytiskněte všechny části do překližky
- Krok 6: Sestavení
- Krok 7: Nastavení nastavení GBRL
- Krok 8: Nahrajte konečný kód a zkontrolujte virtuální výsledek na softwarovém panelu Arduino Uno
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Vyrobil jsem super levné (méně než 1 000 dolarů) průmyslové robotické rameno, které studentům umožňuje hackovat robotiku ve větším měřítku a umožnit malým místním produkcím používat roboty ve svých procesech bez narušení banky. Je snadné vybudovat a vytvořit věkovou skupinu lidí od 15 do 50 let.
Krok 1: Požadavek na součásti
1. Arduino + štít + kolíky + kabely
2. Ovladač motoru: dm860A (Ebay)
3. Steppermotor: 34hs5435c-37b2 (Ebay)
4. Šrouby M8x45+60+70 a šrouby M8.
5. 12mm překližka.
6. Nylon 5 mm.
7. Žaluziové podložky 8mm.
8. Šrouby do dřeva 4,5x40mm.
9. Počítadlo M3 potopeno, 10. Napájení 12v
11. ovladač servomotoru arduino
Krok 2: Stáhněte si Gui
zapmaker.org/projects/grbl-controller-3-0/
github.com/grbl/grbl/wiki/Using-Grbl
Krok 3: Připojení
Pro lepší pochopení připojte vodiče, které jsou uvedeny na obrázku.
potřebujeme připojit ovladač motoru k Arduinu a dalším konektorům, které vyžaduje váš robot.
Krok 4: Nahrajte firmware a zkontrolujte výsledek kódu na řídicím panelu Arduino
Instalace firmwaru na Arduino - GRBL:
github.com/grbl/grbl/wiki/Compiling-Grbl
Poznámka: Při kompilaci v Arduinu může dojít ke konfliktu. Odeberte všechny ostatní knihovny ze složky knihovny (../documents/Arduino/libraries).
Nastavení firmwaru
Nastavit povolení na novější časový limit. Použijte sériové připojení a napište:
$1=255
Nastavit navádění:
$22=1
Nezapomeňte nastavit sériovou přenosovou rychlost: 115200
Užitečné G-kódy
Nastavit nulový bod pro robota:
G10 L2 Xnnn Ynnn Znnn
Použijte nulový bod:
G54
Typická inicializace na středového robota:
G10 L2 X1,5 Y1.2 Z1.1
G54
Rychlé přesunutí robota do polohy:
G0 Xnnn Ynnn Znnn
Příklad:
G0 X10.0 Y3.1 Z4.2 (zpět)
Přesuňte robota do polohy konkrétní rychlostí:
G1 Xnnn Ynnn Znnn Fnnn
G1 X11 Y3 Z4 F300 (zpět)
F by mělo být mezi 10 (slooooow) a 600 (rychle)
Výchozí jednotky pro X, Y a Z
Při použití výchozího nastavení kroku/jednotek (250 kroků/jednotka) pro GRBL a
krokový pohon nastavený na 800 kroků/ot, pro všechny osy platí následující jednotky:
+- 32 jednotek = +- 180 stupňů
Příklad zpracování kódu:
Tento kód může komunikovat přímo s Arduino GRBL.
github.com/damellis/gctrl
Nezapomeňte nastavit sériovou přenosovou rychlost: 115200
Vložte kód v Arduniu
import java.awt.event. KeyEvent;
import javax.swing. JOptionPane;
zpracování importu.sériové.*;
Sériový port = null;
// vyberte a upravte příslušný řádek pro váš operační systém
// ponechat jako null pro použití interaktivního portu (v programu stiskněte 'p')
Řetězec portname = null;
// Řetězec název portu = Serial.list () [0]; // Mac OS X
// Řetězec název portu = "/dev/ttyUSB0"; // Linux
// Řetězec portname = "COM6"; // Okna
boolean streaming = false;
plovoucí rychlost = 0,001;
Řetězec gcode;
int i = 0;
void openSerialPort ()
{
if (název_portu == null) return;
if (port! = null) port.stop ();
port = new Serial (this, portname, 115200);
port.bufferUntil ('\ n');
}
void selectSerialPort ()
{
Výsledek řetězce = (String) JOptionPane.showInputDialog (this, "Vyberte sériový port, který odpovídá vaší desce Arduino.", "Vyberte sériový port", JOptionPane. PLAIN_MESSAGE, nula, Serial.list (), 0);
if (result! = null) {
název_portu = výsledek;
openSerialPort ();
}
}
neplatné nastavení ()
{
velikost (500, 250);
openSerialPort ();
}
neplatné losování ()
{
pozadí (0);
výplň (255);
int y = 24, dy = 12;
text („NÁVOD“, 12, y); y += dy;
text ("p: vyberte sériový port", 12, y); y += dy;
text („1: nastavit rychlost na 0,001 palce (1 mil) za běh“, 12, y); y += dy;
text („2: nastavit rychlost na 0,010 palce (10 mil) za běh“, 12, y); y += dy;
text („3: nastavit rychlost na 0,100 palce (100 mil) za běh“, 12, y); y += dy;
text („klávesy se šipkami: jog v rovině x-y“, 12, y); y += dy;
text ("page up & page down: jog in z axis", 12, y); y += dy;
text ("$: nastavení grbl zobrazení", 12, y); y+= dy;
text ("h: jdi domů", 12, y); y += dy;
text ("0: nulový počítač (nastavit domov na aktuální umístění)", 12, y); y += dy;
text ("g: streamujte soubor s kódem g", 12, y); y += dy;
text ("x: zastavit streamování g-kódu (toto NENÍ okamžité)", 12, y); y += dy;
y = výška - dy;
text ("aktuální rychlost jogu:" + rychlost + "palce na krok", 12, y); y -= dy;
text ("aktuální sériový port:" + název portu, 12, y); y -= dy;
}
zrušit stisknutí klávesy ()
{
pokud (klíč == '1') rychlost = 0,001;
pokud (klíč == '2') rychlost = 0,01;
pokud (klíč == '3') rychlost = 0,1;
if (! streaming) {
if (keyCode == LEFT) port.write ("G91 / nG20 / nG00 X-" + rychlost + "Y0.000 Z0.000 / n");
if (keyCode == RIGHT) port.write ("G91 / nG20 / nG00 X" + rychlost + "Y0.000 Z0.000 / n");
if (keyCode == UP) port.write ("G91 / nG20 / nG00 X0.000 Y" + rychlost + "Z0.000 / n");
if (keyCode == DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y-" + rychlost + "Z0.000 / n");
if (keyCode == KeyEvent. VK_PAGE_UP) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z" + rychlost + "\ n");
if (keyCode == KeyEvent. VK_PAGE_DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z-" + rychlost + "\ n");
// if (klíč == '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 (klíč == 'v') port.write ("$ 0 = 100 / n $ 1 = 74 / n $ 2 = 75 / n");
if (klíč == 's') port.write ("$ 3 = 10 / n");
if (klíč == 'e') port.write ("$ 16 = 1 / n");
if (klíč == 'd') port.write ("$ 16 = 0 / n");
if (klíč == '0') openSerialPort ();
if (key == 'p') selectSerialPort ();
if (klíč == '$') port.write ("$$ / n");
if (klíč == 'h') port.write ("$ H / n");
}
if (! streaming && key == 'g') {
gcode = null; i = 0;
Soubor souboru = null;
println ("Načítání souboru …");
selectInput ("Vyberte soubor ke zpracování:", "fileSelected", soubor);
}
if (key == 'x') streaming = false;
}
void fileSelected (výběr souboru) {
if (selection == null) {
println ("Okno bylo zavřeno nebo uživatel zrušil.");
} else {
println ("Uživatel vybrán" + selection.getAbsolutePath ());
gcode = loadStrings (selection.getAbsolutePath ());
if (gcode == null) return;
streamování = true;
proud();
}
}
prázdný stream ()
{
if (! streaming) return;
while (true) {
if (i == gcode.length) {
streaming = false;
vrátit se;
}
if (gcode .trim (). length () == 0) i ++;
else break;
}
println (gcode );
port.write (gcode + '\ n');
i ++;
}
void serialEvent (Serial p)
{
Řetězec s = p.readStringUntil ('\ n');
println (s.trim ());
if (s.trim (). startsWith ("ok")) stream ();
if (s.trim (). startsWith ("error")) stream (); // XXX: opravdu?
}
Krok 5: Navrhněte a vytiskněte všechny části do překližky
Stáhněte si část a návrh robota do AutoCADu a vytiskněte jej na 12mm překližkovou desku a povrchovou a designovou část. Pokud někdo potřebuje soubor CAD, zanechte komentář v poli pro komentář, pošlu vám ho přímo.
Krok 6: Sestavení
posbírejte všechny součásti a uspořádejte je v pořadí na obrázku, které je dáno, a postupujte podle schématu obrázku.
Krok 7: Nastavení nastavení GBRL
Nastavení, které se osvědčilo u našich robotů.
$ 0 = 10 (krokový puls, usec) $ 1 = 255 (zpoždění nečinnosti kroku, ms) $ 2 = 7 (maska invertování krokového portu: 00000111) $ 3 = 7 (maska invertování přímého portu: 00000111) $ 4 = 0 (invertování krokového povolení, bool) $ 5 = 0 (invertování limitních pinů, bool) $ 6 = 1 (invertování pinů sondy, bool) $ 10 = 3 (maska zprávy o stavu: 00000011) $ 11 = 0,020 (odchylka spojení, mm) $ 12 = 0,002 (tolerance oblouku, mm) $ 13 = 0 (hlášení palců, bool) $ 20 = 0 (měkké limity, bool) $ 21 = 0 (tvrdé limity, bool) $ 22 = 1 (cyklus navádění, bool) $ 23 = 0 (maska invertování homing dir: 00000000) $ 24 = 100 000 (naváděcí posuv, mm/min) $ 25 = 500 000 (hledání navádění, mm/min) $ 26 = 250 (odskakování při navádění, ms) 27 $ = 1 000 (odtažení navádění, mm) $ 100 = 250 000 (x, krok/mm) $ 101 = 250 000 (y, krok/mm) $ 102 = 250 000 (z, krok/mm) $ 110 = 500 000 (x maximální rychlost, mm/min) $ 111 = 500 000 (y maximální rychlost, mm/min) $ 112 = 500 000 (z maximální rychlost, mm/min) $ 120 = 10 000 (x zrychlení, mm/s^2) $ 121 = 10 000 (y zrychlení, mm/s^2) $ 122 = 10 000 (z zrychlení, mm/s^2) $ 130 = 200 000 (x maximální dráha, mm) $ 131 = 200 000 (y maximální dráha, mm) $ 132 = 200 000 (z maximální dráha, mm)
Krok 8: Nahrajte konečný kód a zkontrolujte virtuální výsledek na softwarovém panelu Arduino Uno
// Jednotky: CM
float b_height = 0;
float a1 = 92;
float a2 = 86;
float snude_len = 20;
boolean doZ = false;
float base_angle; // = 0;
float arm1_angle; // = 0;
float arm2_angle; // = 0;
float bx = 60; // = 25;
float by = 60; // = 0;
float bz = 60; // = 25;
float x = 60;
float y = 60;
float z = 60;
float q;
float c;
plovák V1;
plovák V2;
plovák V3;
float V4;
plovák V5;
neplatné nastavení () {
velikost (700, 700, P3D);
cam = new PeasyCam (this, 300);
cam.setMinimumDistance (50);
cam.setMaximumDistance (500);
}
void draw () {
// ligninger:
y = (mouseX - šířka/2)*(- 1);
x = (myšY - výška/2)*(- 1);
bz = z;
podle = y;
bx = x;
float y3 = sqrt (bx*bx+od*o);
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 = radiány (90,0) - q;
V5 = radiány (180) - V4 - radiány (90);
arm2_angle = radiány (180,0) - (V5 + V1);
základní_ úhel = stupně (atan2 (bx, podle));
arm1_angle = stupně (arm1_angle);
arm2_angle = stupně (arm2_angle);
// println (od, bz);
// arm1_angle = 90;
// arm2_angle = 45;
/*
arm2_angle = 23;
arm1_angle = 23;
arm2_angle = 23;
*/
// interaktivní:
// if (doZ)
//
// {
// base_angle = base_angle+ mouseX-pmouseX;
//} jinak
// {
// arm1_angle = arm1_angle+ pmouseX-mouseX;
// }
//
// arm2_angle = arm2_angle+ mouseY-pmouseY;
draw_robot (base_angle,-(arm1_angle-90), arm2_angle+90-(-(arm1_angle-90)));
// println (base_angle + "," + arm1_angle + "," + arm2_angle);
}
neplatné draw_robot (float base_angle, float arm1_angle, float arm2_angle)
{
rotateX (1.2);
rotateZ (-1,2);
pozadí (0);
světla();
pushMatrix ();
// ZÁKLADNA
výplň (150, 150, 150);
box_corner (50, 50, b_height, 0);
rotate (radiány (base_angle), 0, 0, 1);
// ARM 1
výplň (150, 0, 150);
box_corner (10, 10, a1, arm1_angle);
// ARM 2
vyplnit (255, 0, 0);
box_corner (10, 10, a2, arm2_angle);
// SNUDE
výplň (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);
vyplnit (255, 255, 0);
krabice (20);
popMatrix ();
výplň (255, 255, 255, 50);
box (velikost_akce_boxu, velikost_akce_boxu, velikost_boxu akce);
popMatrix ();
}
neplatné box_corner (float w, float h, float d, float rotate)
{
rotate (radiány (rotace), 1, 0, 0);
translate (0, 0, d/2);
krabice (š, v, h);
translate (0, 0, d/2);
}
zrušit stisknutí klávesy ()
{
if (klíč == 'z')
{
doZ =! doZ;
}
if (klíč == 'h')
{
// nastavit vše na nulu
arm2_angle = 0;
arm1_angle = 90;
base_angle = 0;
}
if (klíč == 'g')
{
println (stupně (V1));
println (stupně (V5));
}
if (keyCode == UP)
{
z ++;
}
if (keyCode == DOWN)
{
z -;
}
if (klíč == '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);
}
}