Inhoudsopgave:
- Stap 1: Componentenvereiste:
- Stap 2: Download Gui
- Stap 3: Aansluiting
- Stap 4: Firmware uploaden en het coderesultaat controleren in Arduino Dashboard
- Stap 5: Ontwerp en print alle onderdelen in multiplexplaat
- Stap 6: Montage
- Stap 7: GBRL-instellingen instellen
- Stap 8: Upload de definitieve code en controleer het virtuele resultaat in Arduino Uno Software Dashboard
Video: Arduino Base Pick and Place Robot - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
Ik heb een supergoedkope (minder dan 1000 dollar) industriële robotarm gemaakt om studenten in staat te stellen grootschaligere robotica te hacken en om kleine lokale producties in staat te stellen robots in hun processen te gebruiken zonder de bank te breken. Het is gemakkelijk te bouwen en de leeftijdsgroep mensen van 15 tot 50 jaar te maken.
Stap 1: Componentenvereiste:
1. Arduino+ schild + pinnen + kabels
2. Motorcontroller: dm860A (Ebay)
3. Stappenmotor: 34hs5435c-37b2 (Ebay)
4. M8x45+60+70 bouten en M8 bouten.
5. 12 mm multiplex.
6. 5 mm nylon.
7. Blindringen 8mm.
8. Houtschroeven 4.5x40mm.
9. M3 Verzonken, 10. 12v voeding
11. servomotorbestuurder arduino
Stap 2: Download Gui
zapmaker.org/projects/grbl-controller-3-0/
github.com/grbl/grbl/wiki/Using-Grbl
Stap 3: Aansluiting
Sluit de draden aan die in de afbeelding worden gegeven, is meer begrip voor u.
we moeten de motordriver aansluiten op Arduino en andere connectoren die vereist zijn volgens uw robot.
Stap 4: Firmware uploaden en het coderesultaat controleren in Arduino Dashboard
De firmware installeren op Arduino - GRBL:
github.com/grbl/grbl/wiki/Compiling-Grbl
Opmerking: u kunt een conflict krijgen bij het compileren in Arduino. Verwijder alle andere bibliotheken uit uw bibliotheekmap (../documents/Arduino/libraries).
Firmware instellen
Stel inschakelen in op nieuwere time-out. Gebruik een seriële verbinding en schrijf:
$1=255
homing instellen:
$22=1
Vergeet niet om serieel in te stellen op baud: 115200
Handige G-codes
Stel nulpunt in voor robot:
G10 L2 Xnnn Ynnn Znnn
Gebruik nulpunt:
G54
Typische initialisatie om de robot te centreren:
G10 L2 X1.5 Y1.2 Z1.1
G54
Beweeg robot snel naar positie:
G0 Xnnn Ynnn Znnn
Voorbeeld:
G0 X10.0 Y3.1 Z4.2 (retour)
Beweeg de robot met een bepaalde snelheid naar de positie:
G1 Xnnn Ynnn Znnn Fnnn
G1 X11 Y3 Z4 F300 (retour)
F moet tussen 10 (slooooow) en 600 (snel) zijn
Standaardeenheden voor X, Y en Z
Bij gebruik van standaard stappen/eenheden (250 stappen/eenheid) voor GRBL en
stepper drive ingesteld voor 800 step/rev de volgende eenheden gelden voor alle assen:
+- 32 eenheden = +- 180 graden
Voorbeeld van verwerkingscode:
Deze code kan direct communiceren met de Arduino GRBL.
github.com/damellis/gctrl
Vergeet niet om serieel in te stellen op baud: 115200
Code uoload in ardunio
import java.awt.event. KeyEvent;
javax.swing. JOptionPane importeren;
importverwerking.serienummer.*;
Seriële poort = null;
// selecteer en wijzig de juiste regel voor uw besturingssysteem
// laat staan als null om interactieve poort te gebruiken (druk op 'p' in het programma)
String poortnaam = null;
//String poortnaam = Serial.list()[0]; // Mac OS X
//String poortnaam = "/dev/ttyUSB0"; // Linux
//String poortnaam = "COM6"; // Ramen
booleaanse streaming = false;
vlottersnelheid = 0,001;
String gcode;
int ik = 0;
ongeldig openSerialPort()
{
if (poortnaam == null) return;
if (poort != null) poort.stop();
poort = nieuw serieel (dit, poortnaam, 115200);
poort.bufferTot('\n');
}
ongeldig selectSerialPort()
{
String resultaat = (String) JOptionPane.showInputDialog(this, "Selecteer de seriële poort die overeenkomt met uw Arduino-bord.", "Selecteer seriële poort", JOptionPane. PLAIN_MESSAGE, nul, Seriële.lijst(), 0);
if (resultaat != null) {
poortnaam = resultaat;
openSerialPort();
}
}
ongeldige setup()
{
maat (500, 250);
openSerialPort();
}
nietig tekenen()
{
achtergrond(0);
vullen (255);
int y = 24, dy = 12;
text("INSTRUCTIES", 12, y); y += dy;
text("p: selecteer seriële poort", 12, y); y += dy;
text("1: zet snelheid op 0,001 inch (1 mil) per jog", 12, y); y += dy;
text("2: zet snelheid op 0,010 inch (10 mil) per jog", 12, y); y += dy;
text("3: zet snelheid op 0,100 inch (100 mil) per jog", 12, y); y += dy;
text("pijltjestoetsen: jog in xy-vlak", 12, y); y += dy;
text("pagina omhoog & pagina omlaag: jog in z-as", 12, y); y += dy;
text("$: grbl-instellingen weergeven", 12, y); y+= dy;
text("h: ga naar huis", 12, y); y += dy;
text("0: zero machine (zet thuis op de huidige locatie)", 12, y); y += dy;
text("g: stream een g-code bestand", 12, y); y += dy;
text("x: stop met streamen van g-code (dit is NIET onmiddellijk)", 12, y); y += dy;
y = hoogte - dy;
text("huidige jogsnelheid: " + snelheid + " inches per stap", 12, y); y -= dy;
text("huidige seriële poort: " + poortnaam, 12, y); y -= dy;
}
void-toets ingedrukt()
{
if (toets == '1') snelheid = 0,001;
if (toets == '2') snelheid = 0,01;
if (toets == '3') snelheid = 0,1;
if (!streaming) {
if (keyCode == LEFT) port.write("G91\nG20\nG00 X-" + snelheid + " Y0.000 Z0.000\n");
if (keyCode == RECHTS) port.write("G91\nG20\nG00 X" + snelheid + " Y0.000 Z0.000\n");
if (keyCode == UP) port.write("G91\nG20\nG00 X0.000 Y" + snelheid + " Z0.000\n");
if (keyCode == DOWN) port.write("G91\nG20\nG00 X0.000 Y-" + snelheid + " Z0.000\n");
if (keyCode == KeyEvent. VK_PAGE_UP) port.write("G91\nG20\nG00 X0.000 Y0.000 Z" + snelheid + "\n");
if (keyCode == KeyEvent. VK_PAGE_DOWN) port.write("G91\nG20\nG00 X0.000 Y0.000 Z-" + snelheid + "\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 (sleutel == '0') openSerialPort();
if (key == 'p') selectSerialPort();
if (key == '$') port.write("$$\n");
if (key == 'h') port.write("$H\n");
}
if (!streaming && toets == 'g') {
gcode = nul; ik = 0;
Bestandsbestand = null;
println("Bestand wordt geladen…");
selectInput("Selecteer een bestand om te verwerken:", "fileSelected", bestand);
}
if (key == 'x') streaming = false;
}
void fileSelected (Bestandsselectie) {
if (selectie == null) {
println("Venster is gesloten of de gebruiker heeft op annuleren gedrukt.");
} anders {
println("Geselecteerde gebruiker" + selection.getAbsolutePath());
gcode = loadStrings(selection.getAbsolutePath());
if (gcode == null) terugkeer;
streamen = waar;
stroom();
}
}
ongeldige stroom()
{
als (!streaming) terugkeer;
terwijl (waar) {
if (i == gcode.length) {
streamen = onwaar;
opbrengst;
}
if (gcode.trim().length() == 0) i++;
anders breken;
}
println(gcode);
port.write(gcode + '\n');
i++;
}
void serialEvent (Seriële p)
{
String s = p.readStringUntil('\n');
println(s.trim());
if (s.trim().startsWith("ok")) stream();
if (s.trim().startsWith("fout")) stream(); // XXX: echt?
}
Stap 5: Ontwerp en print alle onderdelen in multiplexplaat
Download het robotgedeelte en ontwerp in AutoCAD en print het op de 12 mm multiplexplaat en het afwerkings- en ontwerpgedeelte. Als iemand een CAD-bestand nodig heeft, laat dan de opmerking achter in het opmerkingenveld, ik zal je direct verzenden.
Stap 6: Montage
verzamel alle onderdelen en rangschik ze in de volgorde op de afbeelding die wordt gegeven en volg het afbeeldingsdiagram.
Stap 7: GBRL-instellingen instellen
Instelling die bewezen heeft te werken op onze robots.
$0=10 (step pulse, usec) $1=255 (step idle delay, msec) $2=7 (step port invert mask:000000111) $3=7 (dir port invert mask:000000111) $4=0 (step enable invert, bool) $5=0 (limiet pinnen invert, bool) $6=1 (probe pin invert, bool) $10=3 (statusrapport masker:00000011) $11=0,020 (junctie afwijking, mm) $12=0,002 (boogtolerantie, mm) $13 =0 (rapport inches, bool) $20=0 (zachte limieten, bool) $21=0 (harde limieten, bool) $22=1 (homing cycle, 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, msec) $27=1.000 (homing pull-off, mm) $100=250.000 (x, stap/mm) $101= 250.000 (y, stap/mm) $102=250.000 (z, stap/mm) $110=500.000 (x max snelheid, mm/min) $111=500.000 (y max snelheid, mm/min) $112=500.000 (z max snelheid, mm/min) $120=10.000 (x versnelling, mm/sec^2) $121=10.000 (y versnelling, mm/sec^2) $122=10.000 (z versnelling, mm/sec^2) $130=200.000 (x max. verplaatsing, mm) $131=200.000 (y max. slag, mm) $132=200.000 (z max. slag, mm)
Stap 8: Upload de definitieve code en controleer het virtuele resultaat in Arduino Uno Software Dashboard
// Eenheden: CM
zweven b_height = 0;
vlotter a1 = 92;
vlotter a2 = 86;
float snude_len = 20;
booleaans doZ = onwaar;
float base_angle;// = 0;
vlotterarm1_hoek; // = 0;
vlotterarm2_hoek; //= 0;
vlotter bx = 60;// = 25;
zweven met = 60;// = 0;
zweven bz = 60;// = 25;
zweven x = 60;
zweven y = 60;
zweven z = 60;
vlotter q;
zweven c;
vlotter V1;
vlotter V2;
vlotter V3;
vlotter V4;
vlotter V5;
ongeldige setup() {
grootte (700, 700, P3D);
cam = nieuwe PeasyCam (dit, 300);
cam.setMinimumDistance(50);
nok.setMaximumAfstand(500);
}
nietig tekenen() {
//ligger:
y = (muisX - breedte/2)*(-1);
x = (muisY - hoogte/2)*(-1);
bz = z;
door = 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_hoek = q;
V4 = radialen (90.0) - q;
V5 = radialen (180) - V4 - radialen (90);
arm2_angle = radialen (180.0) - (V5 + V1);
base_angle = graden(atan2(bx, by));
arm1_hoek=graden(arm1_hoek);
arm2_angle=graden(arm2_angle);
//println(door, bz);
//arm1_hoek = 90;
//arm2_hoek = 45;
/*
arm2_hoek = 23;
arm1_hoek = 23;
arm2_hoek=23;
*/
// interactief:
// als (doZ)
//
// {
// base_angle = base_angle+ mouseX-pmouseX;
// } anders
// {
// 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)
{
roterenX(1.2);
roterenZ(-1.2);
achtergrond(0);
lichten();
pushMatrix();
// BASIS
vullen (150, 150, 150);
box_corner(50, 50, b_height, 0);
roteren (radialen (basishoek), 0, 0, 1);
// ARM 1
vullen (150, 0, 150);
box_corner (10, 10, a1, arm1_angle);
// ARM 2
vullen (255, 0, 0);
box_corner (10, 10, a2, arm2_angle);
// SNUDE
vul (255, 150, 0);
box_corner (10, 10, snude_len, -arm1_angle-arm2_angle+90);
popMatrix();
pushMatrix();
float action_box_size=100;
vertalen(0, -action_box_size/2, action_box_size/2+b_height);
pushMatrix();
vertalen (x, action_box_size- y-action_box_size/2, z-action_box_size/2);
vullen (255, 255, 0);
doos(20);
popMatrix();
vullen (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 roteren)
{
roteren (radialen (roteren), 1, 0, 0);
vertalen (0, 0, d/2);
doos (b, h, d);
vertalen (0, 0, d/2);
}
void-toets ingedrukt()
{
if (toets == 'z')
{
doZ = !doZ;
}
if (toets == 'h')
{
// zet alles op nul
arm2_hoek = 0;
arm1_hoek = 90;
basishoek = 0;
}
if (toets == 'g')
{
println(graden(V1));
println(graden(V5));
}
if (keyCode == OMHOOG)
{
z++;
}
if (keyCode == OMLAAG)
{
z --;
}
if (toets == 'o')
{
y = 50;
z = 50;
println(q);
println(c, "c");
println(V1, "V1");
println(V2);
println(V3);
println(arm1_hoek);
println(V4);
println(V5);
println(arm2_hoek);
}
}
Aanbevolen:
Fire, Music and Lights Sync: 10 stappen (met afbeeldingen)
Synchronisatie van vuur, muziek en licht: we weten allemaal dat elektronica wordt gebruikt voor veel belangrijke taken in ziekenhuizen, scholen en fabrieken. Waarom zou ik er ook niet een beetje plezier mee hebben? In deze Instructable maak ik uitbarstingen van vuur en lichten (Led's) die op muziek reageren om muziek een beetje
Een plug-and-play-satellietradio repareren: 6 stappen
Een plug-and-play-satellietradio repareren: Voordat u begint, moet u de beste locatie bepalen om de satellietradio op uw dashboard of kolom te monteren, en u hebt een socketstuurprogramma nodig, schroevendraaier en draadknippers
UCL - Embedded - Pick and Place: 4 stappen
UCL - Embedded - Pick and Place: deze instructable gaat over hoe een 2D pick-and-place-eenheid wordt gemaakt en hoe deze te coderen
[Arduino Robot] Hoe maak je een Motion Capture-robot - Duimen Robot - Servomotor - Broncode: 26 stappen (met afbeeldingen)
[Arduino Robot] Hoe maak je een Motion Capture-robot | Duimen Robot | Servomotor | Broncode: Thumbs Robot. Gebruikt een potentiometer van MG90S servomotor. Het is erg leuk en makkelijk! De code is heel eenvoudig. Het is slechts ongeveer 30 lijnen. Het ziet eruit als een motion-capture.Laat een vraag of feedback achter! [Instructie] Broncode https://github.c
Een Instructables Show and Tell hosten: 8 stappen
Een Instructables Show and Tell hosten: Dit is een handleiding voor het uitvoeren van een Instructables Show and Tell. Het is voornamelijk gebaseerd op een evenement dat op vrijdag 9 maart 2007 in Instructables wordt gehouden, maar ook op de vorige incarnatie van dit evenement, de Squid Labs Light Salons. Het doel van een Show en Tel