Turinys:

„Arduino“bazinis roboto pasirinkimas ir vieta: 8 žingsniai
„Arduino“bazinis roboto pasirinkimas ir vieta: 8 žingsniai

Video: „Arduino“bazinis roboto pasirinkimas ir vieta: 8 žingsniai

Video: „Arduino“bazinis roboto pasirinkimas ir vieta: 8 žingsniai
Video: Lesson 04: Introduction to Base number Binary, Decimal, Hexadecimal and Octal 2024, Liepa
Anonim
„Arduino“bazinis robotas
„Arduino“bazinis robotas
„Arduino“bazinis robotas „Pasirinkite ir padėkite“
„Arduino“bazinis robotas „Pasirinkite ir padėkite“
„Arduino“bazinis robotas „Pasirinkite ir padėkite“
„Arduino“bazinis robotas „Pasirinkite ir padėkite“

Aš padariau itin pigią (mažiau nei 1000 dolerių) pramoninę roboto ranką, kad studentai galėtų nulaužti didesnio masto robotiką ir kad mažos vietinės gamybos galėtų naudoti robotus savo procesuose, nepažeisdamos banko. Lengva sukurti ir padaryti amžiaus grupę nuo 15 iki 50 metų.

1 žingsnis: komponentų reikalavimas

Komponentų reikalavimas
Komponentų reikalavimas
Komponentų reikalavimas
Komponentų reikalavimas
Komponentų reikalavimas
Komponentų reikalavimas
Komponentų reikalavimas
Komponentų reikalavimas

1. „Arduino“+ skydas + kaiščiai + kabeliai

2. Variklio valdiklis: dm860A („Ebay“)

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

4. M8x45+60+70 varžtai ir M8 varžtai.

5. 12 mm fanera.

6. 5 mm nailonas.

7. Aklos poveržlės 8mm.

8. Mediniai varžtai 4,5x40mm.

9. nuskendo M3 skaitiklis, 10. 12v maitinimo šaltinis

11. servo variklio vairuotojas arduino

2 veiksmas: atsisiųskite „Gui“

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

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

3 žingsnis: prijungimas

Ryšys
Ryšys
Ryšys
Ryšys
Ryšys
Ryšys

Prijunkite paveikslėlyje pateiktus laidus, kad geriau suprastumėte.

turime prijungti variklio tvarkyklę prie „Arduino“ir kitų jungčių, kurių reikia pagal jūsų robotą.

4 veiksmas: įkelkite programinę įrangą ir patikrinkite kodo rezultatą „Arduino“prietaisų skydelyje

Programinės aparatinės įrangos diegimas „Arduino“- GRBL:

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

Pastaba: rinkdami „Arduino“galite susidurti su konfliktu. Pašalinkite visas kitas bibliotekas iš savo bibliotekos aplanko (../documents/Arduino/libraries).

Firmware sąranka

Įgalinti nustatykite naujesnį skirtąjį laiką. Naudokite nuoseklųjį ryšį ir rašykite:

$1=255

Nustatyti nustatymą:

$22=1

Nepamirškite nustatyti serijos į baudą: 115200

Naudingi G kodai

Nustatykite nulinį tašką robotui:

G10 L2 Xnnn Ynnn Znnn

Naudokite nulinį tašką:

G54

Įprastas centrinio roboto inicializavimas:

G10 L2 X1.5 Y1.2 Z1.1

G54

Greitai perkelkite robotą į vietą:

G0 Xnnn Ynnn Znnn

Pavyzdys:

G0 X10.0 Y3.1 Z4.2 (grįžimas)

Perkelkite robotą į tam tikrą greitį:

G1 Xnnn Ynnn Znnn Fnnn

G1 X11 Y3 Z4 F300 (grįžimas)

F turėtų būti nuo 10 (slooooow) iki 600 (greitai)

Numatytieji X, Y ir Z vienetai

Naudojant numatytuosius GRBL ir žingsnių/vienetų nustatymus (250 žingsnių/vienetų)

žingsninė pavara, nustatyta 800 žingsnių/apsukų, visoms ašims taikomi šie vienetai:

+- 32 vienetai = +- 180 laipsnių

Apdorojimo kodo pavyzdys:

Šis kodas gali tiesiogiai bendrauti su „Arduino GRBL“.

github.com/damellis/gctrl

Nepamirškite nustatyti serijos į baudą: 115200

Kodas įkeliamas į ardunio

importuoti java.awt.event. KeyEvent;

importuoti javax.swing. JOptionPane;

importo apdorojimas.serijinis.*;

Serijinis prievadas = null;

// pasirinkite ir pakeiskite savo operacinei sistemai tinkamą eilutę

// palikti kaip null, kad galėtumėte naudoti interaktyvųjį prievadą (programoje paspauskite „p“)

Eilutės prievado pavadinimas = null;

// Stygos prievado pavadinimas = Serijinis sąrašas () [0]; // „Mac OS X“

// Stygos prievado pavadinimas = "/dev/ttyUSB0"; // Linux

// Stygos prievado pavadinimas = "COM6"; // „Windows“

loginis transliavimas = false;

plūdės greitis = 0,001;

Eilutė gcode;

int i = 0;

void openSerialPort ()

{

if (uosto pavadinimas == null) grįžti;

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

uostas = naujas serijinis (tai, prievado pavadinimas, 115200);

port.bufferUntil ('\ n');

}

void selectSerialPort ()

{

Eilutės rezultatas = (eilutė) JOptionPane.showInputDialog (tai, "Pasirinkite nuoseklųjį prievadą, atitinkantį jūsų" Arduino "plokštę.", „Pasirinkite nuoseklųjį prievadą“, JOptionPane. PLAIN_MESSAGE, nulis, Serial.list (), 0);

if (rezultatas! = nulis) {

uosto pavadinimas = rezultatas;

openSerialPort ();

}

}

negaliojanti sąranka ()

{

dydis (500, 250);

openSerialPort ();

}

niekinis lygiosios ()

{

fonas (0);

užpildyti (255);

int y = 24, dy = 12;

tekstas („INSTRUKCIJA“, 12, y); y += dy;

tekstas ("p: pasirinkite nuoseklųjį prievadą", 12, y); y += dy;

tekstas ("1: nustatykite greitį iki 0,001 colio (1 mil) per bėgimą", 12, y); y += dy;

tekstas ("2: nustatykite greitį iki 0,010 colio (10 mil) per bėgimą", 12, y); y += dy;

tekstas ("3: nustatykite greitį iki 10000 colių (100 mil) per bėgimą", 12, y); y += dy;

tekstas ("rodyklių klavišai: bėgimas x-y plokštumoje", 12, y); y += dy;

tekstas („puslapis aukštyn ir puslapis žemyn: judėjimas z ašyje“, 12, y); y += dy;

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

tekstas („h: eik namo“, 12, y); y += dy;

tekstas ("0: nulis mašina (nustatyti namų į dabartinę vietą)", 12, y); y += dy;

tekstas ("g: transliuoti g kodo failą", 12, y); y += dy;

tekstas ("x: sustabdyti g-kodo srautinį perdavimą (tai NE iš karto)", 12, y); y += dy;

y = aukštis - dy;

tekstas ("dabartinis bėgimo greitis:" + greitis + "coliai per žingsnį", 12, y); y -= dy;

tekstas ("dabartinis nuoseklusis prievadas:" + prievado pavadinimas, 12, y); y -= dy;

}

tuščias raktas Paspaustas ()

{

jei (klavišas == '1') greitis = 0,001;

jei (klavišas == '2') greitis = 0,01;

jei (klavišas == '3') greitis = 0,1;

jei (! transliacija) {

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

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

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

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

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

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

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

if (raktas == '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");

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

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

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

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

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

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

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

}

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

gcode = null; i = 0;

Failo failas = null;

println („Įkeliamas failas …“);

selectInput ("Pasirinkite apdorojamą failą:", "fileSelected", failas);

}

if (key == 'x') streaming = false;

}

void fileSelected (Failo pasirinkimas) {

if (atranka == null) {

println („Langas buvo uždarytas arba naudotojas spustelėjo atšaukti“);

} Kitas {

println ("Vartotojas pasirinko" + selection.getAbsolutePath ());

gcode = loadStrings (selection.getAbsolutePath ());

if (gcode == null) return;

transliacija = tiesa;

srautas();

}

}

tuščias srautas ()

{

jei (! transliacija) grįš;

nors (tiesa) {

if (i == gcode.length) {

transliacija = klaidinga;

grįžti;

}

jei (gcode .trim (). ilgis () == 0) i ++;

kitaip pertrauka;

}

println (gcode );

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

i ++;

}

void serialEvent (Serijos p)

{

Eilutė s = p.readStringUntil ('\ n');

println (s.trim ());

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

if (s.trim (). startsWith ("error")) stream (); // XXX: tikrai?

}

5 žingsnis: suprojektuokite ir atspausdinkite visas dalis faneros lape

Suprojektuokite ir atspausdinkite visas dalis faneros lape
Suprojektuokite ir atspausdinkite visas dalis faneros lape

Atsisiųskite roboto dalį ir dizainą iš „AutoCAD“ir atspausdinkite ant 12 mm faneros lapo bei apdailos ir dizaino dalies. Jei kam nors reikia cad failo, palikite komentarą komentarų skilties laukelyje „atsiųsiu tiesiogiai“.

6 žingsnis: Surinkimas

Surinkimas
Surinkimas
Surinkimas
Surinkimas

surinkite visas dalis ir sutvarkykite pateiktą vaizdo seką ir sekite paveikslėlio schemą.

7 veiksmas: nustatykite GBRL nustatymus

Nustatymas, kuris pasirodė esąs naudingas mūsų robotams.

$ 0 = 10 (žingsnis impulsas, usec) $ 1 = 255 (žingsnio tuščiosios eigos uždelsimas, ms) $ 2 = 7 (žingsnio prieigos invertavimo kaukė: 00000111) $ 3 = 7 (diržo prievado invertavimo kaukė: 00000111)) $ 5 = 0 (ribiniai kaiščiai apversti, bool) $ 6 = 1 (zondo kaiščio apvertimas, bool) $ 10 = 3 (būsenos ataskaitos kaukė: 00000011) $ 11 = 0,020 (sankryžos nuokrypis, mm) $ 12 = 0,002 (lanko nuokrypis, mm) 13 USD = 0 (ataskaitos coliai, bool) $ 20 = 0 (minkštos ribos, bool) $ 21 = 0 (kietos ribos, bool) $ 22 = 1 (pradinis ciklas, bool) $ 23 = 0 (homing dir invert mask: 00000000) $ 24 = 100.000 (pradinis padavimas, mm/min) 25 USD = 500 000 (nukreipimo paieška, mm/min) 26 USD = 250 (nukreipimo nukreipimas, ms) 27 USD = 1 000 (nukreipimo traukimas, mm) 100 USD = 250 000 (x, žingsnis/mm) $ 101 = 250 000 (y, žingsnis/mm) $ 102 = 250 000 (z, žingsnis/mm) 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 maksimali kelionė, mm) 131 USD = 200 000 (y didžiausia eiga, mm) 132 USD = 200 000 USD (z maksimali eiga, mm)

8 veiksmas: įkelkite galutinį kodą ir patikrinkite virtualų rezultatą „Arduino Uno“programinės įrangos informacijos suvestinėje

// Vienetai: CM

plūdė b_aukštis = 0;

plūdė a1 = 92;

plūdė a2 = 86;

plūdė snude_len = 20;

loginis doZ = klaidingas;

float base_angle; // = 0;

float arm1_angle; // = 0;

float arm2_angle; // = 0;

plūdė bx = 60; // = 25;

plūduriuoti = 60; // = 0;

plūdė bz = 60; // = 25;

plūdė x = 60;

plūdė y = 60;

plūdė z = 60;

plūdė q;

plūdė c;

plūdė V1;

plūdė V2;

plūdė V3;

plūdė V4;

plūdė V5;

void setup () {

dydis (700, 700, P3D);

kamera = nauja „PeasyCam“(tai, 300);

cam.setMinimumDistance (50);

cam.setMaximumDistance (500);

}

void draw () {

// ligninger:

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

x = (peleY - aukštis/2)*(- 1);

bz = z;

pagal = y;

bx = x;

plūdė 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;

arm1_angle = q;

V4 = radianai (90,0) - q;

V5 = radianai (180) - V4 - radianai (90);

arm2_angle = radianai (180,0) - (V5 + V1);

bazinis_kampis = laipsniai (atan2 (bx, by));

arm1_angle = laipsniai (arm1_angle);

arm2_angle = laipsniai (arm2_angle);

// println (by, bz);

// arm1_angle = 90;

// arm2_angle = 45;

/*

arm2_angle = 23;

arm1_angle = 23;

arm2_angle = 23;

*/

// interaktyvus:

// jei (doZ)

//

// {

// base_angle = base_angle+ mouseX-pmouseX;

// } Kitas

// {

// arm1_angle = arm1_angle+ pmouseX-mouseX;

// }

//

// arm2_angle = arm2_angle+ mouseY-pmouseY;

draw_robot (bazinis_kampis,-(arm1_angle-90), arm2_angle+90-(-(arm1_angle-90)));

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

}

void draw_robot (plūdės pagrindo_kampis, plūdės rankos1_kampis, plūdės rankos2_kampis)

{

rotateX (1.2);

rotateZ (-1,2);

fonas (0);

žibintai ();

pushMatrix ();

// BAZĖ

užpildyti (150, 150, 150);

„box_corner“(50, 50, b_aukštis, 0);

pasukti (radianai (bazinis_kampis), 0, 0, 1);

// ARM 1

užpildyti (150, 0, 150);

box_corner (10, 10, a1, rankos1_kampis);

// ARM 2

užpildyti (255, 0, 0);

box_corner (10, 10, a2, arm2_angle);

// SUDE

užpildyti (255, 150, 0);

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

popMatrix ();

pushMatrix ();

plūdė action_box_size = 100;

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

pushMatrix ();

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

užpildyti (255, 255, 0);

langelis (20);

popMatrix ();

užpildyti (255, 255, 255, 50);

langelis (action_box_size, action_box_size, action_box_size);

popMatrix ();

}

void box_corner (plūdė w, plūdė h, plūdė d, plūdės pasukimas)

{

pasukti (radianai (pasukti), 1, 0, 0);

išversti (0, 0, d/2);

langelis (w, h, d);

išversti (0, 0, d/2);

}

tuščias raktas Paspaustas ()

{

jei (raktas == 'z')

{

doZ =! doZ;

}

jei (raktas == 'h')

{

// nustatyti viską į nulį

arm2_angle = 0;

arm1_angle = 90;

bazinis_kampis = 0;

}

jei (raktas == 'g')

{

println (laipsniai (V1));

println (laipsniai (V5));

}

jei (keyCode == UP)

{

z ++;

}

jei (keyCode == DOWN)

{

z -;

}

jei (raktas == '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);

}

}

Rekomenduojamas: