Impressão 3D: GARRA ROBÓTICA COM ARDUINO



Que tal um projeto de uma garra manipuladora usando servos? Hoje, vamos mostrar como controlar uma garra robótica com servo motor utilizando um Arduino Uno.
Neste trabalho utilizei duas garras. Uma foi feita em uma impressora 3D e todas suas peças foram impressas em plástico ABS, que gosto bastante por ser mais flexível e menos quebradiço. A segunda garra é de acrílico e foi cortada a laser.
Além das garras e do Arduino Uno, usamos no projeto: quatro micro servos (3 Tower Pro MG90S e 1 SG90), um potenciômetro de 10k, bem como protoboard, fios e elásticos.

Montagem

No nosso projeto implantamos um sistema antitravamento, o que, para mim, é um grande diferencial. Já tive experiências com algumas garras que comprava pela internet, que travavam direto. Assim, o motor forçava e a engrenagem ia para o espaço. Meus alunos só conseguiam usar essas garras por duas aulas porque depois disso o servo já quebrava. Foi, então, que resolvi fazer uma garra na impressora 3D.
Na montagem, portanto, temos as garras e um potenciômetro ligado no arduino Uno. Conectamos em paralelo o sinal do servo, portanto, só temos um sinal de servo que eu estou conectando na base e nas garras, para fazer com que elas se movimentem.

Peças

Aqui identifico cada peça que utilizamos na montagem:
A - Dedos direito e esquerdo
B - Base
C - Servos
D - Alavancas direitas
E - Arruela calço
F - Alavancas esquerdas
G - Engrenagem com suporte do elástico
H - Engrenagem
I - Triângulo
J - 10 Parafusos M2.5x25
K - 7 Porcas (de preferência parlock)
L - Alavanca de servo (cortada)
25 arruelas (opcional mas aconselhável)

Montagem - Passo a passo

Passo 1


Monte duas alavancas esquerdas (F) e duas alavancas direitas (D), como mostrado na figura.
Use as porcas para prender, mas não aperte demais. Deixe uma folga para que as partes possam se mover. O uso de arruelas é fortemente recomendado para diminuir o desgaste entre as partes e o atrito.



Passo 2


Monte a alavanca esquerda restante (F) com a engrenagem (H). Não se esqueça de NÃO apertar as partes móveis.





Passo 3




Monte os dedos direito e esquerdo nas alavancas como indicado.






Passo 4
Com os dedos fechados e centralizados, monte a engrenagem (G), a arruela de calço (E) e o servo. Deve ocorrer o engrenamento das engrenagens. Deixamos em destaque na figura para facilitar a identificação.
Parafuse o conjunto.

Obs.: Em peças impressas pode ocorrer uma variação de dimensões que impedirá o posicionamento das engrenagens. Em peças cortadas a laser pode ocorrer variações de dimensão, principalmente por conta da inclinação do corte em relação à superfície.





A montagem deve agora se parecer com a figura ao lado.

O último parafuso (colocado na engrenagem G) ficará mais longo que os outros. Você poderá cortá-lo ou substituí-lo por um M2.5x16.






Preparação do acoplamento elástico


Para evitar que o servo trave ao exercer um torque sobre os dedos, um acoplamento elástico foi usado. Está técnica é usada para evitar este tipo de problemas em diversos mecanismos. Comumente utiliza-se uma mola. Para facilitar a construção e torná-la mais acessível, utilizaremos um elástico de cabelo facilmente encontrado em lojas e armarinhos.





Para montar o acoplamento vamos cortar uma alavanca de servo (aquelas que vêm junto com eles) de forma que seu comprimento fique igual ao da engrenagem G.






Encaixe a alavanca do servo e, usando o parafuso próprio, fornecido junto com o servo, prenda a alavanca, tomando o cuidado de deixá-la alinhada com o entalhe.
Usando o elástico, prenda a alavanca à engrenagem G amarrando o elástico em um entalhe e também do lado oposto.



Elásticos



São duas formas de prender o elástico. Só para demonstrar para vocês, na garra de acrílico amarramos o elástico em formato de um 8. Já na impressa em 3D fizemos dois arcos nas pontas. Você é quem vai escolher a melhor maneira e essa parte é importante porque é esse elástico que deve evitar o travamento do motor.



Passo 5

Para instalar o servo do pulso, posicione-o no lado oposto às engrenagens, de forma que os três furos tangenciem suas borda. Atenção para deixar o eixo do servo mais para o centro.







Usando o triângulo (I) e três parafusos, prenda o servo do pulso.

Obs.: Estes três parafusos não devem precisar de porca, sendo atarraxados diretamente na base.




Esquema elétrico

Na montagem eu tenho duas garras, então, obviamente, eu tenho dois conjuntos de servos aqui no esquema elétrico. Temos dois pares de servos, cada par representando uma garra (pulso e dedos). Para controlá-las, manterei ligados juntos os dois servos dos pulsos, recebendo o mesmo sinal e farei o mesmo com o servos dos dedos de cada garra. Assim os servos dos pulsos receberão o mesmo sinal, enquanto que os servos dos dedos compartilharão o mesmo sinal.  Optei por esta montagem para que ficasse mais simples a montagem das duas garras simultaneamente. Lembrando que esta é apenas uma demonstração, pois você pode separar e colocar dois potenciômetros, um controlando o punho e outro a garra, por exemplo. Para tal, basta modificar o código que eu deixo para download conforme sua necessidade.

Código fonte

Declarações globais

O código fonte é bem simples. Coloquei o pinPot = A0, pois tem que ser analógico. Os pinos para controle do pulso e dos dedos são as saídas 12 e 13. Não se preocupe muito com a ordem agora, pois todos os servos receberam o mesmo sinal. Nas amostras eu leio 1.000 vezes o potenciômetro, faço uma média e mando o comando. Por fim, o float é uma leitura.
 
#include <Servo.> //inclusão da biblioteca de SERVOS

Servo pulso; //criando o objeto Servo para o pulso
Servo dedos; //criando o objeto SERVO para os dedos

const int pinPot = A0; //pino de leitura analógica do potenciômetro
const int pinServopulso = 13; //pino para controle do pulso
const int pinServoDedos = 12; //pino para controle dos dedos
const int amostras = 1000; //quantidade de amostras para cálculo da média

float leitura = 0; //variável que armazenará a leitura do potenciômetro


Setup

Aqui faço o begin do serial, defino o pinPot que é o Input e conecto o pinServopulso e o PinServoDedos. Esse comando é padrão quando mexemos com servo para fazer a conexão com pinos.
 
void setup()
{
  Serial.begin(9600); //iniciando a comunicação serial
  pinMode(pinPot, INPUT); //definindo o pino de leitura  como entrada
  pulso.attach(pinServopulso); //conectando o objeto SERVO do pulso ao pino correspandente
  dedos.attach(pinServoDedos); //conectando o objeto SERVO dos dedos ao pino correspandente
}


Loop

Então, no Loop principal eu faço a leitura e tiro a média, pegando a somatória e dividindo pela quantidade total das leituras. Faço, enfim, o comando map, que nada mais é do que uma regra de 3: eu mapeio de 0 à 1023 equivale de 10 à 170 graus. Partimos para o pulso.write, que escreve o ângulo do PWM e possibilita o controle do pulso. O dedo é o mesmo valor/ângulo, porque, lembrando, só temos um potenciômetro. Portanto, seguimos com um dedos.write também.
Para finalizar, um serial.print só para debugar e ver o ângulo mexendo.
 
void loop()
{
  int i = 0; //variável para a contagem de amostras de leitura
  while (i <= amostras) //loop de amostragem
  {
    leitura = leitura + analogRead(pinPot); //soma de todas as leituras
    i++; //contagem das leituras
  }
  leitura = (leitura / amostras); //calculando a média das leituras

  /*ajustando o intervalo das leituras (0 à 1023) ao
    intervalo de angulos dos servos (0 à 180).*/
  int angulo = map(leitura, 0, 1023, 10, 170);
  /*obs.: utilizaremos de 10 a 170 para evitar que os servos
    travem em seus pontos finais*/
  pulso.write(angulo); //atribuindo o novo angulo ao servo do pulso
  dedos.write(angulo); //atribuindo o novo angulo ao servo dos dedos
  Serial.println(angulo); //enviando o valor do angulo para a saída serial
}



Faça o download dos arquivos:


2 comentários:

  1. Show de bola essa garra! Eu também prefiro o motor de metal do que o servo!

    ResponderExcluir
  2. oi tudo bem o restante do braço rsrsr seria possível mandar

    ResponderExcluir

Tecnologia do Blogger.