Sadržaj:

Robot za odabir i postavljanje baze Arduino: 8 koraka
Robot za odabir i postavljanje baze Arduino: 8 koraka

Video: Robot za odabir i postavljanje baze Arduino: 8 koraka

Video: Robot za odabir i postavljanje baze Arduino: 8 koraka
Video: Использование кнопки скорости шагового двигателя 28BYJ-48 с 8 проектами: Ultimate Video Tutorial, урок 107 2024, Srpanj
Anonim
Robot za odabir i postavljanje baze Arduino
Robot za odabir i postavljanje baze Arduino
Robot za odabir i postavljanje baze Arduino
Robot za odabir i postavljanje baze Arduino
Robot za odabir i postavljanje baze Arduino
Robot za odabir i postavljanje baze Arduino

Napravio sam super jeftinu (manje od 1000 dolara) industrijsku robotsku ruku koja će studentima omogućiti hakiranje robotike većih razmjera i omogućiti malim lokalnim produkcijama da koriste robote u svojim procesima, a da pritom ne slome banku. Njegova Easija za izgradnju i stvaranje dobne skupine ljudi od 15 do 50 godina.

Korak 1: Zahtjevi za komponente

Zahtjevi za komponente
Zahtjevi za komponente
Zahtjevi za komponente
Zahtjevi za komponente
Zahtjevi za komponente
Zahtjevi za komponente
Zahtjevi za komponente
Zahtjevi za komponente

1. Arduino + Štit + Igle + kabeli

2. Upravljač motorom: dm860A (Ebay)

3. Koračni motor: 34hs5435c-37b2 (Ebay)

4. Vijci M8x45+60+70 i vijci M8.

5. Šperploča 12 mm.

6. Najlon od 5 mm.

7. Slijepe podloške 8 mm.

8. Vijci za drvo 4,5x40mm.

9. M3 brojač utonuo, 10. Napajanje 12v

11. upravljački program servo motora arduino

Korak 2: Preuzmite Gui

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

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

Korak 3: Povezivanje

Veza
Veza
Veza
Veza
Veza
Veza

Za bolje razumijevanje spojite žice koje su prikazane na slici.

moramo spojiti upravljački program motora na Arduino i druge konektore koji su potrebni prema vašem robotu.

Korak 4: Prenesite firmver i provjerite rezultat koda na Arduino nadzornoj ploči

Instaliranje firmvera na Arduino - GRBL:

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

Napomena: Prilikom sastavljanja u Arduinu možete doći do sukoba. Uklonite sve ostale knjižnice iz mape knjižnice (../documents/Arduino/libraries).

Postavljanje firmvera

Omogućivanje postavi na novije vremensko ograničenje. Upotrijebite serijsku vezu i napišite:

$1=255

Postavi usmjeravanje:

$22=1

Ne zaboravite postaviti serijski broj u baud: 115200

Korisni G-kodovi

Postavite nultu točku za robota:

G10 L2 Xnnn Ynnn Znnn

Koristi nultu točku:

G54

Tipična inicijalizacija za središnjeg robota:

G10 L2 X1,5 Y1,2 Z1,1

G54

Brzo premjestite robota u položaj:

G0 Xnnn Ynnn Znnn

Primjer:

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

Pomaknite robota u položaj određenom brzinom:

G1 Xnnn Ynnn Znnn Fnnn

G1 X11 Y3 Z4 F300 (povratak)

F bi trebao biti između 10 (slooooow) i 600 (brzo)

Zadane jedinice za X, Y i Z

Kada koristite zadane postavke koraka/jedinice (250 koraka/jedinica) za GRBL i

koračni pogon postavljen za 800 koraka/okretaj, za sve osi vrijede sljedeće jedinice:

+- 32 jedinice = +- 180 stupnjeva

Primjer obrade koda:

Ovaj kôd može izravno komunicirati s Arduino GRBL.

github.com/damellis/gctrl

Ne zaboravite postaviti serijski broj u baud: 115200

Kod uoload na arduniu

uvoz java.awt.event. KeyEvent;

import javax.swing. JOptionPane;

uvoz obrada.serial.*;

Serijski port = null;

// odabrati i izmijeniti odgovarajuću liniju za vaš operacijski sustav

// ostavite kao null za korištenje interaktivnog porta (pritisnite 'p' u programu)

Niz portname = null;

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

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

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

boolean streaming = false;

brzina plovka = 0,001;

String gcode;

int i = 0;

void openSerialPort ()

{

if (portname == null) return;

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

port = novi serijski (ovaj, naziv porta, 115200);

port.bufferUntil ('\ n');

}

void selectSerialPort ()

{

String result = (String) JOptionPane.showInputDialog (ovo, "Odaberite serijski port koji odgovara vašoj Arduino ploči.", "Odabir serijskog porta", JOptionPane. PLAIN_MESSAGE, null, Serial.list (), 0);

if (rezultat! = null) {

portname = rezultat;

openSerialPort ();

}

}

void setup ()

{

veličina (500, 250);

openSerialPort ();

}

void draw ()

{

pozadina (0);

ispuniti (255);

int y = 24, dy = 12;

text ("UPUTE", 12, y); y += dy;

text ("p: odaberite serijski port", 12, y); y += dy;

text ("1: postavite brzinu na 0,001 inča (1 mil)) po trčanju", 12, y); y += dy;

text ("2: postavite brzinu na 0,010 inča (10 milja) po trčanju", 12, y); y += dy;

text ("3: postavite brzinu na 100 milja po trčanju", 12, y); y += dy;

text ("tipke sa strelicama: trčanje u x-y ravnini", 12, y); y += dy;

text ("stranica gore & stranica dolje: pomak po osi z", 12, y); y += dy;

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

text ("h: go home", 12, y); y += dy;

text ("0: nulti stroj (postavite dom na trenutnu lokaciju)", 12, y); y += dy;

text ("g: stream a g-code file", 12, y); y += dy;

text ("x: zaustavi strujanje g-koda (ovo NIJE odmah)", 12, y); y += dy;

y = visina - dy;

tekst ("trenutna brzina trčanja:" + brzina + "inča po koraku", 12, y); y -= dy;

text ("trenutni serijski port:" + naziv porta, 12, y); y -= dy;

}

void keyPressed ()

{

if (ključ == '1') brzina = 0,001;

if (ključ == '2') brzina = 0,01;

if (ključ == '3') brzina = 0,1;

if (! streaming) {

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

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

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

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

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

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

// if (key == '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 (key == 'v') port.write ("$ 0 = 100 / n $ 1 = 74 / n $ 2 = 75 / n");

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

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

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

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

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

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

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

}

if (! streaming && key == 'g') {{100} {101}

gcode = null; i = 0;

Datoteka datoteka = null;

println ("Učitavanje datoteke …");

selectInput ("Odaberite datoteku za obradu:", "fileSelected", datoteka);

}

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

}

void fileSelected (odabir datoteke) {

if (odabir == null) {

println ("Prozor je zatvoren ili je korisnik otkazao.");

} else {

println ("Korisnički odabran" + selection.getAbsolutePath ());

gcode = loadStrings (selection.getAbsolutePath ());

if (gcode == null) return;

streaming = istina;

stream ();

}

}

void stream ()

{

if (! streaming) return;

while (istina) {

if (i == gcode.length) {

streaming = false;

povratak;

}

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

else break;

}

println (gcode );

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

i ++;

}

void serialEvent (serijski p)

{

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

println (s.trim ());

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

if (s.trim (). startWith ("pogreška")) stream (); // XXX: stvarno?

}

Korak 5: Dizajnirajte i ispišite sve dijelove na listu šperploče

Dizajnirajte i ispišite sve dijelove u listu šperploče
Dizajnirajte i ispišite sve dijelove u listu šperploče

Preuzmite robotski dio i dizajn u AutoCAD -u i ispišite ga na 12 mm listovima šperploče te završite i dizajnirajte dio. Ako nekome treba cad datoteka plz, ostavite komentar u odjeljku za komentare, ja ću `poslati izravno.

Korak 6: Montaža

Skupština
Skupština
Skupština
Skupština

prikupite sve dijelove i rasporedite ih u slijed koji slijedi te slijedite dijagram slike.

Korak 7: Postavite GBRL postavke

Postavka koja se pokazala učinkovitom na našim robotima.

$ 0 = 10 (koračni impuls, usec) $ 1 = 255 (odgoda koraka u praznom hodu, ms) 2 $ = 7 (koračna maska za preokretanje porta: 00000111) $ 3 = 7 (maska za preusmjeravanje dir porta: 00000111) $ 4 = 0 (korak omogućavanje inverzije, bool) $ 5 = 0 (invertiranje graničnih pinova, bool) $ 6 = 1 (invertiranje pinova sonde, bool) $ 10 = 3 (maska izvješća o statusu: 00000011) $ 11 = 0,020 (odstupanje spoja, mm) $ 12 = 0,002 (tolerancija luka, mm) 13 USD = 0 (izvještaji u inčima, bool) 20 USD = 0 (meka ograničenja, bool) 21 USD = 0 (tvrda ograničenja, bool) 22 USD = 1 (ciklus navođenja, bool) 23 USD = 0 (maska za preusmjeravanje u smjeru dirke: 00000000) 24 USD = 100.000 (hod navođenja, mm/min) 25 USD = 500.000 (traženje navođenja, mm/min) 26 USD = 250 (otklanjanje navođenja, ms) 27 USD = 1.000 (izvlačenje navođenja, mm) 100 USD = 250.000 (x, korak/mm) 101 USD = 250.000 (y, korak/mm) 102 USD = 250.000 (z, korak/mm) 110 USD = 500.000 (x maksimalna brzina, mm/min) 111 $ = 500.000 (y maksimalna brzina, mm/min) 112 = 500.000 (z maksimalna brzina, z mm/min) 120 USD = 10.000 (x ubrzanje, mm/sek^2) 121 $ = 10.000 (y ubrzanje, mm/sek^2) 122 $ = 10.000 (z ubrzanje, mm/sek^2) 130 = 200.000 (x maks. hod), mm) 131 USD = 200.000 (y max hod, mm) 132 $ = 200.000 (z max hod, mm)

Korak 8: Prenesite konačni kod i provjerite virtualni rezultat na Arduino Uno softverskoj nadzornoj ploči

// Jedinice: CM

plovak b_height = 0;

plovak a1 = 92;

plovak a2 = 86;

float snude_len = 20;

boolean doZ = false;

float base_angle; // = 0;

float arm1_angle; // = 0;

float arm2_angle; // = 0;

plovak bx = 60; // = 25;

pluta za = 60; // = 0;

plovak bz = 60; // = 25;

plovak x = 60;

plovak y = 60;

plovak z = 60;

plovak q;

plovak c;

plovak V1;

plovak V2;

plovak V3;

plovak V4;

plovak V5;

void setup () {

veličina (700, 700, P3D);

cam = novi PeasyCam (ovaj, 300);

cam.setMinimumDistance (50);

cam.setMaximumDistance (500);

}

void draw () {

// ligninger:

y = (mišX - širina/2)*(- 1);

x = (mišY - visina/2)*(- 1);

bz = z;

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

arm1_angle = q;

V4 = radijani (90,0) - q;

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

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

osnovni_kut = stupnjevi (atan2 (bx, po));

arm1_angle = stupnjevi (arm1_angle);

arm2_angle = stupnjevi (arm2_angle);

// println (by, bz);

// arm1_angle = 90;

// arm2_angle = 45;

/*

arm2_angle = 23;

arm1_angle = 23;

arm2_angle = 23;

*/

// interaktivno:

// if (doZ)

//

// {

// base_angle = base_angle+ mišX-pmouseX;

//} drugo

// {

// arm1_angle = arm1_angle+ pmouseX-mouseX;

// }

//

// arm2_angle = arm2_angle+ mišY-pmouseY;

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

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

}

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

{

rotateX (1.2);

rotiratiZ (-1,2);

pozadina (0);

svjetla ();

pushMatrix ();

// BAZA

ispuniti (150, 150, 150);

okvir_ugao (50, 50, b_visina, 0);

rotirati (radijani (osnovni_kut), 0, 0, 1);

// ARM 1

ispuniti (150, 0, 150);

box_corner (10, 10, a1, arm1_angle);

// ARM 2

ispuniti (255, 0, 0);

box_corner (10, 10, a2, arm2_angle);

// SNUD

ispuniti (255, 150, 0);

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

popMatrix ();

pushMatrix ();

float action_box_size = 100;

prevesti (0, -akcija_okutija_veličine/2, radna_okutija_kuće/2+b_visina);

pushMatrix ();

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

ispunite (255, 255, 0);

kutija (20);

popMatrix ();

ispuniti (255, 255, 255, 50);

okvir (veličina_okvira_akcije, veličina_okruga_akcije, veličina_kutije_akcija);

popMatrix ();

}

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

{

rotirati (radijani (rotirati), 1, 0, 0);

prevesti (0, 0, d/2);

kutija (w, h, d);

prevesti (0, 0, d/2);

}

void keyPressed ()

{

if (ključ == 'z')

{

doZ =! doZ;

}

if (ključ == 'h')

{

// sve postaviti na nulu

arm2_angle = 0;

arm1_angle = 90;

baza_ugao = 0;

}

if (ključ == 'g')

{

println (stupnjevi (V1));

println (stupnjevi (V5));

}

if (kôd ključa == GORE)

{

z ++;

}

if (keyCode == DOLJE)

{

z -;

}

if (ključ == '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);

}

}

Preporučeni: