Kazalo:
- 1. korak: Zahteve po komponentah
- 2. korak: Prenesite Gui
- 3. korak: Povezava
- 4. korak: Naložite vdelano programsko opremo in preverite rezultat kode na Arduino nadzorni plošči
- 5. korak: Oblikujte in natisnite vse dele v vezanem listu
- 6. korak: Montaža
- 7. korak: Nastavite nastavitve GBRL
- 8. korak: Naložite končno kodo in preverite navidezni rezultat na nadzorni plošči programske opreme Arduino Uno
Video: Robot za izbiro in postavitev baze Arduino: 8 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:04
Naredil sem super poceni (manj kot 1000 dolarjev) industrijsko robotsko roko, ki je študentom omogočila vdor v robotiko večjega obsega in majhnim lokalnim produkcijam omogočila uporabo robotov v svojih procesih, ne da bi pri tem bankrotirala. Njegov Eassy za gradnjo in oblikovanje starostne skupine ljudi od 15 do 50 let.
1. korak: Zahteve po komponentah
1. Arduino + ščit + zatiči + kabli
2. Krmilnik motorja: dm860A (Ebay)
3. Steppermotor: 34hs5435c-37b2 (Ebay)
4. Vijaki M8x45+60+70 in vijaki M8.
5. Vezan les 12 mm.
6. 5 mm najlon.
7. Slepe podložke 8 mm.
8. Leseni vijaki 4,5x40 mm.
9. Števec M3 potopljen, 10. 12v napajalnik
11. gonilnik servo motorja arduino
2. korak: Prenesite Gui
zapmaker.org/projects/grbl-controller-3-0/
github.com/grbl/grbl/wiki/Using-Grbl
3. korak: Povezava
Povežite žice, ki so prikazane na sliki, da vas bolje razumejo.
moramo povezati gonilnik motorja z Arduinom in drugimi priključki, ki so potrebni po vašem robotu.
4. korak: Naložite vdelano programsko opremo in preverite rezultat kode na Arduino nadzorni plošči
Namestitev vdelane programske opreme na Arduino - GRBL:
github.com/grbl/grbl/wiki/Compiling-Grbl
Opomba: Pri sestavljanju v Arduinu lahko pride do spora. Odstranite vse druge knjižnice iz mape knjižnice (../documents/Arduino/libraries).
Nastavitev vdelane programske opreme
Omogoči na novejšo časovno omejitev. Uporabite serijsko povezavo in napišite:
$1=255
Nastavitev usmerjanja:
$22=1
Ne pozabite nastaviti serijske vrednosti na baud: 115200
Koristne G-kode
Nastavite ničelno točko za robota:
G10 L2 Xnnn Ynnn Znnn
Uporabite ničelno točko:
G54
Tipična inicializacija na sredinskega robota:
G10 L2 X1,5 Y1,2 Z1,1
G54
Hitro premaknite robota v položaj:
G0 Xnnn Ynnn Znnn
Primer:
G0 X10.0 Y3.1 Z4.2 (vrnitev)
Premaknite robota v položaj z določeno hitrostjo:
G1 Xnnn Ynnn Znnn Fnnn
G1 X11 Y3 Z4 F300 (vrnitev)
F naj bo med 10 (slooooow) in 600 (hitro)
Privzete enote za X, Y in Z
Ko uporabljate privzete nastavitve korakov/enot (250 korakov/enoto) za GRBL in
koračni pogon, nastavljen na 800 korakov/vrtljajev, za vse osi veljajo naslednje enote:
+- 32 enot = +- 180 stopinj
Primer obdelave kode:
Ta koda lahko komunicira neposredno z Arduino GRBL.
github.com/damellis/gctrl
Ne pozabite nastaviti serijske vrednosti na baud: 115200
Koda uoload v ardunionu
uvoz java.awt.event. KeyEvent;
import javax.swing. JOptionPane;
uvozna obdelava.serial.*;
Zaporedna vrata = nič;
// izberite in spremenite ustrezno vrstico za vaš operacijski sistem
// pustite kot ničelno za uporabo interaktivnih vrat (pritisnite 'p' v programu)
Niz portname = null;
// String portname = Serial.list () [0]; // Mac OS X
// Niz portname = "/dev/ttyUSB0"; // Linux
// Niz portname = "COM6"; // Windows
logično pretakanje = napačno;
hitrost plavanja = 0,001;
Niz gcode;
int i = 0;
void openSerialPort ()
{
if (ime porta == null) vrne;
if (vrata! = nič) port.stop ();
vrata = nova zaporedna številka (to, ime vrat, 115200);
port.bufferUntil ('\ n');
}
void selectSerialPort ()
{
Niz rezultat = (String) JOptionPane.showInputDialog (to, "Izberite serijska vrata, ki ustrezajo vaši plošči Arduino.", "Izberite serijska vrata", JOptionPane. PLAIN_MESSAGE, nič, Serial.list (), 0);
if (rezultat! = nič) {
portname = rezultat;
openSerialPort ();
}
}
void setup ()
{
velikost (500, 250);
openSerialPort ();
}
void draw ()
{
ozadje (0);
napolni (255);
int y = 24, dy = 12;
besedilo ("NAVODILA", 12, y); y += dy;
besedilo ("p: izberite serijska vrata", 12, y); y += dy;
besedilo ("1: nastavite hitrost na 0,001 palca (1 milj) na tek", 12, y); y += dy;
besedilo ("2: nastavite hitrost na 0,010 palcev (10 milj) na tek", 12, y); y += dy;
text ("3: nastavite hitrost na 10000 milimetrov na tek", 12, y); y += dy;
text ("puščične tipke: tek v x-y ravnini", 12, y); y += dy;
besedilo ("stran navzgor in stran navzdol: premikanje po osi z", 12, y); y += dy;
text ("$: prikaz nastavitev grbl", 12, y); y+= dy;
text ("h: pojdi domov", 12, y); y += dy;
text ("0: ničelni stroj (nastavite dom na trenutno lokacijo)", 12, y); y += dy;
text ("g: tok datoteke g-kode", 12, y); y += dy;
text ("x: ustavite pretakanje g-kode (to NI takoj)", 12, y); y += dy;
y = višina - dy;
besedilo ("trenutna hitrost teka:" + hitrost + "palcev na korak", 12, y); y -= dy;
besedilo ("trenutna serijska vrata:" + ime vrat, 12, y); y -= dy;
}
void keyPressed ()
{
if (ključ == '1') hitrost = 0,001;
if (ključ == '2') hitrost = 0,01;
if (ključ == '3') hitrost = 0,1;
if (! pretakanje) {
if (keyCode == LEFT) port.write ("G91 / nG20 / nG00 X-" + hitrost + "Y0.000 Z0.000 / n");
if (keyCode == DESNO) port.write ("G91 / nG20 / nG00 X" + hitrost + "Y0.000 Z0.000 / n");
if (keyCode == UP) port.write ("G91 / nG20 / nG00 X0.000 Y" + hitrost + "Z0.000 / n");
if (keyCode == DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y-" + hitrost + "Z0.000 / n");
if (keyCode == KeyEvent. VK_PAGE_UP) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z" + hitrost + "\ n");
if (keyCode == KeyEvent. VK_PAGE_DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z-" + hitrost + "\ 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 (! pretakanje && key == 'g') {
gcode = ničelno; i = 0;
Datoteka datoteka = null;
println ("Nalaganje datoteke …");
selectInput ("Izberite datoteko za obdelavo:", "fileSelected", datoteka);
}
if (key == 'x') streaming = false;
}
void fileSelected (izbira datoteke) {
if (izbor == nič) {
println ("Okno je bilo zaprto ali je uporabnik pritisnil preklic.");
} drugo {
println ("Uporabnik izbran" + selection.getAbsolutePath ());
gcode = loadStrings (selection.getAbsolutePath ());
if (gcode == null) vrne;
tok = res;
tok ();
}
}
void stream ()
{
če se (! pretakanje) vrne;
medtem ko (res) {
if (i == gcode.length) {
pretakanje = napačno;
vrnitev;
}
if (gcode .trim (). length () == 0) i ++;
drugače pa odmor;
}
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 ("napaka")) stream (); // XXX: res?
}
5. korak: Oblikujte in natisnite vse dele v vezanem listu
Prenesite robotski del in oblikovanje v AutoCAD -u ter natisnite na 12 mm vezanega lesa ter zaključni in oblikovalni del. Če kdo potrebuje datoteko cad plz, pustite komentar v polju za komentarje, ki ga bom poslal neposredno.
6. korak: Montaža
zberite ves del in ga razporedite po podani sliki ter sledite slikovnemu diagramu.
7. korak: Nastavite nastavitve GBRL
Nastavitev, ki se je izkazala za učinkovito pri naših robotih.
$ 0 = 10 (koračni impulz, usec) $ 1 = 255 (zakasnitev koraka v prostem teku, msec) $ 2 = 7 (obračalna maska koračnih vrat: 00000111) $ 3 = 7 (obrnjena maska vrat dir: 00000111) $ 4 = 0 (stopnja omogoči inverzijo, bool) 5 USD = 0 (mejni zatiči obrnjeni, bool) 6 USD = 1 (obrnjeni zatič sonde, bool) 10 USD = 3 (maska poročila o stanju: 00000011) 11 USD = 0,020 (odstopanje spoja, mm) 12 USD = 0,002 (toleranca loka, mm) 13 USD = 0 (poročilo v palcih, bool) 20 USD = 0 (mehke meje, bool) 21 USD = 0 (trde meje, bool) 22 USD = 1 (cikel samonaravnavanja, bool) 23 USD = 0 (obračalna maska za samonaravnavanje: 200000000) 24 USD = 100.000 (krmiljenje pri usmerjanju, mm/min) 25 USD = 500.000 (iskanje pri usmerjanju, mm/min) 26 USD = 250 (odpravljanje nameritve, msec) 27 USD = 1.000 (izvlečenje pri usmerjanju, mm) 100 USD = 250.000 (x, korak/mm) 101 $ = 250.000 (y, korak/mm) 102 $ = 250.000 (z, korak/mm) 110 $ = 500.000 (x max hitrost, mm/min) 111 $ = 500.000 (y max hitrost, mm/min) 112 $ = 500.000 (z max hitrost, mm/min) 120 $ = 10.000 (x pospešek, mm/s^2) 121 $ = 10.000 (y pospešek, mm/s^2) 122 $ = 10.000 (z pospeškom, mm/s^2) 130 = 200.000 (x največji hod, mm) 131 USD = 200.000 (y max hod, mm) 132 $ = 200.000 (z max travel, mm)
8. korak: Naložite končno kodo in preverite navidezni rezultat na nadzorni plošči programske opreme Arduino Uno
// Enote: CM
float b_height = 0;
plovec a1 = 92;
plovec a2 = 86;
float snude_len = 20;
boolean doZ = false;
float base_angle; // = 0;
float arm1_angle; // = 0;
float arm2_angle; // = 0;
plovec bx = 60; // = 25;
lebdi za = 60; // = 0;
plovec bz = 60; // = 25;
plovec x = 60;
plovec y = 60;
plovec z = 60;
float q;
float c;
plovec V1;
plovec V2;
plovec V3;
plovec V4;
plovec V5;
void setup () {
velikost (700, 700, P3D);
cam = nov PeasyCam (ta, 300);
cam.setMinimumDistance (50);
cam.setMaximumDistance (500);
}
void draw () {
// ligninger:
y = (mišX - širina/2)*(- 1);
x = (mišY - višina/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 = radiani (90,0) - q;
V5 = radiani (180) - V4 - radiani (90);
arm2_angle = radiani (180,0) - (V5 + V1);
base_angle = stopinje (atan2 (bx, by));
arm1_angle = stopinje (arm1_angle);
arm2_angle = stopinje (arm2_angle);
// println (by, bz);
// arm1_angle = 90;
// arm2_angle = 45;
/*
arm2_angle = 23;
arm1_angle = 23;
arm2_angle = 23;
*/
// interaktivno:
// če (doZ)
//
// {
// base_angle = base_angle+ mouseX-pmouseX;
//} drugo
// {
// arm1_angle = arm1_angle+ pmouseX-mouseX;
// }
//
// arm2_angle = arm2_angle+ miškaY-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);
vrtenjeZ (-1,2);
ozadje (0);
luči ();
pushMatrix ();
// OSNOVA
napolnite (150, 150, 150);
box_corner (50, 50, b_height, 0);
vrtenje (radiani (base_angle), 0, 0, 1);
// ARM 1
polni (150, 0, 150);
box_corner (10, 10, a1, arm1_angle);
// ARM 2
izpolni (255, 0, 0);
box_corner (10, 10, a2, arm2_angle);
// SNUD
izpolni (255, 150, 0);
box_corner (10, 10, snude_len, -arm1_angle -arm2_angle+90);
popMatrix ();
pushMatrix ();
float action_box_size = 100;
translate (0, -action_box_size/2, action_box_size/2+b_height);
pushMatrix ();
translate (x, action_box_size- y-action_box_size/2, z-action_box_size/2);
izpolni (255, 255, 0);
škatla (20);
popMatrix ();
izpolnite (255, 255, 255, 50);
polje (velikost_delova_polja, velikost_polja
popMatrix ();
}
void box_corner (float w, float h, float d, float rotate)
{
vrtenje (radiani (vrti), 1, 0, 0);
prevesti (0, 0, d/2);
škatla (w, h, d);
prevesti (0, 0, d/2);
}
void keyPressed ()
{
če (ključ == 'z')
{
doZ =! doZ;
}
če (ključ == 'h')
{
// vse nastavim na nič
arm2_angle = 0;
arm1_angle = 90;
base_angle = 0;
}
če (ključ == 'g')
{
println (stopinje (V1));
println (stopinje (V5));
}
če (keyCode == GOR)
{
z ++;
}
če (keyCode == DOL)
{
z -;
}
če (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);
}
}
Priporočena:
Besedna ura (nemška postavitev): 8 korakov
Besedna ura (nemška postavitev): Hej, ich möchte Euch hier mal mein letztes Projekt vorstellen. Ich habe eine Uhr gebaut. Allerdings keine " normale " Uhr, sondern eine Word Clock. Zu solchen Bastelprojekten gibt es hier zwar schon ein paar Artikel, aber trotzdem möchte ich
Uporaba Pythona za učenje neangleških postavitev tipkovnice: 8 korakov
Uporaba Pythona za učenje neangleških postavitev tipkovnice: Živjo, jaz sem Julien! Sem študent računalništva in danes vam bom pokazal, kako lahko uporabite Python, da se naučite razporeditve tipkovnice v neangleškem jeziku. Danes se na spletu dogaja veliko učenja jezikov in ljudje lahko razumejo eno stvar
Robot za izbiro in namestitev na podlagi RFID: 4 koraki
Robot za izbiro in namestitev na podlagi RFID: Že vrsto let ljudje poskušajo nadomestiti človeško delo s stroji. Stroji, imenovani roboti, so hitrejši in učinkovitejši od ljudi. Izraz robotika je praktično opredeljen kot preučevanje, načrtovanje in uporaba robotskih sistemov za proizvodnjo. Roboti so g
Preverjevalnik baterije s temperaturo in izbiro baterije: 23 korakov (s slikami)
Preverjevalnik baterije s temperaturo in izbiro baterije: Preizkuševalnik kapacitete baterije. S to napravo lahko preverite kapaciteto baterije 18650, kislino in drugo (največja baterija, ki sem jo preizkusil, je 6v kislinska baterija 4,2A). Rezultat testa je v miliamperih/urah. To napravo ustvarim, ker jo potrebujem za preverjanje
Preprosto stikalo za vzporedno/serijsko izbiro: 3 koraki
Preprosto stikalo za vzporedno/serijsko izbiro: V tem navodilu bom razložil, kako z uporabo preprostega dvopolnega stikala z dvojnim metom (DPDT) izbrati serijsko ali vzporedno ožičenje za dve obremenitvi na enem viru napajanja. Ožičenje dveh obremenitev zaporedoma bo zagotovilo celoten tok, ki je na voljo obema posojiloma