Índice:

Braço robótico controlado do Arduino com 6 graus de liberdade: 5 etapas (com imagens)
Braço robótico controlado do Arduino com 6 graus de liberdade: 5 etapas (com imagens)

Vídeo: Braço robótico controlado do Arduino com 6 graus de liberdade: 5 etapas (com imagens)

Vídeo: Braço robótico controlado do Arduino com 6 graus de liberdade: 5 etapas (com imagens)
Vídeo: Nosso melhor robô de todos os tempos! #ManualMaker Aula 10, Vídeo 2 2024, Julho
Anonim
Braço robótico controlado Arduino com 6 graus de liberdade
Braço robótico controlado Arduino com 6 graus de liberdade
Braço robótico controlado Arduino com 6 graus de liberdade
Braço robótico controlado Arduino com 6 graus de liberdade
Braço robótico controlado Arduino com 6 graus de liberdade
Braço robótico controlado Arduino com 6 graus de liberdade

Sou membro de um grupo de robótica e a cada ano nosso grupo participa de uma Mini-Maker Faire anual. A partir de 2014, decidi construir um novo projeto para cada evento anual. Na época, eu tinha cerca de um mês antes do evento para montar algo e não tinha ideia do que queria fazer.

Um colega postou um link para "uma construção de braço robótico de código aberto interessante" que despertou meu interesse. Os planos eram apenas um braço sem controles ou controlador. Considerando minhas limitações de tempo, parecia um bom ponto de partida. O único problema era que eu realmente não tinha ferramentas para começar.

Com a ajuda de alguns membros do grupo, consegui cortar as partes de acrílico e enviar para mim, bem como as duas partes impressas em 3D mostradas abaixo. Combinado com alguns pedidos de hardware durante a noite e várias idas à loja de ferragens local, concluí um projeto de trabalho na noite anterior ao evento!

Como geralmente é o caso, há mais na história e várias encarnações na construção que foram condensadas no que você vê abaixo. Se você tiver interesse na história por trás, mais informações podem ser encontradas aqui:

Etapa 1: O que você precisa - Hardware e eletrônicos

O que você precisa - Hardware e eletrônicos
O que você precisa - Hardware e eletrônicos
O que você precisa - Hardware e eletrônicos
O que você precisa - Hardware e eletrônicos

O designer do projeto original morava na Europa e, subsequentemente, usou medidas métricas e materiais comuns lá. Por exemplo, a prancheta que ele usou para o corpo era um padrão de 5 mm de espessura. O material semelhante aqui nos EUA tem 1/8 , que tem cerca de 3,7 mm de espessura. Isso deixou uma lacuna nas aberturas que foram originalmente projetadas para serem encaixadas por pressão. Em vez de corrigir os desenhos, simplesmente usei Gorilla Glue para fixar essas juntas.

Ele também usou porcas e parafusos rosqueados M3 que não são padrão em sua loja de ferragens local nos Estados Unidos. Em vez de convertê-los em opções disponíveis localmente, simplesmente encomendei o hardware online, conforme mostrado na minha lista de peças abaixo.

  • 22 - Separadores M3 x 0,5 x 23mm
  • 15 - Espaçadores M3 x 15mm
  • 40 - Parafusos M3
  • M3 Hex Nuts
  • Parafusos M3 25mm
  • 1 - Primavera
  • Fita de montagem dupla face 3/4"
  • 5 - SG 5010 TowerPro Servo
  • 1 - Mini servo SG92R TowerPro
  • 1 - Mini servo SG90 TowerPro
  • Cabeçalho de pino reto de linha única de 2,54 mm
  • 1 - Tábua de pão de meio tamanho
  • 1 - Fios de jumper de 'extensão' fêmea / macho - 40 x 6"
  • Folha de acrílico azul de 1 - 12 "x 24" ou as peças cortadas a laser de seu provedor de serviços favorito
  • 2 - 3 mm x 20 mm + 4 mm x 5 mm espaçadores de rolamento de junta impressos em 3D (veja abaixo)
  • 1 - Painel de controle * Ver nota na seção de fiação
  • 1 - LED RGB difuso (tricolor) de 10 mm
  • 1 - Arduino Uno
  • 1 - LCD padrão 16x2 + extras - branco sobre azul
  • 1 - mochila de LCD de caráter i2c / SPI
  • 1 - PWM / Servo Driver Adafruit de 16 canais e 12 bits
  • 1 - MCP3008 - ADC de 8 canais e 10 bits com interface SPI
  • 3 - Sensor JoyStick Breakout Module * Consulte a observação na seção de fiação
  • DC Barrel Jack
  • Adaptador AC para DC
  • Cabos de extensão de servo - comprimentos variados

Quase todas as peças desse braço foram cortadas em acrílico de 1/8 de polegada. No entanto, os dois espaçadores do rolamento da junta precisam ser impressos. Além disso, o projeto original previa que as duas bases do espaçador da junta tivessem 7 mm de altura em relação ao eixo do rolamento. Quando comecei a montagem do braço, ficou rapidamente claro que eles eram muito altos devido à altura dos servos TowerPro. Tive que mandar fazer novos mancais de junta com uma base de apenas 3 mm de altura, que, aliás, ainda era um pouco alta, mas administrável. Você vai querer tomar nota da altura relativa de seus servos e levar em consideração a distância entre os dois antebraços:

Altura do servo + chifre do servo + rolamento de junta + fita dupla-face = 47mm +/- 3mm.

Etapa 2: Montagem do braço

Conjunto de braço
Conjunto de braço
Conjunto de braço
Conjunto de braço
Conjunto de braço
Conjunto de braço
Conjunto de braço
Conjunto de braço

Antes de começar, certifique-se de centralizar todos os seus servos! Se, a qualquer momento durante a construção, você mover manualmente a posição do servo, será necessário centralizá-lo antes de prendê-lo ao quadro. Isso é especialmente importante com os servos de ombro, que sempre precisam se mover em uníssono.

  1. Fixe o servo de base à placa de base superior usando os parafusos M3 de 25 mm e porcas sextavadas. Não aperte demais! NOTA: Você pode querer aplicar um aperto de trava nas roscas para minimizar o afrouxamento das porcas durante o uso.
  2. Se você estiver usando a lista de peças que tenho acima, em seguida, você vai querer montar os 5 espaçadores de base rosqueando 2 cada um dos espaçadores M3 x 0,5 x 23 mm e, em seguida, fixando-os na placa de base superior com porcas sextavadas.
  3. Fixe a placa de base inferior aos espaçadores com 5 parafusos M3.
  4. Fixe a placa de ombro às duas placas de montagem do servo usando um adesivo acrílico seguro. Usei Gorilla Glue aqui. NOTA: Cada uma das duas placas de servo tem um orifício na parte traseira que permite que um espaçador de reforço seja inserido conectando-as. Certifique-se de que os orifícios estejam alinhados! * Enquanto você tiver a cola à mão, vá em frente e junte a placa de montagem do pulso com a placa principal da garra. * Opcionalmente, você também pode colar a placa do servo de pulso nas duas placas de articulação do pulso. Não fiz isso, optando por aparafusá-los com os isolamentos, conforme descrito abaixo.

  5. Anexe o conjunto de ombro agora curado ao servo de base. Eu usei o chifre mais largo incluído com o servo, que era o chifre de montagem com seis hastes.
  6. Adicionar a estrutura do braço inferior aos servos de ombro pode ser complicado. Eu sugiro prender os chifres na estrutura do braço antes de prosseguir. NOTA: Certifique-se de centralizar seus servos para o conjunto de ombro ANTES de prendê-los à estrutura. Esses dois servos devem se mover em uníssono e, se estiverem desalinhados, causarão no mínimo jitter no servo e, se desalinhados o suficiente, podem danificar a estrutura ou os servos. * Cada um dos servos de ombro são montados com seus suportes na parte traseira das placas de montagem em vez de passar os servos através das placas - isso permitirá que você empurre o chifre no eixo do servo em um ângulo e prenda o parafuso. Ainda não fixe o servo na placa de montagem. * Em seguida, adicione o servo interno e monte o braço
  7. Monte a estrutura do braço e os servos empurrando os servos através dos espaços nos braços e, em seguida, insira os espaçadores entre as placas do braço e prenda com parafusos M3.

  8. Adicione fita adesiva dupla-face na parte de trás do espaçador da junta do cotovelo e apare o excesso.
  9. Prenda o espaçador na parte inferior do servo que atuará como o atuador de cotovelo.
  10. Deslize o conjunto do braço superior na estrutura do conjunto do braço inferior e prenda os parafusos da buzina do servo.
  11. Adicione espaçadores de reforço entre duas placas do braço inferior. Usei dois em vez dos quatro para diminuir o peso.
  12. Adicione fita adesiva dupla-face na parte de trás do espaçador da junta superior do punho e apare o excesso.
  13. Fixe o espaçador na parte inferior do servo que atuará como o atuador de pulso.
  14. Prenda a placa de pulso externa à buzina do servo de pulso e prenda com um parafuso de buzina.
  15. Monte a placa de servo de pulso com as duas placas de junta de pulso e espaçadores.
  16. Prenda o servo de pulso na placa do servo com a placa de braçadeira do servo.
  17. Você precisará prender a buzina de pulso ao servo antes de conectar o conjunto da garra a essa buzina, pois a abertura do parafuso da buzina está bloqueada.
  18. Monte frouxamente as peças da garra para encaixar antes de anexar o chifre do servo da garra ao servo. Isso lhe dará espaço para aparafusar a buzina na etapa anterior.
  19. Prenda o chifre da garra em seu servo e aperte ainda mais os parafusos que prendem as juntas da garra. NOTA: não aperte totalmente essas porcas e parafusos, pois eles precisam estar frouxos para permitir que a garra se mova.

Etapa 3: Fiação e Painel de Controle

Fiação e Painel de Controle
Fiação e Painel de Controle
Fiação e Painel de Controle
Fiação e Painel de Controle
Fiação e Painel de Controle
Fiação e Painel de Controle

Construí este projeto como uma plataforma de desenvolvimento para algumas ideias que tenho para um projeto educacional posterior. Portanto, a maioria das minhas conexões são simples conectores duvidosos. A única soldagem que fiz foi para o MCP3008. Se você puder encontrar uma placa de breakout para este componente, deverá ser capaz de construir este braço sem solda.

Existem 3 grupos de componentes:

  1. Entradas - Esses itens recebem informações do usuário e são compostos pelos joysticks e pelo ADC mcp3008.
  2. Saídas - Esses itens transmitem dados para o mundo, mostrando o status para o usuário ou atualizando os servos com dados de posição. Esses itens são a tela LCD, a mochila de LCD, o LED RGB, a placa de driver Servo e, por último, os servos.
  3. Processamento - O Arduino envolve o último grupo que recebe os dados das entradas e envia os dados para as saídas de acordo com as instruções do código.

O esquema Fritzing acima detalha as conexões de pinos para todos os componentes.

Entradas

Começaremos com as entradas. Os joysticks são dispositivos analógicos - o que significa que eles apresentam uma voltagem variável como uma entrada para o Arduino. Cada um dos três joysticks tem duas saídas analógicas para X e Y (para cima, para baixo, esquerda direita) perfazendo um total de 6 entradas para o Arduino. Embora o Arduino Uno tenha 6 entradas analógicas disponíveis, precisamos usar dois desses pinos para comunicação I2C com a tela e o servo controlador.

Por isso, incorporei o conversor analógico-digital (ADC) MCP3008. Este chip recebe até 8 entradas analógicas e as converte em um sinal digital através dos pinos de comunicação SPI do Arduino da seguinte maneira:

  • Pinos 1-6 do MCP> Saídas variáveis dos joysticks de polegar
  • Pinos 7 e 8 do MCP> Sem conexão
  • MCP Pino 9 (DGND)> Terra
  • MCP Pino 10 (CS / SHDN)> Uno Pino 12
  • MCP Pino 11 (DIN)> Uno Pino 11
  • MCP Pino 12 (DOUT)> Uno Pino 10
  • MCP Pin 13 (CLK)> Uno Pin 9
  • Pino MCP 14 (AGND)> Terra
  • Pinos 15 e 16 do MCP> + 5V

As conexões do joystick no esquema são mostradas apenas como exemplo. Dependendo de quais joysticks são comprados e como são montados, suas conexões podem ser diferentes das minhas. Diferentes marcas de joystick podem ter uma pinagem diferente e também podem orientar X e Y de forma diferente. O importante é entender o que cada entrada no ADC representa. Cada pino representa os seguintes relacionamentos em meu código:

  • Pino 1 - A Base - Dados analógicos neste pino irão girar o servo mais baixo no robô
  • Pino 2 - O ombro - dados analógicos neste pino irão girar os dois servos acima do servo base
  • Pino 3 - O cotovelo - dados analógicos neste pino irão girar o próximo servo a partir dos servos de ombro
  • Pino 4 - Pulso UP / DN - Dados analógicos neste pino irão girar o servo de pulso, levantando e abaixando o conjunto da garra
  • Pino 5 - A garra - Os dados analógicos neste pino abrirão e fecharão a garra
  • Pino 6 - Girar o pulso - Os dados analógicos neste pino irão girar a garra

NOTA: Ao comprar e montar os joysticks mencionados na lista de peças, lembre-se de que a orientação dos módulos pode ser diferente da minha, portanto, teste as saídas xey para a conexão adequada ao ADC. Além disso, se você estiver usando meu painel de controle impresso em 3D, os orifícios de montagem podem estar deslocados dos meus.

Saídas

O Adafruit PWM / Servo Controller torna este projeto super simples. Basta conectar os Servos aos conectores de servo e todas as conexões de energia e sinal são tratadas. A menos que você encontre servos com cabos extra longos, você desejará obter um conjunto de extensões de cabos servo em comprimentos variados para que todos os seus cabos servo alcancem sua placa controladora.

Os servos são conectados da seguinte forma:

  • Posição 0 - Base servo
  • Posição 1 - servo de ombro (cabo servo Y)
  • Posição 2 - Servo de cotovelo
  • Posição 3 - Servo de pulso 1
  • Posição 4 - Servo da garra
  • Posição 5 - Servo de pulso 2

Além disso, VCC e V + são ambos conectados a +5 Volts e GND é conectado ao aterramento.

NOTA 1: Uma nota GRANDE aqui: A tensão de alimentação para todo o projeto está chegando através do bloco de terminais de energia na placa de controle servo. O pino V + no servo controlador está, na verdade, fornecendo energia do bloco de terminais para o resto do circuito. Se você precisar programar seu Uno, eu recomendo fortemente desconectar o pino V + antes de conectar o Uno ao seu PC, pois o consumo de corrente dos servos pode danificar sua porta USB.

NOTA 2: Estou usando um adaptador de parede de 6 V CA para CC para alimentar o projeto. Eu recomendo um adaptador que pode fornecer pelo menos 4A de corrente para que, quando um ou mais dos servos forem ligados, o aumento repentino na corrente não desligue seu sistema e reinicie seu Arduino.

A tela LCD 16X2 é conectada à mochila Adafruit LCD para aproveitar as vantagens da interface I2C que já está sendo usada pelo servo controlador. O SCL no servo controlador e o CLK na mochila se conectam ao pino A5 no Uno. Da mesma forma, o SDA no servo controlador e o DAT na mochila se conectam ao pino A4 no Uno. Além disso, 5 V é conectado a +5 Volts e GND é conectado ao aterramento. O LAT na mochila não está conectado a nada.

Por último, o LED RGB é conectado aos pinos 7 (VERMELHO), 6 (Verde) e 5 (Azul) no Uno. A perna de aterramento do LED é conectada ao aterramento por meio de um resistor de 330Ohm.

Em processamento

Por último, mas não menos importante, o restante das conexões do Arduino não listadas acima são as seguintes: O pino 5V está conectado a +5 Volts e o GND está conectado ao aterramento.

Em minha configuração, usei os trilhos laterais da placa de ensaio para unir todas as linhas de alimentação e aterramento, bem como os pinos I2C para todos os dispositivos.

Etapa 4: Código

Código
Código

Conforme declarado anteriormente, eu originalmente construí este projeto como uma demonstração para minha Maker Faire local. Eu pretendia que fosse algo para crianças e adultos brincarem enquanto estivessem em nosso estande. Acontece que era muito mais popular do que eu imaginava - tanto que as crianças estavam brigando por isso. Então, quando chegou a hora de reescrever, incorporei um "Modo de Demonstração" que implementa um limite de tempo.

O braço fica parado esperando que alguém mova um joystick e, quando o faz, inicia um cronômetro de 60 segundos. No final dos 60 segundos, ele para de receber a entrada do usuário e "descansa" por 15 segundos. Sendo os períodos curtos de atenção o que são, esse período de descanso reduziu muito a contenção do tempo de permanência.

Operação basica

O código listado na seção de referência abaixo é muito simples. Uma matriz rastreia as 6 juntas com extensões mín. E máx., Uma posição inicial e a posição atual. Quando o braço é ligado, a função de inicialização define as bibliotecas necessárias para falar com o MCP3008, a mochila do LCD (e subsequentemente a tela) e define os pinos do LED. A partir daí, ele faz uma verificação básica dos sistemas e prossegue para a posição inicial do braço. A função inicial começa com a garra e desce até a base para minimizar a chance de emperramento em condições normais. Se o braço estiver totalmente estendido, pode ser melhor posicioná-lo manualmente antes de ligá-lo. Como os servos genéricos não fornecem feedback de sua posição, precisamos colocar cada um em um ponto predefinido e manter o controle de quão longe cada um foi movido.

O loop principal começa primeiro em um modo de espera - procurando os joysticks se afastarem de sua posição central. Quando isso acontece, o loop principal muda de estado para o estado de contagem regressiva. Conforme o usuário move cada joystick, a posição relativa do joystick a partir do centro será adicionada ou subtraída da posição conhecida atual e atualizará o servo apropriado. Quando um servo atinge seu limite definido em uma direção, o joystick para. O usuário precisará mover o joystick na outra direção para movê-lo novamente. Este é um limite de software imposto aos servos, independentemente de suas paradas de hardware. Este recurso permite que você mantenha os movimentos do braço dentro de uma área operacional especificada, se necessário. Se o joystick for liberado para o centro, o movimento parará.

Este código é apenas um ponto de partida geral. Você pode adicionar seus próprios modos como desejar. Um exemplo pode ser um modo de execução contínua sem cronômetro ou talvez adicionar os botões do joystick como entradas e escrever um modo de gravação / reprodução.

Etapa 5: Links e recursos

Referências de braço

  • Postagem que inspirou este projeto
  • Postagens do blog dos designers originaisMeu próprio braço robóticoMinhas garras minisservo e braço robótico completo Multiplique o braço robótico e os componentes eletrônicos
  • Braço Thingiverse
  • Thingiverse Mini Servo Gripper

Bibliotecas de software

  • Recursos Adafruit PWM / Servo Controlador
  • Biblioteca MCP3008
  • Folha de Dados MCP3008

Painel de controle e código

  • Desenho Tinkercad do painel que fiz
  • Repositório de código atual

Recomendado: