![Arduino Base Pick and Place Robot: 8 etapas Arduino Base Pick and Place Robot: 8 etapas](https://i.howwhatproduce.com/images/011/image-30154-j.webp)
Índice:
- Etapa 1: Requisitos de componentes
- Etapa 2: Baixe o Gui
- Etapa 3: Conexão
- Etapa 4: faça upload do firmware e verifique o resultado do código no painel do Arduino
- Etapa 5: Projete e imprima todas as peças em uma folha de madeira compensada
- Etapa 6: Montagem
- Etapa 7: definir as configurações de GBRL
- Etapa 8: faça upload do código final e verifique o resultado virtual no painel do software Arduino Uno
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-23 15:03
![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)
Eu fiz um braço de robô industrial super barato (menos de 1000 dólares) para permitir que os alunos hackear robótica em maior escala e para permitir que pequenas produções locais usem robôs em seus processos sem quebrar o banco. Sua facilidade para construir e fazer a faixa etária pessoas de 15 a 50 anos.
Etapa 1: Requisitos de componentes
![Requisito de Componentes Requisito de Componentes](https://i.howwhatproduce.com/images/011/image-30154-4-j.webp)
![Requisito de Componentes Requisito de Componentes](https://i.howwhatproduce.com/images/011/image-30154-5-j.webp)
![Requisito de Componentes Requisito de Componentes](https://i.howwhatproduce.com/images/011/image-30154-6-j.webp)
![Requisito de Componentes Requisito de Componentes](https://i.howwhatproduce.com/images/011/image-30154-7-j.webp)
1. Arduino + Escudo + Pinos + Cabos
2. Controlador de motor: dm860A (Ebay)
3. Motor de passo: 34hs5435c-37b2 (Ebay)
4. Parafusos M8x45 + 60 + 70 e parafusos M8.
5. Contraplacado de 12 mm.
6. Nylon de 5 mm.
7. Arruelas cegas de 8 mm.
8. Parafusos para madeira 4.5x40mm.
9. Contador M3 afundado, 10. Fonte de alimentação 12v
11. servo motor driver arduino
Etapa 2: Baixe o Gui
zapmaker.org/projects/grbl-controller-3-0/
github.com/grbl/grbl/wiki/Using-Grbl
Etapa 3: Conexão
![Conexão Conexão](https://i.howwhatproduce.com/images/011/image-30154-8-j.webp)
![Conexão Conexão](https://i.howwhatproduce.com/images/011/image-30154-9-j.webp)
![Conexão Conexão](https://i.howwhatproduce.com/images/011/image-30154-10-j.webp)
Conectar os fios indicados na imagem é uma melhor compreensão para você.
precisamos conectar o driver do motor ao Arduino e outros conectores necessários de acordo com o seu robô.
Etapa 4: faça upload do firmware e verifique o resultado do código no painel do Arduino
Instalando o firmware no Arduino - GRBL:
github.com/grbl/grbl/wiki/Compiling-Grbl
Nota: Você pode obter um conflito ao compilar no Arduino. Remova todas as outras bibliotecas de sua pasta de biblioteca (../documents/Arduino/libraries).
Configuração de firmware
Defina habilitar para um tempo limite mais recente. Use uma conexão serial e escreva:
$1=255
Definir homing:
$22=1
Lembre-se de definir serial para baud: 115200
Códigos G úteis
Defina o ponto zero para o robô:
G10 L2 Xnnn Ynnn Znnn
Use o ponto zero:
G54
Inicialização típica para centralizar o robô:
G10 L2 X1.5 Y1.2 Z1.1
G54
Mova o robô para a posição rapidamente:
G0 Xnnn Ynnn Znnn
Exemplo:
G0 X10.0 Y3.1 Z4.2 (retorno)
Mova o robô para a posição em uma velocidade específica:
G1 Xnnn Ynnn Znnn Fnnn
G1 X11 Y3 Z4 F300 (retorno)
F deve estar entre 10 (slooooow) e 600 (rápido)
Unidades padrão para X, Y e Z
Ao usar configurações de etapas / unidades padrão (250 etapas / unidade) para GRBL e
acionamento de passo configurado para 800 passos / rev, as seguintes unidades se aplicam a todos os eixos:
+ - 32 unidades = + - 180 graus
Exemplo de código de processamento:
Este código pode se comunicar diretamente com o Arduino GRBL.
github.com/damellis/gctrl
Lembre-se de definir serial para baud: 115200
Código uoload em ardunio
import java.awt.event. KeyEvent;
import javax.swing. JOptionPane;
import processing.serial. *;
Porta serial = nula;
// selecione e modifique a linha apropriada para o seu sistema operacional
// deixe como nulo para usar a porta interativa (pressione 'p' no programa)
String portname = null;
// String portname = Serial.list () [0]; // Mac OS X
// String portname = "/ dev / ttyUSB0"; // Linux
// String portname = "COM6"; // Janelas
fluxo booleano = falso;
velocidade de flutuação = 0,001;
String gcode;
int i = 0;
void openSerialPort ()
{
if (portname == null) return;
if (port! = null) port.stop ();
porta = novo Serial (este, nome da porta, 115200);
port.bufferUntil ('\ n');
}
void selectSerialPort ()
{
String result = (String) JOptionPane.showInputDialog (this, "Selecione a porta serial que corresponde à sua placa Arduino.", "Selecione a porta serial", JOptionPane. PLAIN_MESSAGE, nulo, Serial.list (), 0);
if (resultado! = nulo) {
portname = resultado;
openSerialPort ();
}
}
void setup ()
{
tamanho (500, 250);
openSerialPort ();
}
void draw ()
{
fundo (0);
preencher (255);
int y = 24, dy = 12;
texto ("INSTRUÇÕES", 12, y); y + = dy;
texto ("p: selecionar porta serial", 12, y); y + = dy;
texto ("1: definir a velocidade para 0,001 polegadas (1 mil) por jog", 12, y); y + = dy;
texto ("2: definir a velocidade para 0,010 polegadas (10 mil) por jog", 12, y); y + = dy;
texto ("3: definir a velocidade para 0,100 polegadas (100 mil) por jog", 12, y); y + = dy;
texto ("teclas de seta: mover no plano x-y", 12, y); y + = dy;
texto ("página acima e página abaixo: mover no eixo z", 12, y); y + = dy;
texto ("$: exibir configurações grbl", 12, y); y + = dy;
texto ("h: ir para casa", 12, y); y + = dy;
text ("0: zero machine (set home to the current location)", 12, y); y + = dy;
texto ("g: transmitir um arquivo de código g", 12, y); y + = dy;
text ("x: parar o streaming de código G (NÃO é imediato)", 12, y); y + = dy;
y = altura - dy;
texto ("velocidade atual de jog:" + velocidade + "polegadas por passo", 12, y); y - = dy;
texto ("porta serial atual:" + nome da porta, 12, y); y - = dy;
}
void keyPressed ()
{
if (chave == '1') velocidade = 0,001;
if (chave == '2') velocidade = 0,01;
if (tecla == '3') velocidade = 0,1;
if (! streaming) {
if (keyCode == LEFT) port.write ("G91 / nG20 / nG00 X-" + velocidade + "Y0.000 Z0.000 / n");
if (keyCode == RIGHT) port.write ("G91 / nG20 / nG00 X" + velocidade + "Y0.000 Z0.000 / n");
if (keyCode == UP) port.write ("G91 / nG20 / nG00 X0.000 Y" + velocidade + "Z0.000 / n");
if (keyCode == DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y-" + velocidade + "Z0.000 / n");
if (keyCode == KeyEvent. VK_PAGE_UP) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z" + velocidade + "\ n");
if (keyCode == KeyEvent. VK_PAGE_DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z-" + velocidade + "\ 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 (key == '0') openSerialPort ();
if (key == 'p') selectSerialPort ();
if (key == '$') port.write ("$$ / n");
if (key == 'h') port.write ("$ H / n");
}
if (! streaming && key == 'g') {
gcode = null; i = 0;
Arquivo arquivo = nulo;
println ("Carregando arquivo…");
selectInput ("Selecione um arquivo para processar:", "fileSelected", arquivo);
}
if (key == 'x') streaming = false;
}
void fileSelected (seleção de arquivo) {
if (seleção == null) {
println ("A janela foi fechada ou o usuário clicou em cancelar.");
} outro {
println ("Usuário selecionado" + selection.getAbsolutePath ());
gcode = loadStrings (selection.getAbsolutePath ());
if (gcode == null) return;
streaming = verdadeiro;
Stream();
}
}
void stream ()
{
if (! streaming) retornar;
while (true) {
if (i == gcode.length) {
streaming = falso;
Retorna;
}
if (gcode .trim (). length () == 0) i ++;
senão quebrar;
}
println (gcode );
port.write (gcode + '\ n');
i ++;
}
void serialEvent (Serial p)
{
String s = p.readStringUntil ('\ n');
println (s.trim ());
if (s.trim (). startsWith ("ok")) stream ();
if (s.trim (). startsWith ("erro")) stream (); // XXX: realmente?
}
Etapa 5: Projete e imprima todas as peças em uma folha de madeira compensada
![Projetar e imprimir todas as peças em folha de madeira compensada Projetar e imprimir todas as peças em folha de madeira compensada](https://i.howwhatproduce.com/images/011/image-30154-11-j.webp)
Baixe a peça e o projeto do robô no AutoCAD e imprima na folha de compensado de 12 mm e o acabamento e a parte do projeto. Se alguém precisar do arquivo cad, por favor, deixe o comentário na caixa de seção de comentários que enviarei diretamente.
Etapa 6: Montagem
![conjunto conjunto](https://i.howwhatproduce.com/images/011/image-30154-12-j.webp)
![conjunto conjunto](https://i.howwhatproduce.com/images/011/image-30154-13-j.webp)
reúna toda a parte e organize na seqüência na imagem que é dada e siga o diagrama da imagem.
Etapa 7: definir as configurações de GBRL
Configuração que provou funcionar em nossos robôs.
$ 0 = 10 (pulso de etapa, usec) $ 1 = 255 (atraso de etapa inativa, mseg) $ 2 = 7 (máscara de inversão de porta de etapa: 00000111) $ 3 = 7 (máscara de inversão de porta dir: 00000111) $ 4 = 0 (etapa de ativação de inversão, bool) $ 5 = 0 (pino de limite invertido, bool) $ 6 = 1 (pino da sonda invertido, bool) $ 10 = 3 (máscara de relatório de status: 00000011) $ 11 = 0,020 (desvio de junção, mm) $ 12 = 0,002 (tolerância de arco, mm) $ 13 = 0 (polegadas de relatório, bool) $ 20 = 0 (limites flexíveis, bool) $ 21 = 0 (limites rígidos, bool) $ 22 = 1 (ciclo de homing, bool) $ 23 = 0 (máscara de inversão de dir homing: 00000000) $ 24 = 100.000 (homing feed, mm / min) $ 25 = 500.000 (homing search, mm / min) $ 26 = 250 (homing debounce, mseg) $ 27 = 1.000 (homing pull-off, mm) $ 100 = 250.000 (x, passo / mm) $ 101 = 250.000 (y, step / mm) $ 102 = 250.000 (z, step / mm) $ 110 = 500.000 (x taxa max, mm / min) $ 111 = 500.000 (y max rate, mm / min) $ 112 = 500.000 (z max rate, mm / min) $ 120 = 10.000 (x aceler, mm / s ^ 2) $ 121 = 10.000 (y aceler, mm / s ^ 2) $ 122 = 10.000 (z aceler, mm / s ^ 2) $ 130 = 200.000 (x curso máximo, mm) $ 131 = 200.000 (curso máximo de y, mm) $ 132 = 200.000 (curso máximo de z, mm)
Etapa 8: faça upload do código final e verifique o resultado virtual no painel do software Arduino Uno
// Unidades: CM
float b_height = 0;
float a1 = 92;
float 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;
flutuar por = 60; // = 0;
float bz = 60; // = 25;
float x = 60;
float y = 60;
float z = 60;
float q;
float c;
float V1;
float V2;
float V3;
float V4;
float V5;
void setup () {
tamanho (700, 700, P3D);
cam = novo PeasyCam (este, 300);
cam.setMinimumDistance (50);
cam.setMaximumDistance (500);
}
void draw () {
// ligninger:
y = (mouseX - largura / 2) * (- 1);
x = (mouseY - altura / 2) * (- 1);
bz = z;
por = y;
bx = x;
float y3 = sqrt (bx * bx + por * por);
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 = radianos (90,0) - q;
V5 = radianos (180) - V4 - radianos (90);
arm2_angle = radianos (180,0) - (V5 + V1);
ângulo_base = graus (atan2 (bx, por));
arm1_angle = graus (arm1_angle);
arm2_angle = graus (arm2_angle);
// println (por, bz);
// arm1_angle = 90;
// arm2_angle = 45;
/*
arm2_angle = 23;
arm1_angle = 23;
arm2_angle = 23;
*/
// interativo:
// if (doZ)
//
// {
// base_angle = base_angle + mouseX-pmouseX;
// } outro
// {
// 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);
fundo (0);
luzes ();
pushMatrix ();
// BASE
encher (150, 150, 150);
box_corner (50, 50, b_height, 0);
rotate (radianos (base_angle), 0, 0, 1);
// ARM 1
encher (150, 0, 150);
box_corner (10, 10, a1, arm1_angle);
// ARM 2
preencher (255, 0, 0);
box_corner (10, 10, a2, arm2_angle);
// SNUDE
preencher (255, 150, 0);
box_corner (10, 10, snude_len, -arm1_angle-arm2_angle + 90);
popMatrix ();
pushMatrix ();
float action_box_size = 100;
traduzir (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);
preencher (255, 255, 0);
caixa (20);
popMatrix ();
preencher (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 girar)
{
girar (radianos (girar), 1, 0, 0);
traduzir (0, 0, d / 2);
caixa (w, h, d);
traduzir (0, 0, d / 2);
}
void keyPressed ()
{
if (chave == 'z')
{
doZ =! doZ;
}
if (chave == 'h')
{
// definir tudo para zero
arm2_angle = 0;
arm1_angle = 90;
ângulo_base = 0;
}
if (chave == 'g')
{
println (graus (V1));
println (graus (V5));
}
if (keyCode == UP)
{
z ++;
}
if (keyCode == DOWN)
{
z -;
}
if (chave == '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);
}
}
Recomendado:
Faça você mesmo "PC Usage Meter ROG Base" usando Arduino e Python: 5 etapas (com imagens)
![Faça você mesmo "PC Usage Meter ROG Base" usando Arduino e Python: 5 etapas (com imagens) Faça você mesmo "PC Usage Meter ROG Base" usando Arduino e Python: 5 etapas (com imagens)](https://i.howwhatproduce.com/images/004/image-10786-6-j.webp)
DIY "PC Usage Meter ROG Base" usando Arduino e Python: ************************************* + Em primeiro lugar, estes Instructables foram escritos por um falante não nativo de inglês …… Não é um professor de inglês, então, por favor, informe qualquer erro gramatical antes de zombar de mim.:p + E, por favor, não imite
UCL - Embedded - Pick and Place: 4 etapas
![UCL - Embedded - Pick and Place: 4 etapas UCL - Embedded - Pick and Place: 4 etapas](https://i.howwhatproduce.com/images/005/image-12531-23-j.webp)
UCL - Embedded - Pick and Place: Este instrutível explicará como uma unidade 2D pick and place é feita e como codificá-la
Retrabalhando um BGA usando um Stencil Stay in Place: 7 etapas
![Retrabalhando um BGA usando um Stencil Stay in Place: 7 etapas Retrabalhando um BGA usando um Stencil Stay in Place: 7 etapas](https://i.howwhatproduce.com/images/005/image-13884-7-j.webp)
Retrabalhando um BGA usando um Stencil Stay in Place: Estêncil de retrabalho BGA com um recurso stay in place para simplificar o processo e reparar a máscara de solda danificada. Ele melhora o rendimento da primeira passagem e repara a máscara de solda que pode ter sido danificada pelo dispositivo. Veja mais informações sobre retrabalho BGA em ba
Fale com o Pick e o bate-papo de inteligência artificial usando o Cleverbot: 14 etapas (com imagens)
![Fale com o Pick e o bate-papo de inteligência artificial usando o Cleverbot: 14 etapas (com imagens) Fale com o Pick e o bate-papo de inteligência artificial usando o Cleverbot: 14 etapas (com imagens)](https://i.howwhatproduce.com/images/003/image-6319-36-j.webp)
Fale com o Pick e o Bate-papo de Inteligência Artificial usando o Cleverbot: Aqui, tento não apenas o comando de voz, mas também o Bate-papo de Inteligência Artificial com o computador usando o Cleverbot. Na verdade a ideia surgiu quando encontraram crianças misturando cores na caixa de colorir ao tirar a cor de uma cor para a mais próxima. Mas finalmente impleme
Faça uma base / base rápida para iPhone: 5 etapas
![Faça uma base / base rápida para iPhone: 5 etapas Faça uma base / base rápida para iPhone: 5 etapas](https://i.howwhatproduce.com/preview/how-and-what-to-produce/11122624-make-a-quick-iphone-dock-stand-5-steps-j.webp)
Faça um suporte / suporte rápido para iPhone .: Bem, eu estava procurando algo para usar como suporte para iPhone, e também um uso para a extremidade de papelão de um rolo de fita adesiva (parecia tão útil), quando uma ideia surgiu minha cabeça