Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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.
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.
/*
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
*/
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 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);
}
}