Sommario:
- Passaggio 1: requisiti dei componenti
- Passaggio 2: Scarica Gui
- Passaggio 3: connessione
- Passaggio 4: caricare il firmware e controllare il risultato del codice nella dashboard di Arduino
- Passaggio 5: progettare e stampare tutte le parti in un foglio di compensato
- Passaggio 6: assemblaggio
- Passaggio 7: configurazione delle impostazioni GBRL
- Passaggio 8: caricare il codice finale e controllare il risultato virtuale nella dashboard del software Arduino Uno
Video: Arduino Base Pick and Place Robot: 8 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
Ho realizzato un braccio robotico industriale super economico (meno di 1000 dollari) per consentire agli studenti di hackerare la robotica su larga scala e per consentire alle piccole produzioni locali di utilizzare i robot nei loro processi senza spendere troppo. È facile da costruire e rendere le persone della fascia di età dai 15 ai 50 anni.
Passaggio 1: requisiti dei componenti
1. Arduino + Scudo + Pin + Cavi
2. Controllore motore: dm860A (Ebay)
3. Motore passo-passo: 34hs5435c-37b2 (Ebay)
4. Bulloni M8x45+60+70 e bulloni M8.
5. Compensato da 12 mm.
6. Nylon da 5 mm.
7. Rondelle cieche 8mm.
8. Viti per legno 4.5x40mm.
9. Contatore M3 affondato, 10. Alimentazione 12v
11. driver del servomotore arduino
Passaggio 2: Scarica Gui
zapmaker.org/projects/grbl-controller-3-0/
github.com/grbl/grbl/wiki/Using-Grbl
Passaggio 3: connessione
Collegare i fili che sono indicati nell'immagine è una maggiore comprensione per te.
dobbiamo collegare il driver del motore ad Arduino e ad altri connettori richiesti dal tuo robot.
Passaggio 4: caricare il firmware e controllare il risultato del codice nella dashboard di Arduino
Installazione del firmware su Arduino - GRBL:
github.com/grbl/grbl/wiki/Compiling-Grbl
Nota: potresti riscontrare un conflitto durante la compilazione in Arduino. Rimuovi tutte le altre librerie dalla cartella della libreria (../documents/Arduino/libraries).
Configurazione del firmware
Imposta abilita su un timeout più recente. Usa una connessione seriale e scrivi:
$1=255
Imposta il riferimento:
$22=1
Ricorda di impostare seriale su baud: 115200
Codici G utili
Imposta il punto zero per il robot:
G10 L2 Xnnn Ynnn Znnn
Usa il punto zero:
G54
Inizializzazione tipica per centrare il robot:
G10 L2 X1.5 Y1.2 Z1.1
G54
Sposta rapidamente il robot in posizione:
G0 Xnnn Ynnn Znnn
Esempio:
G0 X10.0 Y3.1 Z4.2 (ritorno)
Sposta il robot in posizione a una velocità specifica:
G1 Xnnn Ynnn Znnn Fnnn
G1 X11 Y3 Z4 F300 (ritorno)
F dovrebbe essere compreso tra 10 (slooooow) e 600 (veloce)
Unità predefinite per X, Y e Z
Quando si utilizzano le impostazioni di step/unità predefinite (250 step/unità) per GRBL e
azionamento passo-passo impostato per 800 passi/giro le seguenti unità si applicano a tutti gli assi:
+- 32 unità = +- 180 gradi
Esempio di codice di elaborazione:
Questo codice può comunicare direttamente con Arduino GRBL.
github.com/damellis/gctrl
Ricordati di impostare seriale su baud: 115200
Codice uoad in ardunio
import java.awt.event. KeyEvent;
import javax.swing. JOptionPane;
import processing.serial.*;
Porta seriale = nullo;
// seleziona e modifica la riga appropriata per il tuo sistema operativo
// lascia null per usare la porta interattiva (premi 'p' nel programma)
String nomeporta = null;
//String portname = Serial.list()[0]; // Mac OS X
//Stringa nomeporta = "/dev/ttyUSB0"; // Linux
//Stringa nomeporta = "COM6"; // Finestre
flusso booleano = falso;
velocità galleggiante = 0.001;
String codice g;
int i = 0;
void openSerialPort()
{
if (portname == null) return;
if (porta != null) port.stop();
port = new Serial(this, portname, 115200);
port.bufferUntil('\n');
}
void selectSerialPort()
{
Risultato stringa = (Stringa) JOptionPane.showInputDialog(this, "Seleziona la porta seriale che corrisponde alla tua scheda Arduino.", "Seleziona porta seriale", JOptionPane. PLAIN_MESSAGE, nullo, Serial.list(), 0);
if (risultato != nullo) {
nomeporta = risultato;
openSerialPort();
}
}
configurazione nulla()
{
dimensione (500, 250);
openSerialPort();
}
pareggio vuoto()
{
sfondo(0);
riempimento(255);
int y = 24, dy = 12;
text("ISTRUZIONI", 12, y); y += dy;
text("p: seleziona porta seriale", 12, y); y += dy;
text("1: imposta la velocità su 0.001 pollici (1 mil) per jog", 12, y); y += dy;
text("2: imposta la velocità su 0.010 pollici (10 mil) per jog", 12, y); y += dy;
text("3: imposta la velocità su 0,100 pollici (100 mil) per jog", 12, y); y += dy;
text("tasti freccia: jog nel piano x-y", 12, y); y += dy;
text("pagina su & pagina giù: jog nell'asse z", 12, y); y += dy;
text("$: visualizza le impostazioni di grbl", 12, y); y+= dy;
text("h: vai a casa", 12, y); y += dy;
text("0: zero macchina (imposta casa sulla posizione corrente)", 12, y); y += dy;
text("g: trasmetti in streaming un file g-code", 12, y); y += dy;
text("x: stop streaming g-code (questo NON è immediato)", 12, y); y += dy;
y = altezza - dy;
text("velocità corrente: " + velocità + " pollici per passo", 12, y); y -= dy;
text("porta seriale corrente: " + nomeporta, 12, y); y -= dy;
}
tasto voidPremuto()
{
if (tasto == '1') velocità = 0.001;
if (tasto == '2') velocità = 0,01;
if (tasto == '3') velocità = 0,1;
if (!streaming) {
if (keyCode == LEFT) port.write("G91\nG20\nG00 X-" + velocità + " Y0.000 Z0.000\n");
if (keyCode == RIGHT) port.write("G91\nG20\nG00 X" + velocità + " Y0.000 Z0.000\n");
if (keyCode == UP) port.write("G91\nG20\nG00 X0.000 Y" + velocità + " Z0.000\n");
if (keyCode == DOWN) port.write("G91\nG20\nG00 X0.000 Y-" + velocità + " Z0.000\n");
if (keyCode == KeyEvent. VK_PAGE_UP) port.write("G91\nG20\nG00 X0.000 Y0.000 Z" + velocità + "\n");
if (keyCode == KeyEvent. VK_PAGE_DOWN) port.write("G91\nG20\nG00 X0.000 Y0.000 Z-" + velocità + "\n");
//if (chiave == 'h') port.write("G90\nG20\nG00 X0.000 Y0.000 Z0.000\n");
if (chiave == 'v') port.write("$0=75\n$1=74\n$2=75\n");
//if (chiave == 'v') port.write("$0=100\n$1=74\n$2=75\n");
if (chiave == 's') port.write("$3=10\n");
if (chiave == 'e') port.write("$16=1\n");
if (chiave == 'd') port.write("$16=0\n");
if (chiave == '0') openSerialPort();
if (chiave == 'p') selectSerialPort();
if (chiave == '$') port.write("$$\n");
if (chiave == 'h') port.write("$H\n");
}
if (!streaming && chiave == 'g') {
gcode = nullo; io = 0;
File file = nullo;
println("Caricamento file…");
selectInput("Seleziona un file da elaborare:", "fileSelected", file);
}
if (chiave == 'x') streaming = false;
}
void fileSelected(Selezione file) {
if (selezione == null) {
println("La finestra è stata chiusa o l'utente ha premuto Annulla.");
} altro {
println("Utente selezionato " + selection.getAbsolutePath());
gcode = loadStrings(selection.getAbsolutePath());
if (gcode == null) return;
streaming = vero;
flusso();
}
}
flusso vuoto()
{
if (!streaming) ritorna;
mentre (vero) {
if (i == gcode.length) {
streaming = falso;
Restituzione;
}
if (gcode.trim().length() == 0) i++;
altrimenti rompere;
}
println(gcode);
port.write(gcode + '\n');
io++;
}
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: davvero?
}
Passaggio 5: progettare e stampare tutte le parti in un foglio di compensato
Scarica la parte del robot e progetta in AutoCAD e stampa sul foglio di compensato da 12 mm e rifinisci e progetta la parte. Se qualcuno ha bisogno di file cad, lascia il commento nella casella della sezione commenti che invierò direttamente.
Passaggio 6: assemblaggio
raccogliere tutta la parte e disporre nella sequenza sull'immagine che viene data e seguire il diagramma dell'immagine.
Passaggio 7: configurazione delle impostazioni GBRL
Impostazione che ha dimostrato di funzionare sui nostri robot.
$0=10 (passo impulso, usec) $1=255 (passo idle delay, msec) $2=7 (passo port invert mask:00000111) $3=7 (dir port invert mask:00000111) $4=0 (passo abilita inversione, bool) $5=0 (limite pin invert, bool) $6=1 (probe pin invert, bool) $10=3 (maschera rapporto stato:00000011) $11=0.020 (deviazione giunzione, mm) $12=0.002 (tolleranza arco, mm) $13 =0 (report pollici, bool) $20=0 (limiti soft, bool) $21=0 (limiti rigidi, bool) $22=1 (ciclo di homing, bool) $23=0 (homing dir invert mask:00000000) $24=100.000 (avanzamento homing, mm/min) $25=500.000 (ricerca homing, mm/min) $26=250 (homing antirimbalzo, 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 velocità massima, mm/min) $ 111=500.000 (y velocità massima, mm/min) $112=500.000 (z velocità massima, mm/min) $120=10.000 (x accelerazione, mm/sec^2) $121=10.000 (y accelerazione, mm/sec^2) $122=10.000 (z accelerazione, mm/sec^2) $130=200.000 (x corsa massima, mm) $131=200.000 (y corsa massima, mm) $132=200.000 (z corsa massima, mm)
Passaggio 8: caricare il codice finale e controllare il risultato virtuale nella dashboard del software Arduino Uno
// Unità: CM
float b_height = 0;
galleggiante a1 = 92;
galleggiante a2 = 86;
float snude_len = 20;
booleano doZ = falso;
float base_angle;// = 0;
float arm1_angle; // = 0;
galleggiante arm2_angle; //= 0;
float bx = 60;// = 25;
float di = 60;// = 0;
float bz = 60;// = 25;
flottante x = 60;
flottante y = 60;
galleggiante z = 60;
galleggiante q;
galleggiante c;
galleggiante V1;
galleggiante V2;
galleggiante V3;
galleggiante V4;
galleggiante V5;
void setup() {
dimensione (700, 700, P3D);
cam = new PeasyCam (questo, 300);
cam.setMinimumDistance(50);
cam.setMaximumDistance(500);
}
disegno vuoto() {
//allineatore:
y = (mouseX - larghezza/2)*(-1);
x = (mouseY - altezza/2)*(-1);
bz = z;
per = 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 = radianti(90,0) - q;
V5 = radianti(180) - V4 - radianti(90);
arm2_angle = radianti(180,0) - (V5 + V1);
angolo_base = gradi(atan2(bx, per));
arm1_angle=gradi(arm1_angle);
arm2_angle=gradi(arm2_angle);
//println(di, bz);
//angolo_braccio1 = 90;
//arm2_angle = 45;
/*
arm2_angle = 23;
arm1_angle= 23;
arm2_angle=23;
*/
// interattivo:
// if (doZ)
//
// {
// angolo_base = angolo_base+ mouseX-pmouseX;
// } altro
// {
// 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)
{
ruotareX(1.2);
ruotareZ(-1.2);
sfondo(0);
luci();
pushMatrix();
// BASE
riempimento(150, 150, 150);
box_corner(50, 50, b_height, 0);
rotazione(radianti(angolo_base), 0, 0, 1);
// BRACCIO 1
riempimento(150, 0, 150);
box_corner(10, 10, a1, arm1_angle);
// BRACCIO 2
riempimento(255, 0, 0);
box_corner(10, 10, a2, arm2_angle);
// NUDO
riempimento(255, 150, 0);
box_corner(10, 10, snude_len, -arm1_angle-arm2_angle+90);
popMatrix();
pushMatrix();
galleggiante 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);
riempimento(255, 255, 0);
scatola(20);
popMatrix();
riempimento(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 ruota)
{
rotazione(radianti(ruota), 1, 0, 0);
tradurre(0, 0, d/2);
casella (w, h, d);
tradurre(0, 0, d/2);
}
tasto voidPremuto()
{
if (chiave == 'z')
{
doZ = !doZ;
}
if (chiave == 'h')
{
// imposta tutto a zero
arm2_angle = 0;
arm1_angle = 90;
angolo_base = 0;
}
if (tasto == 'g')
{
println(gradi(V1));
println(gradi(V5));
}
if (codice chiave == SU)
{
z++;
}
if (codice tasto == GI)
{
z--;
}
if (chiave == '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);
}
}
Consigliato:
Robot Pick and Place basato su RFID: 4 passaggi
Robot Pick and Place basato su RFID: Da molti anni le persone cercano di sostituire il lavoro umano con le macchine. Le macchine chiamate robot sono più veloci ed efficaci delle persone. Il termine robotica è praticamente definito come lo studio, la progettazione e l'uso di sistemi robotici per la produzione. I robot sono g
Pinza robotica print-in-place: 4 passaggi (con immagini)
Pinza robotica stampabile sul posto: la robotica è un campo affascinante e siamo fortunati a vivere in un'epoca in cui la comunità della robotica fai-da-te sta producendo lavori e progetti straordinari. Sebbene molti di questi progetti siano sorprendentemente avanzati e innovativi, ho cercato di realizzare robot per
Rielaborazione di un BGA utilizzando uno stencil Stay in Place: 7 passaggi
Rielaborazione di un BGA utilizzando uno stencil Stay in Place: Stencil di rilavorazione BGA con una funzione di permanenza in posizione per semplificare il processo e riparare la maschera di saldatura danneggiata. Migliora la resa del primo passaggio e ripara la maschera di saldatura che potrebbe essere stata danneggiata dal dispositivo. Ulteriori informazioni sulla rilavorazione BGA su ba
Pick-and-place basato sulla visione con UArm: 6 passaggi
Il pick-and-place basato sulla visione con UArm: Recentemente, la maggior parte delle domande che abbiamo ricevuto da te riguardano le applicazioni basate sulla visione di uArm, come il riconoscimento di oggetti, la correlazione fotocamera-uArm, ecc. In realtà abbiamo lavorato su questo per un periodo di tempo. Abbiamo condotto una semplice visione basata p
Parla con Pick e chat di intelligenza artificiale usando Cleverbot: 14 passaggi (con immagini)
Parla con Pick e chat di intelligenza artificiale utilizzando Cleverbot: qui provo non solo il comando vocale ma anche la chat di intelligenza artificiale con il computer utilizzando Cleverbot. In realtà l'idea è nata quando si sono trovati bambini che mescolano i colori nella scatola dei colori quando prendono il colore da un colore a quello più vicino. Ma finalmente implementare