Innehållsförteckning:
- Steg 1: Krav på komponenter
- Steg 2: Ladda ner Gui
- Steg 3: Anslutning
- Steg 4: Ladda upp firmware och kontrollera koderesultatet i Arduino Dashboard
- Steg 5: Designa och skriv ut alla delar i plywoodark
- Steg 6: Montering
- Steg 7: Konfigurera GBRL -inställningar
- Steg 8: Ladda upp den slutliga koden och kontrollera det virtuella resultatet i Arduino Uno Software Dashboard
Video: Arduino Base Pick and Place Robot: 8 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:42
Jag har gjort en superbillig (mindre än 1000 dollar) industriell robotarm för att göra det möjligt för studenter att hacka robotik i större skala och för att göra små lokala produktioner att använda robotar i sina processer utan att bryta banken. Det är lätt att bygga och göra åldersgruppen människor mellan 15 och 50 år.
Steg 1: Krav på komponenter
1. Arduino + Shield + Pins + Cables
2. Motorstyrenhet: dm860A (Ebay)
3. Stegmotor: 34hs5435c-37b2 (Ebay)
4. M8x45+60+70 bultar och M8 bultar.
5. 12 mm plywood.
6. 5 mm nylon.
7. Blindbrickor 8mm.
8. Träskruvar 4,5x40mm.
9. M3 räknare sjunkit, 10. 12v strömförsörjning
11. servomotor förare arduino
Steg 2: Ladda ner Gui
zapmaker.org/projects/grbl-controller-3-0/
github.com/grbl/grbl/wiki/Using-Grbl
Steg 3: Anslutning
Anslut trådarna som ges i bilden är större förståelse för dig.
vi måste ansluta motordrivrutinen till Arduino och andra kontakter som krävs enligt din robot.
Steg 4: Ladda upp firmware och kontrollera koderesultatet i Arduino Dashboard
Installera firmware på Arduino - GRBL:
github.com/grbl/grbl/wiki/Compiling-Grbl
Obs! Du kan få en konflikt när du kompilerar i Arduino. Ta bort alla andra bibliotek från biblioteksmappen (../documents/Arduino/libraries).
Firmware -installation
Ställ aktivera till nyare timeout. Använd en seriell anslutning och skriv:
$1=255
Ställ in hemning:
$22=1
Kom ihåg att ställa in serienummer till baud: 115200
Användbara G-koder
Ange nollpunkt för robot:
G10 L2 Xnnn Ynnn Znnn
Använd nollpunkt:
G54
Typisk initialisering för att centrera roboten:
G10 L2 X1.5 Y1.2 Z1.1
G54
Flytta roboten till position snabbt:
G0 Xnnn Ynnn Znnn
Exempel:
G0 X10.0 Y3.1 Z4.2 (retur)
Flytta roboten till position med specifik hastighet:
G1 Xnnn Ynnn Znnn Fnnn
G1 X11 Y3 Z4 F300 (retur)
F bör vara mellan 10 (slooooow) och 600 (snabb)
Standardenheter för X, Y och Z
När du använder standardinställningar för steg/enheter (250 steg/enhet) för GRBL och
stegdrift inställd för 800 steg/varv gäller följande enheter för alla axlar:
+- 32 enheter = +- 180 grader
Exempel på bearbetningskod:
Denna kod kan kommunicera direkt med Arduino GRBL.
github.com/damellis/gctrl
Kom ihåg att ställa in serienummer till baud: 115200
Kod uoload i ardunio
importera java.awt.event. KeyEvent;
importera javax.swing. JOptionPane;
import bearbetning. serie.*;
Seriell port = null;
// välj och ändra lämplig rad för ditt operativsystem
// lämna som null för att använda den interaktiva porten (tryck på 'p' i programmet)
Strängportnamn = null;
// Strängportnamn = Serial.list () [0]; // Mac OS X
// Strängportnamn = "/dev/ttyUSB0"; // Linux
// Strängportnamn = "COM6"; // Windows
boolsk streaming = falskt;
flottörhastighet = 0,001;
Sträng gcode;
int i = 0;
void openSerialPort ()
{
if (portnamn == null) return;
if (port! = null) port.stop ();
port = new Serial (detta, portnamn, 115200);
port.bufferUntil ('\ n');
}
void selectSerialPort ()
{
Strängresultat = (String) JOptionPane.showInputDialog (detta, "Välj den seriella porten som motsvarar ditt Arduino -kort.", "Välj serieport", JOptionPane. PLAIN_MESSAGE, null, Serial.list (), 0);
if (resultat! = null) {
portnamn = resultat;
openSerialPort ();
}
}
void setup ()
{
storlek (500, 250);
openSerialPort ();
}
void draw ()
{
bakgrund (0);
fyllning (255);
int y = 24, dy = 12;
text ("INSTRUKTIONER", 12, y); y += dy;
text ("p: välj seriell port", 12, y); y += dy;
text ("1: ställ in hastigheten till 0,001 tum (1 mil) per jogg", 12, y); y += dy;
text ("2: ställ in hastigheten till 0,010 tum (10 mil) per jogg", 12, y); y += dy;
text ("3: ställ in hastigheten till 100 mil per jog", 12, y); y += dy;
text ("piltangenter: jogga i x-y-plan", 12, y); y += dy;
text ("sida upp & sida ner: jogga i z -axeln", 12, y); y += dy;
text ("$: display grbl settings", 12, y); y+= dy;
text ("h: gå hem", 12, y); y += dy;
text ("0: zero machine (ställ hem till den aktuella platsen)", 12, y); y += dy;
text ("g: strömma en g-kodfil", 12, y); y += dy;
text ("x: sluta strömma g-kod (detta är INTE omedelbart)", 12, y); y += dy;
y = höjd - dy;
text ("aktuell jogghastighet:" + hastighet + "tum per steg", 12, y); y -= dy;
text ("aktuell serieport:" + portnamn, 12, y); y -= dy;
}
void keyPressed ()
{
om (key == '1') hastighet = 0,001;
om (key == '2') hastighet = 0,01;
om (key == '3') hastighet = 0,1;
om (! streaming) {
if (keyCode == VÄNSTER) 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");
if (keyCode == DOWN) 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 ();
om (key == 'p') väljSerialPort ();
if (key == '$') port.write ("$$ / n");
if (key == 'h') port.write ("$ H / n");
}
if (! streaming && key == 'g') {
gcode = null; i = 0;
Filfil = null;
println ("Läser in fil …");
selectInput ("Välj en fil att bearbeta:", "fileSelected", fil);
}
if (key == 'x') streaming = false;
}
void fileSelected (File selection) {
if (urval == null) {
println ("Fönstret stängdes eller användartrycket avbryt.");
} annat {
println ("Användare vald" + selection.getAbsolutePath ());
gcode = loadStrings (selection.getAbsolutePath ());
if (gcode == null) return;
streaming = true;
ström();
}
}
void stream ()
{
if (! streaming) return;
medan (sant) {
if (i == gcode.length) {
streaming = falskt;
lämna tillbaka;
}
if (gcode .trim (). length () == 0) i ++;
annars bryta;
}
println (gcode );
port.write (gcode + '\ n');
i ++;
}
void serialEvent (Serial p)
{
Sträng s = p.readStringUntil ('\ n');
println (s.trim ());
if (s.trim (). startsWith ("ok")) stream ();
if (s.trim (). startsWith ("error")) stream (); // XXX: verkligen?
}
Steg 5: Designa och skriv ut alla delar i plywoodark
Ladda ner robotdelen och designen i AutoCAD och skriv ut den på 12 mm plywoodark och finish och designdel. Om någon behöver cad -fil plz lämna kommentaren i kommentarsfältet så skickar jag dig direkt.
Steg 6: Montering
samla all del och ordna i sekvensen på bilden som ges och följ bilddiagrammet.
Steg 7: Konfigurera GBRL -inställningar
Inställningar som har visat sig fungera på våra robotar.
$ 0 = 10 (stegpuls, usec) $ 1 = 255 (steg inaktiv fördröjning, msek) $ 2 = 7 (stegport inverteringsmask: 00000111) $ 3 = 7 (dir port inverter mask: 00000111) $ 4 = 0 (stegaktivera invertera, bool) $ 5 = 0 (gränspinnar invertera, bool) $ 6 = 1 (sondstift invertera, bool) $ 10 = 3 (statusrapportmask: 00000011) $ 11 = 0,020 (övergångsavvikelse, mm) $ 12 = 0,002 (bågtolerans, mm) $ 13 = 0 (rapportera tum, bool) $ 20 = 0 (mjuka gränser, bool) $ 21 = 0 (hårda gränser, bool) $ 22 = 1 (homingcykel, 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, step/mm) $ 101 = 250.000 (y, steg/mm) $ 102 = 250.000 (z, step/mm) $ 110 = 500.000 (x max hastighet, 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 max resa, mm) $ 131 = 200.000 (y max resa, mm) $ 132 = 200.000 (z max resa, mm)
Steg 8: Ladda upp den slutliga koden och kontrollera det virtuella resultatet i Arduino Uno Software Dashboard
// Enheter: CM
float b_höjd = 0;
flyta a1 = 92;
flyta a2 = 86;
float snude_len = 20;
booleskt doZ = falskt;
float base_angle; // = 0;
float arm1_angle; // = 0;
float arm2_angle; // = 0;
float bx = 60; // = 25;
flyta med = 60; // = 0;
float bz = 60; // = 25;
flyta x = 60;
flyta y = 60;
flyta z = 60;
flyta q;
flyta c;
flottör V1;
flottör V2;
flottör V3;
flottör V4;
flottör V5;
void setup () {
storlek (700, 700, P3D);
cam = ny PeasyCam (detta, 300);
cam.setMinimumDistance (50);
cam.setMaximumDistance (500);
}
void draw () {
// ligninger:
y = (mouseX - bredd/2)*(- 1);
x = (musY - höjd/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 (by, bz);
// arm1_angle = 90;
// arm2_angle = 45;
/*
arm2_angle = 23;
arm1_angle = 23;
arm2_angle = 23;
*/
// interaktiv:
// if (doZ)
//
// {
// base_angle = base_angle+ mouseX-pmouseX;
//} annat
// {
// 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);
roteraZ (-1,2);
bakgrund (0);
lampor ();
pushMatrix ();
// BASE
fyllning (150, 150, 150);
box_corner (50, 50, b_höjd, 0);
rotera (radianer (bas_vinkel), 0, 0, 1);
// ARM 1
fyllning (150, 0, 150);
box_corner (10, 10, a1, arm1_angle);
// ARM 2
fyllning (255, 0, 0);
box_corner (10, 10, a2, arm2_angle);
// SNUDE
fyllning (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);
fyllning (255, 255, 0);
låda (20);
popMatrix ();
fyllning (255, 255, 255, 50);
box (action_box_size, action_box_size, action_box_size);
popMatrix ();
}
void box_corner (float w, float h, float d, float rotate)
{
rotera (radianer (rotera), 1, 0, 0);
translate (0, 0, d/2);
låda (w, h, d);
translate (0, 0, d/2);
}
void keyPressed ()
{
if (key == 'z')
{
doZ =! doZ;
}
if (key == 'h')
{
// sätt alla till noll
arm2_angle = 0;
arm1_angle = 90;
bas_vinkel = 0;
}
om (key == 'g')
{
println (grader (V1));
println (grader (V5));
}
if (keyCode == UP)
{
z ++;
}
if (keyCode == NED)
{
z -;
}
if (key == '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);
}
}
Rekommenderad:
Folow-UP: Advanced Media Center With Odroid N2 and Kodi (4k and HEVC support): 3 Steg
Folow-UP: Advanced Media Center With Odroid N2 and Kodi (4k and HEVC Support): Den här artikeln är en uppföljning av min tidigare, ganska framgångsrika artikel om att bygga ett mångsidigt mediecenter, först baserat på det mycket populära Raspberry PI men senare, på grund av bristen på HEVC, H.265 och HDMI 2.2 -kompatibel utgång, var det switch
RFID -baserad pick and place -robot: 4 steg
RFID -baserad pick and place -robot: Sedan många år försöker människor ersätta mänskligt arbete med maskiner. Maskiner som kallas robotar är snabbare och effektivare än människor. Begreppet robotik definieras praktiskt taget som studier, design och användning av robotsystem för tillverkning. Robotar är g
Print-in-Place Robotic Gripper: 4 steg (med bilder)
Print-in-Place Robotic Gripper: Robotics är ett fascinerande fält, och vi har turen att leva i en tid då DIY-robotikgemenskapen producerar fantastiska arbeten och projekt. Även om många av dessa projekt är förvånansvärt avancerade och innovativa, har jag försökt att göra robotar till
Omarbeta en BGA med hjälp av Stay in Place Stencil: 7 steg
Omarbeta en BGA med hjälp av en Stay in Place Stencil: BGA -omarbetningsstencil med en stående funktion för att förenkla processen och reparera skadad lödmask. Det förbättrar förstapassningsavkastningen och reparerar lödmask som kan ha skadats av enheten. Se mer information om BGA -omarbetning på ba
Den visionbaserade pick-and-place med UArm: 6 steg
Den visionbaserade pick-and-place med UArm: Nyligen handlar de flesta frågor vi hör från dig om de visionbaserade applikationerna av uArm, som objektigenkänning, kamera-uArm-korrelation, etc. Egentligen har vi arbetat med det för en Vi har genomfört en enkel vision baserad p