Ferramentas do usuário

Ferramentas do site


cursos:introrobotica:2019-1:grupo06:tp1

Trabalho Prático 1 - Manipuladores

Introdução

O objetivo dessa documentação é descrever todos os aspectos estruturais e computacionais do robô utilizado no trabalho prático 1. Acompanhado deste relatório estão diversas imagens, que possuem o intuito de deixar a descrição mais clara.

Para esse trabalho, foi construído um robô, que com o auxílio de uma caneta consegue desenhar figuras. Para a avaliação, o robô deverá gerar 3 imagens .

  1. Escrever ‘UFMG’
  2. Desenhar um círculo
  3. Desenho livre - Foi escolhido o desenho de um jogo da forca

Além disso, ele deverá realizar os desenhos em um tempo inferior a 3 minutos e deve ser dimensionado de forma que caiba em uma área demarcada pré estabelecida.

A documentação está dividida em 2 partes : Na primeira é descrita a estrutura física do robô, ou seja, é descrita toda a parte mecânica e elétrica utilizada. Na segunda parte, por sua vez, é descrito o algoritmo utilizado.

Estrutura física

Foi decidido pelo uso de um manipulador com 2 juntas prismáticas. Para isso, dividiu-se o robô em 2 partes: Uma fixa na base e outra suspensa.

A parte fixa é responsável pelo deslocamento do eixo X. Ela possui um motor DC(5V) ligado a engrenagens redutoras. A engrenagem final desse sistema de redução se encontra em posição elevada e é responsável pelo deslocamento da parte suspensa do robô.

Figura 1: Parte fixa do robô Figura 2: Sistema motor-redutor da parte fixa.

A parte suspensa possui, em sua parte inferior, serras (trilho) que se conectam à engrenagem elevada da base, permitindo seu movimento ao longo do eixo X. Além disso, a parte suspensa possui um outro conjunto de motor(5V) e redutores, agora ligado a uma haste com a caneta na ponta, permitindo assim o deslocamento em torno do eixo y.

Figura 3: Engrenagem elevada conectada a parte suspensa do robô. Figura 4: Vista superior da parte suspensa do robô Figura 5: Vista inferior da parte suspensa do robô Figura 6: Partes base e suspensas conectadas.

Algoritmo

Foram usadas as bibliotecas: LiquidCrystal e Adafruit_MotorShield. A estratégia adotada para realizar as tarefas foi acionar os motores com potência (período de PWM) definida por um determinado de período de tempo e definir cada desenho como uma série de acionamentos nos sentidos desejados.

O código teve a separação em 4 arquivos

  • definicoes.h
  • Desenhos.h
  • Desenhos.cpp
  • coloridao.ino

O arquivo definições era o arquivo que associava os parâmetros mecânicos (sentido de rotação dos motores) com suas correspondências práticas (sentido de deslocamento). Dessa forma foi possível escrever os códigos pensando na geometria cartesiana e esse arquivo fazia a equivalência de acionamento.

Código Exemplo
#ifndef __apelidos__
#define __apelidos__
 
/*  Definicoes de Motores */
#define pino_motor_X 4       // pino do motor eixo X
#define DIREITA  FORWARD   // Sentido motor X
#define ESQUERDA BACKWARD // Sentido motor X
#define pino_motor_Y 3    // pino do motor eixo y
#define CIMA  FORWARD     // Sentido motor X
#define BAIXO BACKWARD    // Sentido motor X

O arquivo Desenhos.h definia as funções implementadas responsáveis pelo movimento do robô, tanto para testes quanto para, principalmente, desenhar. Os algoritmos dos desenhos foram relativamente simples, baseados na distância percorrida por cada dimensão separadamente. Nos desenhos, o algoritmo da letra M e do círculo tiveram dois motores acionados simultaneamente sendo que em M a potência não foi uma preocupação. Já no círculo, colocamos um eixo para se deslocar com potência constante enquanto o outro variava a potência. Em cada um dos 4 loops for, um para cada quadrante do círculo, acontecia uma varredura dos valores de potência do motor, variando entre 60 e 180 (ou de 180 a 60 dependendo do sentido). O círculo ficou deformado e acreditamos que isso tenha acontecido em função de a correspondência entre velocidade e potência não ser linear, de forma que a nossa tentativa de variar não linearmente com o loop for não foi bem sucedida.

Código Exemplo

Esse exemplo mostra como seria feito o acionamento para fazer um risco horizontal e voltar para o ponto inicial.

void teste_motor_X(){
  Serial.println("X Andando");
  motor_X->setSpeed(SAFE_SPEED);
  motor_X->run(DIREITA);
  delay(3000);
  motor_X->run(RELEASE); delay(10);
  motor_X->run(ESQUERDA);
  delay(3000);
  motor_X->run(RELEASE); delay(10);
}

Em coloridao.ino foi feita a interface humano-máquina, em que os botoes são interpretados para chamar funções de Desenhos.h e alterar o texto no display.

Desafios

Dificuldades foram encontradas em diversas etapas do trabalho e referentes às diversas disciplinas da robótica: o acionamento dos motores ser muito diferente de um eixo para outro, o algoritmo apropriado para desenhar o círculo, realizar montagem de caixa de redução estável sem forçar o eixo do motor DC. Mas certamente a pior parte da construção desse projeto foi fixação da caneta pelos seguintes motivos: a criação de uma peça adequada usando o lego é difícil; a caneta por vezes fica presa demais e por vezes não alcança o papel em função de alteração da posição de apoio ao percorrer o eixo Y e, consequentemente o equilíbrio do eixo.

Registro AudioVisual

Playlist com Todos Vídeos
Desenhando UFMG

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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki