Você está na página 1de 25

ESTO-003-17 – Fundamentos de Robótica

Sistema de Troca de Canetas do


Manipulador do Braço Robótico

Projeto “Mundo Colorido”

Prof. Dr. Sandro Vatanabe

2
Paulo César Menegon de Castro RA:11201721788
Adriana Coca Lopes Inocencio RA:11084213

233
Santo André
2019
1. Objetivo
Construção um sistema para seleção de canetas de quatro cores diferentes a
ser instalado no manipulador do braço robótico IRB 1600 (ABB).

2. Introdução
O presente trabalho visa apresentar o desenvolvimento de um sistema de
seleção de canetas de quatro cores diferentes a ser instalado no manipulador robótico
IRB 1600 e assim proporcionar a confecção de desenhos, textos etc nessas cores,
ampliando as possibilidades de projetos para as futuras turmas de Robótica.
Para atingir esse objetivo, peças foram construídas com materiais como
alumínio e PVC e componentes eletrônicos foram utilizados, a fim de formarem um
conjunto a ser instalado no manipulador do braço robótico. Esses materiais são
amplamente disponíveis no mercado tradicional e lojas online, permitindo reparos e
modificações do projeto de maneira fácil e rápida.
O servomecanismo MG995 é o responsável por fazer a movimentação circular
em torno de um eixo e assim proporcionar a seleção da caneta da cor solicitada. Ele
é controlado pelo microcontrolador Atmega 328 (núcleo do Arduino®) e uma biblioteca
específica para controle de servomecanismos instalada no microcontrolador permite,
via modulação PWM (Pulse Width Modulation), controle preciso da posição do eixo do
servomecanismo, num ângulo que varia de 0 a 180°.
O opto acoplador TIL111 é o responsável pelo interfaceamento entre os sinais
de 5V do microcontrolador e os 24V do módulo I/O do braço robótico, isolando esses
dois blocos e eliminando a ocorrência de bouncing causada pelo uso de relês com
essa mesma finalidade de isolamento e interfaceamento, além da resposta mais
rápida, durabilidade muito maior devido à ausência de partes mecânicas e consumo
de energia muito menor que a de um relê.
Três saídas do módulo I/O do braço robótico são utilizadas para o controle do
servomecanismo. Estas saídas mantém 24V quando em nível lógico “1” e 0V quando
em nível lógico “0” e esses estados são alterados mediantes instruções específicas
da linguagem RAPID utilizada para a programação do braço robótico.
Essas instruções alteram os níveis lógicos das portas do módulo I/O, os sinais
são interfaceados pelos opto acopladores (0 – 0V e 24V-5V) e a depender da
combinação dos sinais presentes na entrada do microcontrolador, o servomecanismo
movimentará uma caneta para a posição desejada.

3. Materiais e Equipamentos Utilizados


 1 Manipulador Robótico IRB 1600 6Kg 1,45m 6 eixos - ABB
 1 Servomecanismo MG995
 1 Microcontrolador Atmega 328P
 4 Optoacopladores TIL111
 Fonte de alimentação de 5V x 2A
 6m de cabo manga 6 vias
 1 conector 5 vias para o módulo I/O
 3 LED’s azuis 5 mm
 2 conectores DIN macho 8 pinos
 2 conectores DIN fêmea 8 pinos
 1 placa de cobre de fenolite de 10 x 5 cm face simples
 6 parafusos M2
 12 parafusos panela 3 x 3mm
 1 caixa plástica PATOLA PB 114
 2 espaçadores de nylon de 15mm
 Perfis de alumínio 20 x 20 x 1mm (20cm) e 20 x 50 x 1mm (20cm)
 Tubo PVC 25mm (40cm)
 2 Cap esgoto PVC 100mm
 Ferro de soldar de 20W
 Solda

Demais materiais utilizados constam no item 4 (“Metodologia”) deste relatório.


4. Metodologia
4.1 Sistema de Seleção das Canetas
Várias peças foram confeccionadas utilizando os materiais citados no item 3
desse relatório a fim de proporcionar um conjunto robusto e preciso que pudesse ser
instalado no manipulador do braço robótico como pode ser visto nas Figuras 1 e 2.

Figura 1 – Conjunto completo a ser instalado no manipulador – vista frontal

Figura 2 – Conjunto completo a ser instalado no manipulador – vista lateral


Especial atenção foi dada ao suporte confeccionado para prender o conjunto
no manipulador, utilizado os 4 parafusos M6 de fixação já existentes na flange do
manipulador e permitindo a firme fixação do conjunto proporcionado estabilidade e
precisão dos movimentos necessários para o correto posicionamento das canetas.
Detalhes dessa peça são vistos nas Figuras 3 e 4.

Figura 3 – Suporte a ser instalado no manipulador – vista lateral

Figura 4 – Suporte a ser instalado no manipulador – vista superior


4.2 Interface de controle do servomecanismo e comunicação com o módulo I/O

Figura 5 – Diagrama do circuito montado


Figura 6 – Placa de circuito impresso do circuito da Figura 5

A implantação do circuito em uma placa de circuito impresso, embora seja


trabalhosa e demorada quando comparado ao uso de breadboard, evita muitos dos
defeitos causados por maus contatos, excesso de fios de conexão, possibilidade de
acidentes devido a curto-circuitos e fios partidos, além de proporcionar maior
durabilidade do circuito e um aspecto mais profissional. Para a confecção do
esquemático e do desenho da placa de circuito impresso foi utilizado o programa
Tango-ACCEL, já obsoleto, mas de fácil manuseio.

Figura 7 – Placa de circuito impresso montada e instalada


Para facilitar a montagem e evitar danos causados por ligações indevidas foram
utilizados conectores com guias para ligar o servomecanismo e o módulo I/O a
interface (Figuras 8 e 9). Em relação ao módulo I/O foi utilizado um conector de 5
pinos com guia que só permite o encaixe de maneira correta, evitando danos a
interface e ao módulo I/O (Figura 10).
Também foi prevista a possibilidade de uso de um display LCD para comunicar
ao usuário sobre o funcionamento do sistema, conforme legenda na Figura 7.

Figura 8 – Cabo e conector para conexão interface - servomecanismo

Figura 9 – Cabo e conectores para conexão interface - módulo I/O


Figura 10 – Conector de 5 pinos do módulo I/O

4.3 Simulação RobotStudio


Foi utilizada a ferramenta I/O Simulation para verificar como os sinais na saída
do módulo I/O (DO10_8, DO_7 e DO10_6) se comportavam conforme programados
no RAPID, para verificação de delas, tipo de sinal (pulso, retenção etc), conforme
Figura 11.

Figura 11 – Conector de 5 pinos do módulo I/O

4.4 O módulo I/O DSQC 652 ABB


A comunicação entre a central de controle do braço robótico e a interface de
controle do sistema de seleção de canetas acontece via o módulo I/O DSQC 652 ABB.
O módulo tem 16 saídas (X0 – 1 a 8 e X1 – 9 a 16) e 16 entradas (X3 – 1 a 8 e X4 –
9 a 16). Tanto as saídas como as entradas são isoladas mediante uso de opto
acopladores.
O nível lógico alto corresponde a 24V e o nível lógico baixo corresponde a 0V o que
obriga a algum tipo de condicionamento para compatibilizar seu uso com sinais de 0
a 5V, o que é feito pela interface de controle mediante uso de opto acopladores
TIL111. A Figura 12 mostra o diagrama do módulo DSQC 652.

Figura 12 – Módulo I/O DSQC 652 ABB

Para o funcionamento do módulo, é necessário alimentá-lo com uma tensão de


24V, que é suprida pela própria central de controle do braço robótico, pelo conector
denominado A35 X1. O fio de cor vermelha (24V) deve ser ligado ao pino ‘24V’ de X1
ou X2 (como os pinos são interligados, é indiferente). O fio preto (0V) deve ser ligado
ao pino ‘0V’ de X1 ou X2 (os pinos também são interligados) e também ao pino ‘0V’
de X3 ou X4 se formos utilizar as saídas do módulo. A Figura 13 mostra as conexões
para alimentação do módulo e também do cabo que levará os sinais a interface de
controle (saídas 8,7 e 6 de X0). Foi utilizado um conector de 5 pinos com guias que
impedem ligações de maneira errada, protegendo o módulo I/O de danos.
A partir desse momento o módulo já pode ser utilizado para a comunicação
com a interface de controle.
Figura 13 – Conexões para alimentação do módulo

4.5 Conjunto Montado


As Figura 14 e 15 mostram o conjunto completo com o sistema de seleção de
canetas instalado no manipulador e cabos conectando a interface de controle e o
módulo I/O.

Figura 14 – Sistema de seleção montado no manipulador


Figura 15 – Ligações entre interface de controle e módulo I/O

5. Resultados e Discussão
5. 1 Sistema de seleção das canetas
O projeto e a construção dessa parte demandaram a maior parte do tempo
necessário para a realização do projeto. O suporte deveria apresentar como
características principais:
 Ser leve o suficiente para ser instalado no manipulador robótico. O máximo
suportado pelo manipulador é de 6 quilos, mas com redução dos arcos de
movimentos;
 Capaz de alojar 4 canetas para quadro branco de cores diferentes, que
pudessem ser trocadas com facilidade em caso de necessidade;
 Capaz de proporcionar fixação suficiente e flexível das canetas de modo a
proporcionar o traçado de linhas finas sem trepidações ou interrupções bem
como com sistema de amortecimento para quando em contato com a superfície
a ser desenhada não danificasse a ponta da caneta;
 Um motor leve, com baixo consumo e capaz de proporcionar movimentos
precisos de rotação das canetas, mantendo-as em posição adequada quando
selecionadas, evitando deslocamentos;
 Fixação do conjunto no manipulador de modo a proporcionar um conjunto livre
de trepidações, firmemente acoplado e que permitisse movimentos precisos e
rápidos;
 Feito de materiais duráveis e amplamente disponíveis no mercado.

Depois de algumas alternativas pensadas para a consecução desses objetivos,


foi escolhido o uso de um servo motor, que controlado via modulação PWM, possibilita
movimentos precisos no ângulo de 0° a 180°, mantendo a posição selecionada
enquanto for alimentado e muito mais leve e operando com correntes menores que
motores de passo, por exemplo. Foi escolhido o servomotor MG995, que tem
engrenagens metálicas no seu mecanismo, proporcionando grande durabilidade.
A configuração espacial adotada para o mecanismo de seleção das canetas foi
aquela semelhante a uma luva, com a “palma” sendo instalada no servomecanismo e
capaz de rotação de 0° a 180° e 4 “dedos” correspondendo as 4 canetas (verde, preta,
azul e vermelha), espaçadas entre si por um ângulo de 45°. Dentro de cada um
desses” dedos” há uma mola que permite deslocamento de cerca de 2cm da caneta,
facilitando o ajuste de offset da posição da caneta e permitindo um desenho suave e
preciso sem danificar a ponta da caneta. No final de cada “dedo” há uma redução de
diâmetro que proporciona redução do balanço da caneta quando movimentada ao
desenhar.
Para evitar deslocamentos do eixo de rotação no sentido horizontal e vertical
foi utilizado um rolamento montado em um mancal, muito utilizado no projeto de
impressoras 3D.
Foi ainda confeccionado um suporte feito em chapa de aço para ligar o conjunto
ao manipulador, capaz de ser fixado pelos 4 parafusos M6 da flange do robô,
permitindo um conjunto estável e preciso.
Nessa parte do projeto as maiores dificuldades encontradas foram:
 Corte, furação e preparo dos materiais utilizados, mesmo tendo sido utilizados
materiais como alumínio e PVC. A parte mais trabalhosa para a manipulação
foi o suporte de aço, obrigando ao uso de solda de eletrodo para sua confecção;
 Molas com tamanho e força elástica para uso na movimentação das canetas;
 Instalação da “palma” da luva no eixo de rotação do servomecanismo. Foi
aproveitando um conjunto de engrenagem plástica que vem junto com o
servomecanismo com ranhuras que evitam escorregamento durante a rotação
do eixo, mas que somente permitem encaixes em posições determinadas, o
que levou a ajustes nas posições do servomotor correspondente a cada caneta,
com um deslocamento de 8° da posição inicial (0°).
 Por algumas vezes, durante os testes, a caneta preta foi posicionada com um
pequeno deslocamento em relação a posição definida para o servo. Isso pode
ser devido a algum desgaste das engrenagens do servomotor, o que
demandaria sua troca, mas devido ao tempo exíguo não tivemos tempo de
fazê-lo.
 Pintura de todo o conjunto com tinta preta, levando dias para secar, ainda mais
nos dias frios dessa época do ano.

Os requisitos para essa parte do projeto foram plenamente cumpridas e o


conjunto final pode ser visto na Figuras 1, 2, 3, 4 e 16. O peso final do conjunto é 712
gramas.

5.2 Interface de controle do servomecanismo e comunicação com o módulo I/O


O núcleo da interface de controle é composto pelo microcontrolador
Atmega328P (Arduino Uno®) e a utilização da bilblioteca ‘servo.h’ facilita o controle
do servomotor sendo necessário apenas se definir qual o ângulo para qual o eixo do
servo deve se mover. Os opto acopladores utilizados permitem isolamento elétrico
entre o circuito da interface e o módulo I/O do robô. Mais detalhes podem ser vistos
no item 4.2 desse relatório.
A principal dificuldade observada foi que inicialmente foi prevista alimentação
por uma fonte de 12V e conversão para 5V seria feita por um regulador 7805, mas
durante os testes foi observado que durante algumas vezes ao se movimentar o servo
motor ocorria reset no circuito. Isso foi corrigido pela retirada do 7805 do circuito e
alimentação de 5V proporcionada por uma fonte de 5V x 2A.

5.3 Simulação RobotStudio


Esta parte do projeto também dispendeu uma considerável parte de tempo uma
vez que ao executar as simulações para alterar o estado lógico das saídas sempre
ocorriam erros cuja descrição no ambiente do RAPID não era suficientemente clara
para chegar a uma causa específica. Inicialmente procurou-se alterar o estado lógico
de uma saída simplesmente se escrevendo ‘0’ou ‘1’ nelas, de modo análogo ao que
fazemos para compara o estado lógico presente nas entradas do módulo I/O. Após
uma longa busca por erros nos programas de simulação e não encontra nada de
anormal, resolvemos consultar os materiais fornecidos pelo professor e presentes no
site da disciplina sobre a programação RAPID e encontramos sobre a programação
das saídas do módulo I/O (Manual RAPID – Overview) as instruções presentes na
Figura 16.

Figura 16 – Instruções para mudar o valor de um sinal de saída do módulo I/O

No projeto foi utilizada a instrução Set para levar uma saída para o nível 1 e a
instrução Reset para levar a saída para o nível 0.
Para simular as Digital Outputs (DO’s) do módulo I/O, selecione primeiro a aba
Controller, e na barra à esquerda, expanda a lista Configuration. Nela, clique duas
vezes em I/O System. Na barra à esquerda desta nova janela que se abriu, clique em
Signal e adicione a quantidade de sinais necessária para sua aplicação. Para incluir
um novo sinal, basta clicar com o botão direito do mouse em qualquer sinal desta lista,
e em seguida selecione New Signal. Dê um nome a este sinal (atenção, este nome
deve ser o mesmo que você atribuiu na programação RAPID) e em Type of signal
selecione Digital Output. Agora, para poder simular estas DO’s, basta ir até a aba
Simulation e clicar em I/O Simulation. Em Filter, selecione Digital Outputs. Para mudar
o estado das DO’s, um simples clique é suficiente.
Outro ponto que apresentou problemas foi a escolha do nome das saídas
digitais a serem utilizadas na simulação e que depois seriam utilizadas no módulo de
controle do robô. Na simulação podem ser escolhidos vários nomes diferentes para
essas entradas, mas que devem ser reprogramadas no módulo de controle do robô,
levando a um grande retrabalho e que pode causar erros não facilmente identificáveis.
Para evitar isso, utiliza sempre a denominação DO10_1, DO10_2 até DO10_16 para
denominar essas saídas pois daí o código funcionará tanto na simulação quando na
prática.

5.4 Conjunto Montado


A etapa final do projeto consistiu em testar todos os componentes funcionando
em conjunto. Para tanto, criou-se um código no RAPID cujo objetivo era o de fazer
círculos concêntricos nas cores preta e azul, uma linha no eixo X, outra no eixo Y e
um círculo central na cor vermelha (detalhes no item 7 desse relatório). Esse objetivo
foi plenamente cumprido e demonstrado no laboratório de Robótica, com a seleção
correta de cada caneta e desenhos com linhas finas e precisas. Verificou-se também
as indicações dos LED’s na placa da interface funcionaram corretamente, indicando
qual caneta estava selecionada e se a interface estava ou não ligada ao módulo I/O
do robô (detalhes no item 7 desse relatório).
6. Conclusão e Sugestões
O projeto demandou um grande tempo para execução e testes, muito maior do
que o inicialmente esperado, principalmente devido ao fato do laboratório estar
sempre lotado, sobretudo nas últimas semanas, mesmo em horários extraclasse.
Houve grande dificuldade na utilização do braço robótico pois nosso caso demandava
a instalação do sistema de trocas no manipulador do braço robótico, tendo que
esperar outros grupos terminarem de usar a flange atual (com uma única caneta). Isso
causou grande dificuldade para testar as diversas partes ou mesmo todo o conjunto
de projeto, com os problemas já citados anteriormente. Apesar disso, podemos
concluir que o objetivo principal, que era o de construir um sistema que permitisse a
troca de canetas durante a utilização do robô foi alcançado e para permitir que as
próximas turmas tenham mais opções de projetos, doaremos todo o sistema
para o laboratório de Robótica, permitindo ampliando as possibilidades para
confecção de gráficos, figuras, letras em quatro cores diferentes.
Para enfatizar o que já foi mencionado nas turmas anteriores como sugestões
para o projeto gostaríamos de mencionar que:
 Defina o tema do projeto já nas primeiras semanas de aula, mesmo
que se tenha ainda uma vaga noção do que se pretende fazer;
 Converse sempre com o professor Sandro, que é muito aberto ao
diálogo e sempre disposto a ajudar;
 Converse sempre com os técnicos do laboratório de Robótica que
também foram muito prestativos, com dicas que reduziram bastante
o tempo perdido em erros de programação RAPID;
 Reserve o laboratório em horários extraclasse, ainda mais se o seu
projeto envolver algum tipo de hardware pois mesmo os mais simples
podem ser extremamente trabalhosos;
 Faça um bom relatório que possa servir de fonte de consulta e
inspiração para as turmas futuras.
Apesar de todas as dificuldades enfrentadas, ficamos satisfeitos com
o resultado final, sabendo que existem possibilidades para melhoria, mas foi
extremamente gratificante propor um objetivo e conseguir cumpri-lo no
prazo adequado, contribuindo para nossa formação na disciplina de
Fundamentos de Robótica e mesmo para a nossa vida profissional.
Nosso muito obrigado ao professor Sandro Vatanabe e aos técnicos
Lívia, Natália e Edgard do laboratório de Robótica!
7. Anexos
Fluxograma do código RAPID
Código RAPID
Fluxograma do código Atmega328 (Arduino)
Código Atmega368 (Arduíno)

/*
Projeto "Mundo Colorido"
Interface para a conexao entre o servomecanismo do sistema de selecao de canetas
e o modulo I/O do braço robotico
Versao 13.08.2019
*/

#include <Servo.h> //Biblioteca para controle do servomecanismo


Servo servo; //Cria um objeto servo para controle do servomotor
String corCaneta = ""; //Cor da caneta selecionada
String corCanetaAnterior = ""; //Cor da caneta selecionada anteriormente
int posicao; //Posicao do servo
int ENT1 = A3; //Entrada 1 -> Conectado a saida 8 (DO10_8) do modulo I/O do robo
int ENT2 = A4; //Entrada 2 -> Conectado a saida 7 (DO10_7) do modulo I/O do robo
int ENT3 = A5; //Entrada 3 -> Conectado a saida 6 (DO10_6) do modulo I/O do robo
int LED1 = 9; //Indicador da Entrada 1 do Arduino
int LED2 = 10; //Indicador da Entrada 2 do Arduino
int LED3 = 11; //Indicador da Entrada 3 do Arduino
int SERVO = 4; //PWM do servo
int ent1; //Armazena estado da Entrada 1
int ent2; //Armazena estado da Entrada 2
int ent3; //Armazena estado da Entrada 3

void setup() {
delay(4000); //Atraso para permitir gravacao do programa
servo.attach(SERVO); //Saida PWM no pino 7 do ATMEGA328 para controle do servo
pinMode(ENT1, INPUT); //Definicao de entradas e saidas do ATMEGA328
pinMode(ENT2, INPUT);
pinMode(ENT3, INPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
servo.write(97); //Inicia com a caneta azul selecionada
delay(1000);
}

void moveServo(String cor) {


corCaneta = cor;
if (corCaneta == "verde") { //Posição do servo dada pelas entradas ent1 a ent3
posicao = 8;
digitalWrite(LED1, HIGH); //Caneta selecionada -> Verde = '100'
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
}
else if (corCaneta == "preta") { //Caneta selecionada -> Preta = '001'
posicao = 50;
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
}
else if (corCaneta == "azul") { //Caneta selecionada -> Azul = '010'
posicao = 97;
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
}
else if (corCaneta == "vermelha") { //Caneta selecionada -> Vermelha = '011'
posicao = 143;
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
}
servo.write(posicao);
delay(1000); //Delay para o servo alcancar a posicao
}

void loop() {
ent1 = digitalRead(ENT1); //Le estado das entradas (em 0 quando recebe 1 do modulo I/O)
ent2 = digitalRead(ENT2);
ent3 = digitalRead(ENT3);
ent1 = not (ent1); //Inverte estado das entradas
ent2 = not (ent2);
ent3 = not (ent3);
if (ent3 == LOW && ent2 == LOW && ent1 == HIGH) { //Selecao da caneta verde -> '001'
corCaneta = "verde";
} else if (ent3 == LOW && ent2 == HIGH && ent1 == LOW ) { //Selecao da caneta preta -> '010'
corCaneta = "preta";
} else if (ent3 == LOW && ent2 == HIGH && ent1 == HIGH) { //Selecao da caneta azul -> '011'
corCaneta = "azul";
} else if (ent3 == HIGH && ent2 == LOW && ent1 == LOW) { //Selecao da caneta vermelha -> '100'
corCaneta = "vermelha";
}
else if (ent3 == HIGH && ent2 == HIGH && ent1 == HIGH) { //Modulo ligado ao modulo I/O
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
}
else if (ent3 == LOW && ent2 == LOW && ent1 == LOW) { //Modulo nao ligado ao modulo I/O
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
delay(1000);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
delay(1000);
}
if (corCaneta != corCanetaAnterior) ; //Somente altera a posicao do servo se nova cor selecionada
corCanetaAnterior = corCaneta;
moveServo(corCaneta);
}
}

Você também pode gostar