Innholdsfortegnelse:
- Trinn 1: Krav til komponenter
- Trinn 2: Last ned Gui
- Trinn 3: Tilkobling
- Trinn 4: Last opp fastvare og sjekk koderesultatet i Arduino Dashboard
- Trinn 5: Design og skriv ut alle deler i kryssfinerark
- Trinn 6: Montering
- Trinn 7: Konfigurer GBRL -innstillinger
- Trinn 8: Last opp den endelige koden og sjekk det virtuelle resultatet i Arduino Uno Software Dashboard
Video: Arduino Base Pick and Place Robot: 8 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:22
Jeg har laget en superbillig (mindre enn 1000 dollar) industriell robotarm for å gjøre det mulig for studenter å hacke robotik i større skala og for å gjøre små lokale produksjoner i stand til å bruke roboter i sine prosesser uten å bryte banken. Det er enkelt å bygge og gjøre aldersgruppen til mennesker på 15 til 50 år.
Trinn 1: Krav til komponenter
1. Arduino + Shield + Pins + Cables
2. Motorkontroller: dm860A (Ebay)
3. Trinnmotor: 34hs5435c-37b2 (Ebay)
4. M8x45+60+70 bolter og M8 bolter.
5. 12 mm kryssfiner.
6. 5 mm nylon.
7. Blindskiver 8mm.
8. Treskruer 4,5x40mm.
9. M3 teller senket, 10. 12v strømforsyning
11. servomotordriver arduino
Trinn 2: Last ned Gui
zapmaker.org/projects/grbl-controller-3-0/
github.com/grbl/grbl/wiki/Using-Grbl
Trinn 3: Tilkobling
Koble ledningene som er gitt i bildet er større forståelse for deg.
vi må koble motordriveren til Arduino og andre kontakter som kreves i henhold til roboten din.
Trinn 4: Last opp fastvare og sjekk koderesultatet i Arduino Dashboard
Installere fastvaren på Arduino - GRBL:
github.com/grbl/grbl/wiki/Compiling-Grbl
Merk: Du kan få en konflikt når du kompilerer i Arduino. Fjern alle andre biblioteker fra bibliotekmappen (../documents/Arduino/libraries).
Fastvareoppsett
Angi aktivering til nyere tidsavbrudd. Bruk en seriell tilkobling og skriv:
$1=255
Angi homing:
$22=1
Husk å sette serienummer til baud: 115200
Nyttige G-koder
Sett nullpunkt for robot:
G10 L2 Xnnn Ynnn Znnn
Bruk nullpunkt:
G54
Typisk initialisering for å sentrere roboten:
G10 L2 X1.5 Y1.2 Z1.1
G54
Flytt roboten til posisjonen raskt:
G0 Xnnn Ynnn Znnn
Eksempel:
G0 X10.0 Y3.1 Z4.2 (retur)
Flytt roboten til posisjon med bestemt hastighet:
G1 Xnnn Ynnn Znnn Fnnn
G1 X11 Y3 Z4 F300 (retur)
F bør være mellom 10 (slooooow) og 600 (rask)
Standardenheter for X, Y og Z
Når du bruker standard trinn/enheter -innstillinger (250 trinn/enhet) for GRBL og
stepper drive konfigurert for 800 trinn/turtall gjelder følgende enheter for alle akser:
+- 32 enheter = +- 180 grader
Eksempel på behandling av kode:
Denne koden kan kommunisere direkte med Arduino GRBL.
github.com/damellis/gctrl
Husk å sette serienummer til baud: 115200
Kode uoload i ardunio
import java.awt.event. KeyEvent;
importer javax.swing. JOptionPane;
import behandling. serie.*;
Seriell port = null;
// velg og endre den riktige linjen for operativsystemet
// la stå som null for å bruke den interaktive porten (trykk 'p' i programmet)
Stringportnavn = null;
// Stringportnavn = Serial.list () [0]; // Mac OS X
// Stringportnavn = "/dev/ttyUSB0"; // Linux
// Stringportnavn = "COM6"; // Windows
boolsk streaming = false;
flytehastighet = 0,001;
String gcode;
int i = 0;
void openSerialPort ()
{
if (portnavn == null) retur;
hvis (port! = null) port.stop ();
port = ny seriell (dette, portnavn, 115200);
port.bufferUntil ('\ n');
}
void selectSerialPort ()
{
String resultat = (String) JOptionPane.showInputDialog (dette, "Velg den serielle porten som tilsvarer Arduino -kortet.", "Velg seriell port", JOptionPane. PLAIN_MESSAGE, null, Serial.list (), 0);
hvis (resultat! = null) {
portnavn = resultat;
openSerialPort ();
}
}
ugyldig oppsett ()
{
størrelse (500, 250);
openSerialPort ();
}
ugyldig trekning ()
{
bakgrunn (0);
fyll (255);
int y = 24, dy = 12;
tekst ("INSTRUKSJONER", 12, y); y += dy;
tekst ("p: velg seriell port", 12, y); y += dy;
tekst ("1: sett hastigheten til 0,001 tommer (1 mil) per jogging", 12, y); y += dy;
tekst ("2: sett hastigheten til 0,010 tommer (10 mil) per jogging", 12, y); y += dy;
tekst ("3: sett hastigheten til 100 mil per jog", 12, y); y += dy;
tekst ("piltaster: jogge i x-y-plan", 12, y); y += dy;
tekst ("side opp & side ned: jogge i z -aksen", 12, y); y += dy;
text ("$: display grbl settings", 12, y); y+= dy;
tekst ("h: gå hjem", 12, y); y += dy;
tekst ("0: null maskin (sett hjem til gjeldende plassering)", 12, y); y += dy;
tekst ("g: strøm en g-kodefil", 12, y); y += dy;
text ("x: stopp streaming av g-kode (dette er IKKE umiddelbart)", 12, y); y += dy;
y = høyde - dy;
tekst ("nåværende joggehastighet:" + hastighet + "tommer per trinn", 12, y); y -= dy;
tekst ("nåværende seriell port:" + portnavn, 12, y); y -= dy;
}
void keyPressed ()
{
hvis (nøkkel == '1') hastighet = 0,001;
hvis (nøkkel == '2') hastighet = 0,01;
hvis (nøkkel == '3') hastighet = 0,1;
hvis (! streaming) {
if (keyCode == LEFT) port.write ("G91 / nG20 / nG00 X-" + hastighet + "Y0.000 Z0.000 / n");
if (keyCode == RIGHT) port.write ("G91 / nG20 / nG00 X" + hastighet + "Y0.000 Z0.000 / n");
if (keyCode == UP) port.write ("G91 / nG20 / nG00 X0.000 Y" + hastighet + "Z0.000 / n");
hvis (keyCode == NED) port.write ("G91 / nG20 / nG00 X0.000 Y-" + hastighet + "Z0.000 / n");
if (keyCode == KeyEvent. VK_PAGE_UP) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z" + hastighet + "\ n");
if (keyCode == KeyEvent. VK_PAGE_DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z-" + hastighet + "\ 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') {
gcode = null; i = 0;
Filfil = null;
println ("Laster inn fil …");
selectInput ("Velg en fil som skal behandles:", "fileSelected", fil);
}
hvis (key == 'x') streaming = false;
}
void fileSelected (Filvalg) {
hvis (utvalg == null) {
println ("Vinduet ble lukket eller brukeren treffer avbryt.");
} annet {
println ("Bruker valgt" + selection.getAbsolutePath ());
gcode = loadStrings (selection.getAbsolutePath ());
if (gcode == null) return;
streaming = true;
strøm();
}
}
ugyldig strøm ()
{
hvis (! streaming) returnerer;
mens (sant) {
hvis (i == gcode.length) {
streaming = false;
komme tilbake;
}
if (gcode .trim (). length () == 0) i ++;
annet pause;
}
println (gcode );
port.write (gcode + '\ n');
i ++;
}
void serialEvent (Serial p)
{
String s = p.readStringUntil ('\ n');
println (s.trim ());
if (s.trim (). startsWith ("ok")) stream ();
if (s.trim (). startsWith ("error")) stream (); // XXX: virkelig?
}
Trinn 5: Design og skriv ut alle deler i kryssfinerark
Last ned robotdelen og designet i AutoCAD og skriv ut på 12 mm kryssfinerark og finish og designdel. Hvis noen trenger cad -fil plz legg igjen kommentaren i kommentarfeltet, jeg sender deg direkte.
Trinn 6: Montering
samle hele delen og ordne i rekkefølgen på bildet som er gitt, og følg bildediagrammet.
Trinn 7: Konfigurer GBRL -innstillinger
Innstillinger som har vist seg å fungere på våre roboter.
$ 0 = 10 (trinnpuls, usek) $ 1 = 255 (trinn inaktiv forsinkelse, msek) $ 2 = 7 (trinnport inverter maske: 00000111) $ 3 = 7 (dir port inverter maske: 00000111) $ 4 = 0 (trinnaktivering inverter, bool) $ 5 = 0 (grensepinner inverter, bool) $ 6 = 1 (sondepinne inverter, bool) $ 10 = 3 (statusrapportmaske: 00000011) $ 11 = 0.020 (kryssavvik, mm) $ 12 = 0.002 (buetoleranse, mm) $ 13 = 0 (rapporter tommer, bool) $ 20 = 0 (myke grenser, bool) $ 21 = 0 (harde grenser, bool) $ 22 = 1 (homing syklus, bool) $ 23 = 0 (homing dir invert mask: 00000000) $ 24 = 100.000 (homing feed, mm/min) $ 25 = 500.000 (homing seek, mm/min) $ 26 = 250 (homing debounce, msek) $ 27 = 1.000 (homing pull-off, mm) $ 100 = 250.000 (x, trinn/mm) $ 101 = 250.000 (y, trinn/mm) $ 102 = 250.000 (z, trinn/mm) $ 110 = 500.000 (x maks hastighet, mm/min) $ 111 = 500.000 (y maks hastighet, mm/min) $ 112 = 500.000 (z maks rate, 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 maks reise, mm) $ 131 = 200.000 (y maksimal reise, mm) $ 132 = 200.000 (z maksimal reise, mm)
Trinn 8: Last opp den endelige koden og sjekk det virtuelle resultatet i Arduino Uno Software Dashboard
// Enheter: CM
flyte b_høyde = 0;
flyte a1 = 92;
flyte a2 = 86;
float snude_len = 20;
boolsk doZ = false;
float base_angle; // = 0;
float arm1_angle; // = 0;
float arm2_angle; // = 0;
float bx = 60; // = 25;
flyte med = 60; // = 0;
float bz = 60; // = 25;
flyte x = 60;
flyte y = 60;
flyte z = 60;
flyte q;
flyte c;
flyte V1;
flyte V2;
flyte V3;
flyte V4;
flyte V5;
ugyldig oppsett () {
størrelse (700, 700, P3D);
cam = ny PeasyCam (denne, 300);
cam.setMinimumDistance (50);
cam.setMaximumDistance (500);
}
ugyldig trekning () {
// ligninger:
y = (mouseX - bredde/2)*(- 1);
x = (mus Y - høyde/2)*(- 1);
bz = z;
av = 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 = radianer (90,0) - q;
V5 = radianer (180) - V4 - radianer (90);
arm2_angle = radianer (180,0) - (V5 + V1);
base_angle = grader (atan2 (bx, by));
arm1_angle = grader (arm1_angle);
arm2_angle = grader (arm2_angle);
// println (av, bz);
// arm1_angle = 90;
// arm2_angle = 45;
/*
arm2_angle = 23;
arm1_angle = 23;
arm2_angle = 23;
*/
// interaktiv:
// hvis (doZ)
//
// {
// base_angle = base_angle+ mouseX-pmouseX;
//} annet
// {
// arm1_angle = arm1_angle+ pmouseX-mouseX;
// }
//
// arm2_angle = arm2_angle+ mouseY-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);
rotereZ (-1,2);
bakgrunn (0);
lys ();
pushMatrix ();
// UTGANGSPUNKT
fyll (150, 150, 150);
box_corner (50, 50, b_høyde, 0);
rotere (radianer (base_angle), 0, 0, 1);
// ARM 1
fyll (150, 0, 150);
box_corner (10, 10, a1, arm1_angle);
// ARM 2
fyll (255, 0, 0);
box_corner (10, 10, a2, arm2_angle);
// SNUDE
fyll (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);
fyll (255, 255, 0);
eske (20);
popMatrix ();
fyll (255, 255, 255, 50);
boks (action_box_size, action_box_size, action_box_size);
popMatrix ();
}
void box_corner (float w, float h, float d, float rotate)
{
rotere (radianer (rotere), 1, 0, 0);
translate (0, 0, d/2);
boks (w, h, d);
translate (0, 0, d/2);
}
void keyPressed ()
{
hvis (nøkkel == 'z')
{
doZ =! doZ;
}
hvis (nøkkel == 'h')
{
// sett alt til null
arm2_angle = 0;
arm1_angle = 90;
base_angle = 0;
}
hvis (nøkkel == 'g')
{
println (grader (V1));
println (grader (V5));
}
hvis (keyCode == UP)
{
z ++;
}
hvis (keyCode == NED)
{
z -;
}
hvis (nøkkel == '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);
}
}
Anbefalt:
Folow-UP: Advanced Media Center With Odroid N2 and Kodi (4k and HEVC Support): 3 trinn
Folow-UP: Advanced Media Center With Odroid N2 and Kodi (4k and HEVC Support): Denne artikkelen er en oppfølging av min tidligere, ganske vellykkede artikkel om å bygge et allsidig mediesenter, først basert på den veldig populære Raspberry PI men senere, på grunn av mangel på HEVC, H.265 og HDMI 2.2 -kompatibel utgang, var det switch
RFID -basert pick and place -robot: 4 trinn
RFID -basert pick and place -robot: Siden mange år prøver folk å erstatte menneskelig arbeid med maskiner. Maskiner som kalles roboter er raskere og mer effektive enn mennesker. Begrepet robotikk er praktisk talt definert som studier, design og bruk av robotsystemer for produksjon. Roboter er g
Print-in-Place Robotic Gripper: 4 trinn (med bilder)
Print-in-Place Robotic Gripper: Robotics er et fascinerende felt, og vi er heldige som lever i en tid da DIY-robotikksamfunnet produserer fantastisk arbeid og prosjekter. Selv om mange av disse prosjektene er forbløffende avanserte og nyskapende, har jeg søkt å lage roboter til
Omarbeide en BGA ved hjelp av Stay in Place Stencil: 7 trinn
Omarbeide en BGA ved hjelp av en Stay in Place Stencil: BGA -bearbeidingsstencil med funksjonen stay on place for å forenkle prosessen og reparere skadet loddemaske. Det forbedrer utbyttet av første pass og reparerer loddemaske som kan ha blitt skadet av enheten. Se mer informasjon om BGA -bearbeiding på ba
Snakk med Pick og kunstig intelligens -chat ved hjelp av Cleverbot: 14 trinn (med bilder)
Snakk med Pick og Artificial Intelligence Chat ved hjelp av Cleverbot: Her prøver jeg ikke bare talekommando, men også Artificial Intelligence Chat med datamaskinen ved hjelp av Cleverbot. Faktisk kom ideen da barn fant blande farger i fargeboksen når de tar farge fra en farge til den nærmeste. Men til slutt implementere