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.
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.
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.
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:
3 Comentários
Show de bola essa garra! Eu também prefiro o motor de metal do que o servo!
ResponderExcluiroi tudo bem o restante do braço rsrsr seria possível mandar
ResponderExcluirExcelente didática e material para execução do projeto.
ResponderExcluir