Satura rādītājs:

Arduino bāzes izvēle un novietošanas robots: 8 soļi
Arduino bāzes izvēle un novietošanas robots: 8 soļi

Video: Arduino bāzes izvēle un novietošanas robots: 8 soļi

Video: Arduino bāzes izvēle un novietošanas robots: 8 soļi
Video: REAL RACING 3 LEAD FOOT EDITION 2024, Jūlijs
Anonim
Arduino bāzes izvēle un novietošanas robots
Arduino bāzes izvēle un novietošanas robots
Arduino bāzes izvēle un novietošanas robots
Arduino bāzes izvēle un novietošanas robots
Arduino bāzes izvēle un novietošanas robots
Arduino bāzes izvēle un novietošanas robots

Esmu izgatavojis īpaši lētu (mazāk nekā 1000 dolāru) rūpniecisko robotu roku, lai studenti varētu uzlauzt lielāka mēroga robotiku un ļaut maziem vietējiem ražojumiem izmantot procesus savos procesos, nesalaužot banku. Tā Eassy veidot un padarīt vecuma grupu cilvēkus no 15 līdz 50 gadiem.

1. darbība: komponentu prasības

Sastāvdaļu prasības
Sastāvdaļu prasības
Sastāvdaļu prasības
Sastāvdaļu prasības
Sastāvdaļu prasības
Sastāvdaļu prasības
Sastāvdaļu prasības
Sastāvdaļu prasības

1. Arduino + vairogs + tapas + kabeļi

2. Motora kontrolieris: dm860A (ebay)

3. Stepermotors: 34hs5435c-37b2 (ebay)

4. M8x45+60+70 skrūves un M8 skrūves.

5. 12mm saplāksnis.

6. 5 mm neilons.

7. Aklās paplāksnes 8mm.

8. Koka skrūves 4,5x40mm.

9. M3 skaitītājs nogrimis, 10. 12v barošanas avots

11. servomotoru vadītājs arduino

2. darbība: lejupielādējiet Gui

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

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

3. darbība. Savienojums

Savienojums
Savienojums
Savienojums
Savienojums
Savienojums
Savienojums

Pievienojiet vadus, kas parādīti attēlā, lai jūs labāk saprastu.

mums ir jāpievieno motora draiveris Arduino un citiem savienotājiem, kas nepieciešami atbilstoši jūsu robotam.

4. darbība: augšupielādējiet programmaparatūru un pārbaudiet koda rezultātu Arduino informācijas panelī

Programmatūras instalēšana Arduino - GRBL:

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

Piezīme: apkopojot Arduino, var rasties konflikts. Noņemiet visas pārējās bibliotēkas no savas bibliotēkas mapes (../documents/Arduino/libraries).

Programmaparatūras iestatīšana

Iestatiet iespējošanu uz jaunāku taimautu. Izmantojiet seriālo savienojumu un rakstiet:

$1=255

Iestatīt iestatīšanu:

$22=1

Neaizmirstiet iestatīt sērijas vērtību uz bodu: 115200

Noderīgi G kodi

Robotam iestatiet nulles punktu:

G10 L2 Xnnn Ynnn Znnn

Izmantojiet nulles punktu:

G54

Tipiska centrālā robota inicializācija:

G10 L2 X1.5 Y1.2 Z1.1

G54

Ātri pārvietojiet robotu uz pozīciju:

G0 Xnnn Ynnn Znnn

Piemērs:

G0 X10.0 Y3.1 Z4.2 (atgriešanās)

Pārvietojiet robotu noteiktā ātrumā:

G1 Xnnn Ynnn Znnn Fnnn

G1 X11 Y3 Z4 F300 (atgriešana)

F jābūt no 10 (slooooow) līdz 600 (ātri)

Noklusējuma vienības X, Y un Z

Izmantojot GRBL un

pakāpienu piedziņa, kas iestatīta 800 soļiem/apgriezieniem, uz visām asīm attiecas šādas vienības:

+- 32 vienības = +- 180 grādi

Apstrādes koda piemērs:

Šis kods var sazināties tieši ar Arduino GRBL.

github.com/damellis/gctrl

Neaizmirstiet iestatīt sērijas vērtību uz bodu: 115200

Kods ielādēts ardunio

importēt java.awt.event. KeyEvent;

importēt javax.swing. JOptionPane;

importa apstrāde.sērija.*;

Sērijas ports = null;

// atlasiet un mainiet operētājsistēmai atbilstošo rindu

// atstājiet kā nulli, lai izmantotu interaktīvo portu (programmā nospiediet “p”)

String portname = null;

// String portname = Serial.list () [0]; // Mac OS X

// String portname = "/dev/ttyUSB0"; // Linux

// String portname = "COM6"; // Windows

Būla straumēšana = nepatiesa;

pludiņa ātrums = 0,001;

String gcode;

int i = 0;

void openSerialPort ()

{

if (porta nosaukums == null) atgriezties;

ja (ports! = null) ports.stop ();

ports = jauns seriāls (šis, porta nosaukums, 115200);

port.bufferUntil ('\ n');

}

void selectSerialPort ()

{

String rezultāts = (String) JOptionPane.showInputDialog (šis, "Izvēlieties seriālo portu, kas atbilst jūsu Arduino platei.", "Atlasīt seriālo portu", JOptionPane. PLAIN_MESSAGE, nulle, Serial.list (), 0);

ja (rezultāts! = nulle) {

porta nosaukums = rezultāts;

openSerialPort ();

}

}

anulēts iestatījums ()

{

izmērs (500, 250);

openSerialPort ();

}

neizšķirts ()

{

fons (0);

aizpildīt (255);

int y = 24, dy = 12;

teksts ("INSTRUCTIONS", 12, y); y += dy;

teksts ("p: izvēlieties seriālo portu", 12, y); y += dy;

teksts ("1: iestatiet ātrumu uz 0,001 collas (1 mil) uz skriešanu", 12, y); y += dy;

teksts ("2: iestatiet ātrumu uz 0,010 collas (10 mil) uz skriešanu", 12, y); y += dy;

teksts ("3: iestatiet ātrumu uz 10000 collas (100 mil) uz skriešanu", 12, y); y += dy;

teksts ("bulttaustiņi: skrien x-y plaknē", 12, y); y += dy;

teksts ("lapa uz augšu un lapa uz leju: skriešana z asī", 12, y); y += dy;

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

teksts ("h: iet mājās", 12, y); y += dy;

teksts ("0: nulles mašīna (iestatiet mājas uz pašreizējo atrašanās vietu)", 12, y); y += dy;

teksts ("g: straumējiet g-koda failu", 12, y); y += dy;

text ("x: pārtraukt g-koda straumēšanu (tas NAV uzreiz)", 12, y); y += dy;

y = augstums - dy;

teksts ("pašreizējais skriešanas ātrums:" + ātrums + "collas solī", 12, y); y -= dy;

teksts ("pašreizējais seriālais ports:" + porta nosaukums, 12, y); y -= dy;

}

tukša atslēga Nospiests ()

{

ja (taustiņš == '1') ātrums = 0,001;

ja (taustiņš == '2') ātrums = 0,01;

ja (taustiņš == '3') ātrums = 0,1;

ja (! straumēšana) {

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

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

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

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

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

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

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

ja (atslēga == 'v') port.write ("$ 0 = 75 / n $ 1 = 74 / n $ 2 = 75 / n");

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

ja (atslēga == 's') port.write ("$ 3 = 10 / n");

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

ja (atslēga == 'd') port.write ("$ 16 = 0 / n");

ja (atslēga == '0') openSerialPort ();

ja (taustiņš == 'p') selectSerialPort ();

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

ja (atslēga == 'h') port.write ("$ H / n");

}

ja (! straumēšana && key == 'g') {

gcode = null; i = 0;

Faila fails = null;

println ("Notiek faila ielāde …");

selectInput ("Izvēlieties apstrādājamo failu:", "fileSelected", fails);

}

ja (atslēga == 'x') straumēšana = nepatiesa;

}

void fileSelected (faila atlase) {

ja (atlase == null) {

println ("Logs tika aizvērts vai lietotāja trāpījums Atcelt");

} vēl {

println ("Lietotājs izvēlēts" + selection.getAbsolutePath ());

gcode = loadStrings (selection.getAbsolutePath ());

if (gcode == null) atgriezties;

straumēšana = taisnība;

straume ();

}

}

tukša straume ()

{

ja (! straumēšana) atgriežas;

kamēr (taisnība) {

ja (i == gcode.length) {

straumēšana = nepatiesa;

atgriešanās;

}

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

cits pārtraukums;

}

println (gcode );

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

i ++;

}

void serialEvent (Sērijas p)

{

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

println (s.trim ());

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

ja (s.trim (). startsWith ("error")) stream (); // XXX: tiešām?

}

5. darbība: visas daļas noformēšana un drukāšana saplākšņa loksnē

Izstrādājiet un izdrukājiet visas daļas saplākšņa loksnē
Izstrādājiet un izdrukājiet visas daļas saplākšņa loksnē

Lejupielādējiet robota daļu un dizainu AutoCAD un izdrukājiet uz 12 mm saplākšņa loksnes un apdares un dizaina daļas. Ja kādam nepieciešams cad fails plz, atstājiet komentāru komentāru sadaļā, es nosūtīšu to tieši.

6. darbība: montāža

Montāža
Montāža
Montāža
Montāža

savāc visu daļu un sakārto dotajā secībā uz attēla un seko attēla diagrammai.

7. darbība: iestatiet GBRL iestatījumus

Iestatījums, kas ir pierādījis savu darbību mūsu robotiem.

$ 0 = 10 (solis impulss, usec) $ 1 = 255 (solis dīkstāves aizkave, msek) $ 2 = 7 (soļa porta apgriešanas maska: 00000111)) $ 5 = 0 (robežas tapas apgrieztas, bool) $ 6 = 1 (zondes tapas apgriezts, bool) $ 10 = 3 (statusa atskaites maska: 00000011) $ 11 = 0,020 (krustojuma novirze, mm) $ 12 = 0,002 (loka pielaide, mm) $ 13 = 0 (atskaites collas, bool) $ 20 = 0 (mīkstās robežas, bool) $ 21 = 0 (cietās robežas, bool) $ 22 = 1 (sākuma cikls, bool) $ 23 = 0 (homing dir invert mask: 00000000) $ 24 = 100.000 (sākuma padeve, mm/min) 25 USD = 500 000 (mājokļa meklēšana, mm/min) 26 USD = 250 (sākumpunkta debounce, ms) 27 USD = 1000 (atvilkšanas atvilkšana, mm) 100 USD = 250 000 (x, solis/mm) 101 USD = 250 000 (y, solis/mm) 102 USD = 250 000 (z, solis/mm) 110 USD = 500 000 (x maksimālais ātrums, mm/min) 111 USD = 500 000 (y maksimālā likme, mm/min) 112 USD = 500 000 (z maks. Likme, 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 maksimālais gājiens, mm) $ 131 = 200 000 (y maksimālais gājiens, mm) $ 132 = 200 000 (z max gājiens, mm)

8. darbība: augšupielādējiet gala kodu un pārbaudiet virtuālo rezultātu Arduino Uno programmatūras informācijas panelī

// Vienības: CM

pludiņš b_augstums = 0;

pludiņš a1 = 92;

pludiņš a2 = 86;

pludiņš snude_len = 20;

Būla doZ = nepatiess;

pludiņš base_angle; // = 0;

pludiņa roka1_stūris; // = 0;

pludiņš arm2_angle; // = 0;

pludiņš bx = 60; // = 25;

peldēt par = 60; // = 0;

pludiņš bz = 60; // = 25;

pludiņš x = 60;

pludiņš y = 60;

pludiņš z = 60;

pludiņš q;

pludiņš c;

pludiņš V1;

pludiņš V2;

pludiņš V3;

pludiņš V4;

pludiņš V5;

void setup () {

izmērs (700, 700, P3D);

cam = jauns PeasyCam (šis, 300);

cam.setMinimumDistance (50);

cam.setMaximumDistance (500);

}

void draw () {

// ligninger:

y = (peleX - platums/2)*(- 1);

x = (peleY - augstums/2)*(- 1);

bz = z;

līdz = y;

bx = x;

pludiņš 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;

roka1_stūris = q;

V4 = radiāni (90,0) - q;

V5 = radiāni (180) - V4 - radiāni (90);

arm2_angle = radiāni (180,0) - (V5 + V1);

base_angle = grādi (atan2 (bx, by));

roka1_stūris = grādi (roka1_stūris);

arm2_angle = grādi (arm2_angle);

// println (by, bz);

// roka1_stūris = 90;

// arm2_angle = 45;

/*

roka2_stūris = 23;

roka1_stūris = 23;

roka2_stūris = 23;

*/

// interaktīvs:

// ja (doZ)

//

// {

// base_angle = base_angle+ mouseX-pmouseX;

//} cits

// {

// arm1_angle = arm1_angle+ pmouseX-mouseX;

// }

//

// arm2_angle = arm2_angle+ mouseY-pmouseY;

draw_robot (bāzes_stūris,-(roka1_stūris-90), rokas2_stūris+90-(-(rokas1_stūris-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);

fons (0);

gaismas ();

pushMatrix ();

// PAMATS

aizpildīt (150, 150, 150);

kastes_stūris (50, 50, b_augstums, 0);

pagriezt (radiāni (bāzes_stūris), 0, 0, 1);

// ARM 1

aizpildīt (150, 0, 150);

box_corner (10, 10, a1, roka1_stūris);

// ARM 2

aizpildīt (255, 0, 0);

box_corner (10, 10, a2, roka2_stūris);

// SNUDE

aizpildīt (255, 150, 0);

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

popMatrix ();

pushMatrix ();

pludiņš action_box_size = 100;

tulkot (0, -action_box_size/2, action_box_size/2+b_height);

pushMatrix ();

tulkot (x, action_box_size- y-action_box_size/2, z-action_box_size/2);

aizpildīt (255, 255, 0);

aile (20);

popMatrix ();

aizpildīt (255, 255, 255, 50);

lodziņš (action_box_size, action_box_size, action_box_size);

popMatrix ();

}

void box_corner (pludiņš w, pludiņš h, pludiņš d, pludiņa pagriešana)

{

pagriezt (radiāni (pagriezt), 1, 0, 0);

tulkot (0, 0, d/2);

aile (w, h, d);

tulkot (0, 0, d/2);

}

tukša atslēga Nospiests ()

{

ja (atslēga == 'z')

{

doZ =! doZ;

}

ja (atslēga == 'h')

{

// iestatiet visu uz nulli

roka2_stūris = 0;

roka1_stūris = 90;

pamatnes_stūris = 0;

}

ja (atslēga == 'g')

{

println (grādi (V1));

println (grādi (V5));

}

ja (keyCode == UP)

{

z ++;

}

ja (keyCode == DOWN)

{

z -;

}

ja (atslēga == '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);

}

}

Ieteicams: