Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Braço do robô Arduino DIY - Controlado por gestos manuais

Componentes e suprimentos

Arduino UNO
× 1
PCB personalizado JLCPCB
× 1
Servo motor, MG996R
× 6
Bateria 5V
× 1
Dispositivos de Controle Nacional PCA9685 Válvula Proporcional de Driver de 8 canais 8W 12V FET Controlador com interface I2C
× 1
Módulo Bluetooth HC-05
× 2
SparkFun Stepper motor driver board A4988
× 1
Motor de passo NEMA-17
× 1
Breadboard (genérico)
× 1
Unidade de medição inercial (IMU) (6 graus de liberdade)
× 1
Arduino Nano R3
× 1
Sensor Flex
× 1

Ferramentas e máquinas necessárias

Impressora 3D (genérica)

Sobre este projeto


Apresentando o braço do robô faça você mesmo, controlado por gestos humanos.

Filmes de sucesso como Pacific Rim, Avatar e outros filmes de ficção científica sugeriram a capacidade de sinergia com robôs - onde seus movimentos podem ser aprimorados com assistência robótica.

E se pudéssemos construir o mesmo robô industrial, mas em uma escala menor?

Este projeto é uma tentativa de alcançar isso.

Este é um Arduino Robot Arm que pode ser programado ou mesmo controlado por gestos manuais.

Mantendo-se fiel à convenção do traje do Homem de Ferro, cada iteração seria conhecida como Mark. Este protótipo seria conhecido como MARK 1. Podemos esperar mais iterações para melhorar o braço robótico original.

Veja o tutorial completo do braço do robô DIY (controlado por gestos manuais) aqui





Visão geral


Neste tutorial, vamos construir um robô de seis eixos controlado por gestos manuais usando uma luva robótica. E, ao imitar gestos humanos naturais, como um beliscão ou uma rotação do pulso para a esquerda, você será capaz de abrir / fechar ou girar o braço robótico para a esquerda e para a direita, respectivamente. Na verdade, controlando manualmente um braço robótico.

Encontre mais detalhes no artigo original

MARK 1 Características:
  • Rotação de 6 eixos
  • portátil
  • Controle o robô com gestos humanos
  • Pode ser pré-programado para realizar funções básicas
  • Pode ser controlado sem fio a partir de um alcance
  • Pode suportar um peso de carga de 600g (carga máxima de 1kg)





Lista de peças


O braço robótico é totalmente personalizável. Você pode comprar o seu próprio ou imprimir em 3D. Se você optar pela impressão 3D, não se preocupe. Há uma lista de robôs diferentes que usam servo motores, então a teoria do que estamos construindo ainda se aplica.

Para este projeto, este protótipo (Marcos 1) seria impresso em 3D, pois me dá mais espaço para criar peças personalizadas.

Braço Robótico: Braço robótico impresso Thingiverse 3D (créditos:Wonder Tiger):
  • Parte 1:Peças da garra
  • Parte 2:Base e mesa giratória
  • Parte 3:Braço robótico central

Você pode encontrar mais informações sobre esta construção, junto com os tipos de parafusos das peças acima. O tempo de impressão pode chegar a 40 horas. No entanto, isso reduz o custo de compra de um braço robótico.

Luva robótica : Arquivos The Robotic Glove.STL (créditos:Roman 13)

A luva robótica foi uma adição estética ao projeto, mas você também pode usar uma luva de construção para implementar o braço robótico.

Nota: para mãos maiores, imprima em escala de 105%





Como funciona


No geral, estamos enviando um sinal (por Bluetooth) da luva robótica para o servo motor. Quando um valor for recebido, o servo driver enviará um sinal para um servo motor específico movendo o braço robótico.

Agora, se adicionarmos vários servos e mais sensores, podemos controlar cada motor. `

Se pensarmos em um braço robótico como uma série de servo motores coordenados entre si para realizar uma função, podemos criar um braço robótico controlado por uma luva robótica.

O Arduino do Robotic Glove usa sensores para se comunicar com o Robotic Arm Arduino e envia dados para mover um Servo para o ângulo desejado.

Você deve estar se perguntando, quais sensores a Luva Robótica usa?

Para MARK 1, usaríamos Sensores Flex e um acelerômetro (MPU6050)
  • Sensores Flex - Com base no grau de curvatura desta peça plástica, a resistência muda, afetando a corrente. Esta medição é então usada para detectar mudanças no movimento da mão.
  • Acelerômetros - Para gestos mais naturais, um acelerômetro pode detectar uma mudança nos braços e na rotação do pulso.

Estamos usando esses sensores para detectar uma mudança em um gesto. Podemos então enviar um valor específico mapeado de um gesto para o braço robótico para controlar um servo motor via Bluetooth. E com gestos suficientes, o braço robótico ganha vida!





Mapeamento de braço robótico


O seguinte representa uma tabela de mapeamento dos valores enviados para o braço robótico pela luva. Isso pode ser encontrado no artigo original. Com cada um tendo uma chave para caracterizar sua função. (P - Pinkie, L - Certo, etc.)

Nota: “F” maiúsculo (dedo ) representa a direção oposta da rotação do servo motor





Montagem de peças





Braço robótico - Montagem


Comprar um braço robótico pode ser muito caro. Para manter este braço robótico dentro da Budget, a impressão 3D de um braço robótico foi a melhor opção.

Isso ajuda a longo prazo, pois há muitos exemplos de um braço robótico impresso em 3D que pode ser personalizado, por exemplo, adicionando um LED, criando um suporte de câmera. Braçadeira:

Como mencionado anteriormente, o braço robótico foi modelado em torno do braço robótico em Thingyverse. Eu escolhi este exemplo porque era um excelente design com seis eixos, bem documentado e tinha força / robustez. Você pode acessar o braço robótico de Wonder Tiger na lista de peças.

Você também pode encontrar meus remixes para um Robotic Arm Camera Stand. Abordaremos isso mais em uma versão futura. No entanto, as peças podem levar uma coleta de pelo menos 40 horas para imprimir todas as peças.

Você também pode encontrar muitas outras alternativas impressas em 3D do braço robótico.





Apresentando o servo motor e driver


Dado que o braço robótico é idealmente uma série de motores em coordenação, podemos teoricamente anexar vários motores que podem ser todos acionados pelo Arduino. Neste projeto, usaremos o servo driver PCA9685 para alimentar o servo MG966R.

Nota: Use uma fonte de alimentação externa ao alimentar cada motor. O Arduino não pode fornecer energia suficiente para controlar todos os motores. Neste projeto, foi utilizado um 5V, uma bateria RC de 2200 mAh.

A fiação do diagrama Arduino deve ser semelhante a abaixo:





NEMA-17 para rotação de base


Já que o Robótico estava começando a ganhar um pouco de peso, o servo motor MG966R não era poderoso o suficiente para girar o Braço Robótico na base. Para girar o braço robótico, um motor mais robusto do que um servo motor precisaria ser usado

Um motor de passo (NEMA-17) pode ser usado devido à sua precisão e alto torque, ajudando o braço robótico a girar perfeitamente para os controles de gestos.

O NEMA-17 e o Driver A4988 si usados ​​para controlar a direção do motor, você pode ver no diagrama abaixo:

E, finalmente, o diagrama a seguir mostra a montagem final do diagrama de fiação do braço robótico completo.





Montagem de circuitos


O diagrama de fiação abaixo mostra a montagem final de todas as peças eletrônicas para criar um braço robótico, incluindo o módulo Bluetooth. Abordaremos o processo de pareamento abaixo.





Sensor Flex Humano


Para manter a estética do braço robótico, você pode imprimir uma luva de exoesqueleto impressa em 3D para usar como sua luva robótica.

No entanto, você pode usar uma Luva do Construtor padrão para prototipar a luva robótica. Este design de "Exoesqueleto de luva de robô" combinou bem com o design do braço robótico.

A luva robótica consiste nos seguintes componentes:
  • Sensor Flex - Com base na curva do dedo, as mudanças atuais que poderíamos usar para enviar um sinal para o motor
  • Acelerômetro (MPU6050 ) - Podemos controlar o motor mapeando os gestos humanos do plano X, Y, Z
  • LED - O LED acenderá quando um controle de gesto humano for enviado para o Arduino
  • Módulo Bluetooth (HC-05) - Envio de dados para o receptor do braço robótico HC-05
  • Arduino Nano - O microcontrolador funcionaria como o cérebro da luva robótica

O diagrama a seguir é ótimo para testar o sensor flex e o acelerômetro.

Importante: O braço robótico será tão preciso quanto os controles da luva robótica, portanto, vale a pena acertar.





Configurando o Bluetooth (Mestre e Receptor)


O Arduino Robotic Arm se comunica por Bluetooth usando os módulos HC-05. Abaixo, destaque as informações críticas.

Módulo

Configuração

Robotic Glove HC-05 Master Braço Robótico HC-05 Slave

Nota:

A taxa de transmissão é definida em 4800





Programação Arduino


Você pode baixar o seguinte código abaixo:

Nota: Todos os outros códigos de teste e a versão mais recente podem ser encontrados no Arduino Robotic Arm Git Repo





Programando o braço robótico


O código do Robotic Arm faz uso da Biblioteca HCPCA9685 (para o Servo Driver). Dessa forma, podemos alimentar vários servo motores, todos controlados por um Arduino. No código, podemos começar adicionando essa biblioteca e declarando as variáveis ​​servo.

As seguintes variáveis ​​são usadas para encontrar o incremento / anterior e obter a posição atual do servo.
  * Inclui a biblioteca HCPCA9685 * / 
#include "HCPCA9685.h"
/ * Endereço escravo I2C para o dispositivo / módulo. Para o HCMODU0097 o endereço I2C padrão
é 0x40 * /
#define I2CAdd 0x40
/ * Cria uma instância da biblioteca * /
HCPCA9685 HCPCA9685 (I2CAdd);
// posição de estacionamento inicial do motor
const int servo_joint_L_parking_pos =60;
// Grau de sensibilidade do servo do robô - Intervalos
int servo_joint_L_pos_increment =20;
// Acompanhe o valor atual das posições do motor
int servo_joint_L_parking_pos_i =servo_joint_L_parking_pos;
// Ângulo mínimo e máximo do servo motor
int servo_joint_L_min_pos =10;
int servo_joint_L_max_pos =180;

Inicialize a porta serial na taxa de transmissão de 4800 para iniciar a comunicação Bluetooth
  Serial.begin (4800); // Inicializar a taxa de comunicação padrão do módulo Bluetooth  

Na seção loop (), verificamos constantemente se algum dado vem da luva robótica. Se verdadeiro, vamos armazenar os dados de entrada na variável "estado". E dependendo do caractere dado, vamos usar isso para mover o (s) motor (es).

A seção a seguir descreve o código:

O código do braço robótico pode ser visto como uma série de servo motores trabalhando juntos para simular os movimentos humanos. O código é o mesmo, com o servo sendo conduzido por um driver servo baseado nos valores do Bluetooth.
  // Definindo o servo driver. 0x40 O endereço é o endereço I2C padrão. 
#define I2CAdd 0x40
int response_time =5; // Recebendo valores do intervalo da luva robótica
// Verifica se os dados estão vindo da porta serial

if (Serial.available ()> 0) {
estado =Serial .ler(); // Lê os dados da porta serial
Serial.print (state); // Imprime o valor enviado
// Bloco de códigos de funcionalidade do motor
}

Com base no 'valor do estado' atual, o servo driver enviaria um sinal para o respectivo motor.

Por exemplo, se dobrarmos nossos dedos. O valor 'f' seria enviado pela luva robótica (via Bluetooth), por meio do qual o braço robótico leria esses dados e acionaria uma função para girar o respectivo servo motor. Este processo é repetido em um loop infinito.
  if (Serial.available ()> 0) {// Verifica se os dados estão vindo da porta serial 
state =Serial.read (); // Lê os dados da porta serial
Serial.print (state); // Imprime o valor enviado
// Para a nomenclatura dos motores, consulte o artigo / tutorial
// Mover (Rotação da Base) Motor de Passo para a Esquerda
if (state ==' S ') {
baseRotateLeft ();
atraso (tempo_de_resposta);
}
}

Nota: O código implementa uma parada brusca, para impedir que o motor exceda seu ângulo máximo, o que pode danificar as engrenagens do motor.
  HCPCA9685.Servo (0, servo_joint_L_parking_pos_i); // Dirija o servo motor no canal 0 até o ângulo desejado. 
// Mova o motor da garra para baixo
if (state =='f') {
if (servo_joint_3_parking_pos_i HCPCA9685.Servo(4, servo_joint_3_parking_pos_i);
atraso (tempo_de_resposta);
Serial.println (servo_joint_3_parking_pos_i);
servo_joint_3_parking_pos_i =servo_joint_pos_posi =servo_joint_3_parking3 +>}
void baseRotateLeft () {
digitalWrite (stepPin, LOW); // Gire em uma direção com base em HIGH, LOW
delayMicroseconds (stepDelay); // Alterar a velocidade do motor de passo
}

Se o valor do servo motor for menor que a rotação máxima, continue girando. Se atingiu a rotação máxima de 180 graus, pare.
  servo_joint_3_parking_pos_i  

Onde servo_joint_3_max_pos é a posição máxima do motor.

Nota: O código implementa uma parada brusca para impedir que o motor exceda seu ângulo máximo, o que pode danificar as engrenagens do motor.





Programando o Sensor Flex


O código do Robotic Arm pode ser encontrado no GitHub. Se você trabalha no projeto, contribua com sua própria versão para o Git Repo. Isso ajudaria a construir um índice de diferentes versões e funcionalidades do braço robótico.

O código já foi documentado (também disponível no Git). No entanto, cobriremos os pontos principais:

Vamos definir os cinco sensores:
  // LED ON PIN 3 
int pinkie_Data =A1;
int finger_Data =A2;
int thumb_Data =A3;
// const int MPU_addr =0x68;
const int MPU2 =0x69, MPU1 =0x68;

Nota: 0x68 e 0x69 representam o endereço I2C dos 2 acelerômetros MPU6050
  // Com que frequência enviar valores para o braço robótico 
int response_time =1000;

O código a seguir descreve o Arduino lendo os valores dos sensores:
  // ler os valores dos Sensores Flex para Arduino 
pinkie =analogRead (pinkie_Data);
finger =analogRead (finger_Data);
thumb =analogRead (thumb_Data);

Leia a posição atual do acelerômetro:
  GetMpuValue1 (MPU1); 
GetMpuValue2 (MPU2);

Calibrando os valores:

O código a seguir calibra para encontrar o limite superior e inferior do Flex Sensor. Para recalibrar a luva flexível, pressione o botão reset no Arduino.
  if (bool_caliberate ==false) {
delay (1000);
thumb_high =(thumb * 1,15);
thumb_low =(thumb * 0.9);
finger_high =(finger * 1.03);
finger_low =(finger * 0.8);
pinkie_high =(mindinho * 1.06);
pinkie_low =(mindinho * 0.8);
bool_caliberate =verdadeiro;
}

Verificaremos constantemente se o valor atual excedeu o limite superior ou inferior do flex definido com base na calibração. Se o sensor flexível ficar acima ou abaixo desse valor, os dados são enviados ao braço robótico para mover um servo motor específico em uma direção específica.
  // finger 1 - Claw Bend / Open 
if (finger> =finger_high) {
Serial.print ("F");
delay (response_time);
}
if (dedo <=finger_low) {
Serial.print("f ");
atraso (tempo_de_resposta);
}





Programando o braço do robô





Resultados - recompensa


O braço robótico é preciso o suficiente para mover objetos. No entanto, vai exigir algum trabalho para mover objetos complexos, ou mesmo competir com os seres humanos de 'mais de um milhão de anos' em destreza ... embora gastando mais tempo trabalhando no código, a precisão do robô pode funcionar como pretendido para MARK 1i . Embora o braço possa ser melhorado, ele pode ser melhorado significativamente.

Se você gostaria de melhorar o código, contribua para o Arduino Robot Arm Git Repo e construa seu braço. Vamos torná-lo aberto para que outros possam construir!

Por último, também podemos controlar o robô por meio de gestos manuais e programá-lo para automatizar tarefas básicas.





Próximas etapas


E isso é tudo para MARK 1 pessoal! Se você gostaria deste projeto, considere apoiar minha página do Patreon.

Código

  • Snippet de código # 1
  • Snippet de código # 3
  • Snippet de código 4
  • Snippet de código # 5
  • Snippet de código # 7
  • Snippet de código # 11
  • Snippet de código # 12
Snippet de código # 1 Texto simples
 * Inclui a biblioteca HCPCA9685 * / # include "HCPCA9685.h" / * Endereço escravo I2C para o dispositivo / módulo. Para o HCMODU0097, o endereço I2C padrão é 0x40 * / # define I2CAdd 0x40 / * Cria uma instância da biblioteca * / HCPCA9685 HCPCA9685 (I2CAdd); // posição de estacionamento inicial do motorconst int servo_joint_L_parking_pos =60; // Grau do servo do robô sensibilidade - Intervalsint servo_joint_L_pos_increment =20; // Acompanhe o valor atual das posições do motor em servo_joint_L_parking_pos_i =servo_joint_L_parking_pos; // Ângulo mínimo e máximo de servo motorint servo_joint_L_min_pos =10; int servo_joint_L_max_pos =180; 
Snippet de código # 3 Texto simples
 // Definindo o servo driver. 0x40 O endereço é o endereço I2C padrão. # Define I2CAdd 0x40 int response_time =5; // Recebendo valores do intervalo da Luva Robótica // Verifica se os dados estão vindo da porta serial if (Serial.available ()> 0) {state =Serial.read (); // Lê os dados da porta serial Serial.print (state); // Imprime o valor enviado // Bloco de código de funcionalidade do motor} 
Snippet de código # 4 Texto simples
 if (Serial.available ()> 0) {// Verifica se os dados estão vindo da porta serial state =Serial.read (); // Lê os dados da porta serial Serial.print (state); // Imprime o valor enviado // Para a nomenclatura dos motores, consulte o artigo / tutorial // Move (Base Rotation) Stepper Motor Left if (state =='S') {baseRotateLeft (); atraso (tempo_de_resposta); }} 
Snippet de código # 5 Texto simples
 HCPCA9685.Servo (0, servo_joint_L_parking_pos_i); // Direcione o servo motor no canal 0 para o ângulo desejado.//Mover motor garra para baixo if (state =='f') {if (servo_joint_3_parking_pos_i  
Snippet de código # 7 Texto simples
 // LED ON PIN 3int pinkie_Data =A1; int finger_Data =A2; int thumb_Data =A3; // const int MPU_addr =0x68; const int MPU2 =0x69, MPU1 =0x68; 
Snippet de código # 11 Texto simples
 if (bool_caliberate ==false) {delay (1000); thumb_high =(polegar * 1,15); thumb_low =(polegar * 0,9); dedo_alto =(dedo * 1,03); dedo_lento =(dedo * 0,8); mindinho_alto =(mindinho * 1,06); mindinho_low =(mindinho * 0,8); bool_caliberate =true; } 
Snippet de código # 12 Texto simples
 // dedo 1 - Claw Bend / Open if (finger> =finger_high) {Serial.print ("F"); atraso (tempo_de_resposta); } if (dedo <=dedo_low) {Serial.print ("f"); atraso (tempo_de_resposta); } 
Github
http://github.com/EbenKouao/arduino-robot-armhttp://github.com/EbenKouao/arduino-robot-arm
Github
https://github.com/EbenKouao/arduino-robotic-armhttps://github.com/EbenKouao/arduino-robotic-arm

Peças personalizadas e gabinetes

Thingiverse
https://www.thingiverse.com/thing:1748596Arquivo CAD em thingiverse.com
Thingiverse
https://www.thingiverse.com/thing:1750025Arquivo CAD em thingiverse.com
Thingiverse
https://www.thingiverse.com/thing:1838120Arquivo CAD em thingiverse.com
Thingiverse
https://www.thingiverse.com/thing:1982745Arquivo CAD em thingiverse.com

Esquemas

Repo do Git do braço do robô
https://github.com/EbenKouao/arduino-robot-arm

Processo de manufatura

  1. Robô Raspberry Pi controlado por Bluetooth
  2. Faça uma máquina de escrever trabalhos de casa DIY em casa
  3. Brinquedo controlado pelo Android usando Raspberry Motor Shield
  4. Obstáculos para evitar o robô com servo motor
  5. Robô seguidor de linha
  6. Braço robótico controlado por Nunchuk (com Arduino)
  7. Robô controlado por fala
  8. Braço do robô controlado por Ethernet
  9. MobBob:DIY Arduino Robot Controlado por Smartphone Android
  10. Robô para navegação interna supercool