Indholdsfortegnelse:
- Trin 1: Krav til komponenter
- Trin 2: Download Gui
- Trin 3: Tilslutning
- Trin 4: Upload firmware og tjek koderesultatet i Arduino Dashboard
- Trin 5: Design og udskriv alle dele i krydsfinerark
- Trin 6: Montering
- Trin 7: Konfigurer GBRL -indstillinger
- Trin 8: Upload den sidste kode, og kontroller det virtuelle resultat i Arduino Uno Software Dashboard
Video: Arduino Base Pick and Place Robot: 8 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:27
Jeg har lavet en superbillig (mindre end 1000 dollars) industriel robotarm for at give eleverne mulighed for at hacke robotik i større skala og for at gøre det muligt for små lokale produktioner at bruge robotter i deres processer uden at bryde banken. Det er let at bygge og gøre aldersgruppen til mennesker på 15 til 50 år.
Trin 1: Krav til komponenter
1. Arduino + Shield + Pins + Cables
2. Motorcontroller: dm860A (Ebay)
3. Steppermotor: 34hs5435c-37b2 (Ebay)
4. M8x45+60+70 bolte og M8 bolte.
5. 12 mm Krydsfiner.
6. 5 mm nylon.
7. Blindskiver 8mm.
8. Træskruer 4,5x40mm.
9. M3 Tæller nedsænket, 10. 12v strømforsyning
11. servomotordriver arduino
Trin 2: Download Gui
zapmaker.org/projects/grbl-controller-3-0/
github.com/grbl/grbl/wiki/Using-Grbl
Trin 3: Tilslutning
Tilslut ledningerne, der er angivet på billedet, er større forståelse for dig.
vi skal forbinde motordriveren til Arduino og andre stik, som kræves i henhold til din robot.
Trin 4: Upload firmware og tjek koderesultatet i Arduino Dashboard
Installation af firmwaren på Arduino - GRBL:
github.com/grbl/grbl/wiki/Compiling-Grbl
Bemærk: Du kan få en konflikt, når du kompilerer i Arduino. Fjern alle andre biblioteker fra din biblioteksmappe (../documents/Arduino/libraries).
Firmware opsætning
Indstil aktiver til nyere timeout. Brug en seriel forbindelse og skriv:
$1=255
Indstil homing:
$22=1
Husk at indstille serienummer til baud: 115200
Nyttige G-koder
Indstil nulpunkt for robot:
G10 L2 Xnnn Ynnn Znnn
Brug nulpunkt:
G54
Typisk initialisering til centrering af robot:
G10 L2 X1.5 Y1.2 Z1.1
G54
Flyt robotten til position hurtigt:
G0 Xnnn Ynnn Znnn
Eksempel:
G0 X10.0 Y3.1 Z4.2 (retur)
Flyt robotten til position med en bestemt hastighed:
G1 Xnnn Ynnn Znnn Fnnn
G1 X11 Y3 Z4 F300 (retur)
F skal være mellem 10 (slooooow) og 600 (hurtig)
Standardenheder for X, Y og Z
Ved brug af standard trin/enheder indstillinger (250 trin/enhed) for GRBL og
stepperdrev, der er indstillet til 800 trin/omdrejninger, gælder følgende enheder for alle akser:
+- 32 enheder = +- 180 grader
Behandlingskodeksempel:
Denne kode kan kommunikere direkte med Arduino GRBL.
github.com/damellis/gctrl
Husk at indstille serienummer til baud: 115200
Kode uoload i ardunio
import java.awt.event. KeyEvent;
import javax.swing. JOptionPane;
import behandling. serie.*;
Seriel port = null;
// vælg og rediger den relevante linje til dit operativsystem
// lad være som null for at bruge den interaktive port (tryk på 'p' i programmet)
String portnavn = null;
// Stringportnavn = Serial.list () [0]; // Mac OS X
// Stringportnavn = "/dev/ttyUSB0"; // Linux
// Stringportnavn = "COM6"; // Windows
boolsk streaming = falsk;
flydehastighed = 0,001;
String gcode;
int i = 0;
void openSerialPort ()
{
hvis (portnavn == null) returnerer;
hvis (port! = null) port.stop ();
port = ny Seriel (dette, portnavn, 115200);
port.bufferUntil ('\ n');
}
void selectSerialPort ()
{
String resultat = (String) JOptionPane.showInputDialog (dette, "Vælg den serielle port, der svarer til dit Arduino -kort.", "Vælg seriel port", JOptionPane. PLAIN_MESSAGE, nul, Serial.list (), 0);
hvis (resultat! = null) {
portnavn = resultat;
openSerialPort ();
}
}
ugyldig opsætning ()
{
størrelse (500, 250);
openSerialPort ();
}
ugyldig trækning ()
{
baggrund (0);
fyld (255);
int y = 24, dy = 12;
tekst ("INSTRUKTIONER", 12, y); y += dy;
tekst ("p: vælg seriel port", 12, y); y += dy;
tekst ("1: indstil hastighed til 0,001 tommer (1 mil) pr. løbetur", 12, y); y += dy;
tekst ("2: indstil hastighed til 0,010 tommer (10 mil) pr. løbetur", 12, y); y += dy;
tekst ("3: indstil hastigheden til 0,100 tommer (100 mil) pr. løbetur", 12, y); y += dy;
tekst ("piletaster: jog i x-y-plan", 12, y); y += dy;
tekst ("side op & side ned: jog i z -aksen", 12, y); y += dy;
tekst ("$: display grbl settings", 12, y); y+= dy;
tekst ("h: gå hjem", 12, y); y += dy;
tekst ("0: nulmaskine (sæt hjem til den aktuelle placering)", 12, y); y += dy;
tekst ("g: stream en g-kodefil", 12, y); y += dy;
tekst ("x: stop streaming af g-kode (dette er IKKE øjeblikkeligt)", 12, y); y += dy;
y = højde - dy;
tekst ("nuværende løbshastighed:" + hastighed + "tommer pr. trin", 12, y); y -= dy;
tekst ("nuværende seriel port:" + portnavn, 12, y); y -= dy;
}
void keyPressed ()
{
hvis (nøgle == '1') hastighed = 0,001;
hvis (nøgle == '2') hastighed = 0,01;
hvis (nøgle == '3') hastighed = 0,1;
hvis (! streaming) {
hvis (keyCode == LEFT) port.write ("G91 / nG20 / nG00 X-" + hastighed + "Y0.000 Z0.000 / n");
hvis (keyCode == HØJRE) port.write ("G91 / nG20 / nG00 X" + hastighed + "Y0.000 Z0.000 / n");
hvis (keyCode == UP) port.write ("G91 / nG20 / nG00 X0.000 Y" + hastighed + "Z0.000 / n");
hvis (keyCode == NED) port.write ("G91 / nG20 / nG00 X0.000 Y-" + hastighed + "Z0.000 / n");
hvis (keyCode == KeyEvent. VK_PAGE_UP) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z" + hastighed + "\ n");
hvis (keyCode == KeyEvent. VK_PAGE_DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z-" + hastighed + "\ n");
// if (key == 'h') port.write ("G90 / nG20 / nG00 X0.000 Y0.000 Z0.000 / n");
hvis (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");
hvis (key == 's') port.write ("$ 3 = 10 / n");
hvis (key == 'e') port.write ("$ 16 = 1 / n");
hvis (key == 'd') port.write ("$ 16 = 0 / n");
hvis (key == '0') openSerialPort ();
hvis (key == 'p') selectSerialPort ();
hvis (key == '$') port.write ("$$ / n");
hvis (key == 'h') port.write ("$ H / n");
}
hvis (! streaming && key == 'g') {
gcode = null; i = 0;
Filfil = null;
println ("Indlæser fil …");
selectInput ("Vælg en fil, der skal behandles:", "fileSelected", fil);
}
hvis (key == 'x') streaming = false;
}
void fileSelected (Filvalg) {
hvis (markering == null) {
println ("Vinduet blev lukket, eller brugeren ramte annuller.");
} andet {
println ("Bruger valgt" + selection.getAbsolutePath ());
gcode = loadStrings (selection.getAbsolutePath ());
hvis (gcode == null) returnerer;
streaming = sandt;
strøm();
}
}
ugyldig strøm ()
{
hvis (! streaming) vender tilbage;
mens (sandt) {
hvis (i == gcode.length) {
streaming = falsk;
Vend tilbage;
}
hvis (gcode .trim (). length () == 0) i ++;
ellers pause;
}
println (gcode );
port.write (gcode + '\ n');
i ++;
}
void serialEvent (Serial p)
{
String s = p.readStringUntil ('\ n');
println (s.trim ());
hvis (s.trim (). startsWith ("ok")) stream ();
hvis (s.trim (). startsWith ("fejl")) stream (); // XXX: virkelig?
}
Trin 5: Design og udskriv alle dele i krydsfinerark
Download robotdelen og designet i AutoCAD, og udskriv på 12 mm krydsfinerpladen og finish og design del. Hvis nogen har brug for cad -fil, skal du forlade kommentaren i kommentarfeltet, jeg sender dig direkte.
Trin 6: Montering
saml hele delen og arranger i rækkefølgen på billedet, der er givet, og følg billeddiagrammet.
Trin 7: Konfigurer GBRL -indstillinger
Indstilling, der har vist sig at fungere på vores robotter.
$ 0 = 10 (trinpuls, usec) $ 1 = 255 (trin inaktiv forsinkelse, msek) $ 2 = 7 (trinport inverter maske: 00000111) $ 3 = 7 (dir port inverter maske: 00000111) $ 4 = 0 (trinaktivering inverter, bool) $ 5 = 0 (grænsestifter inverter, bool) $ 6 = 1 (sondebolt inverter, bool) $ 10 = 3 (statusrapportmaske: 00000011) $ 11 = 0,020 (krydsafvigelse, mm) $ 12 = 0,002 (buetolerance, mm) $ 13 = 0 (rapporter tommer, bool) $ 20 = 0 (bløde grænser, bool) $ 21 = 0 (hårde grænser, bool) $ 22 = 1 (homing cyklus, bool) $ 23 = 0 (homing dir inverter maske: 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, trin/mm) $ 101 = 250.000 (y, trin/mm) $ 102 = 250.000 (z, trin/mm) $ 110 = 500.000 (x max hastighed, mm/min) $ 111 = 500.000 (y max rate, mm/min) $ 112 = 500.000 (z max 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. rejse, mm) $ 131 = 200.000 (y maks. rejse, mm) $ 132 = 200.000 (z maks. rejse, mm)
Trin 8: Upload den sidste kode, og kontroller det virtuelle resultat i Arduino Uno Software Dashboard
// Enheder: CM
float b_højde = 0;
flyde a1 = 92;
flyde a2 = 86;
float snude_len = 20;
boolsk doZ = falsk;
float base_angle; // = 0;
float arm1_angle; // = 0;
float arm2_angle; // = 0;
float bx = 60; // = 25;
flyde med = 60; // = 0;
float bz = 60; // = 25;
flyde x = 60;
flyde y = 60;
float z = 60;
flyde q;
flyde c;
flyde V1;
flyde V2;
flyde V3;
flyde V4;
flyde V5;
ugyldig opsætning () {
størrelse (700, 700, P3D);
cam = ny PeasyCam (denne, 300);
cam.setMinimumDistance (50);
cam.setMaximumDistance (500);
}
ugyldig tegning () {
// ligninger:
y = (mouseX - bredde/2)*(- 1);
x = (musY - højde/2)*(- 1);
bz = z;
af = 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 (af, 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;
//} andet
// {
// 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);
baggrund (0);
lys ();
pushMatrix ();
// BASE
fyld (150, 150, 150);
box_corner (50, 50, b_højde, 0);
rotere (radianer (base_angle), 0, 0, 1);
// ARM 1
fyld (150, 0, 150);
box_corner (10, 10, a1, arm1_angle);
// ARM 2
fyld (255, 0, 0);
box_corner (10, 10, a2, arm2_angle);
// SNUDE
fyld (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 ();
oversætte (x, action_box_size- y-action_box_size/2, z-action_box_size/2);
fyld (255, 255, 0);
kasse (20);
popMatrix ();
fyld (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øgle == 'z')
{
doZ =! doZ;
}
hvis (nøgle == 'h')
{
// sæt alle til nul
arm2_angle = 0;
arm1_angle = 90;
base_angle = 0;
}
hvis (nøgle == 'g')
{
println (grader (V1));
println (grader (V5));
}
hvis (keyCode == UP)
{
z ++;
}
hvis (keyCode == NED)
{
z -;
}
hvis (nøgle == '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);
}
}
Anbefalede:
Folow-UP: Advanced Media Center With Odroid N2 and Kodi (4k and HEVC Support): 3 trin
Folow-UP: Advanced Media Center With Odroid N2 and Kodi (4k and HEVC Support): Denne artikel er en opfølgning på min tidligere, ganske vellykkede artikel om opbygning af et alsidigt mediecenter, der først var baseret på det meget populære Raspberry PI, men senere, på grund af manglen på HEVC, H.265 og HDMI 2.2 -kompatibel output, var det switch
RFID -baseret pick and place -robot: 4 trin
RFID -baseret pick and place -robot: Siden mange år forsøger folk at erstatte menneskeligt arbejde med maskiner. Maskiner kaldet robotter er hurtigere og mere effektive end mennesker. Udtrykket robotik er praktisk defineret som undersøgelse, design og brug af robotsystemer til fremstilling. Robotter er g
Print-in-Place Robotic Gripper: 4 trin (med billeder)
Print-in-Place Robotic Gripper: Robotics er et fascinerende felt, og vi er heldige at leve i en tid, hvor DIY robotics-samfundet producerer nogle fantastiske arbejde og projekter. Selvom mange af disse projekter er forbløffende avancerede og innovative, har jeg søgt at lave robotter til
Omarbejdning af en BGA ved hjælp af Stay in Place Stencil: 7 trin
Omarbejdning af en BGA ved hjælp af en Stay in Place Stencil: BGA -bearbejdningsstencil med funktionen stay on place for at forenkle processen og reparere beskadiget loddemaske. Det forbedrer udbyttet af første gennemgang og reparerer loddemaske, der kan være blevet beskadiget af enheden. Få flere oplysninger om BGA -omarbejdning på ba
Den visionbaserede pick-and-place med UArm: 6 trin
Den visionbaserede pick-and-place med UArm: For nylig handler de fleste af de forespørgsler, vi hører fra dig, om de visionbaserede applikationer af uArm, f.eks. Objektgenkendelse, kamera-uArm-korrelation osv. Faktisk har vi arbejdet på det for en Vi har udført en simpel vision baseret p