Obsah:

Robot základny Arduino Pick and Place: 8 kroků
Robot základny Arduino Pick and Place: 8 kroků

Video: Robot základny Arduino Pick and Place: 8 kroků

Video: Robot základny Arduino Pick and Place: 8 kroků
Video: Makeblock Untimate Robot Kit Part 2 : Robtic Arm Explaine, Software, Code App and Having Fun demo 2024, Červenec
Anonim
Robot pro vyzvednutí a umístění základny Arduino
Robot pro vyzvednutí a umístění základny Arduino
Robot pro vyzvednutí a umístění základny Arduino
Robot pro vyzvednutí a umístění základny Arduino
Robot pro vyzvednutí a umístění základny Arduino
Robot pro vyzvednutí a umístění základny Arduino

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

Požadavek na součásti
Požadavek na součásti
Požadavek na součásti
Požadavek na součásti
Požadavek na součásti
Požadavek na součásti
Požadavek na součásti
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í

Spojení
Spojení
Spojení
Spojení
Spojení
Spojení

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

Navrhněte a vytiskněte všechny části z překližky
Navrhněte a vytiskněte všechny části z 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í

Shromáždění
Shromáždění
Shromáždění
Shromáždění

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

}

}

Doporučuje: