Braço robótico controlado por Nunchuk (com Arduino)
Componentes e suprimentos
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Aplicativos e serviços online
|
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-NunchukProcesso de manufatura
- Construa seu robô de streaming de vídeo controlado pela Internet com Arduino e Raspberry Pi
- Aceitar moeda de controle com Arduino
- Usando IoT para controlar remotamente um braço robótico
- Carro RC controlado por joystick
- Arduino com Bluetooth para controlar um LED!
- Arduino 3D-Printed Robotic Arm
- Robô controlado por fala
- Braço do robô controlado por Ethernet
- Dispositivos Bluetooth controlados por voz com OK Google
- Braço robótico simples e inteligente usando Arduino