Tartalomjegyzék:

Arduino Base Pick and Place Robot: 8 lépés
Arduino Base Pick and Place Robot: 8 lépés

Videó: Arduino Base Pick and Place Robot: 8 lépés

Videó: Arduino Base Pick and Place Robot: 8 lépés
Videó: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, November
Anonim
Arduino Base Pick és Place Robot
Arduino Base Pick és Place Robot
Arduino Base Pick és Place Robot
Arduino Base Pick és Place Robot
Arduino Base Pick és Place Robot
Arduino Base Pick és Place Robot

Készítettem egy szuper olcsó (kevesebb, mint 1000 dollár) ipari robotkart, hogy a diákok nagyobb méretű robotikát feltörhessenek, és lehetővé tegyék a kis helyi gyártók számára, hogy robotokat használhassanak a folyamataikban anélkül, hogy tönkretennék a bankot. Eassy építeni, és a korosztály az emberek 15-50 év.

1. lépés: Az összetevők követelményei

Összetevők Követelmény
Összetevők Követelmény
Összetevők Követelmény
Összetevők Követelmény
Összetevők Követelmény
Összetevők Követelmény
Összetevők Követelmény
Összetevők Követelmény

1. Arduino + pajzs + csapok + kábelek

2. Motorvezérlő: dm860A (Ebay)

3. léptetőmotor: 34hs5435c-37b2 (Ebay)

4. M8x45+60+70 csavarok és M8 csavarok.

5. 12 mm -es rétegelt lemez.

6. 5 mm -es nylon.

7. Vak alátétek 8mm.

8. Facsavarok 4,5x40mm.

9. M3 számláló elsüllyedt, 10. 12V -os tápegység

11. szervo motor driver arduino

2. lépés: Töltse le a Gui -t

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

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

3. lépés: Csatlakozás

Kapcsolat
Kapcsolat
Kapcsolat
Kapcsolat
Kapcsolat
Kapcsolat

Csatlakoztassa a képen látható vezetékeket, hogy jobban megértse az Ön számára.

csatlakoztatnunk kell a motorvezérlőt az Arduino -hoz és más csatlakozókhoz, amelyek a robot szerint szükségesek.

Lépés: Töltse fel a firmware -t, és ellenőrizze a kód eredményét az Arduino irányítópulton

A firmware telepítése az Arduino -GRBL -re:

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

Megjegyzés: Arduino -ban történő fordítás során ütközés léphet fel. Távolítsa el az összes többi könyvtárat a könyvtármappájából (../documents/Arduino/libraries).

Firmware beállítás

Állítsa az engedélyezést újabb időkorlátra. Használjon soros kapcsolatot, és írja be:

$1=255

Állítsa be az otthont:

$22=1

Ne felejtse el beállítani a soros értéket baudra: 115200

Hasznos G-kódok

Állítsa be a robot nulla pontját:

G10 L2 Xnnn Ynnn Znnn

Nulla pont használata:

G54

A középső robot tipikus inicializálása:

G10 L2 X1.5 Y1.2 Z1.1

G54

Mozgassa a robotot gyorsan a helyére:

G0 Xnnn Ynnn Znnn

Példa:

G0 X10.0 Y3.1 Z4.2 (visszatérés)

Mozgassa a robotot a kívánt sebességre:

G1 Xnnn Ynnn Znnn Fnnn

G1 X11 Y3 Z4 F300 (vissza)

F legyen 10 (slooooow) és 600 (gyors) között

Alapértelmezett mértékegységek X, Y és Z esetén

Ha a GRBL és a lépés/egység alapértelmezett beállításait (250 lépés/egység) használja

léptető hajtás 800 lépésre/fordulatszámra beállítva a következő egységek érvényesek minden tengelyre:

+- 32 egység = +- 180 fok

Példa a feldolgozási kódra:

Ez a kód közvetlenül kommunikálhat az Arduino GRBL -vel.

github.com/damellis/gctrl

Ne felejtse el beállítani a soros értéket baudra: 115200

Kód uoload az ardunio -ban

import java.awt.event. KeyEvent;

import javax.swing. JOptionPane;

import feldolgozás.sorozat.*;

Soros port = null;

// válassza ki és módosítsa az operációs rendszernek megfelelő sort

// hagyja nullként az interaktív port használatához (nyomja meg a "p" gombot a programban)

String portnév = null;

// String portnév = Sorozat.lista () [0]; // Mac OS X

// String portnév = "/dev/ttyUSB0"; // Linux

// String portnév = "COM6"; // Ablakok

boolean streaming = hamis;

lebegési sebesség = 0,001;

Karakterlánc gcode;

int i = 0;

void openSerialPort ()

{

if (portnév == null) return;

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

port = új soros (ez, portnév, 115200);

port.bufferUntil ('\ n');

}

void selectSerialPort ()

{

Karakterlánc eredménye = (karakterlánc) JOptionPane.showInputDialog (ez, "Válassza ki az Arduino kártyának megfelelő soros portot.", "Soros port kiválasztása", JOptionPane. PLAIN_MESSAGE, nulla, Serial.list (), 0);

if (eredmény! = null) {

portnév = eredmény;

openSerialPort ();

}

}

üres beállítás ()

{

méret (500, 250);

openSerialPort ();

}

érvénytelen sorsolás ()

{

háttér (0);

kitöltés (255);

int y = 24, dy = 12;

szöveg ("UTASÍTÁSOK", 12, y); y += dy;

text ("p: soros port kiválasztása", 12, y); y += dy;

szöveg ("1: állítsa a sebességet 0,001 hüvelykre (1 mil) per jog", 12, y); y += dy;

szöveg ("2: állítsa a sebességet 0,010 hüvelykre (10 mil) per jog", 12, y); y += dy;

szöveg ("3: állítsa a sebességet 10000 hüvelykre jogonként", 12, y); y += dy;

szöveg ("nyilak: kocogás x-y síkban", 12, y); y += dy;

szöveg ("oldal fel & oldal lefelé: léptetés z tengelyben", 12, y); y += dy;

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

szöveg ("h: menj haza", 12, y); y += dy;

text ("0: nulla gép (állítsa haza az aktuális helyre)", 12, y); y += dy;

text ("g: g-kód fájl streamelése", 12, y); y += dy;

text ("x: állítsa le a g-kód streamelését (ez NEM azonnali)", 12, y); y += dy;

y = magasság - dy;

szöveg ("aktuális léptetési sebesség:" + sebesség + "hüvelyk lépésenként", 12, y); y -= dy;

text ("aktuális soros port:" + portnév, 12, y); y -= dy;

}

üres kulcs Nyomva ()

{

if (kulcs == '1') sebesség = 0,001;

if (kulcs == '2') sebesség = 0,01;

if (kulcs == '3') sebesség = 0,1;

ha (! streaming) {

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

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

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

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

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

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

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

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

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

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

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

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

if (kulcs == '0') openSerialPort ();

if (kulcs == 'p') selectSerialPort ();

if (kulcs == '$') port.write ("$$ / n");

if (kulcs == 'h') port.write ("$ H / n");

}

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

gcode = null; i = 0;

Fájl fájl = null;

println ("Fájl betöltése …");

selectInput ("Válassza ki a feldolgozni kívánt fájlt:", "fileSelected", fájl);

}

if (kulcs == 'x') streaming = hamis;

}

void fileSelected (Fájl kiválasztása) {

if (kiválasztás == null) {

println ("Az ablak bezárult, vagy a felhasználó lenyomta a Mégse gombot.");

} más {

println ("Felhasználó kiválasztva" + selection.getAbsolutePath ());

gcode = loadStrings (selection.getAbsolutePath ());

if (gcode == null) return;

streaming = igaz;

folyam();

}

}

üres folyam ()

{

ha (! streaming) visszatér;

míg (igaz) {

if (i == gcode.length) {

streaming = hamis;

Visszatérés;

}

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

egyéb szünet;

}

println (gcode );

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

i ++;

}

void serialEvent (soros p)

{

Karakterlánc s = p.readStringUntil ('\ n');

println (s.trim ());

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

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

}

5. lépés: Tervezze meg és nyomtassa ki az összes részt rétegelt lemezben

Tervezzen és nyomtasson minden részt rétegelt lemezben
Tervezzen és nyomtasson minden részt rétegelt lemezben

Töltse le a robot alkatrészt és tervezést az AutoCAD -ből, és nyomtassa ki a 12 mm -es rétegelt lemezre, valamint a befejező és tervező részre. Ha valakinek szüksége van cad fájlra plz, hagyja a megjegyzést a megjegyzés rovatban.

6. lépés: Összeszerelés

Összeszerelés
Összeszerelés
Összeszerelés
Összeszerelés

gyűjtsük össze az összes részt, és rendezzük el a megadott sorrendben a képen, és kövessük a képdiagramot.

7. lépés: A GBRL beállítások beállítása

Beállítás, amely bevált a robotjainkon.

$ 0 = 10 (lépésimpulzus, usec) $ 1 = 255 (step idle delay, msse) $ 2 = 7 (step port invert mask: 00000111) $ 3 = 7 (dir port invert invert maszk: 00000111) $ 4 = 0 (step enable invert, bool) $ 5 = 0 (határcsapok megfordítása, bool) $ 6 = 1 (szondacsap megfordítása, bool) $ 10 = 3 (állapotjelentés maszk: 00000011) $ 11 = 0,020 (eltérés, mm) $ 12 = 0,002 (ívtolerancia, mm) 13 USD = 0 (jelentés hüvelyk, bool) $ 20 = 0 (soft limitek, bool) $ 21 = 0 (kemény korlátok, bool) $ 22 = 1 (kezdő ciklus, bool) $ 23 = 0 (homing dir invert mask: 00000000) $ 24 = 100.000 (kezdő előtolás, mm/perc) $ 25 = 500.000 (homing seek, mm/min) $ 26 = 250 (homing debounce, ms) $ 27 = 1.000 (homing pull-off, mm) $ 100 = 250.000 (x, step/mm) $ 101 = 250.000 (y, lépés/mm) $ 102 = 250.000 (z, lépés/mm) $ 110 = 500.000 (x max. Sebesség, mm/perc) $ 111 = 500.000 (y max. Sebesség, mm/perc) $ 112 = 500.000 (z max. Sebesség, mm/perc) $ 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 haladás, mm) $ 131 = 200.000 (y max. menet, mm) $ 132 = 200.000 (z max. haladás, mm)

Lépés: Töltse fel a végső kódot, és ellenőrizze a virtuális eredményt az Arduino Uno szoftver irányítópultján

// Egységek: CM

úszó b_magasság = 0;

úszó a1 = 92;

úszó a2 = 86;

float snude_len = 20;

logikai doZ = hamis;

float base_angle; // = 0;

float arm1_angle; // = 0;

float arm2_angle; // = 0;

float bx = 60; // = 25;

lebeg = 60; // = 0;

float bz = 60; // = 25;

úszó x = 60;

úszó y = 60;

úszó z = 60;

float q;

úszó c;

úszó V1;

úszó V2;

úszó V3;

úszó V4;

úszó V5;

void setup () {

méret (700, 700, P3D);

bütyök = új PeasyCam (ez, 300);

cam.setMinimumDistance (50);

cam.setMaximumDistance (500);

}

void draw () {

ligninger:

y = (egérX - szélesség/2)*(- 1);

x = (egérY - magasság/2)*(- 1);

bz = z;

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

kar1_szög = q;

V4 = radián (90,0) - q;

V5 = radián (180) - V4 - radián (90);

kar2_szög = radián (180,0) - (V5 + V1);

bázis_szög = fokok (atan2 (bx, by));

kar1_szög = fok (kar1_szög);

kar2_szög = fok (kar2_szög);

// println (by, bz);

// kar1_szög = 90;

// kar2_szög = 45;

/*

kar2_szög = 23;

kar1_szög = 23;

kar2_szög = 23;

*/

// interaktív:

// ha (doZ)

//

// {

// base_angle = base_angle+ mouseX-pmouseX;

// } más

// {

// arm1_angle = arm1_angle+ pmouseX-mouseX;

// }

//

// kar2_szög = kar2_szög+ egérY-pmouseY;

draw_robot (alap_szög,-(kar1_szög-90), kar2_szög+90-(-(kar1_szög-90)));

// println (base_angle + "," + arm1_angle + "," + arm2_angle);

}

void draw_robot (float base_angle, float arm1_angle, float kar2_angle)

{

rotateX (1.2);

rotateZ (-1,2);

háttér (0);

Lámpák();

pushMatrix ();

// BÁZIS

kitöltés (150, 150, 150);

box_corner (50, 50, b_maight, 0);

forgatás (radiánok (alapszög), 0, 0, 1);

ARM 1

kitöltés (150, 0, 150);

box_corner (10, 10, a1, kar1_szög);

ARM 2

kitöltés (255, 0, 0);

box_corner (10, 10, a2, kar2_szög);

// SNUDE

kitöltés (255, 150, 0);

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

popMatrix ();

pushMatrix ();

float action_box_size = 100;

fordítás (0, -action_box_size/2, action_box_size/2+b_height);

pushMatrix ();

fordítás (x, action_box_size- y-action_box_size/2, z-action_box_size/2);

kitöltés (255, 255, 0);

doboz (20);

popMatrix ();

kitöltés (255, 255, 255, 50);

doboz (action_box_size, action_box_size, action_box_size);

popMatrix ();

}

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

{

forgatás (radiánok (forgatás), 1, 0, 0);

fordítás (0, 0, d/2);

doboz (w, h, d);

fordítás (0, 0, d/2);

}

üres kulcs Nyomva ()

{

ha (kulcs == 'z')

{

doZ =! doZ;

}

ha (kulcs == 'h')

{

// állítsa az összeset nullára

kar2_szög = 0;

kar1_szög = 90;

bázis_szög = 0;

}

ha (kulcs == 'g')

{

println (fok (V1));

println (fok (V5));

}

if (keyCode == FEL)

{

z ++;

}

if (keyCode == LE)

{

z -;

}

ha (kulcs == 'o')

{

y = 50;

z = 50;

println (q);

println (c, "c");

println (V1, "V1");

println (V2);

println (V3);

println (kar1_szög);

println (V4);

println (V5);

println (arm2_angle);

}

}

Ajánlott: