Përmbajtje:

Arduino Baza Zgjedh dhe Vendos Robotin: 8 Hapa
Arduino Baza Zgjedh dhe Vendos Robotin: 8 Hapa

Video: Arduino Baza Zgjedh dhe Vendos Robotin: 8 Hapa

Video: Arduino Baza Zgjedh dhe Vendos Robotin: 8 Hapa
Video: Lesson 02 Arduino IDE Software | Robojax Arduino Step By Step Course 2024, Korrik
Anonim
Arduino Baza Zgjedh dhe Vendos Robotin
Arduino Baza Zgjedh dhe Vendos Robotin
Arduino Baza Zgjedh dhe Vendos Robotin
Arduino Baza Zgjedh dhe Vendos Robotin
Arduino Baza Zgjedh dhe Vendos Robotin
Arduino Baza Zgjedh dhe Vendos Robotin

Unë kam bërë një krah robot industrial super të lirë (më pak se 1000 dollarë) për t'u mundësuar studentëve të hakojnë robotikë në shkallë më të madhe dhe për të mundësuar që prodhimet e vogla vendore të përdorin robotë në proceset e tyre pa thyer bankën. Lehtësia e saj për të ndërtuar dhe bërë grupmoshën njerëz nga 15 deri në 50 vjeç.

Hapi 1: Kërkesa për komponentët

Kërkesa për komponentët
Kërkesa për komponentët
Kërkesa për komponentët
Kërkesa për komponentët
Kërkesa për komponentët
Kërkesa për komponentët
Kërkesa për komponentët
Kërkesa për komponentët

1. Arduino + Mburoja + Kunjat + Kabllot

2. Motorkontrollues: dm860A (Ebay)

3. Steppermotor: 34hs5435c-37b2 (Ebay)

4. M8x45+60+70 bulona dhe bulona M8.

5. Kompensatë 12mm.

6. Najlon 5mm.

7. Rondele të verbër 8mm.

8. Vida druri 4.5x40mm.

9. Counter M3 i fundosur, 10. Furnizimi me energji 12v

11. servo motor shofer arduino

Hapi 2: Shkarkoni Gui

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

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

Hapi 3: Lidhja

Lidhje
Lidhje
Lidhje
Lidhje
Lidhje
Lidhje

Lidhni telat të cilat janë dhënë në imazh është një kuptim më i madh për ju.

ne duhet të lidhim drejtuesin e motorit me Arduino dhe lidhës të tjerë që kërkohen sipas robotit tuaj.

Hapi 4: Ngarko firmware dhe kontrolloni rezultatin e kodit në pultin e Arduino

Instalimi i firmuerit në Arduino - GRBL:

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

Shënim: Mund të merrni një konflikt kur përpiloni në Arduino. Hiqni të gjitha bibliotekat e tjera nga dosja juaj e bibliotekës (../documents/Arduino/libraries).

Konfigurimi i firmuerit

Vendos aktivizimin në afatin më të ri. Përdorni një lidhje serike dhe shkruani:

$1=255

Vendos vendosjen në shtëpi:

$22=1

Mos harroni të vendosni serialin në baud: 115200

Kode të dobishme G

Vendosni pikën zero për robotin:

G10 L2 Xnnn Ynnn Znnn

Përdorni pikën zero:

G54

Fillimi tipik në qendër të robotit:

G10 L2 X1.5 Y1.2 Z1.1

G54

Zhvendoseni robotin në pozicionin e shpejtë:

G0 Xnnn Ynnn Znnn

Shembull:

G0 X10.0 Y3.1 Z4.2 (kthimi)

Zhvendoseni robotin në pozicion me shpejtësi specifike:

G1 Xnnn Ynnn Znnn Fnnn

G1 X11 Y3 Z4 F300 (kthimi)

F duhet të jetë midis 10 (ngadalë) dhe 600 (shpejt)

Njësitë e paracaktuara për X, Y dhe Z

Kur përdorni cilësimet e paracaktuara të hapit/njësive (250 hapa/njësi) për GRBL dhe

ngasësi stepper i ngritur për 800 hapa/rrotull njësitë e mëposhtme zbatohen për të gjithë aksin:

+- 32 njësi = +- 180 gradë

Shembull i përpunimit të kodit:

Ky kod mund të komunikojë drejtpërdrejt me Arduino GRBL.

github.com/damellis/gctrl

Mos harroni të vendosni serialin në baud: 115200

Kodi uoload in ardunio

import java.awt.event. KeyEvent;

import javax.swing. JOptionPane;

përpunimi i importit.serial.*;

Port serial = null;

// zgjidhni dhe modifikoni linjën e përshtatshme për sistemin tuaj operativ

// lini si null për të përdorur portën interaktive (shtypni 'p' në program)

Emri i portës së vargut = null;

// Emri i portit të vargut = Lista seriale () [0]; // Mac OS X

// Emri i portit të vargut = "/dev/ttyUSB0"; // Linux

// Emri i portit të vargut = "COM6"; // Windows

transmetim boolean = i rremë;

shpejtësia e notimit = 0.001;

Varg gcode;

int i = 0;

void openSerialPort ()

{

nëse (emri i portit == null) kthehet;

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

port = Serial i ri (ky, emri i portës, 115200);

port.bufferUntil ('\ n');

}

void selectSerialPort ()

{

Rezultati i vargut = (String) JOptionPane.showInputDialog (kjo, "Zgjidhni portën serike që korrespondon me bordin tuaj Arduino.", "Zgjidh portin serik", JOptionPane. PLAIN_MESSAGE, i pavlefshëm, Lista seriale (), 0);

nëse (rezultati! = null) {

emri i portit = rezultati;

openSerialPort ();

}

}

void setup ()

{

madhësia (500, 250);

openSerialPort ();

}

tërheqje e pavlefshme ()

{

sfond (0);

mbush (255);

int y = 24, dy = 12;

tekst ("UDHZIME", 12, y); y += dy;

tekst ("p: zgjidhni portin serik", 12, y); y += dy;

tekst ("1: vendosni shpejtësinë në 0.001 inç (1 mil) për vrap", 12, y); y += dy;

tekst ("2: vendosni shpejtësinë në 0.010 inç (10 mil) për vrapim", 12, y); y += dy;

tekst ("3: vendosni shpejtësinë në 0.100 inç (100 mil) për vrap", 12, y); y += dy;

tekst ("çelësat e shigjetave: vraponi në rrafshin x-y", 12, y); y += dy;

tekst ("faqe lart dhe faqe poshtë: vraponi në boshtin z", 12, y); y += dy;

tekst ("$: shfaq cilësimet e grbl", 12, y); y+= dy;

tekst ("h: shko në shtëpi", 12, y); y += dy;

tekst ("0: makinë zero (vendoseni në vendndodhjen aktuale)", 12, y); y += dy;

tekst ("g: transmetoni një skedar të kodit g", 12, y); y += dy;

tekst ("x: ndalo transmetimin e kodit g (kjo NUK është e menjëhershme)", 12, y); y += dy;

y = lartësia - dy;

tekst ("shpejtësia aktuale e vrapimit:" + shpejtësia + "inç për hap", 12, y); y -= dy;

tekst ("porti serik aktual:" + emri i portës, 12, y); y -= dy;

}

çelësi i pavlefshëm i shtypur ()

{

nëse (çelësi == '1') shpejtësia = 0.001;

nëse (çelësi == '2') shpejtësia = 0.01;

nëse (çelësi == '3') shpejtësia = 0.1;

nëse (! streaming) {

nëse (keyCode == LEFT) port.write ("G91 / nG20 / nG00 X-" + shpejtësia + "Y0.000 Z0.000 / n");

nëse (keyCode == Djathtas) port.write ("G91 / nG20 / nG00 X" + shpejtësia + "Y0.000 Z0.000 / n");

nëse (keyCode == UP) port.write ("G91 / nG20 / nG00 X0.000 Y" + shpejtësia + "Z0.000 / n");

nëse (keyCode == DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y-" + shpejtësia + "Z0.000 / n");

nëse (keyCode == KeyEvent. VK_PAGE_UP) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z" + shpejtësi + "\ n");

nëse (keyCode == KeyEvent. VK_PAGE_DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z-" + shpejtësia + "\ n");

// nëse (çelësi == 'h') port.write ("G90 / nG20 / nG00 X0.000 Y0.000 Z0.000 / n");

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

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

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

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

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

nëse (çelësi == '0') openSerialPort ();

nëse (çelësi == 'p') zgjidhniSerialPort ();

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

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

}

nëse (! streaming && kyç == 'g') {

gcode = null; i = 0;

Skedari i skedarit = null;

println ("Po ngarkon skedarin …");

selectInput ("Zgjidhni një skedar për t'u përpunuar:", "fileSelected", skedar);

}

nëse (çelësi == 'x') transmetimi = i rremë;

}

skedar i pavlefshëm i zgjedhur (përzgjedhja e skedarit) {

nëse (përzgjedhja == null) {

println ("Dritarja u mbyll ose përdoruesi goditi anulo.");

} tjetër {

println ("Përdoruesi i zgjedhur" + selection.getAbsolutePath ());

gcode = loadStrings (selection.getAbsolutePath ());

nëse (gcode == null) kthehet;

streaming = e vërtetë;

lumë ();

}

}

rrymë e zbrazët ()

{

nëse (! streaming) kthehet;

ndërsa (e vërtetë) {

nëse (i == gcode.length) {

streaming = false;

kthim;

}

nëse (gcode .trim (). gjatësia () == 0) i ++;

përndryshe prishet;

}

println (gcode );

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

i ++;

}

void serialEvent (Seriali p)

{

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

println (s.trim ());

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

if (s.trim (). fillonWith ("gabim")) lumë (); // XXX: vërtet?

}

Hapi 5: Dizajnoni dhe Shtypni të Gjithë Pjesën në Fletën e Kompensatës

Dizajnoni dhe Shtypni të Gjithë Pjesën në Fletë Kompensatë
Dizajnoni dhe Shtypni të Gjithë Pjesën në Fletë Kompensatë

Shkarkoni pjesën dhe modelin e robotit në AutoCAD dhe printoni fletën e kompensatës prej 12 mm dhe përfundoni dhe dizajnoni pjesën. Nëse dikush ka nevojë për skedar cad, ju lutemi lini komentin në seksionin e komenteve që do t'ju dërgoj drejtpërdrejt.

Hapi 6: Asambleja

Kuvendi
Kuvendi
Kuvendi
Kuvendi

mblidhni të gjithë pjesën dhe rregulloni në sekuencën në figurën e dhënë dhe ndiqni diagramin e imazhit.

Hapi 7: Vendosni cilësimet GBRL

Vendosja që është vërtetuar se funksionon në robotët tanë.

$ 0 = 10 (pulsi i hapit, përdorimi) $ 1 = 255 (vonesa e hapit në boshe, msec) $ 2 = 7 (maska e përmbysjes së portit të hapit: 00000111) $ 3 = 7 (maska e përmbysjes së portës së drejtimit: 00000111) $ 4 = 0 (aktivizimi i hapit përmbys, bool) $ 5 = 0 (kunjat e kufirit përmbys, bool) $ 6 = 1 (kthesa e kunjit të sondës, bool) $ 10 = 3 (maska e raportit të gjendjes: 00000011) $ 11 = 0.020 (devijimi i kryqëzimit, mm) $ 12 = 0.002 (toleranca e harkut, mm) $ 13 = 0 (raporto inç, bool) $ 20 = 0 (kufij të butë, bool) $ 21 = 0 (kufij të fortë, bool) $ 22 = 1 (cikli i kthimit, bool) $ 23 = 0 (maskë e kthimit të drejtimit në shtëpi: 00000000) $ 24 = 100.000 (ushqim për në shtëpi, mm/min) $ 25 = 500.000 (kërkim për në shtëpi, mm/min) $ 26 = 250 (debounce në shtëpi, msec) $ 27 = 1.000 (tërheqje për në shtëpi, mm) $ 100 = 250.000 (x, hap/mm) $ 101 = 250.000 (y, hapi/mm) $ 102 = 250.000 (z, hapi/mm) $ 110 = 500.000 (x max rate, mm/min) $ 111 = 500.000 (y max rate, mm/min) $ 112 = 500.000 (z max rate, mm/min) $ 120 = 10.000 (x akel, mm/sek^2) $ 121 = 10.000 (y akel, mm/sek^2) $ 122 = 10.000 (z akel, mm/sek^2) $ 130 = 200.000 (x max udhëtim, mm) $ 131 = 200.000 (y max udhëtimi, mm) $ 132 = 200.000 (z max udhëtimi, mm)

Hapi 8: Ngarko kodin përfundimtar dhe kontrollo rezultatin virtual në pultin e softuerit Arduino Uno

// Njësitë: CM

noton b_ lartësia = 0;

noton a1 = 92;

noton a2 = 86;

noton snude_len = 20;

boolean doZ = false;

noton bazën_këndësh; // = 0;

float arm1_angle; // = 0;

float arm2_angle; // = 0;

noton bx = 60; // = 25;

noton me = 60; // = 0;

noton bz = 60; // = 25;

noton x = 60;

noton y = 60;

noton z = 60;

noton q;

noton c;

noton V1;

noton V2;

noton V3;

noton V4;

noton V5;

void setup () {

madhësia (700, 700, P3D);

kamera = PeasyCam e re (kjo, 300);

cam.setMinimumDistanca (50);

cam.setMaximumDistance (500);

}

tërheqje e pavlefshme () {

// ligninger:

y = (mouseX - gjerësia/2)*(- 1);

x = (miuY - lartësia/2)*(- 1);

bz = z;

nga = y;

bx = x;

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

krah1_angle = q;

V4 = radianët (90.0) - q;

V5 = radianët (180) - V4 - radianët (90);

arm2_angle = radianët (180.0) - (V5 + V1);

kendi_i bazes = grade (atan2 (bx, by));

arm1_angle = gradë (arm1_angle);

arm2_angle = gradë (arm2_angle);

// println (nga, bz);

// krah1_angle = 90;

// krah2_angle = 45;

/*

krah2_angle = 23;

krah1_angle = 23;

krah2_angle = 23;

*/

// interaktive:

// nëse (doZ)

//

// {

// kendi_i bazes = kendi_i bazes+ miuX-pmouseX;

//} tjetër

// {

// arm1_angle = arm1_angle+ pmouseX-mouseX;

// }

//

// arm2_angle = arm2_angle+ mouseY-pmouseY;

draw_robot (kendi_i bazes,-(krahu_angel-90), krahu_këndor+90-(-(krahu_kënd-90)));

// println (bazë_këndi + "," + krah1_angle + "," + krah2_angle);

}

i pavlefshëm draw_robot (bazë_këndi i notimit, krahu i notimit1_angle, krahu i notimit2_angle)

{

rrotullohetX (1.2);

rrotullohetZ (-1.2);

sfond (0);

dritat ();

pushMatrix ();

// BAZA

mbush (150, 150, 150);

box_corner (50, 50, b_height, 0);

rrotullohen (radianët (këndi bazë), 0, 0, 1);

// ARM 1

mbush (150, 0, 150);

box_corner (10, 10, a1, krah1_angle);

// ARM 2

mbush (255, 0, 0);

box_corner (10, 10, a2, krah2_angle);

// SNUDE

mbush (255, 150, 0);

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

popMatrix ();

pushMatrix ();

noton action_box_size = 100;

përktheni (0, -action_box_size/2, action_box_size/2+b_height);

pushMatrix ();

përktheni (x, action_box_size- y-action_box_size/2, z-action_box_size/2);

mbush (255, 255, 0);

kuti (20);

popMatrix ();

mbush (255, 255, 255, 50);

kuti (action_box_size, action_box_size, action_box_size);

popMatrix ();

}

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

{

rrotullohen (radianët (rrotullohen), 1, 0, 0);

përkthe (0, 0, d/2);

kuti (w, h, d);

përkthe (0, 0, d/2);

}

çelësi i pavlefshëm i shtypur ()

{

nëse (çelësi == 'z')

{

doZ =! doZ;

}

nëse (çelësi == 'h')

{

// vendosni të gjitha në zero

krah2_angle = 0;

krah1_angle = 90;

kendi_i bazes = 0;

}

nëse (çelësi == 'g')

{

println (gradë (V1));

println (gradë (V5));

}

nëse (keyCode == UP)

{

z ++;

}

nëse (keyCode == Poshtë)

{

z -;

}

nëse (çelësi == '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 (krah2_angle);

}

}

Recommended: