Índice:

Braço do robô controlado por fio: 31 etapas
Braço do robô controlado por fio: 31 etapas

Vídeo: Braço do robô controlado por fio: 31 etapas

Vídeo: Braço do robô controlado por fio: 31 etapas
Vídeo: Braço Robótico com Arduino - Guia Definitivo 2024, Novembro
Anonim
Braço de robô controlado por fio
Braço de robô controlado por fio

Este é um tutorial de como fazer um braço de robô controlado por fios. A vantagem de usar fios é que seu braço é mais leve e você pode ter todos os motores na parte de baixo do braço, facilitando a construção e a manutenção. Aqui está um vídeo do braço em ação. Eu pretendo adicionar uma garra no futuro para que ele possa pegar as coisas e não apenas empurrá-las.

Imprimíveis 3D:

Aqui e aqui

Suprimentos

6 servo motores (MG995)

Arduino Uno

Cerca de 6 metros de fio de aço revestido de plástico (0,5 mm)

Caixa 23x33x10 (pode ser mais estreita, definitivamente não deve ser mais curta)

Tábua de madeira 33x10

Porcas e Parafusos

Tubo de 14 cm (necessário para guiar as cordas)

4 suportes em L

Adaptador de 5 volts

2 blocos de terminais de 7 vias

Fios de tábua de pão

Componentes impressos em 3D (não projetados por mim, links para elementos na descrição):

3 “parafusos”

2 “Elemento 1”

1 “Elemento 2”

2 “Elemento 3”

1 conector de base

Etapa 1: imprimir todos os componentes 3D

Você pode precisar de suporte para os orifícios dos parafusos e arcos, mas certifique-se de não adicionar suporte ao corpo dos seus componentes; isso fechará os pequenos orifícios de arame e você precisará fazer novos orifícios

Etapa 2: (opcional) prenda uma tábua de madeira na parte inferior da caixa para fortalecê-la

Minha caixa estava muito fraca, a sua pode não ser

Etapa 3: Meça e corte uma prancha de madeira para caber na caixa

Etapa 4: marque as posições dos motores

certifique-se de que nenhum dos braços se toque

Etapa 5: marque as posições dos suportes e do tubo

Marque as posições dos suportes e do tubo
Marque as posições dos suportes e do tubo

O tubo deve ser colocado cerca de um centímetro na frente do orifício

Etapa 6: faça um furo para os cabos que saem de sua caixa (USB e alimentação)

Faça um orifício para os cabos que saem de sua caixa (USB e alimentação)
Faça um orifício para os cabos que saem de sua caixa (USB e alimentação)

Etapa 7: Perfure e corte todos os orifícios marcados

Perfure e corte todos os orifícios marcados
Perfure e corte todos os orifícios marcados

Etapa 8: prenda os motores e o tubo à prancha

Etapa 9: prenda a prancha à caixa com os suportes em L

Etapa 10: pegue seus blocos terminais e solde os fios juntos

Pegue seus blocos terminais e solde os fios juntos
Pegue seus blocos terminais e solde os fios juntos

Etapa 11: corte a extremidade do cabo de alimentação do adaptador e descasque os fios

Etapa 12: identificar e marcar os fios positivos e negativos

Etapa 13: Conecte os fios aos blocos de terminais de forma que todos os fios + do servo e o fio + do cabo de alimentação estejam conectados, o mesmo vale para os fios -

Conecte os fios aos blocos de terminais de modo que todos os fios + do servo e o fio + do cabo de alimentação estejam conectados, o mesmo vale para os fios
Conecte os fios aos blocos de terminais de modo que todos os fios + do servo e o fio + do cabo de alimentação estejam conectados, o mesmo vale para os fios

Etapa 14: corte a cabeça de um fio da tábua de pão

Corte a cabeça de um fio da tábua de pão
Corte a cabeça de um fio da tábua de pão

Conecte a extremidade desencapada do fio da placa de ensaio ao bloco terminal negativo e a extremidade do pino ao pino de aterramento em seu Arduino. Se você não fizer isso, os motores se moverão erraticamente sem qualquer entrada.

Etapa 15: Faça três furos na parte inferior da caixa para os fios que saem de seu braço

Os orifícios devem coincidir com os orifícios no conector da base.

Etapa 16: Anexe o conector de base à caixa

Anexe o conector de base à caixa
Anexe o conector de base à caixa

Etapa 17: use uma faca ou lima de prego para tornar as ranhuras do arame mais profundas

Use uma faca ou lima de prego para tornar as ranhuras do fio mais profundas
Use uma faca ou lima de prego para tornar as ranhuras do fio mais profundas

As ranhuras de fio para os elementos 2 e 3 são muito rasas.

Etapa 18: construir o braço

Construa o braço
Construa o braço

Construa o braço de acordo com as instruções aqui, você pode precisar arquivar as peças para que se encaixem

Etapa 19: Instale o Processing e o Arduino

Processamento e Arduino

Etapa 20: colar os programas de código

O código está no final desta página

Etapa 21: conectar os pinos de controle servo ao Arduino

Conecte os pinos de controle servo ao Arduino
Conecte os pinos de controle servo ao Arduino

Eu conectei o primeiro motor ao terceiro pino digital, o segundo motor ao quarto pino digital e assim por diante. Certifique-se de que o pino de aterramento ainda esteja conectado ao bloco de terminais -.

Etapa 22: pressione o botão Reset no processamento, isso definirá todos os braços para 90 graus

Etapa 23: Fixe os braços do servo ao motor horizontalmente

Etapa 24: Passe os fios pelos braços para que não haja folga

Certifique-se de passar o fio pelo maior número possível de orifícios, pois isso o segurará temporariamente e será fácil de remover.

Etapa 25: Teste o braço e aperte ou afrouxe os fios conforme necessário

Etapa 26: Cole os fios aos braços do servo para torná-los permanentes

Etapa 27: Notas

Notas
Notas

Usei arame de joalharia de 0,5 mm, mas 0,4 mm deve servir. O projeto original usava fio de PVC, mas ele se quebrava facilmente e era difícil de trabalhar.

Se você for mover o braço em um carro ou bicicleta, envolva as juntas do braço com fita adesiva para garantir que não saiam. Isso é especialmente importante para o elemento 1.

Quando comecei este projeto estava me perguntando por que só encontrei um tutorial sobre como fazer um braço controlado por fios. Agora eu entendo por que esta não é a maneira mais comum de fazer um braço de robô amador. Os fios às vezes caem de suas ranhuras e a coisa toda fica meio frágil. Não sei se os problemas são porque não tenho muita experiência ou se toda a ideia é problemática, embora tenha certeza de que seria mais sólido se eu soubesse o que estou fazendo.

Etapa 28: Solução de problemas

Os orifícios de arame são fechados nos elementos impressos em 3D:

Você adicionou suporte para todo o elemento em vez de apenas para os orifícios dos parafusos. Imprima novamente o elemento ou abra os orifícios com uma agulha bem quente.

A porta COM está fechada, você não pode se comunicar com o arduino:

Seu arduino pode não aceitar portas USB 3 (o meu não), você pode comprar um cabo de extensão USB 2 ou usar um computador que tenha portas USB 2

O código não está funcionando:

Siga este tutorial e modifique-o para fazer seu próprio código

Uma parte do braço não está se movendo:

Os fios podem estar emaranhados, para verificar, tire o braço do servo do servo e tente puxar os fios com a mão. Desembaraçar os fios e se ainda for difícil puxá-los, tente usar um pouco de WD-40 ou um lubrificante para facilitar o movimento

Etapa 29: Links

Braço não robótico:

Arm 3D Printables:

My Arm 3D Printable:

Arduino e processamento:

Etapa 30: Código

Modificado a partir deste código

Código Arduino:

#include // Declara os motores Servo myservo1; Servo myservo2; Servo myservo3; Servo myservo4; Servo myservo5; Servo myservo6; // Todos os motores são configurados em 90 graus por padrão int current1 = 90; int current2 = 90; int current3 = 90; int current4 = 90; atual 5 = 90; int current6 = 90; // Graus mínimo e máximo que os motores podem atingir int mini1 = 0; int maxi1 = 180; int mini2 = 0; int maxi2 = 180; int mini3 = 0; int maxi3 = 180; int mini4 = 0; int maxi4 = 180; int mini5 = 0; int maxi5 = 180; int mini6 = 0; int maxi6 = 180; // Graus a serem adicionados ou subtraídos da posição atual int degreesFoward = 5; // Atrasa para que duas funções não ocorram na ordem errada int delayBetweenSteps = 100; void setup () {// Define os pinos de controle para cada motor myservo1.attach (3); myservo2.attach (4); myservo3.attach (5); myservo4.attach (6); myservo5.attach (7); myservo6.attach (8); // Defina todos os motores para a configuração padrão myservo1.write (current1); myservo2.write (atual2); myservo3.write (current3); myservo4.write (current4); myservo5.write (current5); myservo6.write (current6); // inicia a comunicação serial @ 9600 bps Serial.begin (9600); } void loop () {if (Serial.available ()) {// se os dados estiverem disponíveis para leitura char val = Serial.read (); // coloque-o neste char // Controles do motor if (val == 'a' && current1 + degreesFoward mini1) {myservo1.write (current1 - degreesFoward); corrente1 = corrente1 - graus à frente; atraso (delayBetweenSteps); } if (val == 'c' && current2 mini2) {myservo2.write (current2 - degreesFoward); corrente2 = corrente2 - grausFoward; atraso (delayBetweenSteps); } if (val == 'e' && current3 mini3) {myservo3.write (current3 - degreesFoward); corrente3 = corrente3 - grausFoward; atraso (delayBetweenSteps); } if (val == 'g' && current4 mini4) {myservo4.write (current4 - degreesFoward); corrente4 = corrente4 - grausFoward; atraso (delayBetweenSteps); } if (val == 'i' && current5 mini5) {myservo5.write (current5 - degreesFoward); corrente5 = corrente5 - grausFoward; atraso (delayBetweenSteps); } if (val == 'k' && current6 mini6) {myservo6.write (current6 - degreesFoward); corrente6 = corrente6 - grausFoward; atraso (delayBetweenSteps); } // Controles de velocidade if (val == 'w') {// Se o botão de velocidade 1 for pressionado grausFoward = 1; atraso (delayBetweenSteps); } if (val == 'x') {// Se o botão da velocidade 5 for pressionado grausFoward = 5; atraso (delayBetweenSteps); } if (val == 'y') {// Se o botão da velocidade 10 for pressionado grausFoward = 10; atraso (delayBetweenSteps); } if (val == 'z') {// Se o botão da velocidade 20 for pressionado grausFoward = 20; atraso (delayBetweenSteps); } if (val == 'r') {// Se o botão de velocidade 20 for pressionado myservo1.write (90); corrente1 = 90; myservo2.write (90); corrente2 = 90; myservo3.write (90); corrente3 = 90; myservo4.write (90); current4 = 90; myservo5.write (90); current5 = 90; myservo6.write (90); current6 = 90; atraso (delayBetweenSteps); }}}

Código de processamento:

import processing.serial. *; import controlP5. *; // importar porta serial da biblioteca ControlP5; ControlP5 cp5; // cria o objeto ControlP5 fonte PFont; void setup () {// igual ao tamanho do programa arduino (300, 700); // tamanho da janela, (largura, altura) printArray (Serial.list ()); // imprime todas as portas seriais disponíveis // Se você está tendo um problema, provavelmente é daqui String portName = Serial.list () [0]; porta = novo Serial (este, portName, 9600); // conectei o arduino ao com3, seria diferente no linux e no mac os // vamos adicionar o buton à janela vazia cp5 = new ControlP5 (this); font = createFont ("Arial", 13); // fontes personalizadas para botões e título // Botões de controle de velocidade cp5.addButton ("One") // "One" é o nome do botão.setPosition (50, 50) // coordenadas xey do canto superior esquerdo do botão.setSize (55, 25) // (largura, altura).setFont (fonte); cp5.addButton ("Five").setPosition (110, 50).setSize (55, 25).setFont (font); cp5.addButton ("Ten").setPosition (170, 50).setSize (55, 25).setFont (fonte); cp5.addButton ("Twenty").setPosition (230, 50).setSize (55, 25).setFont (fonte); cp5.addButton ("Redefinir").setPosition (110, 2).setSize (55, 25).setFont (fonte); cp5.addButton ("Servo_1_Foward").setPosition (50, 90).setSize (190, 40).setFont (fonte); // Botões de controle do motor cp5.addButton ("Servo_1_Back").setPosition (50, 140).setSize (190, 40).setFont (font); cp5.addButton ("Servo_2_Foward").setPosition (50, 190).setSize (190, 40).setFont (fonte); cp5.addButton ("Servo_2_Back").setPosition (50, 240).setSize (190, 40).setFont (fonte); cp5.addButton ("Servo_3_Foward").setPosition (50, 290).setSize (190, 40).setFont (fonte); cp5.addButton ("Servo_3_Back").setPosition (50, 340).setSize (190, 40) // (largura, altura).setFont (fonte); cp5.addButton ("Servo_4_Foward").setPosition (50, 390).setSize (190, 40).setFont (fonte); cp5.addButton ("Servo_4_Back").setPosition (50, 440).setSize (190, 40) // (largura, altura).setFont (fonte); cp5.addButton ("Servo_5_Foward").setPosition (50, 490).setSize (190, 40).setFont (fonte); cp5.addButton ("Servo_5_Back").setPosition (50, 540).setSize (190, 40).setFont (fonte); cp5.addButton ("Servo_6_Foward").setPosition (50, 590).setSize (190, 40).setFont (fonte); cp5.addButton ("Servo_6_Back").setPosition (50, 640).setSize (190, 40).setFont (fonte); } void draw () {// mesmo que loop no fundo do Arduino (192, 215, 249); // cor de fundo da janela (r, g, b) ou (0 a 255) // Adicionar texto dizendo que o controle de velocidade é o controle de velocidade fill (0, 10, 25); // cor do texto (r, g, b) textFont (fonte); texto ("Controle de velocidade", 50, 40); // ("texto", coordenada x, coordenada y)} // permite adicionar algumas funções aos nossos botões // então quando você pressiona qualquer botão, ele envia um caractere particular pela porta serial // Tenho certeza de que é possível enviar strings em vez de chars, e faria mais sentido, mas não sei como fazer // Comandos de controle de velocidade void One () {port.write ('w'); } void Five () {port.write ('x'); } void Ten () {port.write ('y'); } void Twenty () {port.write ('z'); } // Comandos de controle do motor void Servo_1_Foward () {port.write ('a'); } void Servo_1_Back () {port.write ('b'); } void Servo_2_Foward () {port.write ('c'); } void Servo_2_Back () {port.write ('d'); } void Servo_3_Foward () {port.write ('e'); } void Servo_3_Back () {port.write ('f'); } void Servo_4_Foward () {port.write ('g'); } void Servo_4_Back () {port.write ('h'); } void Servo_5_Foward () {port.write ('i'); } void Servo_5_Back () {port.write ('j'); } void Servo_6_Foward () {port.write ('k'); } void Servo_6_Back () {port.write ('l'); } void Reset () {port.write ('r'); }

Etapa 31: mais fotos

Recomendado: