Taula de continguts:
- Pas 1: requisit de components
- Pas 2: descarregueu Gui
- Pas 3: connexió
- Pas 4: pengeu el microprogramari i comproveu el resultat del codi al tauler d'Arduino
- Pas 5: Dissenyeu i imprimiu tota la peça en full de fusta contraxapada
- Pas 6: Muntatge
- Pas 7: configureu la configuració de GBRL
- Pas 8: pengeu el codi final i comproveu el resultat virtual al tauler de control del programari Arduino Uno
Vídeo: Arduino Base Pick and Place Robot: 8 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:13
He fabricat un braç de robot industrial molt barat (menys de 1.000 dòlars) per permetre als estudiants piratejar robòtica a gran escala i permetre que petites produccions locals puguin utilitzar robots en els seus processos sense trencar el banc. És fàcil crear i convertir el grup d’edat en persones de 15 a 50 anys.
Pas 1: requisit de components
1. Arduino + Shield + Pins + Cables
2. Motorcontroller: dm860A (Ebay)
3. Motor estepa: 34hs5435c-37b2 (Ebay)
4. Cargols M8x45 + 60 + 70 i cargols M8.
5. Fusta contraxapada de 12 mm.
6. Niló de 5 mm.
7. Rentadores cegues de 8 mm.
8. Cargols de fusta 4,5x40mm.
9. Comptador M3 enfonsat, 10. Font d'alimentació de 12v
11. servomotor controlador arduino
Pas 2: descarregueu Gui
zapmaker.org/projects/grbl-controller-3-0/
github.com/grbl/grbl/wiki/Using-Grbl
Pas 3: connexió
Connectar els cables que es donen a la imatge és una millor comprensió per a vostè.
hem de connectar el controlador del motor a Arduino i altres connectors necessaris segons el vostre robot.
Pas 4: pengeu el microprogramari i comproveu el resultat del codi al tauler d'Arduino
Instal·lació del firmware a Arduino - GRBL:
github.com/grbl/grbl/wiki/Compiling-Grbl
Nota: és possible que tingueu un conflicte quan compileu a Arduino. Elimineu la resta de biblioteques de la carpeta de la biblioteca (../documents/Arduino/libraries).
Configuració del firmware
Estableix l'activació com a temps d'espera més recent. Utilitzeu una connexió en sèrie i escriviu:
$1=255
Estableix el registre inicial:
$22=1
Recordeu que heu d’establir la sèrie en baud: 115200
Codis G útils
Estableix el punt zero per al robot:
G10 L2 Xnnn Ynnn Znnn
Utilitzeu el punt zero:
G54
Inicialització típica per centrar el robot:
G10 L2 X1.5 Y1.2 Z1.1
G54
Mou el robot a la posició ràpida:
G0 Xnnn Ynnn Znnn
Exemple:
G0 X10.0 Y3.1 Z4.2 (retorn)
Mou el robot a la seva posició a una velocitat específica:
G1 Xnnn Ynnn Znnn Fnnn
G1 X11 Y3 Z4 F300 (retorn)
F ha de ser entre 10 (slooooow) i 600 (ràpid)
Unitats predeterminades per a X, Y i Z
Quan s'utilitzen els paràmetres predeterminats de pas / unitats (250 passos / unitat) per a GRBL i
Unitat pas a pas configurada per 800 passos / rev. s'apliquen les següents unitats a tots els eixos:
+ - 32 unitats = + - 180 graus
Exemple de codi de processament:
Aquest codi es pot comunicar directament amb l'Arduino GRBL.
github.com/damellis/gctrl
Recordeu que heu d’establir la sèrie en baud: 115200
Codi uoload en ardunio
importació java.awt.event. KeyEvent;
importació javax.swing. JOptionPane;
processament de la importació. sèrie. *;
Port sèrie = nul;
// seleccioneu i modifiqueu la línia adequada per al vostre sistema operatiu
// deixar com a nul per utilitzar el port interactiu (premeu 'p' al programa)
Nom de port de la cadena = nul;
// Nom del port de la cadena = Serial.list () [0]; // Mac OS X
// Nom del port de la cadena = "/ dev / ttyUSB0"; // Linux
// String portname = "COM6"; // Windows
streaming booleà = fals;
velocitat de flotació = 0,001;
String gcode;
int i = 0;
void openSerialPort ()
{
if (portname == null) retorna;
if (port! = nul) port.stop ();
port = new Serial (this, nom del port, 115200);
port.bufferUntil ('\ n');
}
void selectSerialPort ()
{
Resultat de cadena = (Cadena) JOptionPane.showInputDialog (això, "Seleccioneu el port sèrie que correspon a la vostra placa Arduino.", "Selecciona el port sèrie", JOptionPane. PLAIN_MESSAGE, nul, Serial.list (), 0);
si (resultat! = nul) {
portname = resultat;
openSerialPort ();
}
}
configuració nul·la ()
{
mida (500, 250);
openSerialPort ();
}
sorteig buit ()
{
fons (0);
farcit (255);
int y = 24, dy = 12;
text ("INSTRUCCIONS", 12, y); y + = dy;
text ("p: seleccioneu el port sèrie", 12, y); y + = dy;
text ("1: estableix la velocitat a 0,001 polzades (1 mil) per tracció", 12, y); y + = dy;
text ("2: estableix la velocitat a 0,010 polzades (10 mil) per tracció", 12, y); y + = dy;
text ("3: estableix la velocitat a 0,100 polzades (100 mil) per tracció", 12, y); y + = dy;
text ("tecles de fletxa: desplaçament en pla x-y", 12, y); y + = dy;
text ("pàgina amunt i pàgina avall: desplaçament a l'eix z", 12, y); y + = dy;
text ("$: mostra la configuració de grbl", 12, y); y + = dy;
text ("h: vés a casa", 12, y); y + = dy;
text ("màquina 0: zero (estableix la ubicació actual a la ubicació actual)", 12, y); y + = dy;
text ("g: transmet un fitxer de codi g", 12, y); y + = dy;
text ("x: deixar de transmetre codi g (això NO és immediat)", 12, y); y + = dy;
y = alçada - dy;
text ("velocitat de desplaçament actual:" + velocitat + "polzades per pas", 12, y); y - = dy;
text ("port sèrie actual:" + nom del port, 12, y); y - = dy;
}
tecla buida Premeu ()
{
if (clau == '1') velocitat = 0,001;
if (clau == '2') velocitat = 0,01;
if (clau == '3') velocitat = 0,1;
si (! streaming) {
if (keyCode == ESQUERRA) port.write ("G91 / nG20 / nG00 X-" + velocitat + "Y0.000 Z0.000 / n");
if (keyCode == RIGHT) port.write ("G91 / nG20 / nG00 X" + velocitat + "Y0.000 Z0.000 / n");
if (keyCode == UP) port.write ("G91 / nG20 / nG00 X0.000 Y" + velocitat + "Z0.000 / n");
if (keyCode == DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y-" + velocitat + "Z0.000 / n");
if (keyCode == KeyEvent. VK_PAGE_UP) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z" + velocitat + "\ n");
if (keyCode == KeyEvent. VK_PAGE_DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z-" + velocitat + "\ 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 (clau == '0') openSerialPort ();
if (key == 'p') selectSerialPort ();
if (clau == '$') port.write ("$$ / n");
if (clau == 'h') port.write ("$ H / n");
}
if (! streaming && key == 'g') {
gcode = nul; i = 0;
Fitxer file = nul;
println ("S'està carregant el fitxer …");
selectInput ("Seleccioneu un fitxer a processar:", "fileSelected", fitxer);
}
if (clau == 'x') streaming = fals;
}
void fileSelected (Selecció de fitxer) {
if (selecció == nul·la) {
println ("La finestra s'ha tancat o l'usuari ha cancel·lat.");
} més {
println ("Usuari seleccionat" + selection.getAbsolutePath ());
gcode = loadStrings (selection.getAbsolutePath ());
if (gcode == null) retorna;
streaming = cert;
corrent();
}
}
corrent nul ()
{
si (! streaming) torna;
mentre que (cert) {
if (i == gcode.length) {
streaming = fals;
tornar;
}
if (gcode .trim (). length () == 0) i ++;
sinó trencar;
}
println (gcode );
port.write (gcode + '\ n');
i ++;
}
void serialEvent (sèrie p)
{
Cadena s = p.readStringUntil ('\ n');
println (s.trim ());
if (s.trim (). startsWith ("ok")) stream ();
if (s.trim (). startsWith ("error")) stream (); // XXX: de debò?
}
Pas 5: Dissenyeu i imprimiu tota la peça en full de fusta contraxapada
Descarregueu la peça i el disseny del robot a AutoCAD i imprimiu-la al full de fusta contraxapada de 12 mm i la part d’acabat i disseny. Si algú necessita un fitxer cad, si us plau, deixeu el comentari al quadre de la secció de comentaris que us enviaré directament.
Pas 6: Muntatge
recopileu tota la part i organitzeu-la en la seqüència de la imatge que es dóna i seguiu el diagrama de la imatge.
Pas 7: configureu la configuració de GBRL
Configuració que ha demostrat que funciona amb els nostres robots.
$ 0 = 10 (pols de pas, usec) $ 1 = 255 (retard de pas inactiu, msec) $ 2 = 7 (màscara d'inversió de port de pas: 00000111) $ 3 = 7 (màscara d'inversió de port de dir: 00000111) $ 4 = 0 (invertir habilitació de pas, bool) $ 5 = 0 (límit d'invertir els pins, bool) $ 6 = 1 (invertir el pin de sonda, bool) 10 $ = 3 (màscara d'informe d'estat: 00000011) 11 $ = 0,020 (desviació de la unió, mm) 12 $ = 0,002 (tolerància a l'arc, mm) 13 $ = 0 (polzades d'informe, bool) 20 $ = 0 (límits suaus, bool) 21 $ = 0 (límits durs, bool) 22 $ = 1 (cicle de referència, bool) 23 $ = 0 (màscara d'invertir dir de referència: 00000000) 24 $ = 100.000 (alimentació de referència, mm / min) $ 25 = 500.000 (cerca de referència, mm / min) $ 26 = 250 (rebot de referència, msec) $ 27 = 1.000 (extracció de referència, mm) $ 100 = 250.000 (x, pas / mm) $ 101 = 250.000 (y, pas / mm) 102 $ = 250.000 (z, pas / mm) 110 $ = 500.000 (x taxa màxima, mm / min) 111 $ = 500.000 (taxa màxima y, mm / min) 112 $ = 500.000 (taxa màxima z, mm / min) 120 $ = 10.000 (x accel, mm / seg ^ 2) 121 $ = 10.000 (y accel, mm / seg ^ 2) 122 $ = 10.000 (z accel, mm / seg ^ 2) 130 $ = 200.000 (x recorregut màxim, mm) 131 $ = 200.000 (recorregut màxim, mm) 132 $ = 200.000 (recorregut màxim z, mm)
Pas 8: pengeu el codi final i comproveu el resultat virtual al tauler de control del programari Arduino Uno
// Unitats: CM
float b_height = 0;
flotador a1 = 92;
flotador a2 = 86;
flotador snude_len = 20;
booleà doZ = fals;
float base_angle; // = 0;
flotador braç_angle; // = 0;
flotador arm2_angle; // = 0;
flotador bx = 60; // = 25;
flota per = 60; // = 0;
flotador bz = 60; // = 25;
flotador x = 60;
flotador y = 60;
flotador z = 60;
flotar q;
flotador c;
flotador V1;
flotació V2;
flotador V3;
flotador V4;
flotador V5;
configuració nul·la () {
mida (700, 700, P3D);
cam = new PeasyCam (this, 300);
cam.setMinimumDistance (50);
cam.setMaximumDistance (500);
}
sorteig buit () {
// ligninger:
y = (mouseX - width / 2) * (- 1);
x = (mouseY - altura / 2) * (- 1);
bz = z;
per = y;
bx = x;
float y3 = sqrt (bx * bx + per * per);
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;
braç_angle = q;
V4 = radians (90,0) - q;
V5 = radians (180) - V4 - radians (90);
arm2_angle = radians (180.0) - (V5 + V1);
angle_ base = graus (atan2 (bx, by));
braç_angle = graus (braç_angle);
arm2_angle = graus (arm2_angle);
// println (per, bz);
// arm1_angle = 90;
// arm2_angle = 45;
/*
arm2_angle = 23;
braç_angle = 23;
arm2_angle = 23;
*/
// interactiu:
// if (doZ)
//
// {
// base_angle = base_angle + mouseX-pmouseX;
//} més
// {
// 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);
rotateZ (-1,2);
fons (0);
llums ();
pushMatrix ();
// BASE
farcit (150, 150, 150);
box_corner (50, 50, b_height, 0);
girar (radians (angle_ base), 0, 0, 1);
// ARM 1
farcit (150, 0, 150);
box_corner (10, 10, a1, arm1_angle);
// ARM 2
omplir (255, 0, 0);
box_corner (10, 10, a2, arm2_angle);
// SNUDE
farcit (255, 150, 0);
box_corner (10, 10, snude_len, -arm1_angle-arm2_angle + 90);
popMatrix ();
pushMatrix ();
float action_box_size = 100;
traduir (0, -action_box_size / 2, action_box_size / 2 + b_height);
pushMatrix ();
traduir (x, action_box_size- y-action_box_size / 2, z-action_box_size / 2);
omplir (255, 255, 0);
caixa (20);
popMatrix ();
farciment (255, 255, 255, 50);
quadre (action_box_size, action_box_size, action_box_size);
popMatrix ();
}
void box_corner (float w, float h, float d, float rotate)
{
rotar (radians (rotar), 1, 0, 0);
traduir (0, 0, d / 2);
caixa (w, h, d);
traduir (0, 0, d / 2);
}
tecla buida Premeu ()
{
if (clau == 'z')
{
doZ =! doZ;
}
if (clau == 'h')
{
// posa tot a zero
arm2_angle = 0;
braç_angle = 90;
angle_ base = 0;
}
if (clau == 'g')
{
println (graus (V1));
println (graus (V5));
}
if (keyCode == AMUNT)
{
z ++;
}
if (keyCode == ABAIX)
{
z -;
}
if (clau == '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);
}
}
Recomanat:
Pick-a-Player: 4 passos
Pick-a-Player: aquest instructiu us guiarà a través de com prendre un decisor Arduino. En prémer un botó, els LED s’il·luminaran de forma aleatòria. Al cap d’uns segons, s’encendrà un sol LED. Aquesta és la decisió final presa per l’Arduino
Robot Pick and Place basat en RFID: 4 passos
Robot Pick and Place basat en RFID: des de fa molts anys la gent intenta substituir el treball humà per màquines. Les màquines anomenades robots són més ràpides i efectives que les persones. El terme robòtica es defineix pràcticament com l’estudi, el disseny i l’ús de sistemes robotitzats per a la fabricació. Els robots són g
Conversa amb Pick i xat amb intel·ligència artificial mitjançant Cleverbot: 14 passos (amb imatges)
Conversa amb Pick i xat d’intel·ligència artificial mitjançant Cleverbot: aquí intento no només l’ordre de veu sinó també el xat d’intel·ligència artificial amb l’ordinador que utilitza Cleverbot. En realitat, la idea va sorgir quan es va trobar que els nens barregen colors a la caixa de pintar quan prenen color d’un color al més proper. Però finalment impleme
Robot per evitar obstacles amb base en TIVA: 7 passos
Robot per evitar obstacles amb base a TIVA: Hola, nois, he tornat amb un altre tutorial de la sèrie tiva instructables. Aquesta vegada es tracta d’un robot per evitar obstacles que es basa en TIVA, realitzat per amics meus com a projecte semestral. Espero que gaudiu d’aquest
Robot de direcció automàtica base Arduino: 8 passos (amb imatges)
Robot de direcció automàtica base Arduino: és el robot que es mou evitant obstacles. detecta l’objecte i la vista envoltant i continua endavant on hi ha espai lliure disponible