Talaan ng mga Nilalaman:
- Hakbang 1: Kinakailangan ng Mga Bahagi
- Hakbang 2: I-download ang Gui
- Hakbang 3: Koneksyon
- Hakbang 4: Mag-upload ng Firmware at Suriin ang Resulta ng Code sa Arduino Dashboard
- Hakbang 5: Idisenyo at I-print ang Lahat ng Bahagi sa Plywood Sheet
- Hakbang 6: Assembly
- Hakbang 7: I-set up ang Mga Setting ng GBRL
- Hakbang 8: I-upload ang Final Code at Suriin ang Virtual na Resulta sa Arduino Uno Software Dashboard
Video: Arduino Base Pick and Place Robot: 8 Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:12
Gumawa ako ng napakurang (mas mababa sa 1000 dolyar) na pang-industriya na braso ng robot upang paganahin ang mga mag-aaral na mag-hack ng mas malaking scale na robot at upang paganahin ang maliliit na lokal na produksyon na gumamit ng mga robot sa kanilang mga proseso nang hindi sinisira ang bangko. Napakadaling itayo at gawin ang mga taong pangkat ng edad na 15 hanggang 50 taon.
Hakbang 1: Kinakailangan ng Mga Bahagi
1. Arduino + Shield + Pins + Cables
2. Motorcontroller: dm860A (Ebay)
3. Steppermotor: 34hs5435c-37b2 (Ebay)
4. M8x45 + 60 + 70 bolts at M8 bolts.
5. 12mm Plywood.
6. 5mm Nylon.
7. Mga blind washer na 8mm.
8. Mga Wood Screw na 4.5x40mm.
9. M3 Counter lumubog, 10. 12v power supply
11. servo motor driver arduino
Hakbang 2: I-download ang Gui
zapmaker.org/projects/grbl-controller-3-0/
github.com/grbl/grbl/wiki/Using-Grbl
Hakbang 3: Koneksyon
Ikonekta ang mga wire na ibinibigay sa imahe ay higit na nauunawaan para sa iyo.
kailangan naming ikonekta ang driver ng motor sa Arduino at iba pang mga konektor na kinakailangan ayon sa iyong robot.
Hakbang 4: Mag-upload ng Firmware at Suriin ang Resulta ng Code sa Arduino Dashboard
Pag-install ng firmware sa Arduino - GRBL:
github.com/grbl/grbl/wiki/Compiling-Grbl
Tandaan: Maaari kang makakuha ng isang salungatan kapag nag-iipon ng Arduino. Alisin ang lahat ng iba pang mga aklatan mula sa iyong folder ng library (../documents/Arduino/libraries).
Pag-setup ng firmware
Itakda ang paganahin sa mas bagong pag-timeout. Gumamit ng isang serial connection at isulat:
$1=255
Itakda ang homing:
$22=1
Tandaan na magtakda ng serial sa baud: 115200
Mga kapaki-pakinabang na G-code
Itakda ang zero point para sa robot:
G10 L2 Xnnn Ynnn Znnn
Gumamit ng zero point:
G54
Karaniwang pagpapasimula sa sentro ng robot:
G10 L2 X1.5 Y1.2 Z1.1
G54
Mabilis na ilipat ang robot:
G0 Xnnn Ynnn Znnn
Halimbawa:
G0 X10.0 Y3.1 Z4.2 (bumalik)
Ilipat ang robot sa posisyon sa tukoy na bilis:
G1 Xnnn Ynnn Znnn Fnnn
G1 X11 Y3 Z4 F300 (bumalik)
Ang F ay dapat nasa pagitan ng 10 (slooooow) at 600 (mabilis)
Mga default na yunit para sa X, Y at Z
Kapag gumagamit ng mga setting ng default na hakbang / yunit (250 hakbang / yunit) para sa GRBL at
naka-set up ang stepper drive para sa 800 step / rev ang mga sumusunod na unit na nalalapat para sa lahat ng axis:
+ - 32 yunit = + - 180 degree
Halimbawa ng pagpoproseso ng code:
Ang code na ito ay maaaring direktang makipag-usap sa Arduino GRBL.
github.com/damellis/gctrl
Tandaan na magtakda ng serial sa baud: 115200
Code uoload sa ardunio
import java.awt.event. KeyEvent;
i-import ang javax.swing. JOptionPane;
pagproseso ng pag-import.serial. *;
Serial port = null;
// piliin at baguhin ang naaangkop na linya para sa iyong operating system
// iwan bilang null upang magamit ang interactive port (pindutin ang 'p' sa programa)
String portname = null;
// String portname = Serial.list () [0]; // Mac OS X
// String portname = "/ dev / ttyUSB0"; // Linux
// String portname = "COM6"; // Windows
boolean streaming = false;
bilis ng float = 0.001;
String gcode;
int i = 0;
walang bisa openSerialPort ()
{
kung (portname == null) bumalik;
kung (port! = null) port.stop ();
port = bagong Serial (ito, portname, 115200);
port.bufferUntil ('\ n');
}
walang bisa selectSerialPort ()
{
Resulta ng String = (String) JOptionPane.showInputDialog (ito, "Piliin ang serial port na tumutugma sa iyong Arduino board.", "Piliin ang serial port", JOptionPane. PLAIN_MESSAGE, wala, Serial.list (), 0);
kung (resulta! = null) {
portname = resulta;
openSerialPort ();
}
}
walang bisa ang pag-setup ()
{
laki (500, 250);
openSerialPort ();
}
walang bisa draw ()
{
background (0);
punan (255);
int y = 24, dy = 12;
teksto ("INSTRUCTIONS", 12, y); y + = dy;
teksto ("p: pumili ng serial port", 12, y); y + = dy;
teksto ("1: itakda ang bilis sa 0.001 pulgada (1 mil) bawat pag-jog", 12, y); y + = dy;
teksto ("2: itakda ang bilis sa 0.010 pulgada (10 mil) bawat pag-jog", 12, y); y + = dy;
teksto ("3: itakda ang bilis sa 0.100 pulgada (100 mil) bawat pag-jog", 12, y); y + = dy;
teksto ("mga arrow key: jog sa x-y eroplano", 12, y); y + = dy;
teksto ("pahina pataas at pahina pababa: mag-jog in z axis", 12, y); y + = dy;
teksto ("$: ipakita ang mga setting ng grbl", 12, y); y + = dy;
teksto ("h: umuwi", 12, y); y + = dy;
teksto ("0: zero machine (itakda ang tahanan sa kasalukuyang lokasyon)", 12, y); y + = dy;
teksto ("g: stream ng isang g-code file", 12, y); y + = dy;
teksto ("x: itigil ang streaming g-code (HINDI ito kaagad)", 12, y); y + = dy;
y = taas - dy;
teksto ("kasalukuyang bilis ng jogging:" + bilis + "pulgada bawat hakbang", 12, y); y - = dy;
teksto ("kasalukuyang serial port:" + portname, 12, y); y - = dy;
}
void keyPressed ()
{
kung (key == '1') bilis = 0.001;
kung (key == '2') bilis = 0.01;
kung (key == '3') bilis = 0.1;
kung (! streaming) {
kung (keyCode == LEFT) port.write ("G91 / nG20 / nG00 X-" + bilis + "Y0.000 Z0.000 / n");
kung (keyCode == TAMA) port.write ("G91 / nG20 / nG00 X" + bilis + "Y0.000 Z0.000 / n");
kung (keyCode == UP) port.write ("G91 / nG20 / nG00 X0.000 Y" + bilis + "Z0.000 / n");
kung (keyCode == Down) port.write ("G91 / nG20 / nG00 X0.000 Y-" + bilis + "Z0.000 / n");
kung (keyCode == KeyEvent. VK_PAGE_UP) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z" + bilis + "\ n");
kung (keyCode == KeyEvent. VK_PAGE_DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z-" + speed + "\ n");
// if (key == 'h') port.write ("G90 / nG20 / nG00 X0.000 Y0.000 Z0.000 / n");
kung (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");
kung (key == 's') port.write ("$ 3 = 10 / n");
kung (key == 'e') port.write ("$ 16 = 1 / n");
kung (key == 'd') port.write ("$ 16 = 0 / n");
kung (key == '0') openSerialPort ();
kung (key == 'p') selectSerialPort ();
kung (key == '$') port.write ("$$ / n");
kung (key == 'h') port.write ("$ H / n");
}
kung (! streaming && key == 'g') {
gcode = null; i = 0;
File file = null;
println ("Naglo-load ng file …");
selectInput ("Pumili ng isang file upang maproseso:", "fileSelected", file);
}
kung (key == 'x') streaming = false;
}
void fileSelected (Pagpili ng file) {
kung (pagpili == null) {
println ("Ang window ay sarado o ang pag-hit ng user na kinansela.");
} iba pa {
println ("Napili ng gumagamit" + select.getAbsolutePath ());
gcode = loadStrings (select.getAbsolutePath ());
kung (gcode == null) bumalik;
streaming = totoo;
stream ();
}
}
walang bisa stream ()
{
kung (! streaming) bumalik;
habang (totoo) {
kung (i == gcode.length) {
streaming = false;
bumalik;
}
kung (gcode .trim (). haba () == 0) i ++;
kung hindi man masira;
}
println (gcode );
port.write (gcode + '\ n');
ako ++;
}
walang bisa ang serialEvent (Serial p)
{
String s = p.readStringUntil ('\ n');
println (s.trim ());
kung (s.trim (). nagsisimulaWith ("ok")) stream ();
kung (s.trim (). nagsisimulaWith ("error")) stream (); // XXX: talaga
}
Hakbang 5: Idisenyo at I-print ang Lahat ng Bahagi sa Plywood Sheet
I-download ang bahagi ng robot at disenyo sa AutoCAD at i-print ang 12mm na sheet ng playwud at tapusin at bahagi ng disenyo. Kung may nangangailangan ng file ng cad plz iwanan ang puna sa seksyon ng komento na kahon ay 'magpapadala ako nang direkta.
Hakbang 6: Assembly
kolektahin ang lahat ng bahagi at ayusin ang pagkakasunud-sunod sa imahe na ibinigay at sundin ang diagram ng imahe.
Hakbang 7: I-set up ang Mga Setting ng GBRL
Ang setting na napatunayan na gagana sa aming mga robot.
$ 0 = 10 (step pulse, usec) $ 1 = 255 (step idle delay, msec) $ 2 = 7 (step port invert mask: 00000111) $ 3 = 7 (dir port invert mask: 00000111) $ 4 = 0 (step paganahin ang pag-invert, bool) $ 5 = 0 (limitahan ang mga baligtad, bool) $ 6 = 1 (probe pin invert, bool) $ 10 = 3 (status report mask: 00000011) $ 11 = 0.020 (junction deviation, mm) $ 12 = 0.002 (arc tolerance, mm) $ 13 = 0 (ulat pulgada, bool) $ 20 = 0 (malambot na mga limitasyon, bool) $ 21 = 0 (matapang na mga limitasyon, 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, step / mm) $ 101 = 250.000 (y, step / mm) $ 102 = 250.000 (z, step / mm) $ 110 = 500.000 (x max rate, 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 na paglalakbay, mm) $ 131 = 200.000 (y max travel, mm) $ 132 = 200.000 (z max travel, mm)
Hakbang 8: I-upload ang Final Code at Suriin ang Virtual na Resulta sa Arduino Uno Software Dashboard
// Mga Yunit: CM
float b_height = 0;
lumutang a1 = 92;
lumutang a2 = 86;
float snude_len = 20;
boolean doZ = false;
float base_angle; // = 0;
float arm1_angle; // = 0;
float arm2_angle; // = 0;
float bx = 60; // = 25;
lumutang ng = 60; // = 0;
float bz = 60; // = 25;
lumutang x = 60;
float y = 60;
float z = 60;
lumutang q;
lumutang c;
lumutang V1;
lumutang V2;
lumutang V3;
lumutang V4;
lumutang V5;
walang bisa ang pag-setup () {
laki (700, 700, P3D);
cam = bagong PeasyCam (ito, 300);
cam.setMinimumDistance (50);
cam.setMaximumDistansya (500);
}
walang bisa draw () {
// ligninger:
y = (mouseX - lapad / 2) * (- 1);
x = (mouseY - taas / 2) * (- 1);
bz = z;
ni = 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 = radians (90.0) - q;
V5 = radians (180) - V4 - radians (90);
arm2_angle = radians (180.0) - (V5 + V1);
base_angle = degree (atan2 (bx, by));
arm1_angle = degree (arm1_angle);
arm2_angle = degree (arm2_angle);
// println (ni, bz);
// arm1_angle = 90;
// arm2_angle = 45;
/*
arm2_angle = 23;
arm1_angle = 23;
arm2_angle = 23;
*/
// interactive:
// kung (doZ)
//
// {
// base_angle = base_angle + mouseX-pmouseX;
//} iba pa
// {
// 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);
}
walang bisa draw_robot (float base_angle, float arm1_angle, float arm2_angle)
{
paikutinX (1.2);
paikutinZ (-1.2);
background (0);
ilaw ();
pushMatrix ();
// BASE
punan (150, 150, 150);
box_corner (50, 50, b_height, 0);
paikutin (radian (base_angle), 0, 0, 1);
// ARM 1
punan (150, 0, 150);
box_corner (10, 10, a1, arm1_angle);
// ARM 2
punan (255, 0, 0);
box_corner (10, 10, a2, arm2_angle);
// SNUDE
punan (255, 150, 0);
box_corner (10, 10, snude_len, -arm1_angle-arm2_angle + 90);
popMatrix ();
pushMatrix ();
float action_box_size = 100;
isalin (0, -action_box_size / 2, action_box_size / 2 + b_height);
pushMatrix ();
isalin (x, action_box_size- y-action_box_size / 2, z-action_box_size / 2);
punan (255, 255, 0);
kahon (20);
popMatrix ();
punan (255, 255, 255, 50);
kahon (action_box_size, action_box_size, action_box_size);
popMatrix ();
}
void box_corner (float w, float h, float d, float rotate)
{
paikutin (radian (paikutin), 1, 0, 0);
isalin (0, 0, d / 2);
kahon (w, h, d);
isalin (0, 0, d / 2);
}
void keyPressed ()
{
kung (key == 'z')
{
doZ =! doZ;
}
kung (key == 'h')
{
// itakda ang lahat sa zero
arm2_angle = 0;
arm1_angle = 90;
base_angle = 0;
}
kung (key == 'g')
{
println (degree (V1));
println (degree (V5));
}
kung (keyCode == UP)
{
z ++;
}
kung (keyCode == Pababa)
{
z -;
}
kung (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);
}
}
Inirerekumendang:
Print-in-Place Robotic Gripper: 4 na Hakbang (na may Mga Larawan)
Print-in-Place Robotic Gripper: Ang Robotics ay isang kamangha-manghang larangan, at mapalad kaming mabuhay sa isang panahon kung saan ang DIY robotics na komunidad ay gumagawa ng ilang kamangha-manghang trabaho at mga proyekto. Habang marami sa mga proyektong ito ay nakakagulat na advanced at makabago, hinahangad kong gumawa ng mga robot
FM Radio With RDS (Radio Text), BT Control and Charging Base: 5 Hakbang
FM Radio With RDS (Radio Text), BT Control and Charging Base: Bonjour, Ito ang aking pangalawa " Instructables ". Tulad ng nais kong gumawa ng hindi masyadong kapaki-pakinabang na mga bagay, narito ang aking huling proyekto: Ito ay isang FM radio na may Radio Text na may isang base ng singilin at kung saan maaaring masubaybayan sa pamamagitan ng Bluetooth at isang Android APPT Samakatuwid gagawin ko
DIY Multi-Purpose Robot Base at Motor Shield: 21 Hakbang (na may Mga Larawan)
DIY Multi-Purpose Robot Base at Motor Shield: Kamusta sa lahat, kamakailan nagsimula akong magtrabaho sa mga proyekto ng robotics gamit ang Arduino. Ngunit wala akong tamang basehan upang magtrabaho, ang resulta ay hindi maganda at ang tanging nakikita ko lang ay ang lahat ng aking mga sangkap na nakakabit sa mga wire. Nagkakaproblema sa pagbaril sa anumang er
Robot ng Direksyon ng Auto ng Arduino Base: 8 Hakbang (na may Mga Larawan)
Robot ng Direksyon ng Auto ng Arduino Base: ito ang robot na gumagalaw sa pamamagitan ng pag-iwas sa mga hadlang. nadarama nito ang bagay at pagtingin sa paligid at patuloy na pupunta kung saan magagamit ang libreng puwang
Paano Gumawa ng isang Autonomous Basketball Playing Robot Paggamit ng isang IRobot Lumikha Bilang Base: 7 Mga Hakbang (na may Mga Larawan)
Paano Gumawa ng isang Autonomous Basketball Playing Robot Paggamit ng isang IRobot Lumikha Bilang Base: Ito ang aking entry para sa hamon sa iRobot Lumikha. Ang pinakamahirap na bahagi ng buong prosesong ito para sa akin ay ang pagpapasya kung ano ang gagawin ng robot. Nais kong ipakita ang mga cool na tampok ng Lumikha, habang nagdaragdag din sa ilang robo flair. Lahat ng akin