Ferramentas do usuário

Ferramentas do site


cursos:introrobotica:2019-1:grupo05:tp1

Robô manipulador

Introdução

“Um manipulador robótico pode ser definido como um dispositivo mecânico controlado por software, cuja finalidade é específica para diversos processos automatizados.” (LOPES, 2002).

A construção de peças cada vez mais complexas e maiores torna o uso de manipuladores robóticos ainda mais evidente. Estes realizam trabalhos que humanamente seriam demasiadamente difíceis, ou demandariam tempo demais.

Tem-se, portanto, dimensão da necessidade desse tipo de robô e suas diversas aplicações.

Objetivo

Este Trabalho Prático tem como objetivo a construção de um manipulador que percorra a trajetória pré-estabelecida em um tempo máximo de 3 minutos.

Materiais utilizados

  • Almoxarifado LEGO + peças extras
  • 2 motores 12vdc com redução

Kit Arduino, contendo:

  • Placa Arduino Mega 2560 R3
  • Motor Shield V2
  • LCD Keypad Shield 16×2
  • Sensor Shield
  • Battery pack (8xAA, botão on/off)
  • Cabo USB
  • Fonte de alimentação (12v)

Caixa de ferramentas, contendo:

  • Alicate de Bico 125mm
  • Alicate de Corte Diagonal 125mm
  • Pistola de Cola Quente
  • Ferro de Solda 30W 127V
  • Suporte para ferro de solda com esponja
  • Estilete Grande
  • Sugador de Solda

Testes e decisões

Nosso primeiro desafio foi a escolha dos motores. Inicialmente, nenhum dos motores disponibilizados funcionavam. Conseguimos 2 novos motores em escovas rotativas antigas. Motores estes que estavam de acordo com as especificações, com a caixa de redução. Em seguida, iniciamos a montagem da estrutura do braço. A base do projeto já recebe o primeiro motor e seu trilho, que percorre o eixo x, conforme imagens:

Nesta primeira foto, vemos a base e o trilho, sem o motor.

Nesta segunda foto, vemos a base com o motor montado junto ao trilho.

Em sequência, a parte superior do manipulador (separada da estrutura completa na imagem) conta com o segundo motor, que percorre o eixo y:

Com a estrutura montada e código funcionando, fizemos o primeiro teste:

Contudo, o robô precisa necessariamente conseguir segurar a caneta e desenhar por conta própria. Criamos então um suporte para que o robô pudesse segurar a caneta e desenhar o círculo com perfeição:

Fizemos novos testes com o suporte, com resultados satisfatórios. Equilibramos o peso com peças do LEGO:

Com o software e hardware funcionando, nosso próximo passo foi o aperfeiçoamento do nosso robô. A primeira melhoria observada foi a aproximação do motor de cima ao trilho. Nas fotos acima é possível perceber a distância que se encontrava, e que gerava certa estabilização. Contudo, perdíamos precisão. Adequando o esquema, percebemos que a proximidade traria isto, e a mudança de algumas peças, trariam essa exatidão necessária, e os testes foram satisfatórios.

Seguindo os testes, percebemos que o círculo desenhado pelo braço manipulador não fechava por completo. Incialmente, percebemos que o problema também estava na montagem: a cola quente usada não aderia bem ao motor. Resolvemos esse problema com abraçadeiras e cola quente nas peças que se uniriam ao motor, de forma indireta. Além disso, adequemos a programação para que a parametrização demandasse um pouco mais de tempo. E novos testes foram satisfatórios.

Com o intuito de melhorar a visualização dos desenhos, optamos por trocar a caneta BIC por uma caneta marca-texto. Os vídeos a seguir mostram o funcionamento dos 3 desafios requeridos: a palavra UFMG, um desenho a nossa escolha, que decidimos ser uma estrela de 5 pontas, e um círculo.


Programação

A programação consistia no desenvolvimento do código de controle dos motores DC para realizar o trajeto proposto. Como na proposta o manipulador não possui nenhum tipo de input sensorial, o controle dos motores foi feito através da velocidade e direção com o passar do tempo. Foi baseada, portanto, em parametrização por meio de tempo.

//Vetores velocidade para o cículo em função do tempo:
double x_circle(double inicio, double t){
  return -sin(t/1000+inicio)*1000;
}
double y_circle(double inicio, double t){
  return cos(t/1000+inicio)*1000;
}

Obs.: é possível substituir as funções acima para desenhar outras figuras paramétricas.

//Função que desenha o círculo de forma simplificada:
void draw_CIRCLE(){
  tempo = 0;
  while (tempo < 2*pi*1000) {
    spx = x_circle(0,tempo);
    spy = y_circle(0,tempo);
    motor_x->setSpeed(spx);
    motor_y->setSpeed(spy);
    delay(10);
    tempo += 10;
  }
  motor_x->run(RELEASE);
  motor_y->run(RELEASE);
}
/*Desenhando a letra U:  
  Começa no O, para no X. 
  |      |
  |      |
  |      |
  |      |
  O------|--X
  */
void draw_U(){
  draw_line(0,2);
  draw_line(0,-2);
  draw_line(1,0);
  draw_line(0,2);
  draw_line(0,-2);
  draw_line(0.5,0);
}
/*Desenhando a estrela:
void draw_STAR(){
  draw_line(1.5,3);
  draw_line(1.5,-3);
  draw_line(-3,2);
  draw_line(3,0);
  draw_line(-3,-2);
}

A função draw_line é semelhante à draw_CIRCLE. Porém, não utiliza senos e cossenos, apenas combinações lineares dos vetores (1,0) e (0,1). Nesse caso, o tempo depende do comprimento do vetor.

Resultados finais

Os principais problemas que enfrentamos foi em relação à montagem do robô. Demandou tempo e vários testes até que encontrássemos as soluções ideais e minimalistas para o perfeito funcionamento desse.

Ao final dos testes e adequações da programação, os resultados foram satisfatórios. O robô é compacto e leve, capaz de desenhar com perfeição a palavra UFMG, um círculo perfeito e uma estrela de 5 pontas, no tempo e espaço estipulados.

Tivemos muita satisfação em terminar com louvor este primeiro TP. Abaixo, foto do dia da apresentação do robô manipulador com o grupo.

cursos/introrobotica/2019-1/grupo05/tp1.txt · Última modificação: por 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki