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 robótico controlado por Nunchuk (com Arduino)

Componentes e suprimentos

6 Braço robótico DoF
× 1
Nunchuk
× 1
Arduino Mega 2560
× 1
Escudo de controle
× 1

Aplicativos e serviços online

Arduino IDE

Sobre este projeto






Braços robóticos são fantásticos! Fábricas em todo o mundo os possuem, onde pintam, soldam e transportam coisas com precisão. Eles também podem ser encontrados na exploração espacial, veículos submarinos operados remotamente e até mesmo em aplicações médicas!

E agora você pode ter uma versão mais barata deles em sua casa, escritório ou laboratório! Cansado de fazer um trabalho repetitivo? Programe seu próprio robô para ajudá-lo ... ou para bagunçar as coisas! :D

Neste tutorial, mostro como montar um braço robótico e como programá-lo usando um Arduino Mega. Para este projeto, eu também queria experimentar um método diferente para controlar um braço robótico:usando um Nintendo Nunchuk! Eles são baratos, fáceis de encontrar e têm vários sensores.

Existem várias maneiras de usar este tutorial. Se você não tem um kit de braço robótico (e não quer comprar ou construir um), ainda pode usá-lo para aprender algo sobre a programação do Arduino e como fazer a interface de um Wii Nunchuk com seus próprios projetos. Você também pode usá-lo para praticar suas habilidades eletrônicas e mecânicas.





Etapa 1:Ferramentas e materiais


As seguintes ferramentas e materiais foram usados ​​neste projeto:

Ferramentas e materiais:
  • Ferro e fio de solda. Tive que soldar alguns terminais aos fios do Nunchuk para conectá-lo ao Arduino;
  • Tubo encolhível. Algumas peças de tubo retrátil foram utilizadas para um melhor isolamento dos condutores;
  • Chave de fenda. A estrutura é montada com alguns parafusos e porcas;
  • braço robótico de mesa mecânico de 6 eixos (link). Este incrível kit já vem com diversos componentes conforme descrito a seguir. É confiável e fácil de montar;
  • Fonte de alimentação 12 V (2 A ou mais);
  • controlador Nunchuk (link). Ele faz interface com a placa Arduino e é usado para controlar o braço robótico;
  • Fios de ligação macho (4 fios);
  • Arduino Mega (link / link / link). Observe que o kit de braço robótico que usei também tem um pacote de placa e controlador que já vem com esta placa Arduino. Se você não estiver usando um desses kits, pode usar outras placas Arduino também;

Fui informado mais tarde que há um adaptador Nunchuk que torna a conexão a um breadboad mais fácil (link / link). É uma boa opção se você deseja gastar algum tempo com a soldagem e não deseja destruir o conector original conforme descrito na Etapa 9.

O braço mecânico de mesa de 6 eixos Sain Smart já vem com os seguintes componentes:
  • Arduino Mega 2560 R3 (link)
  • Blindagem da placa de controle (link)
  • NRF24L01 + Módulo transceptor sem fio (link)
  • MPU6050 giroscópio de 3 eixos e um acelerômetro de 3 eixos (link)
  • 71 x parafuso M3X8
  • 47 x porca M3
  • 2 x colchetes em U
  • 5 x suporte do servo
  • 4 x 9 kg servo (link)
  • 2 x 20 kg servo (link)
  • 6 x bandeja de metal servo
  • 3 x colchetes em U
  • 21 x colchete em ângulo reto
  • 3 x rolamento de flange
  • 1 x garra

Você pode encontrar outros kits de braço robótico online ou até mesmo projetar o seu próprio. Existem alguns projetos incríveis que você pode imprimir em 3D, por exemplo.

Nas 7 etapas a seguir, mostrarei como montar o kit de braço antes de instalar os circuitos. Se você não possui um kit semelhante, fique à vontade para pular alguns passos. Você pode usar outro kit de braço robótico, montá-lo e pular diretamente para as etapas de eletrônica e programação.

Em cada etapa, há um gif animado, mostrando como meu braço robótico foi montado. Só funciona na versão desktop do site.





Etapa 2:Montagem do braço robótico Pt1 - Base


A primeira parte a ser montada é a base do robô.

É feito de dois suportes em forma de U, unidos costas com costas por meio de quatro parafusos e porcas M3, conforme mostrado nas fotos. Esta é provavelmente a parte mais fácil de ser montada.





Etapa 3:Montagem do braço robótico Pt2 - Servo # 1


O primeiro servomotor é montado perpendicularmente à base, usando um suporte do servo. Este perfil é fixado à base por meio de quatro parafusos e porcas M3, conforme mostrado nas fotos. O Servo # 1 é colocado no topo e conectado usando quatro parafusos e porcas M3.

Um chifre de metal circular é anexado ao eixo do servo. O kit vem com vários chifres de plástico. Eles não serão usados ​​para montar o robô.





Etapa 4:Montagem do braço robótico Pt3 - Servo # 2


Outro servo suporte é montado perpendicularmente ao anterior. Ele é conectado à sirene # 1 do servo usando quatro parafusos M3. O Servo # 2 é instalado com quatro parafusos e porcas M3 e também usa uma buzina de metal circular.

Um suporte em U é então preso à buzina usando quatro parafusos. Observe que um parafuso M3 é usado oposto ao eixo do servo. Dá estabilidade à estrutura. Um rolamento se encaixa neste parafuso e é travado na posição usando outra porca M3. Desta forma, o suporte em U é firmemente preso ao eixo central do servo # 2.





Etapa 5:Montagem do braço robótico Pt4 - Servo # 3


Outro suporte em U é montado usando quatro parafusos e porcas M3.

Na outra extremidade, o servo # 3 é instalado, usando um chifre de metal circular e quatro parafusos. Um suporte do servo é conectado ao servo motor e um perfil em forma de L é conectado ao suporte do servo usando alguns parafusos e porcas.

Observe que outro rolamento é usado oposto ao eixo do servo, conforme descrito antes.





Etapa 6:Montagem do braço robótico Pt4 - Servo # 4


Outro suporte em U é conectado ao perfil em forma de L usando um conjunto de quatro parafusos e porcas M3. De maneira semelhante à etapa anterior, o servo nº 4 é montado no suporte em U usando quatro parafusos. Outro suporte do servo é conectado ao servo.





Etapa 7:Montagem do braço robótico Pt4 - Servo # 5


O quinto servo é conectado perpendicularmente ao servo # 4 usando outro suporte do servo, instalado usando quatro parafusos M3 e porca.





Etapa 8:Montagem do braço robótico Pt4 - Servo # 6


A garra é então conectada ao eixo servo # 5. Em sua parte superior, o servo # 6 é conectado usando alguns parafusos, porcas e um chifre de metal. A garra possui algumas engrenagens, que irão transformar a rotação do servo em um movimento linear da garra.





Etapa 9:Preparando o controlador Nunchuk


Para este projeto, decidi usar um controlador Nintendo Nunchuk por vários motivos:
  • Eles são baratos! As réplicas podem ter uma qualidade inferior, mas eu não precisava de um controlador robusto para este projeto;
  • Eles são fáceis de encontrar! Existem várias réplicas originais e baratas online.
  • Tem muitos sensores! Cada controlador possui dois botões (botões Z e C), um joystick de dois eixos (X e Y) e um acelerômetro de três eixos;
  • Tem uma biblioteca Arduino. Robert Eisele projetou uma biblioteca incrível e fácil de usar para ler o sensor Nunchuk. Confira:https://www.xarg.org/2016/12/using-a-wii-nunchuk-with-arduino/

Infelizmente, os joysticks do Nunchuk têm um conector complicado, de difícil interface com outros componentes eletrônicos. Para conectá-lo ao Arduino, tive que cortar o cabo e expor seus fios. Dessa forma, não funcionará mais com um Nintendo Wii ...:/

Primeiro tive que cortar o conector do joystick e remover o isolamento dos fios. Usando um multímetro, e com base na cor de cada fio, determinei a função de cada fio (Vcc, GND, SCL e SDA) com base no esquema do conector mostrado na foto. A cor dos fios não tem padrão. Já ouvi falar das seguintes possibilidades:

Original:
  • SDA =verde
  • SCL =amarelo
  • 3V3 =vermelho
  • GND =branco

Réplica nº 1:
  • SDA =amarelo
  • SCL =branco
  • 3V3 =verde
  • GND =vermelho

Réplica nº 2:
  • SDA =azul
  • SCL =branco
  • 3V3 =rosa
  • GND =verde

Soldei os fios a um jumper macho, para uma conexão mais fácil com a placa Arduino. Para isso usei um ferro de solda e um tubo retrátil, como mostra as fotos.

Fui informado posteriormente que existe um adaptador Nunchuk que facilita a conexão a um breadboad (link / link). É uma boa opção se você deseja gastar algum tempo na soldagem e não quer destruir o conector original.





Etapa 10:Fiação dos circuitos


Assim que a estrutura estiver montada e os conectores Nunchuk terminados, você estará pronto para conectar os circuitos. Usei a blindagem da placa de controle que veio junto com meu kit de braço robótico. Facilita a conexão dos componentes, pois já vem com conectores específicos para os servomotores, alimentação, etc.

Conecte os componentes da seguinte forma:

Nunchuk:
  • Nunchuk pino 6 (SCL) => Arduino Mega Pin 21 (SCL) (no escudo)
  • Nunchuk pino 1 (SDA) => Arduino Mega Pin 20 (SDA) (no escudo)
  • Nunchuk pino 3 (Vcc) => Ardino Mega Pin 3V3 (na blindagem)
  • Nunchuk pin 4 (Gnd) => Arduino Mega Pin Gnd (no escudo)

Se você estiver usando um Arduino Uno, os pinos Nunchuk 'SCL e SDA devem ser conectados a diferentes pinos Arduino, da seguinte maneira:
  • Nunchuk pino 6 (SCL) => Arduino Uno pino A5
  • Nunchuk pino 1 (SDA) => Arduino Uno pino A4
  • Nunchuk pino 3 (Vcc) => Ardino Uno pino 3V3
  • Nunchuk pin 4 (Gnd) => Arduino Uno Pin Gnd

Servos:
  • Terminal de blindagem de controle 11 => Servo # 1
  • Terminal 12 da blindagem de controle => Servo # 2
  • Terminal 13 da blindagem de controle => Servo # 3
  • Terminal de blindagem de controle 8 => Servo # 4
  • Terminal 9 da blindagem de controle => Servo # 5
  • Terminal de blindagem de controle 10 => Servo # 6

Se você não estiver usando a blindagem de controle, deve usar a seguinte configuração de pinos:
  • Arduino Pin 11 => Servo # 1 (Sgn)
  • Arduino Pin 12 => Servo # 2 (Sgn)
  • Arduino Pin 13 => Servo # 3 (Sgn)
  • Arduino Pin 8 => Servo # 4 (Sgn)
  • Arduino Pin 9 => Servo # 5 (Sgn)
  • Arduino Pin 10 => Servo # 6 (Sgn)
  • Arduino Gnd => Servos Gnd
  • Fonte de alimentação 6V => Servos Vcc

Você também precisará conectar uma fonte de alimentação externa de 12 V. Eu sugiro um com mais de 2A de saída. Os servos consomem muita energia, e se a fonte de alimentação não for poderosa o suficiente, os servos vibrarão e ficarão muito quentes. Eles também perderão sua força.

Não conecte a fonte de alimentação antes de fazer o upload do código do Arduino (mostrado nas etapas posteriores). Há um botão liga / desliga no escudo. Mantenha-o na posição desligado.

Conecte um cabo USB no Arduino e prossiga para a próxima etapa.





Etapa 11:configurar o IDE do Arduino


Agora que o hardware está pronto, é hora de trabalhar no código do Arduino.

1 Baixe e instale a versão mais recente do IDE do Arduino Você pode encontrar a versão mais recente para Windows, Linux ou MAC OSX no site do Arduino:https://www.arduino.cc/en/main/software

Baixe-o gratuitamente, instale-o no seu computador e execute-o.

2. Adicionando as bibliotecas

Para este projeto, usei a incrível biblioteca Nunchuk Arduino de Robert Eisele! Você pode encontrar mais sobre isso em seu site:

https://www.xarg.org/2016/12/using-a-wii-nunchuk-with-arduino/

Baixe a biblioteca em https://github.com/infusion/Fritzing/tree/master/Wii-Nunchuk

Navegue até Sketch-> Incluir Biblioteca -> Gerenciar Bibliotecas ... em seu IDE Arduino para adicionar a biblioteca.

Como funciona a biblioteca?

A biblioteca Nunchuk vem com um conjunto de funções para leitura de sensores do controlador:

nunchuk_buttonZ () :retorna 1 se o botão Z for pressionado ou 0 se não for; nunchuk_buttonC () :retorna 1 se o botão C for pressionado ou 0 se não for; nunchuk_joystickX () :retorna o valor x do joystick (entre -127 e 127); nunchuk_joystickY () :retorna o valor y do joystick (entre -127 e 127); nunchuk_pitch () :retorna o ângulo do controlador em radianos (entre -180º e 180º); nunchuk_roll () :retorna o ângulo de rotação do controlador em radianos (entre -180º e 180º).

Os ângulos são retornados em radianos. Converti esses valores em graus no meu código Arduino.





Etapa 12:Código Arduino


Baixe o arquivo de esboço do Arduino.

Conecte o cabo USB na porta USB do seu computador e carregue o código. O upload do código leva algum tempo. Você pode usar esse tempo para 'curtir' e 'compartilhar' este tutorial enquanto espera! :D

Após a conclusão do upload, desconecte o cabo USB, conecte a fonte de alimentação e ligue o botão liga / desliga. O código começará a ser executado imediatamente.

Aviso:quando o código começar a ser executado, o braço robótico se moverá muito rápido para sua posição inicial. Tenha cuidado para não se machucar ou danificar equipamentos próximos durante a inicialização!

Você possivelmente terá que substituir o ângulo inicial de cada servomotor dependendo de como seus servos foram montados.

Código explicado:

Antes da configuração, o código importa as bibliotecas usadas no esboço ( nunchuk.h, wire.h e servo.h )

Os pinos a serem usados ​​são definidos e as variáveis ​​globais são declaradas. O ângulo # variáveis ​​inteiras armazenam a posição inicial para cada servo. Se você quiser que seu robô comece em uma posição diferente, altere os valores dessas variáveis.

servo # _velocidade variáveis ​​definem a velocidade do movimento de cada servo. Se você quiser que um servo específico se mova mais rápido, aumente seu valor. ângulo # min e ângulo # max variáveis ​​são usadas para limitar o ângulo máximo e mínimo para cada servo. Você pode definir essas variáveis ​​para evitar colisões entre juntas consecutivas do robô.
  // Incluir bibliotecas # include  #include  #include  // definir variáveis ​​# define SERV1 8 // servo 1 na porta digital 8 # define SERV2 9 // servo 2 na porta digital 9 # define SERV3 10 // servo 3 na porta digital 10 # define SERV4 11 // servo 4 na porta digital 11 # define SERV5 12 // servo 5 na porta digital 12 # define SERV6 13 / / servo 6 na porta digital 13Servo s1; // servo 1Servo s2; // servo 2Servo s3; // servo 3Servo s4; // servo 4Servo s5; // servo 5Servo s6; // servo 6 // define o ângulo inicial para cada servo // escolha uma posição segura para começar // ele tentará se mover instantaneamente para essa posição quando ligado! // esses ângulos dependerão do ângulo de cada servo durante o ângulo de montagem 1 =90; // servo 1 current angleint angle2 =30; // servo 2 current angleint angle3 =0; // servo 3 current angleint angle4 =90; // servo 4 current angleint angle5 =90; // servo 5 current angleint angle6 =45; // ângulo atual do servo 6 servo1_speed =3; // servo 1 speedint servo2_speed =3; // servo 2 speedint servo3_speed =3; // servo 3 speedint servo4_speed =1; // servo 4 speedint servo5_speed =1; // velocidade do servo 5 // define restrições para cada servo // esses ângulos dependerão do ângulo de cada servo durante a montagem angle1min =0; // ângulo mínimo do servo 1 ângulo1max =180; // ângulo máximo do servo 1 ângulo2min =0; // ângulo mínimo do servo 2 angle2max =180; // ângulo máximo do servo 2 ângulo3min =0; // ângulo mínimo do servo 3 angle3max =180; // ângulo máximo do servo 3 ângulo4min =0; // ângulo mínimo do servo 4 angle4max =180; // ângulo máximo do servo 4 ângulo5min =0; // ângulo mínimo do servo 5 angle5max =180; // ângulo máximo do servo 5 ângulo6min =0; // ângulo mínimo do servo 6 angle6max =180; // servo 6 ângulo máximo booleano display_angles =true; // booleano usado para atualizar o ângulo de cada servo no Monitor Serial  

Durante o setup, cada servo é acoplado a um pino específico, e sua posição é iniciada.

A comunicação serial (para o monitor serial) e a comunicação I2C com o Nunchuk também são iniciadas aqui.
  // SETUPvoid ​​setup () {// anexar cada servo a um pino e iniciar sua posição s1.attach (SERV1); s1.write (ângulo1); s2.attach (SERV2); s2.write (ângulo2); s3.attach (SERV3); s3.write (ângulo3); s4.attach (SERV4); s4.write (ângulo4); s5.attach (SERV5); s5.write (ângulo 5); s6.attach (SERV6); s6.write (ângulo6); // inicia a comunicação serial Serial.begin (9600); // inicia o Nunchuk Wire.begin (); nunchuk_init ();}  

O loop principal é repetido indefinidamente. O status do Nunchuk é lido a cada ciclo. Dependendo das leituras, diferentes comandos são executados.
  void loop () {// lê os sensores Nunchuk if (nunchuk_read ()) {int x =nunchuk_joystickX (); // posição X do joystick int y =nunchuk_joystickY (); // posição Y do joystick boolean z =nunchuk_buttonZ (); // status do botão z booleano c =nunchuk_buttonC (); // status do botão c float pitch =nunchuk_pitch (); // ângulo de inclinação float roll =nunchuk_roll (); // ângulo de rotação  

O joystick X será usado para mover o servo # 1.

O seguinte bloco de código foi usado. Primeiro, ele verifica se o valor do joystick é grande o suficiente. Desta forma, ruídos e pequenas variações são desconsiderados. Se o valor atender aos requisitos, o ângulo do servo será aumentado / diminuído em uma determinada velocidade.
  // Vire à esquerda / direita (em uma velocidade fixa) // Vire à esquerda se (x> 90) {angle1 - =servo1_speed; display_angles =true; if (ângulo1 <ângulo1min) {ângulo1 =ângulo1min; }} // Vire à direita if (x <-90) {angle1 + =servo1_speed; display_angles =true; if (ângulo1> ângulo1máx) {ângulo1 =ângulo1máx; }} s1.write (ângulo1); // atualiza a posição do servo  

Um bloco semelhante é usado para o joystick y. É usado para alterar o ângulo do servo # 3. O servo # 2 é mantido fixo neste código.

A rotação da garra é dada pelos ângulos de rotação e inclinação do controlador, medidos por seu acelerômetro. Para facilitar o controle do braço, o ângulo da pinça só é atualizado quando os botões C ou Z são pressionados.

Quando apenas o botão C é pressionado, o código lê o ângulo de rotação e o usa como um ponto de ajuste. o servo # 5 é girado até atingir o ponto de ajuste. Sua velocidade é proporcional ao erro entre a posição real e a desejada. Um código semelhante é usado para o servo # 4, que rastreia o ângulo de inclinação de Nunchuk.
  // Habilita o acelerômetro apenas quando os botões são pressionados // Girar a garra (apenas o botão Z pressionado) if (c &&! z) {roll =roll * 57.0 + 90.0; // converte graus servo5_speed =abs (angle5 - roll) / 10 + 1; // velocidade proporcional faz o erro entre o ângulo real e desejado if (roll> angle5) {angle5 + =servo5_speed; display_angles =true; } if (roll <ângulo5) {ângulo5 - =servo5_velocidade; display_angles =true; } s5.write (ângulo5); // atualiza a posição do servo}  

A pinça é fechada sempre que os botões C e Z são pressionados. Quando qualquer um desses botões for liberado, o robô abrirá sua garra.
  // Abrir / fechar a garra (ambos os botões pressionados) if (z &&c) {s6.write (90); // fecha a garra display_angles =true; } else {s6.write (45); // abra a garra}  

Há um bloco de código no final do esboço. Ele exibirá no Monitor Serial o ângulo real de cada servomotor. Pode ser útil para escolher o ângulo de partida de cada motor.
nunchuk.ino





Etapa 13:uso


Agora que tudo está pronto, ligue o robô e divirta-se!

O Nunchuk é usado para controlar os cinco movimentos mostrados nas fotos:rotação direita / esquerda, movimento para cima / baixo, rotação da garra, movimento da garra para cima / baixo e movimentos de abrir / fechar da garra. Você pode combinar esses movimentos para realizar tarefas diferentes.

Você pode modificar o código para ter diferentes movimentos com base em uma combinação dos botões e ângulos do joystick.

Código

  • nunchuk.ino
nunchuk.ino Arduino
 Sem visualização (somente download). 
Github
https://github.com/infusion/Fritzing/tree/master/Wii-Nunchukhttps://github.com/infusion/Fritzing/tree/master/Wii-Nunchuk

Processo de manufatura

  1. Construa seu robô de streaming de vídeo controlado pela Internet com Arduino e Raspberry Pi
  2. Aceitar moeda de controle com Arduino
  3. Usando IoT para controlar remotamente um braço robótico
  4. Carro RC controlado por joystick
  5. Arduino com Bluetooth para controlar um LED!
  6. Arduino 3D-Printed Robotic Arm
  7. Robô controlado por fala
  8. Braço do robô controlado por Ethernet
  9. Dispositivos Bluetooth controlados por voz com OK Google
  10. Braço robótico simples e inteligente usando Arduino