![Arduino Base Pick and Place -robot: 8 stappe Arduino Base Pick and Place -robot: 8 stappe](https://i.howwhatproduce.com/images/011/image-30154-j.webp)
INHOUDSOPGAWE:
- Stap 1: Vereiste komponente
- Stap 2: Laai Gui af
- Stap 3: verbinding
- Stap 4: Laai firmware op en kyk na die resultaat van die kode in die Arduino -dashboard
- Stap 5: Ontwerp en druk alle dele in laaghoutblad
- Stap 6: Montering
- Stap 7: Stel GBRL -instellings op
- Stap 8: Laai die finale kode op en kyk na die virtuele resultaat in die Arduino Uno Software Dashboard
2025 Outeur: John Day | [email protected]. Laas verander: 2025-01-23 12:53
![Arduino Base Pick and Place -robot Arduino Base Pick and Place -robot](https://i.howwhatproduce.com/images/011/image-30154-1-j.webp)
![Arduino Base Pick and Place -robot Arduino Base Pick and Place -robot](https://i.howwhatproduce.com/images/011/image-30154-2-j.webp)
![Arduino Base Pick and Place -robot Arduino Base Pick and Place -robot](https://i.howwhatproduce.com/images/011/image-30154-3-j.webp)
Ek het 'n baie goedkoop (minder as 1000 dollar) industriële robotarm gemaak om studente in staat te stel om robotika op groot skaal te hack en klein plaaslike produksies in staat te stel om robotte in hul prosesse te gebruik sonder om die bank te breek. Dit is maklik om die ouderdomsgroep van 15 tot 50 jaar te bou en te maak.
Stap 1: Vereiste komponente
![Vereiste komponente Vereiste komponente](https://i.howwhatproduce.com/images/011/image-30154-4-j.webp)
![Vereiste komponente Vereiste komponente](https://i.howwhatproduce.com/images/011/image-30154-5-j.webp)
![Vereiste komponente Vereiste komponente](https://i.howwhatproduce.com/images/011/image-30154-6-j.webp)
![Vereiste komponente Vereiste komponente](https://i.howwhatproduce.com/images/011/image-30154-7-j.webp)
1. Arduino + skild + penne + kabels
2. Motorbeheerder: dm860A (Ebay)
3. Stapmotor: 34hs5435c-37b2 (Ebay)
4. M8x45+60+70 boute en M8 boute.
5. 12mm laaghout.
6. 5 mm nylon.
7. Blindwassers 8mm.
8. Houtskroewe 4,5x40mm.
9. M3 toonbank gesink, 10. 12v kragtoevoer
11. servomotorbestuurder arduino
Stap 2: Laai Gui af
zapmaker.org/projects/grbl-controller-3-0/
github.com/grbl/grbl/wiki/Using-Grbl
Stap 3: verbinding
![Verbinding Verbinding](https://i.howwhatproduce.com/images/011/image-30154-8-j.webp)
![Verbinding Verbinding](https://i.howwhatproduce.com/images/011/image-30154-9-j.webp)
![Verbinding Verbinding](https://i.howwhatproduce.com/images/011/image-30154-10-j.webp)
Verbind die drade wat in die prentjie gegee word, vir u 'n groter begrip.
ons moet die motorbestuurder koppel aan Arduino en ander verbindings wat volgens u robot benodig word.
Stap 4: Laai firmware op en kyk na die resultaat van die kode in die Arduino -dashboard
Die installering van die firmware op Arduino - GRBL:
github.com/grbl/grbl/wiki/Compiling-Grbl
Opmerking: u kan 'n konflik ondervind tydens die opstel in Arduino. Verwyder alle ander biblioteke uit u biblioteekmap (../documents/Arduino/libraries).
Opstelling van firmware
Stel aktiveer in op nuwer tydsduur. Gebruik 'n seriële verbinding en skryf:
$1=255
Stel huisvesting:
$22=1
Onthou om die reeks op baud in te stel: 115200
Nuttige G-kodes
Stel nulpunt vir robot:
G10 L2 Xnnn Ynnn Znnn
Gebruik nulpunt:
G54
Tipiese inisialisering om robot te sentreer:
G10 L2 X1.5 Y1.2 Z1.1
G54
Beweeg robot vinnig na posisie:
G0 Xnnn Ynnn Znnn
Voorbeeld:
G0 X10.0 Y3.1 Z4.2 (terugkeer)
Beweeg die robot na 'n spesifieke posisie:
G1 Xnnn Ynnn Znnn Fnnn
G1 X11 Y3 Z4 F300 (terug)
F moet tussen 10 (slooooow) en 600 (vinnig) wees
Standaard eenhede vir X, Y en Z
By die gebruik van standaard stap/eenhede -instellings (250 stap/eenheid) vir GRBL en
stepper drive ingestel vir 800 step/rev die volgende eenhede geld vir alle as:
+- 32 eenhede = +- 180 grade
Verwerkingskode voorbeeld:
Hierdie kode kan direk met die Arduino GRBL kommunikeer.
github.com/damellis/gctrl
Onthou om die reeks op baud in te stel: 115200
Kode uoload in ardunio
invoer java.awt.event. KeyEvent;
voer javax.swing. JOptionPane in;
invoerverwerking.reeks.*;
Seriële poort = nul;
// kies en pas die toepaslike reël vir u bedryfstelsel aan
// laat dit as null om die interaktiewe poort te gebruik (druk 'p' in die program)
Stringpoortnaam = nul;
// Stringpoortnaam = Serial.list () [0]; // Mac OS X
// Stringpoortnaam = "/dev/ttyUSB0"; // Linux
// Stringpoortnaam = "COM6"; // Windows
boolese streaming = vals;
vlot spoed = 0.001;
String gcode;
int i = 0;
leegte openSerialPort ()
{
as (poortnaam == nul) terugkeer;
as (poort! = nul) poort.stop ();
poort = nuwe reeks (hierdie, poortnaam, 115200);
port.bufferUntil ('\ n');
}
void selectSerialPort ()
{
String resultaat = (String) JOptionPane.showInputDialog (hierdie, "Kies die seriële poort wat ooreenstem met u Arduino -bord.", "Kies seriële poort", JOptionPane. PLAIN_MESSAGE, nul, Serial.list (), 0);
as (resultaat! = nul) {
poortnaam = resultaat;
openSerialPort ();
}
}
leemte opstelling ()
{
grootte (500, 250);
openSerialPort ();
}
leemte trek ()
{
agtergrond (0);
vul (255);
int y = 24, dy = 12;
teks ("INSTRUKSIES", 12, y); y += dy;
teks ("p: kies seriële poort", 12, y); y += dy;
teks ("1: stel die spoed in op 0,001 duim (1 mil) per draf", 12, y); y += dy;
teks ("2: stel die spoed in op 1010 duim per draf", 12, y); y += dy;
teks ("3: stel die spoed in op 10000 mm per draf", 12, y); y += dy;
teks ("pyltjie sleutels: draf in x-y vlak", 12, y); y += dy;
teks ("bladsy op en bladsy af: draf in z -as", 12, y); y += dy;
teks ("$: display grbl settings", 12, y); y+= dy;
teks ("h: gaan huis toe", 12, y); y += dy;
text ("0: zero -masjien (stel die huidige ligging tuis)", 12, y); y += dy;
text ("g: stroom 'n g-kode lêer", 12, y); y += dy;
teks ("x: stop streaming g-kode (dit is NIE onmiddellik nie)", 12, y); y += dy;
y = hoogte - dy;
teks ("huidige draaisnelheid:" + spoed + "duim per stap", 12, y); y -= dy;
teks ("huidige seriële poort:" + poortnaam, 12, y); y -= dy;
}
void keyPressed ()
{
as (sleutel == '1') spoed = 0.001;
as (sleutel == '2') spoed = 0,01;
as (sleutel == '3') spoed = 0,1;
as (! streaming) {
as (keyCode == LEFT) port.write ("G91 / nG20 / nG00 X-" + spoed + "Y0.000 Z0.000 / n");
as (sleutelKode == REGS) port.write ("G91 / nG20 / nG00 X" + spoed + "Y0.000 Z0.000 / n");
as (sleutelKode == UP) port.write ("G91 / nG20 / nG00 X0.000 Y" + spoed + "Z0.000 / n");
as (keyCode == DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y-" + spoed + "Z0.000 / n");
as (keyCode == KeyEvent. VK_PAGE_UP) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z" + spoed + "\ n");
as (keyCode == KeyEvent. VK_PAGE_DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z-" + spoed + "\ n");
// as (sleutel == 'h') port.write ("G90 / nG20 / nG00 X0.000 Y0.000 Z0.000 / n");
if (sleutel == 'v') port.write ("$ 0 = 75 / n $ 1 = 74 / n $ 2 = 75 / n");
// as (sleutel == 'v') port.write ("$ 0 = 100 / n $ 1 = 74 / n $ 2 = 75 / n");
if (sleutel == 's') port.write ("$ 3 = 10 / n");
if (sleutel == 'e') port.write ("$ 16 = 1 / n");
as (sleutel == 'd') port.write ("$ 16 = 0 / n");
if (sleutel == '0') openSerialPort ();
as (sleutel == 'p') selectSerialPort ();
as (sleutel == '$') port.write ("$$ / n");
if (sleutel == 'h') port.write ("$ H / n");
}
as (! streaming && key == 'g') {
gcode = nul; ek = 0;
Lêer lêer = null;
println ("Laai lêer…");
selectInput ("Kies 'n lêer om te verwerk:", "fileSelected", lêer);
}
as (sleutel == 'x') streaming = vals;
}
void fileSelected (File selection) {
if (selection == null) {
println ("Venster is gesluit of die gebruiker druk op kanselleer.");
} anders {
println ("Gebruiker gekies" + selection.getAbsolutePath ());
gcode = loadStrings (selection.getAbsolutePath ());
as (gcode == null) terugkeer;
streaming = waar;
stroom ();
}
}
leemte stroom ()
{
as (! streaming) terugkeer;
terwyl (waar) {
as (i == gcode.length) {
streaming = vals;
terugkeer;
}
as (gcode .trim (). length () == 0) i ++;
anders breek;
}
println (gcode );
port.write (gcode + '\ n');
ek ++;
}
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: regtig?
}
Stap 5: Ontwerp en druk alle dele in laaghoutblad
![Ontwerp en druk alle dele in laaghoutblad Ontwerp en druk alle dele in laaghoutblad](https://i.howwhatproduce.com/images/011/image-30154-11-j.webp)
Laai die robotdeel en ontwerp af in AutoCAD en druk die op die 12 mm laaghoutblad af en maak die gedeelte af en ontwerp. As iemand 'n cad -lêer nodig het, laat die kommentaar in die kommentaarblokkie, ek stuur dit direk.
Stap 6: Montering
![Vergadering Vergadering](https://i.howwhatproduce.com/images/011/image-30154-12-j.webp)
![Vergadering Vergadering](https://i.howwhatproduce.com/images/011/image-30154-13-j.webp)
versamel al die dele en rangskik in die volgorde op die prentjie wat gegee word en volg die beelddiagram.
Stap 7: Stel GBRL -instellings op
Omgewing wat bewys het dat dit op ons robotte werk.
$ 0 = 10 (stappuls, usec) $ 1 = 255 (vertraagde stap, msek) $ 2 = 7 (stap -poort -omkeringsmasker: 00000111) $ 3 = 7 (masker omdraai na poort omkeer: 00000111) $ 4 = 0 (stap aktiveer omkeer, bool) $ 5 = 0 (grenspenne omkeer, bool) $ 6 = 1 (sondepen omkeer, bool) $ 10 = 3 (statusverslagmasker: 00000011) $ 11 = 0.020 (kruisafwyking, mm) $ 12 = 0.002 (boogtoleransie, mm) $ 13 = 0 (rapporteer duim, bool) $ 20 = 0 (sagte perke, bool) $ 21 = 0 (harde perke, bool) $ 22 = 1 (homing cycle, bool) $ 23 = 0 (homing dir invert mask: 00000000) $ 24 = 100.000 (huisvoeding, mm/min) $ 25 = 500.000 (soek vir huise, 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 maksimum koers, mm/min) $ 111 = 500.000 (y maksimum koers, mm/min) $ 112 = 500.000 (z maksimum koers, 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 maksimum reis, mm) $ 131 = 200.000 (y maksimum reis, mm) $ 132 = 200.000 (z maksimum reis, mm)
Stap 8: Laai die finale kode op en kyk na die virtuele resultaat in die Arduino Uno Software Dashboard
// Eenhede: CM
float b_hoogte = 0;
dryf a1 = 92;
dryf a2 = 86;
float snude_len = 20;
booleaanse doZ = vals;
float base_angle; // = 0;
float arm1_angle; // = 0;
float arm2_angle; // = 0;
float bx = 60; // = 25;
dryf deur = 60; // = 0;
float bz = 60; // = 25;
dryf x = 60;
dryf y = 60;
vlot z = 60;
dryf q;
dryf c;
vlot V1;
vlot V2;
vlot V3;
vlot V4;
vlot V5;
ongeldige opstelling () {
grootte (700, 700, P3D);
cam = nuwe PeasyCam (hierdie, 300);
cam.setMinimumDistance (50);
cam.setMaximumDistance (500);
}
nietige trekking () {
// ligninger:
y = (mouseX - breedte/2)*(- 1);
x = (muis Y - hoogte/2)*(- 1);
bz = z;
deur = 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 = radiale (90.0) - q;
V5 = radiale (180) - V4 - radiale (90);
arm2_angle = radiale (180.0) - (V5 + V1);
base_angle = grade (atan2 (bx, by));
arm1_hoek = grade (arm1_hoek);
arm2_hoek = grade (arm2_hoek);
// println (deur, bz);
// arm1_hoek = 90;
// arm2_hoek = 45;
/*
arm2_hoek = 23;
arm1_hoek = 23;
arm2_hoek = 23;
*/
// interaktief:
// as (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)
{
rotateX (1.2);
draai Z (-1,2);
agtergrond (0);
ligte ();
pushMatrix ();
// BASIS
vul (150, 150, 150);
box_corner (50, 50, b_hoogte, 0);
draai (radiale (basis_hoek), 0, 0, 1);
// ARM 1
vul (150, 0, 150);
box_corner (10, 10, a1, arm1_angle);
// ARM 2
fill (255, 0, 0);
box_corner (10, 10, a2, arm2_angle);
// SNUDE
fill (255, 150, 0);
box_corner (10, 10, snude_len, -arm1_angle -arm2_angle+90);
popMatrix ();
pushMatrix ();
float action_box_size = 100;
vertaal (0, -action_box_size/2, action_box_size/2+b_hoogte);
pushMatrix ();
vertaal (x, action_box_size- y-action_box_size/2, z-action_box_size/2);
fill (255, 255, 0);
boks (20);
popMatrix ();
vul (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)
{
draai (radiale (draai), 1, 0, 0);
vertaal (0, 0, d/2);
boks (w, h, d);
vertaal (0, 0, d/2);
}
void keyPressed ()
{
as (sleutel == 'z')
{
doZ =! doZ;
}
as (sleutel == 'h')
{
// stel alles op nul
arm2_hoek = 0;
arm1_hoek = 90;
basishoek = 0;
}
as (sleutel == 'g')
{
println (grade (V1));
println (grade (V5));
}
as (sleutelKode == UP)
{
z ++;
}
as (keyCode == DOWN)
{
Z --;
}
as (sleutel == '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);
}
}
Aanbeveel:
Print-in-Place Robotic Gripper: 4 stappe (met foto's)
![Print-in-Place Robotic Gripper: 4 stappe (met foto's) Print-in-Place Robotic Gripper: 4 stappe (met foto's)](https://i.howwhatproduce.com/images/011/image-30632-j.webp)
Print-in-Place Robotic Gripper: Robotics is 'n fassinerende veld, en ons is gelukkig om in 'n tyd te leef waarin die DIY robotika-gemeenskap wonderlike werk en projekte lewer. Alhoewel baie van hierdie projekte verstommend gevorderd en innoverend is, het ek probeer om robotte te maak
DIY "PC Usage Meter ROG Base" met behulp van Arduino en Python: 5 stappe (met foto's)
![DIY "PC Usage Meter ROG Base" met behulp van Arduino en Python: 5 stappe (met foto's) DIY "PC Usage Meter ROG Base" met behulp van Arduino en Python: 5 stappe (met foto's)](https://i.howwhatproduce.com/images/004/image-10786-6-j.webp)
DIY "PC Usage Meter ROG Base" met behulp van Arduino en Python: ************************************* +In die eerste plek is hierdie instruksies geskryf deur 'n nie -moedertaalspreker …… nie 'n Engelse professor nie, so stel 'n grammatikale fout in kennis voordat u my spot .:p +En moenie navolg nie
Roll and Pitch Axis Gimbal for GoPro Using Arduino - Servo and MPU6050 Gyro: 4 Stappe
![Roll and Pitch Axis Gimbal for GoPro Using Arduino - Servo and MPU6050 Gyro: 4 Stappe Roll and Pitch Axis Gimbal for GoPro Using Arduino - Servo and MPU6050 Gyro: 4 Stappe](https://i.howwhatproduce.com/images/001/image-740-69-j.webp)
Roll and Pitch Axis Gimbal vir GoPro met behulp van Arduino - Servo en MPU6050 Gyro: Hierdie instruksies is geskep ter vervulling van die projekvereiste van die Makecourse aan die Universiteit van Suid -Florida (www.makecourse.com) Die doel van hierdie projek was om 'n 3-as Gimbal vir GoPro met behulp van Arduino nano + 3 servomotore +
Mini Baffle Sur Base De Haut-parleurs De Télévision: 6 stappe
![Mini Baffle Sur Base De Haut-parleurs De Télévision: 6 stappe Mini Baffle Sur Base De Haut-parleurs De Télévision: 6 stappe](https://i.howwhatproduce.com/images/002/image-5070-50-j.webp)
Mini Baffle Sur Base De Haut-parleurs De Télévision: Ayant récupéré des haut-parleurs d'une vieille télé, j'ai décidé d'en faire des baffles pour une petite chaîne hi-fi. U kan nie kommentaar lewer op hierdie proses nie, maar dit is ook 'n eenvoudige en 'n goeie manier om 'n goeie toestand te gee
Led Electric Pick -up Mod *** opgedateer met 'n skema vir blinkende LED's en video !: 8 stappe
![Led Electric Pick -up Mod *** opgedateer met 'n skema vir blinkende LED's en video !: 8 stappe Led Electric Pick -up Mod *** opgedateer met 'n skema vir blinkende LED's en video !: 8 stappe](https://i.howwhatproduce.com/preview/how-and-what-to-produce/10968202-led-electric-guitar-pickup-mod-updated-with-schematic-for-blinking-leds-and-video-8-steps-j.webp)
Led Electric Pick -up Mod *** opgedateer met 'n skema vir knipperende LED's en video !: Wil jy ooit hê dat jou kitaar uniek moet wees? Of 'n kitaar wat almal jaloers daarop gemaak het? Of is u net moeg vir die gewone ou voorkoms van u kitaar en wil u dit versier? Wel, in hierdie baie eenvoudige Ible sal ek jou wys hoe jy die bakkies op jou kan verlig