0% acharam este documento útil (0 voto)
7 visualizações57 páginas

Relat 3

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1/ 57

CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA

DE SANTA CATARINA
UNIVERSIDADE FEDERAL DE SANTA CATARINA
DEPARTAMENTO DE AUTOMAÇÃO E SISTEMAS
LABORATÓRIO DE AUTOMAÇÃO INDUSTRIAL
CURSO TÉCNICO DE ELETROTÉCNICA - Código 02

Relatório de Estágio Curricular

Florianópolis
Abril de 2004
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA
DE SANTA CATARINA
UNIVERSIDADE FEDERAL DE SANTA CATARINA
DEPARTAMENTO DE AUTOMAÇÃO E SISTEMAS
LABORATÓRIO DE AUTOMAÇÃO INDUSTRIAL
CURSO TÉCNICO DE ELETROTÉCNICA - Código 02

Relatório de Estágio Curricular

Relatório de Estágio Curricular do Centro


Federal de Educação Tecnológica de Santa
Catarina, realizado na Universidade Federal
de Santa Catarina - Departamento de Au-
tomação e Sistemas - Laboratório de Au-
tomação Industrial

Rodolfo Gondim Lóssio

Florianópolis
Abril de 2004
DEDICATÓRIA

A
Ivando
Marlize
Rodrigo
e Junior
AGRADECIMENTOS

Queria agradecer ao Professor Marcelo Stemmer, por ter me dado a oportunidade


de estagiar no Projeto Roboturb. Ao Engenheiro Emerson Raposo, por ter orientado
meu trabalho e ter sido meu supervisor de estágio. Ao Engenheiro Rafael Leal, pelas
orientações tanto profissionais como pessoais. Ao recente Engenheiro formado Augusto
de Conto, por ter me auxiliado em algumas atividades dentro do Projeto. Ao colega de
trabalho e estudo Vitor Bazzo, por ter sempre me apoiado nas atividades desenvolvidas no
Projeto. Aos colegas de estudo Rodolfo Flesch e Adriano Bess, por terem opinado sobre
este relatório. E a todos que me ajudaram diretamente ou indiretamente para realização
desse estágio.
SUMÁRIO

Lista de Figuras

1 Introdução 8

2 A empresa 10

3 Cronograma de Atividades 11

4 Atividades Desenvolvidas 12

4.1 Curso da Linguagem de Programação C/C++ . . . . . . . . . . . . . . . . 12

4.1.1 Por que a Linguagem C/C++? . . . . . . . . . . . . . . . . . . . . 12

4.1.2 Conceitos Básicos da Linguagem C . . . . . . . . . . . . . . . . . . 14

4.1.2.1 Variáveis, Constantes e Ponteiros . . . . . . . . . . . . . . 15

4.1.2.2 Entrada/Saı́da do Console . . . . . . . . . . . . . . . . . . 16

4.1.2.3 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4.1.2.4 Laços . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4.1.2.5 Comandos para Tomada de Decisão . . . . . . . . . . . . . 18

4.1.2.6 Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

4.1.2.7 Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4.1.2.8 Estruturas . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4.1.2.9 Alocação Dinâmica de Memória . . . . . . . . . . . . . . . 20

4.1.2.10 Manipulação de Arquivos . . . . . . . . . . . . . . . . . . 20

4.1.2.11 Projeto do Curso da Linguagem C . . . . . . . . . . . . . 21


4.1.3 Programação em C++ . . . . . . . . . . . . . . . . . . . . . . . . . 21

4.1.3.1 Classes e Objetos . . . . . . . . . . . . . . . . . . . . . . . 22

4.1.3.2 Sobrecarga de Operadores . . . . . . . . . . . . . . . . . . 23

4.1.3.3 Herança . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.1.4 Interface Gráfica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

4.2 Projeto com Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

4.2.1 Modelagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4.2.2 Implementação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

4.3 O robô . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

4.3.1 Caracterı́sticas do robô . . . . . . . . . . . . . . . . . . . . . . . . . 28

4.3.2 Controle Remoto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

4.3.3 Rotinas de movimento do robô . . . . . . . . . . . . . . . . . . . . . 31

4.4 Montagem do Controle Remoto (CR) . . . . . . . . . . . . . . . . . . . . . 32

4.4.1 O controle remoto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

4.4.2 Montagem interna . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

4.4.2.1 Conexão do controle remoto com o controlador . . . . . . 34

4.4.2.2 Regulador de tensão . . . . . . . . . . . . . . . . . . . . . 36

4.4.2.3 Display . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

4.4.2.4 Joystick . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

4.5 Implementação de um Software usando CR . . . . . . . . . . . . . . . . . . 38

4.5.1 Movimentando o robô com CR . . . . . . . . . . . . . . . . . . . . 39

4.5.2 O problema a ser implementado . . . . . . . . . . . . . . . . . . . . 40

4.5.3 Como funciona o programa . . . . . . . . . . . . . . . . . . . . . . . 40

4.6 Implementação de um Software para execução de trajetórias . . . . . . . . 41

4.6.1 Trajetória de Medição . . . . . . . . . . . . . . . . . . . . . . . . . 42


4.6.2 Trajetória de Soldagem . . . . . . . . . . . . . . . . . . . . . . . . . 43

4.7 Integração do trigger no controlador . . . . . . . . . . . . . . . . . . . . . 45

4.7.1 Conexão do trigger . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

4.7.2 Função do trigger . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

4.8 Integração da Soldagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

4.8.1 Processo de Soldagem . . . . . . . . . . . . . . . . . . . . . . . . . 47

4.8.2 Controle da Soldagem . . . . . . . . . . . . . . . . . . . . . . . . . 48

4.8.3 Implementação da Comunicação com a DIGITEC . . . . . . . . . . 48

4.8.3.1 Enviando parâmetros de soldagem . . . . . . . . . . . . . 49

5 Conclusões 50

Anexo A -- Programa da Calculadora 52

Anexo B -- Jantar dos Filósofos 53

Anexo C -- Especificação do Regulador de Tensão 54

Referências 56
LISTA DE FIGURAS

1 Construção de uma aplicação . . . . . . . . . . . . . . . . . . . . . . . . . 15

2 Vista aérea do jantar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3 Situação de deadlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

4 Controlador do Projeto Roboturb . . . . . . . . . . . . . . . . . . . . . . . 29

5 Estrutura fı́sica do robô . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

6 Foto real do controle remoto . . . . . . . . . . . . . . . . . . . . . . . . . . 32

7 Computador Industrial (PXI) . . . . . . . . . . . . . . . . . . . . . . . . . 34

8 Conector LEMO, vista pelos pinos de ligação . . . . . . . . . . . . . . . . . 35

9 Esquema de ligação da placa reguladora de tensão . . . . . . . . . . . . . . 36

10 Ligações do teclado e botoeiras . . . . . . . . . . . . . . . . . . . . . . . . 37

11 Ligação das manoplas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

12 Ligação das Chaves e do track-wheel . . . . . . . . . . . . . . . . . . . . . 39

13 Detalhe das várias camadas do cabo coaxial e o conector macho BNC . . . 46


1 INTRODUÇÃO

Hoje em dia é comum empresas investirem em novos ramos que surgiram com o apa-
rato tecnológico, tais como as áreas de automação e robotização. Isso porque algumas
vantagens desses processos caracterizam, muitas vezes, a elevação da qualidade e da quan-
tidade do trabalho em relação à mão-de-obra humana e até a substituição da atividade
do homem em lugares de difı́cil acesso e insalubres.

As ferramentas mais utilizadas para caracterizar os tais processos citados são a


eletrônica, a programação e a mecânica, sendo que a união desses recursos muitas vezes
pode constituir um robô. Entende-se que robô é uma máquina multi-funcional e repro-
gramável que é projetada para mover materiais, componentes, ferramentas ou dispositivos
especiais. Basicamente ele é constituı́do por um manipulador, que tem como objetivo re-
alizar movimentos, e um controlador, responsável pelo monitoramento e determinação do
movimento[10].

Uma das finalidades deste relatório é descrever atividades referentes a um eventual


processo de execução e controle de movimento de um robô. O conteúdo do mesmo abrange
desde os primeiros passos de programação até a criação de um software (programa) ma-
nipulador de um robô. Com tanto, as atividades que serão descritas foram desenvolvidas
pelo estagiário durante o perı́odo de estágio curricular que se estendeu entre 09/06/2003
e 12/03/2004.

A etapa inicial do estágio foi realizada no Laboratório de Automação Industrial, loca-


lizado no Centro Tecnológico da Universidade Federal de Santa Catarina. Essa primeira
parte constitui-se pelo aprendizado de programação. As restantes etapas foram realizadas
na sala onde está fixado o robô de trabalho, também localizado no Centro Tecnológico.

Esse robô faz parte de um projeto chamado Roboturb que visa criar um sistema au-
tomatizado capaz de realizar recuperação de superfı́cies erodidas por cavitação de rotores
de turbinas de hidrelétricas de grande porte. Esse sistema será dotado de uma etapa de
9

medição da área de trabalho e uma etapa de soldagem da superfı́cie danificada. Aderindo


às vantagens de um tı́pico processo de automação, a utilização desse sistema irá aumentar
a qualidade da soldagem aplicada na superfı́cie, e também irá substituir a ação do homem
nesse contexto, uma vez que o ambiente de trabalho é úmido e apertado, extremamente
insalubre ao soldador.

A primeira seção, dentro do capı́tulo das atividades desenvolvidas, apresenta um curso


das linguagens de programação C e C++, justificando o seu uso no Projeto e comentando
todos os conceitos relevantes para a realização das atividades posteriores. Já na segunda
seção, implementou-se um programa feito nessa linguagem que envolve processamentos
paralelos, muito importantes para o controle de movimento em tempo real do manipula-
dor.

Na seção três, descreve-se as caracterı́sticas básicas de um robô. Uma das carac-


terı́sticas que o robô do Projeto Roboturb apresenta é a possibilidade do operador usar
um controle remoto (CR). Na seção quatro, encontra-se como é feita a montagem desse
CR. Basicamente, a construção trata-se da montagem interna de dois blocos distintos, o
display e o joystick. Com um pacote computacional que trabalha com esses dois blocos,
implementou-se um programa que utiliza o CR para movimentar o manipulador. Na seção
cinco, apresenta-se a descrição desse programa.

Outra caracterı́stica funcional de um robô é a possibilidade de executar trajetórias.


Na seção seis, implementou-se um programa para executar trajetórias tanto de soldagem
como de medição. Esses dois processos possuem peculiaridades a parte, por tanto, é
descrito as funcionalidades de cada um.

Para concretizar as etapas de medição e soldagem, foi preciso primeiramente trabalhar


com componentes fı́sicos, tais como a máquina de solda e o sensor laser. Basicamente,
a etapa de medição possui uma câmera e um sensor laser para extrair informações da
região de trabalho. Na seção sete, descreve-se como foi integrada a alimentação do sensor
no sistema de medição.

Já a etapa de soldagem, necessita-se integrar uma comunicação do computador com


a máquina de solda. Na seção oito, descreve-se como funciona o processo de soldagem e
como se implementou o programa que realiza a comunicação com a máquina.
2 A EMPRESA

O Laboratório de Automação Industrial (LAI) do Departamento de Automação e


Sistemas (DAS), estabelecido no Centro Tecnológico da Universidade Federal de Santa
Catarina (CTC/UFSC), fundou juntamente com outros laboratórios do CTC/UFSC e com
o Instituto de Tecnologia para o Desenvolvimento (LACTEC), localizado no Paraná, o
projeto Roboturb em 1998. O projeto está dividido em várias equipes provenientes desses
laboratórios. A equipe do LAI está nomeada como a Equipe de Software, responsável
pela integração dos trabalhos realizados nos outros laboratórios.

A fundação desse projeto deveu-se a um edital lançado pela Companhia Paranaense de


Energia (COPEL), atuante na área de geração de energia elétrica. A partir da aprovação
do edital, o Roboturb conseguiu junto ao Programa de Desenvolvimento de Recursos
Humanos para Atividades Estratégicas (RHAE), financiamento de bolsas e equipamen-
tos. Mais tarde, outra empresa do ramo de geração de energia elétrica interessou-se pelo
projeto, a Furnas Centrais Elétricas, que passou a financiá-lo também.

Esse ambicioso projeto caracterizou a construção de um dos primeiros robôs total-


mente brasileiro, no que diz respeito à estratégia, montagem e controle. Somente alguns
componentes fı́sicos foram importados para a construção, tais como os motores e as placas
de potência. O término do projeto está previsto para outubro de 2004.
3 CRONOGRAMA DE
ATIVIDADES

Durante 10 meses foram feitas nove atividades. Cada ponto da tabela relaciona uma
atividade realizada com a semana correspondente.

Perı́odo Junho Julho Agosto Setembro Outubro


2003 - semanas - - semanas - - semanas - - semanas - - semanas -
Atividades 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4

Curso da Lin- • • • •
guagem C
Curso da Lin- • • • •
guagem C++
Projeto C++ • • •
com Threads
Montagem • • • • •
do Controle
Remoto (CR)
Implementação • • • •
dum Software
usando CR
Perı́odo Novembro Dezembro Janeiro Fevereiro Março
2003/2004 -semanas- - semanas - - semanas - - semanas - - semanas -
Atividades 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4

Implementação • • • • • •
dum Software
para execução
de trajetórias
Integração do • • •
trigger no con-
trolador
Integração do • • • • •
Sistema de
Soldagem
Manutenção • • • • • • •
do Software
4 ATIVIDADES
DESENVOLVIDAS

Os trabalhos realizados no estágio serão apresentados seguindo a ordem que está no


cronograma de atividades. Observa-se que as primeiras seções são base do entendimento
de seções posteriores, devido ao uso constante de termos especı́ficos encontrados na área
de programação.

4.1 Curso da Linguagem de Programação C/C++

O curso a seguir foi ministrado ao estagiário por causa do constante uso da pro-
gramação para o cumprimento das tarefas realizadas ao longo do estágio, principalmente
atividades relacionadas com a construção de programas. Nesse capı́tulo descreve-se o
porquê do uso da programação, bem como a explicação teórica dos tópicos aprendidos no
curso.

Na criação de um programa é preciso antes escolher uma linguagem de programação.


Pode-se fazer uma analogia com a produção de um livro, onde antes de tudo é necessário
escolher com que idioma ele será escrito. E essa escolha é influenciada por vários motivos -
o domı́nio do autor sobre o idioma, o público-alvo. Na programação o motivo mais impor-
tante é a área da aplicação do programa. Atualmente, têm-se vários tipos de linguagens
para fazer programas para computador, como PASCAL, JAVA, C, C++, ASSEMBLY.
Cada uma com suas vantagens e desvantagens.

4.1.1 Por que a Linguagem C/C++?

Uma linguagem pode ser definida como de nı́vel baixo, médio e alto. Esses nı́veis
caracterizam a forma de como se programa. A linguagem de baixo nı́vel é voltada para
13

a máquina, ou seja, é escrita utilizando instruções do microprocessador do computador.


Já a linguagem de alto nı́vel é voltada para o homem, geralmente utilizam uma sintaxe
mais estruturada e organizada. E finalmente a linguagem de nı́vel médio é uma mistura
dos outros dois tipos.

Para diferenciar a forma de resolver um problema utilizando os diferentes nı́veis de


programação imagine o seguinte problema: desenhar um quadrado. Uma possibilidade
seria desenhar ponto por ponto esse quadrado (baixo nı́vel), ou traçar quatro linhas de
tal forma que se desenhe um quadrado (nı́vel médio), ou ainda ter um carimbo com o
formato de um quadrado (alto nı́vel).

Outro exemplo, usando agora o hardware (parte fı́sica) de um computador, seria


a impressão de um texto. Aceita-se que para imprimir um texto é necessário enviar um
conteúdo e a fonte (tamanho e tipo de letra) do mesmo para impressora. Possı́veis soluções
seriam mandar para a impressora letra por letra, linha por linha ou ainda o texto inteiro.
Note que enviando letra por letra é possı́vel criar uma palavra, ou uma frase ou o texto
inteiro com diversas fontes. Já enviando linha por linha, o texto poderia ter somente
linhas com fontes diferentes, e a última possibilidade somente teria o texto inteiro com
um único tipo de fonte.

Uma conclusão que se pode tirar a partir desses exemplos é que uma linguagem de
baixo nı́vel é muito flexı́vel, porém complicada e trabalhosa, já uma linguagem de alto
nı́vel é o oposto, fácil de trabalhar e não muito flexı́vel.

Outra nomeação para as linguagens de programação é que elas podem ser do tipo
linear, estruturada ou orientada a objeto.

Linguagens lineares são bem primitivas e geralmente são caracterizadas como de baixo
nı́vel. A idéia de linearidade consiste em ter uma lista de comandos e um ponteiro que
aponta para um determinado comando dessa lista. Então toda vez que for executado um
comando, ele pula para o próximo comando da lista.

Linguagens estruturadas variam entre nı́vel baixo e médio. Elas usam conceitos de pro-
cedimentos e funções, que se interligam através de três mecanismos básicos: a sequência,
tomada de decisão e iteração. Esses itens tornam mais legı́vel e organizado o programa.

Já as linguagens orientadas a objeto são de alto nı́vel e têm tem como principal ob-
jetivo atingir um desenvolvimento interativo e incremental, criação rápida de protótipos,
códigos reutilizáveis e extensı́veis através do encapsulamento dos dados e uma modela-
14

gem do problema a ser solucionado. A análise, projeto e programação orientada a objetos


são as respostas para o aumento da complexidade dos ambientes operacionais (Windows,
GNU/Linux) que se caracterizam por sistemas heterogêneos, distribuı́dos em redes, em
camadas e baseados em interfaces gráficas.

O software controlador de um robô tanto utiliza caracterı́sticas de baixo nı́vel como


de alto nı́vel. A parte de baixo nı́vel concentra-se na comunicação com o hardware do
robô, já a parte de alto nı́vel concentra-se na apresentação visual do software, isto é, a
interface gráfica para o usuário.

A partir desses previstos, determinou-se que uma boa linguagem de programação


para o software do Projeto Roboturb seria a linguagem C/C++. Na verdade somente
a linguagem C é do tipo estruturado e médio/baixo nı́vel, já a linguagem C++ é uma
evolução da linguagem C, sendo orientada a objeto. Nos dias atuais, são bastante empre-
gadas na indústria essas duas linguagens, por serem fáceis de trabalhar com os periféricos
(ferramentas auxiliares de um computador, como teclado, impressora...) e pela evolução
de ambientes de desenvolvimento, que a cada dia fornece facilidades para trabalhar com
interfaces gráficas.

4.1.2 Conceitos Básicos da Linguagem C

Com uma linguagem computacional em mãos, é possı́vel criar um código fonte que
posteriormente será compilado. A compilação consiste em transformá-lo em arquivos
do tipo .obj que formarão uma aplicação. No caso da linguagem C, o código fonte
deverá ter uma extensão do tipo .c, isto é, o arquivo a ser compilado deverá ser do tipo
nomeDoArquivo.c.

Uma vez compilado um arquivo .c, é preciso utilizar o chamado ligador, responsável
pelo ligamento dos .obj . Após essa etapa, tem-se como saı́da uma aplicação, que poderá
ter, por exemplo, um sufixo do tipo .exe1 , que caracteriza um arquivo de execução, diga-
se por passagem, um programa. Porém, é possı́vel gerar outros tipos de extensões, tal
como o .dll2 , que caracteriza um aglomerado de funções num arquivo que pode ser usado
em outras aplicações.

Um programa em C é composto por funções, isto é, porções menores de código que
1
extensão dos binários do Windows
2
extensão das bibliotecas do Windows
15

realizam determinadas tarefas, e por dados, ou seja, variáveis ou tabelas que são decla-
radas antes do inı́cio do programa. Existe uma função especial denominada main, onde a
execução do programa se inicia. As funções podem ser organizadas em módulos agrupa-
dos em arquivos fonte. Em C, é de suma importância a separação do código em arquivos,
principalmente para programas complexos e grandes. O arquivo fonte principal, passado
como argumento para o compilador, define uma unidade de compilação[2]. Veja a figura
1.

Figura 1: Construção de uma aplicação

4.1.2.1 Variáveis, Constantes e Ponteiros

As variáveis são caracterı́sticas comuns a todas linguagens de programação. Uma


variável em C é um espaço da memória reservado para armazenar um certo tipo de dado
e tendo um nome para referenciar o seu conteúdo.

Elas podem assumir diferentes tipos de dados, e cada tipo ocupa uma certa quantidade
de espaço na memória em bytes3 . Em C existem apenas cinco tipos básicos de variáveis,
ver tabela 1.

As constantes são uma espécie de variável fixa, isto é, variáveis que não podem ser
modificadas no programa, ou seja, são variáveis mantidas constantes pelo compilador.
3
unidade básica de memória computacional
16

Tipo Categoria Tamanho


char Caracter 1 byte
int Inteiro 2 bytes4
float Real de ponto flutuante 4 bytes
double Real de ponto flutuante de dupla precisão 8 bytes
void Sem valor -

Tabela 1: Tipos de variáveis

Como foi dito, toda variável possui um espaço reservado na memória. Para garantir
que esse lugar na memória não seja violado, define-se um endereço na memória para
cada variável. É a partir dessa idéia que se criou um conceito chamado ponteiro, uma
ferramenta extremamente poderosa que a linguagem C oferece.

Basicamente, um ponteiro é uma representação simbólica de um endereço. Portanto,


utiliza-se o endereço de memória da variável para acessá-la. Logo o conteúdo de um
ponteiro é nada mais do que um endereço de memória. Este endereço é a localização de
outra variável na memória[1].

4.1.2.2 Entrada/Saı́da do Console

Console é uma interface de comunicação com o usuário que possibilita a saı́da e entrada
de dados. A entrada de dados geralmente é estabelecida através do teclado. E a saı́da
compreende mostrar caracteres e textos no painel do console.

É muito importante conhecer as rotinas de entrada e saı́da do console, pois com elas
se pode criar elementos gráficos, ou seja, programas com interface gráfica. As aplicações
feitas durante o curso da linguagem C foram compiladas para DOS (Sistema Operacional
de Disco).

4.1.2.3 Operadores

A linguagem C oferece diversos tipos de operadores, que facilitam muito a imple-


mentação de problemas tanto matemáticos como lógicos. O programa da calculadora
não seria viável caso não existisse os operadores aritméticos, responsáveis pelas operações
básicas da matemática.

Outros importantes operadores são os relacionais, usados para fazerem comparações.


As saı́das desses operadores podem assumir falso ou verdadeiro. A condição falsa é repre-
17

sentada com o sı́mbolo ZERO (0), já a condição verdadeira pode assumir qualquer valor
diferente de zero e é representado pelo sı́mbolo UM (1).

Há também a possibilidade de fazer comparações bit a bit5 . Para tanto se utilizam os
operadores lógicos binários.

Nos dois operadores descritos acima de comparação, há a possibilidade de usar:

• Operador E (pelo menos uma condição falsa pra o resultado ser falso);

• Operador OU (pelo menos uma condição verdadeira para o resultado ser verdadeiro);

• Operador NÃO (inverte a condição falsa ou bit 0 para verdadeiro ou 1, e vice-versa);

Existem também os operadores para ponteiro, operadores incrementais (incrementa


ou diminui em 1 uma variável) e operadores de atribuição (atribui a uma variável um
novo valor com uma determinada operação aritmética).

4.1.2.4 Laços

A idéia de laço é ter um pedaço de código que é reutilizado para fins de organização
e compactação. Por exemplo, imagine imprimir na tela cem (100) vezes a mesma frase.
Há duas maneiras de fazer essa impressão, uma seria escrever 100 vezes a frase, a outra
seria criar um laço que contenha a frase a ser repetida 100 vezes.

A estrutura básica de um laço é constituı́da de uma expressão de teste e uma ou


um conjunto de instruções. Verifica-se se a expressão de teste é verdadeira, caso seja,
executa-se as instruções determinadas; caso contrário, o laço é encerrado. Ao final das
instruções determinadas, verifica-se novamente a expressão de teste, até que o laço seja
encerrado.

Em C existem três estruturas principais de laço: FOR, WHILE e DO-WHILE.

O laço FOR é muito útil quando é desejável repetir num número finito de vezes um
certo pedaço de código que necessita ter um controle do número de iterações6 .
5
O bit significa dı́gito binário. 1 byte possui 8 bits, sendo que cada bit pode assumir o valor de 0 ou
1. Por exemplo, a representação binária do número 7 é dada pelos seguintes bits 00000111
6
número de vezes que o laço é reiniciado
18

Já o laço WHILE é geralmente usado quando se queira um laço infinito, isto é, um laço
que sempre repetirá a instrução determinada. Também pode ser usado quando é preciso
repetir um número indeterminado de vezes.

E finalmente o laço DO-WHILE, muito semelhante ao WHILE, com a única diferença que
inicialmente executa-se a instrução determinada, e só depois se verifica a expressão de
teste.

Há dois comandos importantes para desvio de laços, o CONTINUE e o BREAK

O comando CONTINUE força a próxima iteração do laço e pula as instruções que esti-
verem abaixo.

O comando BREAK encerra imediatamente um laço.

4.1.2.5 Comandos para Tomada de Decisão

Esses tipos de comandos são fundamentais para uma linguagem de programação.


A partir deles pode-se definir variantes de caminho dentro do código de acordo com
expressões condicionais. A linguagem C oferece três tipos de comandos para tomada de
decisão: IF, IF-ELSE, SWITCH.

O comando IF é usado para testar uma condição, caso seja verdadeira ele executa a
instrução definida; caso contrário, ele ignora a instrução definida.

Já o comando IF-ELSE define duas instruções, uma para a condição verdadeira e outra
para condição falsa.

E finalmente o comando SWITCH define várias instruções de acordo com o valor de


uma variável.

4.1.2.6 Funções

As funções servem para agrupar um conjunto de instruções. Uma vez implementadas


corretamente, não é mais necessário reescrever essas instruções dentro de sua aplicação.

Na seção 4.1.2.2 citou-se as funções para console. Com elas não é preciso reescrever
nenhuma linha de código de como é o procedimento de impressão ou leitura no console,
somente usam-se as funções fornecidas por esse serviço.

Outra função importante citada foi na seção 4.1.2, a função main, responsável pelo
19

inı́cio do programa.

Uma função em C pode receber parâmetros quando solicitada, e também retornar


valores a quem a solicitou. Por exemplo, nas funções de impressão no console é preciso
passar como parâmetro o texto que será impresso. Já algumas funções de leitura retornam
valores obtidos na entrada via teclado.

As funções quando bem empregadas, facilitam bastante a organização modular do


programa, permitem a reutilização de partes do programa e facilitam a sua manutenção[1].

4.1.2.7 Matrizes

Uma matriz é um tipo de dado usado para representar uma certa quantidade de
variáveis do mesmo tipo.

Por exemplo, caso queira-se armazenar as notas de uma turma de 50 alunos. Pode-se
criar uma matriz de 50 elementos do tipo inteiro.

A linguagem C fornece várias funcionalidades para trabalhar com matrizes - acesso aos
elementos a partir de um ı́ndice, alocação de memória estática na declaração da matriz,
declaração de matrizes bidimensionais, tridimensionais. . . .

Outra utilidade de matrizes muito importante em C é a construção de matrizes de


caracteres. Com ela se pode criar as chamadas strings 7 , essenciais para o trabalho com
palavras e textos.

Em C existem várias funções para manipular strings, tais como funções para com-
paração, para obtenção do número de caracteres, para concatenação8 e para copiar o
conteúdo de uma string à outra.

4.1.2.8 Estruturas

Estruturas são um conjunto de dados de diferentes tipos. Note que uma matriz é um
conjunto de dados com tipos iguais. Sendo assim, uma estrutura pode conter matrizes
e/ou tipos básicos de dados.

A grande vantagem das estruturas é a possibilidade de criar um novo tipo de dado de


maior complexidade que os tipos que a linguagem C fornece. Por exemplo, é preciso criar
7
série de caracteres que são processados como uma unidade de informação
8
juntar duas palavras
20

uma estrutura que represente um ponto num sistema cartesiano. A representação de um


ponto cartesiano é dado pelo par (x,y), logo essa estrutura deverá ter duas variáveis do
tipo inteiro.

Outro exemplo de maior complexidade seria uma estrutura que representasse a ficha
básica de um funcionário. A estrutura deve conter uma string para o nome da pessoa,
um tipo inteiro para a idade, um tipo float para o salário.

Como nas matrizes, é possı́vel ter acesso a todos os elementos da estrutura. Dessa
forma pode-se trabalhar separadamente com os tipos básicos de variáveis da própria es-
trutura.

4.1.2.9 Alocação Dinâmica de Memória

Na seção 4.1.2.1, definiu-se o que é um ponteiro. Ponteiros são tipos de dados que
armazenam o endereço de memória onde uma variável armazena o seu dado. Desta forma,
emprega-se o endereço dos ponteiros como uma forma indireta de acessar e manipular o
dado de uma variável.

Uma das grandes utilidades dos ponteiros é a possibilidade da alocação dinâmica de


memória, isto é, pode-se alocar memória em tempo de execução. Ao contrário da alocação
estática de memória, que é feita em tempo de compilação.

Por exemplo, declara-se uma variável normal do tipo inteiro. O sistema irá alocar
estaticamente dois bytes na memória. Agora considere um ponteiro do tipo inteiro. Com
essa declaração é possı́vel alocar memória para múltiplos de dois bytes no meio da execução
do programa. Note que depois de alocada dinamicamente a memória para esse ponteiro,
ele se comportará como uma matriz do mesmo tipo do ponteiro.

Como C é uma linguagem extremamente flexı́vel para alocação de memória, há também
a possibilidade de liberar a memória através de funções determinadas para esse fim.

4.1.2.10 Manipulação de Arquivos

A linguagem C fornece várias funções que trabalham com arquivos, tanto para escrita
e leitura de dados. É interessante comentar que a abertura de arquivos pode ser tanto em
modo binário como em modo texto.

Arquivos em modo texto operam com dados armazenados em formato texto, ou seja,
21

os dados são traduzidos para caracteres e estes caracteres são escritos nos arquivos. Por
esta razão, fica mais fácil de compreender os seus formatos e localizar possı́veis erros[1].

Arquivos em modo binário operam em dados binários, ou seja, os dados escritos


neste formato são escritos na forma binária, não necessitando de nenhuma conversão do
tipo do dado utilizado para ASCII9 e ocupando bem menos memória de disco (arquivos
menores)[1].

4.1.2.11 Projeto do Curso da Linguagem C

Para complementar o curso da linguagem C, especificou-se a criação de um programa


que envolvesse a maioria dos tópicos aprendidos na teoria. Como projeto, implementou-se
um programa de calculadora para console.

Como foi comentado na seção 4.1.2.2, o programa foi criado para DOS. No anexo A
encontram-se algumas tomadas de tela da calculadora.

4.1.3 Programação em C++

A linguagem C é usada desde a década de 70, e até hoje é empregada em larga


escala. Entretanto, com a evolução da complexidade dos programas, e a importância do
planejamento pré-implementação, essa linguagem não aderiu às novas tendências exigidas,
tais como a legibilidade, a reutilização e a facilidade de manutenção do código.

Para suprir as dificuldades surgidas, porém ainda utilizando os conceitos básicos da


linguagem C, criou-se uma nova linguagem de programação orientada a objeto, a lingua-
gem C++.

A programação orientada a objeto foi uma idéia muita bem aceita para resolver os
problemas surgidos com a evolução dos programas. Ela busca modelar um ambiente
utilizando os próprios elementos presentes nesse ambiente, ou seja, os objetos[1].

Por exemplo, precisa-se criar um programa para cadastro de livros. Nesse caso pode-
se considerar o livro como um objeto. É interessante observar que esse jeito de programar
é bem próximo da linguagem humana, facilitando muito a linha de raciocı́nio.

Apesar dessas quebras de paradigmas, C++ assemelha-se em muita coisa com a lin-
9
American Standard Code for Information Interchange, código de informação padrão para letras e
sı́mbolos (codificação binária)
22

guagem C, como por exemplo, as tomadas de decisões (ver seção 4.1.2.5) e laços (ver seção
4.1.2.4) estão idênticas. De qualquer maneira, todas as funcionalidades de C podem ser
aplicadas para C++, isto é, funções, estruturas, alocação de memória... .

Entretanto, essa nova linguagem fornece outras utilidades, como novos comandos para
entrada e saı́da de console, novas maneiras para alocação de memória, diferentes formas
de passar parâmetros para funções.

Porém a principal caracterı́stica de uma linguagem orientada a objeto será exposta


na seção a seguir.

4.1.3.1 Classes e Objetos

Um objeto é uma abstração de alguma coisa da vida real, geralmente de coisas fı́sicas,
como uma casa, um avião... . Cada objeto possui caracterı́sticas (propriedades) que são
chamadas de atributos.

Uma classe é o agrupamento de vários objetos que possuem atributos em comum.


Por exemplo, a classe Móvel pode agrupar os objetos - cadeira, mesa, armário. Cada um
desses objetos possui vários atributos, tais como a cor, o material que o constitui e as
dimensões fı́sicas.

Dessa forma, a definição de objetos para descrever um problema real constitui-se


a etapa de modelagem. Concretizados os objetos e suas respectivas classes, criam-se
métodos para influenciar as caracterı́sticas dos objetos. Métodos são funções declara-
das no contexto de uma classe. Para a classe Móvel, pode-se ter o método Pintar que
influenciaria no atributo cor e o método Construir que influenciaria no material.

Um outro exemplo mais focado à implementação de um problema real usando uma


linguagem orientada a objeto poderia ser a criação de uma calculadora virtual. Criaria-
se um objeto Display para mostrar os números que estão sendo operados e um objeto
Operador para realizar as operações matemáticas.

O Display teria como atributo uma string que representaria o que está escrito na
tela. Poderia-se ter o método Mostrar que requer como parâmetro o texto ou número a
ser impresso, isto é, ele alteraria o valor do atributo da classe.

Já o objeto Operador teria como atributo um número que representaria o valor que
está sendo operado. Outra idéia, caso a calculadora fosse mais complexa, seria ter um
23

atributo que representasse a memória da calculadora. E finalmente os métodos seriam as


operações básicas, como somar, subtrair, multiplicar e dividir.

Por trás dessa modelagem existe um conceito muito empregado pelos criadores de
software - o encapsulamento. Esta idéia consiste em empacotar os dados (atributos) e as
operações sobre estes (métodos), facilitando o trabalho do programador.

Por exemplo, cria-se um pacote para resolver um sistema de equações lineares. O


programador iria incluir esse pacote no projeto que está desenvolvendo, e poderia resolver
sistemas de equações lineares sem se preocupar com a implementação de baixo nı́vel.
Bastaria apenas utilizar os métodos fornecidos por esse pacote.

Outra vantagem, é que a utilização dessa idéia de encapsulamento, contribui para o


reaproveitamento de código, pois uma vez implementado o pacote, não é mais preciso
redigir qualquer algoritmo no mesmo contexto.

4.1.3.2 Sobrecarga de Operadores

Como foi visto na seção 4.1.2.3 existem vários tipos de operadores. A sobrecarga de
operadores consiste em implementar os mesmos para objetos de uma determinada classe.

Por exemplo, cria-se uma classe Matriz. Inicialmente não se pode somar matrizes,
então para suprir esse comando pode-se sobrecarregar o operador de adição (+) para
receber objetos do tipo Matriz.

Esse tipo de sobrecarga também pode ser feito com métodos, e nomeia-se essa operação
como polimorfismo.

4.1.3.3 Herança

A herança é uma ferramenta muita empregada em linguagens orientada a objeto. Com


ela é possı́vel que uma classe herde caracterı́sticas de uma outra classe, isto é, a classe
mãe compartilha atributos e métodos com a classe filha.

Por exemplo, tem-se a classe Automóvel herdada da classe Veı́culo. Admite-se


que a segunda classe tem os seguintes atributos - peso, preço e cor. Logo, a classe
Automóvel terá também esses três atributos acrescentados outros atributos exclusivos
da classe Automóvel, que não fariam sentido na classe Veı́culo, como por exemplo, o
atributo Marca ou Número de rodas.
24

Outras classes que poderiam ser herdadas da classe Veı́culo:

• classe Aeronave;

• classe Navio.

4.1.4 Interface Gráfica

A maioria das pessoas está acostumada a trabalhar com programas com uma interface
gráfica agradável e fácil de manipular, muito diferente que aqueles programas que rodam
em DOS, como o caso da calculadora no anexo A.

O jeito de trabalhar com programas detentores de componentes gráficos é diferente dos


que rodam no console do DOS. Praticamente, programas do DOS seguem uma linearidade,
iniciada na função principal (ver seção 4.1.2.6), e esta chama outras funções ou métodos
de classes.

Já os aplicativos gráficos com uma interface amigável são principalmente executa-
dos em cima de Desktops 10 , como por exemplo o Windows 98/2000/XP da Microsoft,
KDE/GNOME/WM do projeto GNU/LINUX. Os aplicativos geralmente caracterizam-
se por um formulário11 que pode conter botões, ı́cones, textos e até outros formulários.

Este tipo de aplicação gráfica baseia-se em executar rotinas quando se estabelece


algum evento. Entende-se como evento uma ação definida do usuário diretamente ou
indiretamente. Por exemplo, o evento que ocorre quando o usuário aperta um botão de
uma aplicação gráfica, ou quando se encerra uma aplicação.

Então basicamente, toda vez que ocorre um evento, define-se uma função que tratará
essa ação. E dentro dessa função, pode-se definir chamadas para outras funções e/ou
métodos.

As aplicações gráficas feitas durante o curso de C/C++ são compiladas para rodarem
no Windows. Construir programas usando as bibliotecas que esse sistema operacional
fornece, a chamada API12 do Windows, sem utilizar nenhuma ferramenta auxiliar é uma
tarefa árdua e complexa.

Para suprir esse obstáculo, utilizam-se ferramentas de desenvolvimento de aplicações


10
área na tela onde estão todos os aplicativos
11
uma espécie de janela que delimita o aplicativo
12
Interface para Programação de Aplicativos
25

gráficas, que encapsulam várias funções dessas bibliotecas, formando componentes gráficos,
tais como botões, caixas de textos, formulários... . Facilitando muito o trabalho dos pro-
gramadores.

Outro detalhe importante em relação a API do Windows, é a possibilidade de tra-


balhar com vários processos, ou seja, consegue-se executar várias aplicações ao mesmo
tempo.

Um dos objetivos finais desse documento é construir um programa capaz de controlar


um robô, para tanto, necessita-se executar vários processos mutuamente - um para tratar
os eventos da interface, outro para mandar e/ou checar informações do robô e até um
processo para cuidar das ações de um controle remoto do robô.

Com esse intuito, foi designado ao estagiário, criar um aplicativo que gerasse processos
paralelos, também conhecidos como multithreads.

4.2 Projeto com Threads

Uma importante funcionalidade que a maioria dos sistemas operacionais disponibi-


lizam é a possibilidade de intercalar as chamadas threads. Essa palavra em português
significa “bifurcação”. A explicação desse significado baseia-se na idéia de uma linha de
processamento derivar uma outra, assim obtêm-se duas ou mais linhas de processamento
paralelas.

Existem vários problemas clássicos que utilizam esse tipo de processamento. Geral-
mente são programas que lançam várias threads, e estas precisam disputar algum tipo de
recurso. Por exemplo, um número X de threads tentando entrar numa porta que somente
entra-se uma por vez.

Como projeto, escolheu-se o problema do Jantar dos Filósofos, um dos mais famosos
do gênero. Esse trabalho tem como objetivo reunir os conceitos de programação orientado
a objeto e desenvolver implentações usando interface gráficas do Windows. A construção
desse programa será divida em duas etapas, a modelagem e a implementação.
26

4.2.1 Modelagem

O modelo do Jantar dos Filósofos consiste em emular uma disputa fictı́cia. Imagine
uma mesa redonda, onde estão sentados cinco filósofos. Na frente de cada filósofo existe
um prato que indubitavelmente está sempre cheio de comida. Entre dois pratos existe um
único garfo. Veja a figura 2.

Figura 2: Vista aérea do jantar

A disputa está envolvida com ação de pegar os garfos para comer. Para um filósofo
poder comer precisa-se ter em mãos os dois garfos. Porém, somente têm-se cinco garfos
para cinco filósofos, logo, percebe-se que somente dois filósofos poderão estar comendo ao
mesmo tempo, uma vez que somente pode-se pegar os garfos que estão ao lado deles.

Quando um filósofo não está comendo, existem duas possibilidades - o filósofo está
pensando, ou filósofo está com fome. Essa segunda opção ocorre quando o filósofo deseja
comer, porém um ou os dois garfos não estão disponı́veis. Caso somente tenha-se um
garfo disponı́vel, o filósofo iria pegá-lo e esperar que o outro torne-se disponı́vel.

Baseado nos casos estabelecidos pode-se definir algumas classes para o sistema. A
classe Filósofo com atributos que iriam representar o estado do mesmo. Também teria
métodos para mudar esses atributos, como por exemplo, os métodos Comer, Pensar,
FicarComFome.

A classe Garfo teria como atributo o seu estado - disponı́vel e não disponı́vel. Como
27

método teria o PegarGarfo, que mudaria seu atributo.

Para construir um programa que simule essa disputa é necessário que ele se assemelhe
o mais próximo possı́vel de uma situação real, isto é, não deverá ocorrer injustiças ou
absurdos de dois filósofos lado a lado comendo.

4.2.2 Implementação

O primeiro item para a implementação do algoritmo é estabelecer aos filósofos a


condição de threads, isto é, cada filósofo será uma linha de processamento. E cada um
deles terá que interagir com a entidade Garfo.

Os tempos de comer e pensar são todos aleatórios, isto é, não se sabe quanto tempo
um filósofo ficará com fome.

Uma situação peculiar de ocorrer em problemas com threads é os chamados deadlocks,


ocasiões quando uma thread trava por causa de outra por muito tempo. Um exemplo
simples de deadlock no Jantar dos Filósofos ocorre quando todos os filósofos pegam pri-
meiramente seu garfo a direita ao mesmo tempo. Dessa forma, todos os garfos estarão
em uso, porém é necessário que um filósofo tenha dois garfos em mãos para poder comer.
Com tanto, como nenhum dos filósofos irá devolver o garfo para mesa, o sistema ficará
paralisado. Veja a figura 3.

Figura 3: Situação de deadlock


28

Uma solução para esse problema seria considerar que os filósofos somente peguem os
garfos caso os dois estejam disponı́veis, porém nessa situação podem ocorrer inúmeras
injustiças já que os tempos de pensar e de comer são aleatórios.

Então, para melhor solucionar esse inconveniente, numerou-se os lugares na mesa, e


estabeleceu-se que filósofos em lugares ı́mpares peguem primeiramente o garfo da direita,
e os filósofos em lugares pares peguem primeiramente o garfo da esquerda. Desta forma
evitam-se os deadlocks.

Outro detalhe de implementação para essa disputa, é quando dois filósofos tentam
pegar um garfo ao mesmo tempo. Essa situação é chamada de seção crı́tica, e ela é
tratada da seguinte maneira. Cria-se uma região crı́tica para cada garfo onde somente
uma thread poderá entrar. A região crı́tica pode ser definida como uma função ou um
conjunto de instruções dentro de uma função ou método. Dentro dessa região deverá estar
a rotina de mudança do atributo da classe Garfo. Com isso será virtualmente impossı́vel
dois filósofos ao mesmo tempo pegarem um único garfo.

No anexo B encontra-se algumas tomadas de tela do programa que simula o Jantar


dos Filósofos.

4.3 O robô

Após a etapa de estudo da linguagem de programação, inicia-se uma nova fase de


trabalho ligado diretamente com um robô. Então, nessa seção ir-se-á conhecer um pouco
sobre robótica exemplificando o robô desenvolvido e implementado no Projeto Roboturb.

4.3.1 Caracterı́sticas do robô

Um robô é dotado de um manipulador e de um controlador. O manipulador é a


parte móvel do robô constituı́da por partes rı́gidas, os elos, ligados entre si pelas juntas.
A combinação desses elementos pode formar o braço e o punho do manipulador. Feito
assim, esses tipos de robôs semelhantes ao braço humano caracterizam os manipuladores
industriais. Adianta-se que o Projeto Roboturb trabalha com essa caracterização.

O controlador é a unidade do sistema capaz de gerar informações para comandar


atuadores com base num algoritmo de controle. Para tanto, ele possui uma unidade de
potência, ou seja, o elemento que liga diretamente aos atuadores fornecendo-lhes a energia
29

necessária. Muitas vezes, o controlador integra um sistema de comunicação com o usuário,


podendo ser um computador ou um controle remoto.

Figura 4: Controlador do Projeto Roboturb

Os atuadores são dispositivos que geram e impõem movimento ao manipulador. O


mais comum deles é o motor elétrico, geralmente de corrente contı́nua.

Existem também os transdutores de movimento, que garantem a precisão de posi-


cionamento dos robôs. No Roboturb, utilizam-se os encoders, que estão localizados nas
juntas e enviam informações ao controlador sobre o quanto aquele eixo está se movimen-
tando. Conforme o movimento do eixo são gerados pulsos que devem ser contados. Estes
pulsos têm informação discreta sobre a posição do eixo. Com base em um intervalo de
amostragem constante, pode-se obter a velocidade do eixo a partir da variação da posição.
Assim, este transdutor permite obter informações de posição e velocidade.

Na teoria de controle dos robôs existem duas formas usuais, o controle a partir de
malha aberta e malha fechada. O controle de malha aberta consiste em enviar informações
aos atuadores de tal forma que ele se mova até uma posição estabelecida, sem se preocupar
se ele irá deslocar-se por motivos de inércia, gravidade ou forças externas. Já o controle
de malha fechada irá constantemente verificar a posição de um eixo, e compensar caso ele
30

Figura 5: Estrutura fı́sica do robô

desloque-se da posição pré-estabelecida, isto é, constantemente a unidade de potência irá


fornecer energia ao atuador.

O Roboturb emprega um controle de malha fechada, dessa forma a precisão da posição


será garantida, não importando a configuração que o robô se encontra.

Outro dado importante é o número de eixos que o robô possui. No projeto a estrutura
é de sete eixos, um a mais que o habitualmente usado. Diga-se por passagem, um robô
redundante. Optou-se por essa configuração por tornar mais flexı́vel a movimentação.

O eixo redundante caracteriza-se por um trilho flexı́vel. É como se fosse um manipu-


lador tradicional de seis eixos, que se pode deslocar num trilho. Na figura 5 encontra-se
o manipulador do Projeto Roboturb. Observa-se que o trilho é dotado de ventosas, a fim
que se possa fixar nas pás da turbina.

Nota-se que esse robô é bem menor que os tradicionais robôs industriais, devido ao
seu propósito de construção, recuperar turbinas de hidrelétricas de grande porte. Esse
ambiente de trabalho é extremamente pequeno e apertado.
31

4.3.2 Controle Remoto

Alguns robôs são dotados de um dispositivo muito útil para o posicionamento do


manipulador - o controle remoto. Um controle remoto pode possuir manoplas, botões e
até um Visor de Cristal Lı́quido (LCD).

Com esse instrumento, o operador trabalha com o movimento intuitivamente. Ele


pode controlar a velocidade de um eixo, por exemplo, de acordo com quanto é deslocada
uma manopla.

Outra vantagem é que se pode mudar facilmente o eixo que é trabalhado, ou trabalhar
com vários eixos ao mesmo tempo.

Mas o grande trunfo do controle remoto é a possibilidade de movimentar o robô


de forma natural em coordenadas cartesianas, isto é, dado um sistema de coordenadas
X Y Z, o operador escolhe em que direção irá movimentar o efetuador final (a ponta do
robô). Esse tipo de movimento é muito complicado de se implementar, requerendo grande
processamento e cálculos.

No Projeto Roboturb, usa-se um controle remoto com duas manoplas, várias botuei-
ras, duas chaves e um LCD. Na seção 4.4, ter-se-á mais detalhes sobre esse instrumento.

4.3.3 Rotinas de movimento do robô

A movimentação do robô no projeto é estabelecida por uma gama de funções en-


capsuladas pelo fabricante da placa de movimento. Esta placa é instalada no próprio
computador, e possui ligação direta com as placas de potências e com os transdutores do
robô.

O fabricante, a National Instruments (NI), criou uma API denominada FlexMotion


Software, que combinado com uma unidade de potência fornece funcionalidade e ener-
gia para integrar sistemas de movimento usados em laboratórios, testes e ambientes de
produção[4].

Apesar dessa facilidade que a NI dispõe, é muito trabalhoso usar essas funções. Isso
porque a maioria das rotinas é usada para movimentar ou obter informações de um único
eixo do manipulador, e também é preciso passar parâmetros especı́ficos para cada função.

Com esse intuito optou-se abstrair ainda mais rotinas de movimento e leitura de
32

dados do robô. Para facilitar também a programação, criou-se uma classe robô. Esta
classe possui atributos que especificam as caracterı́sticas de todos os eixos do robô que as
funções da FlexMotion exigem.

4.4 Montagem do Controle Remoto (CR)

Antes de iniciar implementações de software usando o controle remoto, foi designado


ao estagiário realizar a montagem do mesmo. Para tanto, foi necessário conhecimento em
eletrônica.

4.4.1 O controle remoto

Antes de relatar a construção do controle remoto, comentar-se-á todas as funções dos


dispositivos encontrados no mesmo.

Na figura 6 encontra-se o controle remoto do Projeto Roboturb.

Figura 6: Foto real do controle remoto


33

• Botoeiras: Dispositivo de comando para interagir com as opções que irão aparecer
no visor de cristal lı́quido. Todas as botoeiras são normalmente abertas.

• Chave de 3 posições: Responsável pela escolha do tipo de movimento que o mani-


pulador irá executar. Sendo a primeira posição em coordenada cartesiana, segunda
posição sem movimento, terceira posição em coordenada de junta13 .

• Chave de 2 posições: Responsável pela escolha da caracterı́stica de movimento em


coordenadas cartesianas, primeira posição orientação, segunda opção posição.

• Manopla de movimento: Existem duas manoplas, uma com movimento em uma


direção, para posicionamento do robô pelo trilho, e a outra com movimento em
duas direções e torção, para posicionamento do robô no espaço.

• Botão de Emergência: Atua instantaneamente na interrupção do movimento do


robô.

• Ajuste fino: Conhecido também como track-wheel, é utilizado para realizar pequenos
movimentos no robô.

• Teclado Numérico: Permite a entrada de valores definidos pelo usuário.

• Visor de Cristal Lı́quido: É responsável pela interação gráfica com o usuário.

No interior do controle remoto, estão divididos os componentes em dois blocos - o


bloco inferior, que envolve ligações com as manoplas, o track-wheel e as chaves. E o bloco
superior, que integra o LCD, as botoeiras e o teclado.

O botão de parada de emergência encontra-se separado destes blocos por ser ligado
diretamente ao controlador do robô.

4.4.2 Montagem interna

A fixação externa de todos os dispositivos já estava pronta quando se iniciou a mon-
tagem do controle remoto. Basicamente o trabalho consiste em estruturar a alimentação
do mesmo e realizar as conexões dos itens anunciados na seção 4.4.1.
13
movimento num sentido para cada eixo
34

4.4.2.1 Conexão do controle remoto com o controlador

O robô manipulador pode ser controlado de duas maneiras, através do PXI (compu-
tador industrial usado no projeto) ou pelo controle remoto (CR). Entretanto, como o CR
não possui nenhum microprocessador para processar as informações adquiridas por seus
dispositivos, é necessário estabelecer uma comunicação com o computador.

Figura 7: Computador Industrial (PXI)

Internamente o CR possui dois módulos independentes, que requerem duas conexões


seriais14 do tipo RS-232. Além disso, é necessário alimentar o CR com uma tensão de
12 volts. Como as saı́das seriais não têm suporte a essa escala de tensão, utilizou-se
uma fonte proveniente do controlador. A tı́tulo de estética e organização das conexões,
optou-se em interligar as duas saı́das seriais com o controlador, e este com o CR.

Os conectores empregados nessa última interligação são da marca LEMO, um dos


melhores do mercado, devido a seu engate rápido e robusto. O cabo utilizado na ligação
é de dez vias, sendo que duas são para o botão de emergência, duas para a alimentação,
duas para o bloco superior que será denominado Display, em função da presença do LCD,
e finalmente quatro vias para o bloco inferior que será denominado Joystick, por causa do
14
entrada e saı́da de dados quem um computador dispõe
35

conjunto de manoplas.

Outra caracterı́stica do conector LEMO é uma linha visı́vel que circunda os pinos de
ligação. Na figura 8 ela é representada pela linha pontilhada. Por motivos de organização
e manutenção, optou-se em utilizar várias cores para a fiação, que estão especificadas na
mesma figura.

Figura 8: Conector LEMO, vista pelos pinos de ligação

Cada cor possui uma funcionalidade, que está descrita na tabela 2.

Cor Descrição
Branco Responsável pelo cabeamento do botão de emergência
Cinza Segundo fio responsável pelo ”cabeamento”do botão de emergência
Roxo VCC de 12 volts
Azul TERRA - GND
Verde Comunicação do Controlador com o Joystick (confirmação de transmissão)
Amarelo Comunicação do Controlador com o Joystick (prosseguir transmissão)
Laranja Comunicação do Controlador com o Joystick (recebimento de dados)
Vermelho Comunicação do Controlador com o Joystick (transmissão de dados)
Marrom Comunicação do Controlador com o Display (recebimento de dados)
Preto Comunicação do Controlador com o Display (entrega de dados)

Tabela 2: Descrição dos fios provenientes do controlador

As funcionalidades de cada fiação foram levantadas a partir da especificação e estudo


dos blocos que constituem o controle remoto - o joystick e o display.
36

Para as conexões, utilizou-se um estanhador para soldagem e para isolação empregou-


se o termo-retrátil15 .

4.4.2.2 Regulador de tensão

O regulador de tensão é responsável em transformar a tensão de 12 volts proveniente


do controlador para 5 volts, devido ao bloco Display requerer essa tensão. Para tanto,
necessitou-se construir uma placa reguladora de tensão.

Basicamente essa placa teria como componentes um regulador de tensão LM7805, um


capacitor de 100µF , um capacitor de 100nF e um dissipador de calor.

Primeiramente é preciso fixar o dissipador de calor na placa, que será responsável em


amenizar o aquecimento provocado pelo regulador de tensão. Esse regulador possui três
terminais, um para o barramento de 5 volts, outro para o barramento de 12 volts e o
último para o barramento terra.

Figura 9: Esquema de ligação da placa reguladora de tensão

Os capacitores têm como função evitar ruı́dos, por isso são conectados em paralelo
15
borracha isolante que contrai ao ser aquecida
37

com os barramentos. Os valores de capacitância são especificados a partir do fabricante


do regulador de tensão, segundo o anexo C.

Colocou-se o capacitor de maior capacitância no barramento de 12 volts e menor no


de 5 volts. Na figura 9 encontra-se o esquema de ligação virtualmente desenhando.

4.4.2.3 Display

No bloco do display existe uma entrada para conector do tipo DB-9. Essa entrada
possui a mesma configuração que a saı́da da serial do PXI com o acréscimo de mais dois
cabos para a alimentação - terra e VCC 5 volts.

Figura 10: Ligações do teclado e botoeiras

Esse bloco é baseado em um GLK-24064-25, fabricado pela Matrix Orbital. Este


produto consiste em um visor gráfico com 240 colunas por 64 linhas de pontos. Há
também suporte para uma matriz de 25 teclas, abrangendo todas as botoeiras, um botão
localizado na ponta da manopla de posicionamento e o teclado numérico.

A configuração de ligação desse suporte está na figura 10. Convencionou-se que da


letra A até H representam as botoeiras, a letra I o botão localizado na ponta da manopla
e os demais representam o teclado numérico.
38

4.4.2.4 Joystick

Esse bloco inferior do controle remoto baseia-se em uma placa de controle de interface
produzida pela Happ Controls chamada CIB-1000. Sua comunicação também é feita
a partir de uma serial, porém sua alimentação é de 12 volts, devido à mesma possuir
embutido um regulador de tensão[9].

A leitura do estado das manoplas é baseada num jogo de potenciômetros. À medida


que se desloca a manopla em uma direção, a resistência aumenta ou diminui, com isso há
uma variação da tensão de saı́da do conjunto, que é tratada em nı́vel de software.

Figura 11: Ligação das manoplas

Na figura 11 encontra-se o esquema de ligação. As manoplas são alimentadas com 5


volts, então a medida que ocorre um deslocamento em uma direção, o circuito comporta-se
como um divisor de tensão, podendo variar de 0 a 5 volts.

Conectado ao CIB-1000 também se encontram o track-wheel e as chaves. A ligação do


track-whell é feita de maneira direta, conforme recomendação do fabricante. As chaves
são conectadas ao GND, devido a estrutura interna do bloco que utiliza resistores pull up.
Veja a figura 12.

Nota-se que a chave de três posições é representada por S2a e S2b. Por tanto é
impossı́vel fisicamente ambas estarem acionadas ao mesmo tempo.

4.5 Implementação de um Software usando CR

A transferência de dados entre o computador industrial e o controle remoto é feita


a partir de um conjunto de funções desenvolvidas por um bolsista do projeto. Rotinas
39

Figura 12: Ligação das Chaves e do track-wheel

escritas na linguagem C++ que encapsulam basicamente o envio e o recebimento de dados


do joystick e do display.

O display possui rotinas de saı́da de dados para o LCD e entrada de dados pelo teclado
e botoeiras. Similar ao caso da seção 4.1.2.2 de entrada/saı́da para o console.

Já o joystick baseia-se numa varredura das informações contidas nos seus dispositivos.
Isso quer dizer que toda vez que é necessário verificar se uma manopla está deslocada ou
saber qual posição está uma chave é preciso utilizar uma função de leitura de dispositivos
logo após uma atualização dos estados do mesmo.

Note que no display, quando é apertado um botão, envia-se informações para o com-
putador, enquanto que no joystick quando é deslocada uma manopla ou uma chave, não
ocorre nenhum envio de informações, o programador deverá ler sempre os estados dos
dispositivos para determinar as informações.

4.5.1 Movimentando o robô com CR

Uma vez implementadas rotinas para comunicação com o controle remoto, é preciso
agora estabelecer uma comunicação com o controlador a fim que se possa definir movi-
mentos ao manipulador segundo informações do controle remoto.

O controle do robô é feito a partir de um software com uma interface gráfica. No


próprio software existe a opção de passar o controle do robô para o CR, para tanto, é
40

necessário utilizar uma thread que interaja com o CR e com o robô. Desta maneira o
programa principal fica livre para outros fins como parada de emergência e interrupção
da comunicação com o CR.

Um detalhe importante sobre o funcionamento do CR é que o bloco display não


está operacional. Como contorno, redefiniu-se a lógica de funcionamento, aproveitando
somente o bloco do joystick.

4.5.2 O problema a ser implementado

O problema a ser implementado consiste em criar um módulo integrado ao controle


remoto capaz de capturar pontos no espaço de juntas do manipulador num dado momento.
Além disso, o módulo deverá gerar um arquivo com todos os pontos capturados.

O objetivo dessa tarefa é gerar uma trajetória de modo rápido e visual, utilizando a
facilidade aparente do controle remoto para posicionar o manipulador.

4.5.3 Como funciona o programa

Integrou-se ao software do Roboturb uma interface gráfica para captura de pontos em


coordenadas de juntas. Basicamente essa interface mostra as coordenadas de junta numa
Tabela. A partir desse conjunto de coordenadas, o usuário poderá salvar em um arquivo
os dados, comandar o manipulador para mover-se numa dada coordenada, remover uma
ou mais coordenadas da tabela. Há também a possibilidade de carregar um outro conjunto
de coordenadas.

A seguir, encontra-se detalhes da implementação da interface de comunicação com o


usuário.

Como funciona a captura de uma coordenada

Implementou-se dois modos de capturar uma coordenada, via software ou via controle-
remoto. Em ambos os casos, os dados são adicionados na Tabela no momento seguinte à
leitura da posição do robô.

No software, basta clicar num botão na interface, que chamará uma rotina para leitura
da posição que o robô se encontra.

Via controle-remoto, o usuário terá que girar o track-wheel para captura de coor-
41

denadas. Optou-se por esse modo de comando devido ao problema localizado na placa
do display que é responsável pela envio de informações de todos os botões e botoeiras
presentes no controle remoto, indisponibilizando o uso dos mesmos.

Basicamente, a leitura da posição do robô só será efetuada no momento que o usuário
terminar o giro do track-wheel. Aconselha-se girá-lo levemente para a captura das coor-
denadas.

Como remover uma ou mais coordenadas

Para remoção de coordenadas é preciso selecionar na Tabela os pontos que deverão


ser removidos e pressionar um botão especı́fico da interface.

Como salvar um conjunto de coordenadas

Aperta-se o botão de salvamento de pontos para gravar em arquivo as coordenadas


que estão na Tabela. Aqui, usaram-se funções de manipulação de arquivos (ver seção
4.1.2.10).

Como carregar um conjunto de coordenadas

Aperta-se o botão de carregamento de pontos para atualizar as coordenadas que estão


no arquivo carregado na Tabela.

Como movimentar o manipulador para uma coordenada

Seleciona-se uma coordenada da Tabela, e clica-se num botão especı́fico para mover
o manipulador até essa coordenada.

4.6 Implementação de um Software para execução de


trajetórias

Um robô executar uma trajetória é algo extremamente complicado de se implementar,


principalmente quando envolve sincronismo com outros sistemas integrados, por exemplo,
a soldagem e a medição. Além disso, existe a especificação de impor uma tal velocidade
constante no efetuador final do robô.

Define-se trajetória como um conjunto de pontos que tem como objetivo formar um
caminho de interesse. Além disso, é preciso fornecer uma velocidade com que o corpo irá
se mover ao longo da trajetória.
42

Na robótica, é muito comum um robô executar uma trajetória, porém, precisa-se


definir um ponto de referência no robô no qual este irá seguir o trajeto. Geralmente
concebe-se ao efetuador final essa referência.

Entretanto, para que o efetuador final simule um trajeto com uma certa velocidade
constante, necessita-se calcular para todos os eixos do robô que posição irão deslocar-se.
Imagine um robô com dois graus de liberdades (dois eixos). Para que o efetuador final
faça uma reta, é preciso combinar o movimento dos dois eixos. Agora, imagine um robô de
sete eixos, que é o caso do robô do projeto, desenvolveu-se toda uma teoria para cálculos
de trajetórias.

Além de definir o quanto cada eixo irá deslocar-se, precisa-se calcular também a
velocidade e a aceleração que um eixo deverá executar de um ponto a outro. Sendo que
a combinação desses parâmetros para cada eixo irá impor uma velocidade constante no
efetuador final.

No software há dois modos de execução de trajetória, um modo para medição e o


outro para a soldagem.

4.6.1 Trajetória de Medição

O processo de medição consiste em capturar imagens da região de trabalho com uma


câmera. Esta aquisição de imagens deve ser efetuada com o robô parado para não ocorrer
interferências.

Desta forma, não há preocupação em definir uma velocidade constante ao efetuador
final, somente se preocuparia com a posição que se encontra o robô no momento da
aquisição da imagem.

Entretanto, toda trajetória é formada por pontos, e esses pontos precisam estar pré-
definidos. Por isso, no software somente é possı́vel executar um trajeto se for carregado
arquivos que contenham parâmetros da trajetória.

Basicamente, esses parâmetros se dividem em três arquivos. Um arquivo contém a


posição de todos os eixos de forma matricial, no qual cada coluna representa um eixo do
robô, contanto, cada linha define uma posição da trajetória.

O segundo arquivo contém as velocidades que cada eixo devem deslocar-se de um


ponto ao outro. E finalmente o terceiro arquivo contém as acelerações que cada eixo deve
43

adquirir de um ponto ao outro.

O controle do movimento sincronizado com a aquisição de imagens funciona da se-


guinte maneira:

• Move-se o robô para posição inicial definida no arquivo de posições.

• Carregam-se os valores de aceleração e velocidade para cada eixo correspondente a


segunda linha dos arquivos. Nota-se que os dados da segunda linha são carregados
para que o robô se mova da posição inicial (primeira linha) para o próximo ponto
(segunda linha).

• Usa-se uma função para executar o movimento, de acordo com os valores carregados.

• O processo entra num laço que fica verificando se todos os eixos chegaram na posição
definida, isto é, se o robô está parado ou não.

• Adquire-se a imagem da superfı́cie de trabalho com o robô parado.

• Carrega-se novamente os valores de velocidade, aceleração e de posição para cada


eixo. Executa-se o movimento e a aquisição de imagem. Repete-se este procedimento
até o final da trajetória.

Um detalhe importante da implementação é que as rotinas que controlam o movimento


devem ser executadas a partir de uma thread. Isso porque o programa principal não estaria
bloqueado, liberando o sistema para adotar paradas de emergência via software.

4.6.2 Trajetória de Soldagem

A trajetória de soldagem é bem mais complexa que a de medição. Analisa-se primei-


ramente como um soldador humano executa uma solda.

Ele precisa geralmente traçar um filamento de solda, constituindo o cordão de solda.


Esta tarefa deve ser feita sempre com a tocha16 praticamente perpendicular com a su-
perfı́cie a ser soldada. Não se pode soldar, por exemplo, com a tocha quase paralela ao
um plano.
16
ferramenta onde será expelido o material de soldagem
44

Outro detalhe é que a execução do cordão deve ser de maneira constante e uniforme,
isto é, necessita-se impor uma velocidade constante no bico da tocha.

Com um soldador robótico aplica-se as mesmas regras. Com tanto, a trajetória de


soldagem caracteriza-se em exercer uma velocidade constante no bico da tocha. Outro
quesito é a forma que deverá ser efetuada a solda. Especificou-se que o robô seria capaz
de restaurar crateras formadas nas pás de turbinas de grande porte. Para restauração
de uma cratera, necessita-se fazer vários cordões de solda um do lado do outro, a fim de
formar uma camada, podendo até formar mais de uma camada, caso a cratera seja muito
profunda.

O formato da trajetória é uma espécie de zigue-zague. Porém somente solda-se num


sentido, ou seja, depois que é feito um cordão de solda, a tocha volta sem depositar
qualquer material até o inı́cio do próximo cordão que fica ao lado do inı́cio do cordão
anterior.

O algoritmo de execução de trajetória para o processo de soldagem é um pouco dife-


rente em relação ao da medição. Além dos arquivos de posições, velocidades e acelerações,
é necessário um quarto arquivo para executar o trajeto, esse arquivo consiste em fornecer
os parâmetros de soldagem para cada ponto - arco, arame, gás, tempo, liga/desliga.

Na implementação, usaram-se somente os itens tempo e liga/desliga. O item tempo


é um delay necessário para que a tocha esquente o suficiente para começar a solda. Ele
está presente nos inı́cios dos cordões de solda. O item liga/desliga é como se fosse o botão
de disparo que o soldador humano usa para soldar alguma coisa.

A execução da trajetória sincronizada com a soldagem é algo extremamente compli-


cado de se implementar. Isso porque o robô não poderá variar sua velocidade no bico da
tocha, pois caso aconteça, resultará numa deformação no cordão de solda. A seguir está
o algoritmo para o processo:

• Move-se o robô para posição inicial definida no arquivo de posições.

• Carregam-se os valores de aceleração e velocidade para cada eixo correspondente a


segunda linha dos arquivos.

• Como é o inı́cio do cordão, o arquivo dos parâmetros de soldagem acusará um tempo


de espera, e a tocha será ligada com robô parado.
45

• Usa-se uma função para executar o movimento, de acordo com os valores carregados.
Note que a tocha está ligada nesse momento.

• Como o movimento precisa ser contı́nuo, é necessário carregar os parâmetros de dois


pontos à frente, isso antes de chegar ao próximo ponto. Por exemplo, o robô está se
movendo do ponto um para o ponto dois, no algoritmo, é preciso já estar carregado
o ponto tr^
es. Dessa forma, o robô não irá parar no ponto dois, pois ele já possui
informações para chegar até o ponto tr^
es.

• Usa-se uma função para executar o movimento com os parâmetros carregados a


frente. Essa função irá mesclar dois parâmetros de trajetórias. No exemplo do item
anterior, ela iria mesclar os parâmetros do ponto dois com os parâmetros do ponto
tr^
es.

• O processo entra num laço que fica verificando se o robô chegou na posição definida.

• Ao sair do laço comentado no item anterior, é preciso executar os parâmetros de


soldagem.

• Carregam-se os parâmetros de dois pontos à frente, e continuaria o mesmo algoritmo


para o movimento.

4.7 Integração do trigger no controlador

Para dar continuidade as atividades, precisou-se trabalhar com o hardware do robô.


Essa atividade é essencial a uma das etapas do processo de recuperação de turbinas de
grande porte - a medição. O sistema de medição é dotado de uma câmera e um sensor
laser, que têm como objetivos determinar a região a ser recuperada.

O controle de captura de imagens pela câmera e o acionamento do sensor laser é feito


a partir do computador industrial, para tanto ele possui duas saı́das - o vı́deo e o trigger
com as funções respectivamente comentadas.

Essa seção irá se aprofundar no que diz respeito à integração do trigger em nı́vel de
hardware. Este termo em inglês significa na informática um sinal que causa o começo de
uma certa atividade. No robô, essa atividade consiste no disparo do sensor laser que está
localizada no efetuador final, junto com a câmera.
46

4.7.1 Conexão do trigger

Como toda comunicação com o robô passa primeiramente pelo controlador, com trig-
ger não seria diferente. Entretanto, não se dimensionou uma saı́da do controlador para
esse fim. Precisou-se, então, incrementar uma conexão a mais na caixa que contêm todo
os sistema de potência. Usou-se uma furadeira manual para perfurar o revestimento de
alumı́nio.

Figura 13: Detalhe das várias camadas do cabo coaxial e o conector macho BNC

O conector do trigger é do tipo BNC17 . Para a conexão PXI - Controlador usou-se


um cabo coaxial com conectores machos do tipo BNC.

Esse cabo coaxial, ver figura 13, é formado:

• Por um condutor interno central de cobre, responsável pelo sinal do trigger ;

• Por uma camada isolante flexı́vel que envolve o condutor interno, a fim de protegê-lo
eletricamente;

• Uma blindagem para o condutor interno com uma malha ou trança magnética, com
o intuito de proteger o condutor interno magneticamente;

• Por uma capa plástica protetora;

Anexado o conector BNC, precisou-se estruturar as conexões internas no controlador,


que se limitavam basicamente em estabelecer o aterramento da blindagem e a conexão
do condutor interno com um outro componente de saı́da. Essa saı́da é responsável pela
comunicação Controlador - Manipulador.
17
Tipo de conector para cabo coaxial inventado por Bayone-Neill-Concelman
47

4.7.2 Função do trigger

O trigger é responsável pelo ligamento/desligamento do sensor laser embutido na


câmera, e a câmera é responsável pela captação da imagem da superfı́cie a ser soldada.

Basicamente a medição de uma cavidade será feita a partir de três feixes de luz
infravermelhos paralelos. Em uma deformidade na superfı́cie, esses feixes de luz não
estarão paralelos, e é a partir da distorção visualizada pela câmera que será traçada a
estratégia de medição e soldagem.

Para tal processo é necessário captar uma imagem com e sem a presença do laser, e
obter uma imagem resultante a partir da diferença entre as ditas cujas. É nesse momento
que entra o papel do trigger, fazer essa intercalação da presença dos feixes de luzes.

4.8 Integração da Soldagem

Uma das principais funções do robô do Projeto Roboturb é a execução da soldagem.


Para tanto, é necessária a integração ao software do projeto uma interface de comunicação
com uma máquina de solda. Essa comunicação se faz a partir de uma porta serial, e os
dados consistem basicamente em referenciar à máquina comandos e variáveis. As variáveis
seriam parâmetros de soldagem e os comandos seriam operações em cima do hardware.
Tanto os comandos e as variáveis serão especificados a seguir.

4.8.1 Processo de Soldagem

O processo de soldagem escolhido para integrar o núcleo de solda é o Plasma Pulsado


e a máquina de solda escolhida para soldagem foi a DIGITEC18 .

O processo Plasma consiste em utilizar altas correntes de caráter contı́nuo e pulsante


com o intuito de fundir o arame que será o material de reparação. O caráter pulsante traz
como vantagem a não preocupação da posição que se encontra a tocha de solda, isto é, a
soldagem pode ser feita contra ou a favor da força gravitacional.

A fusão ocorre devido ao arco voltaico formado entre o eletrodo e a peça-obra19 .


Aplica-se um gás dentro da tocha que se ioniza constantemente ao passar pelo arco,
18
máquina de solda desenvolvida pela UFSC
19
lugar onde será depositado o material
48

transferindo calor para a peça-obra. No momento que o arame entra na região onde se
encontra o gás ionizado, cria-se um curto entre o eletrodo e a peça-obra, podendo liberar
energia suficiente para a fusão do mesmo[7].

Uma conseqüência desse processo é a caracterı́stica da intensidade de corrente nos


eletrodos. Num gráfico com a corrente em função do tempo, forma-se uma onda quadrada,
caracterizando uma corrente de pulso e uma corrente de base. A corrente de pulso consiste
em realizar a fusão propriamente dita do arame, isso quer dizer que ela deve possuir altos
valores, já a corrente de base caracteriza-se pela manutenção do arco voltaico, porém sem
ocorrer fusão do arame.

Outro gráfico que se pode traçar é a velocidade do arame em função do tempo, que
também terá um formato quadrangular. Estes dois parâmetros, corrente e velocidade,
devem estar em fase, pois em momentos de elevadas correntes é necessário arame suficiente
para compensar a energia empregada no processo, a fim de obter um filamento de solda
constante e uniforme.

Nas duas grandezas, é preciso definir o tempo de pulso e o tempo de base. Outros
parâmetros de soldagem seriam a corrente de abertura, corrente final, tempo inicial, tempo
final e os tempos de subida e de descida da rampa de corrente.

4.8.2 Controle da Soldagem

O controle da soldagem é basicamente efetuado pelos comandos passados para a


máquina de solda. Esses comandos vão desde do ligamento/desligamento da parte de
potência ao ligamento/desligamento do gás responsável pelo isolamento da passagem de
corrente pelos eletrodos.

4.8.3 Implementação da Comunicação com a DIGITEC

Criou-se uma classe que encapsulasse toda a comunicação com a máquina de solda a
partir de uma porta serial. Também se criou uma interface ao usuário para estabelecer
essa comunicação.

Na interface, pode-se definir a porta serial que a DIGITEC está conectada. Configura-
se também a taxa de transferência de dados pela serial.

Para realizar a comunicação, basta pressionar um botão da interface. Nesse momento


49

podem acusar dois erros. Um dos erros refere-se à abertura da porta serial no caso de ela
já estiver aberta, ou na ausência da mesma. O outro erro refere-se ao não recebimento
da resposta que é enviada pela DIGITEC, ou seja, quando a porta serial escolhida não
estiver conectada à máquina de solda.

4.8.3.1 Enviando parâmetros de soldagem

Há também uma interface para a especificação dos parâmetros de soldagem comentada
no começo da seção 4.8.1. Esses parâmetros podem ser especificados de duas maneiras:

• Definindo valores pela interface gráfica;

• Via arquivo, onde contém as instruções e dados a serem carregados;

Para encaminhar esses dados à máquina de solda, existe um botão na interface. Essa
operação pode ser executada durante o processo de soldagem, isto quer dizer que os
parâmetros de soldagem podem variar ao longo da reparação de uma cavidade sem precisar
paralisar a solda.
5 CONCLUSÕES

A criação de um programa para controlar o movimento do robô pertencente ao Projeto


Roboturb foi o principal objetivo deste trabalho. A enorme complexidade que envolve
o controle de um robô fez com que o estágio curricular fosse uma fonte surpreendente
de aprendizado. Desenvolveram-se trabalhos na área da informática, da eletrônica, da
soldagem, da robótica e da medição.

Como ferramenta de trabalho, a linguagem de programação C/C++ foi utilizada para


a integração dos vários módulos desenvolvidos ao robô. Juntamente com um ambiente
de desenvolvimento integrado para aplicações, foi possı́vel criar um programa dotado de
interface gráfica, a fim do usuário ter a possibilidade de interagir com o sistema.

A interação Homem x Máquina deriva o uso de ferramentas auxiliares, como o controle


remoto. A construção desse dispositivo no Projeto Roboturb envolveu atividades em nı́vel
de software e de hardware. O projeto construtivo do CR já estava pronto, bastando apenas
realizar as ligações internas e construir a alimentação do mesmo. No software, já haviam
implementado classes que encapsulam a comunicação do CR com o computador. Com
isso, implementou-se uma aplicação que usa essas classes para receber informações de
elementos de comando, como manoplas, repassando para os atuadores, ou seja, gerando
movimento nas juntas do robô.

Para a comunicação com atuadores e encoders é utilizado um pacote fornecido pelo


fabricante da placa de controle, chamado FlexMotion Software. A partir desse pacote,
criou-se um conjunto de rotinas que facilitaram o movimento das juntas e a leitura da
posição dos eixos.

Um dos módulos integrados ao robô, e que atua em sincronismo com a movimentação


do manipulador, é o sistema de medição. Esse sistema caracteriza a etapa de medição da
superfı́cie de trabalho. O levantamento de dados sobre a superfı́cie é feita através de uma
câmera e de um sensor laser. Para tanto, foi necessário projetar a conexão do sensor laser
51

com a alimentação do mesmo. Usou-se um cabo coaxial e conectores do tipo BNC, que
garantiram a robustez do acionamento do sensor.

Outro módulo integrado que atua sincronizado com a movimentação do manipulador


é o sistema de soldagem. Após a etapa de medição, define-se uma estratégia para a
realização da soldagem. Essa estratégia consiste em gerar uma trajetória com parâmetros
solda. Ao longo da execução da trajetória, o sistema envia informações para a máquina de
solda, com o objetivo de formar cordões com o manipulador em movimento. Com tanto,
foram implementadas classes que encapsulam a comunicação com essa máquina.

O processo de soldagem no Projeto, chamado processo Plasma, utiliza como princı́pio


a liberação de energia a partir de um arco voltaico. Alimenta-se com altos valores de
corrente o eletrodo localizado no bico da tocha de solda, fundindo o arame que é inje-
tado no mesmo. Os resultados obtidos com essa estratégia estão satisfatórios. Desde a
primeira tentativa de execução de uma trajetória de solda, evoluiu-se muito na forma de
movimentar o robô. A grande dificuldade em realizar essa etapa estava no sincronismo
entre o movimento e a solda.

Como perspectivas futuras, há a necessidade de projetar o software que será usado
pelo operador final. Com tanto, é preciso modelar e rever vários pontos do sistema,
definindo novas funcionalidades e cortando outras, para que o resultado final esteja o
mais otimizado possı́vel e extremamente automatizado.

Em relação ao aprendizado no estágio curricular, observou-se que várias atividades


estão além do raio de ação da eletrotécnica. Entretanto, disciplinas do curso de ele-
trotécnica foram base para a realização de algumas atividades. A exemplo, as matérias de
eletrônica para a construção do controle remoto. Outra grande contribuição foi o apren-
dizado no uso dos Controladores Lógicos Programáveis (CLP), que abrangem o uso de
uma linguagem de programação e relaciona saı́das e entradas com o objetivo de controlar
algum processo.
52

ANEXO A -- PROGRAMA DA
CALCULADORA

Executando o programa da calculadora através do console do DOS

Fazendo uma operação de soma


53

ANEXO B -- JANTAR DOS FILÓSOFOS

Janela principal do Jantar, com os cincos filósofos ao redor da mesa


54

ANEXO C -- ESPECIFICAÇÃO DO
REGULADOR DE TENSÃO
55

Include the “Regulador de Tensão”


56

REFERÊNCIAS

[1] SISTEMAS INDUSTRIAIS INTELIGENTES. Curso


de Linguagem Computacional C/C++, Disponı́vel em
http://s2i.das.ufsc.br/downloads/Apostila_C_Cplusplus.pdf
Acesso em junho de 2003.

[2] INFORMÁTICA NUMA BOA. Tutorial C,


Disponı́vel em http://www.numaboa.com.br/informatica/c/index.php
Acesso em junho de 2003.

[3] CPDEE / UFMG. Curso de Linguagem C,


Disponı́vel em http://www.mtm.ufsc.br/~azeredo/cursoC/aulas-main.html
Acesso em junho de 2003.

[4] NATIONAL INSTRUMENTS. Motion Control - FlexMotion Software 5.0, Reference


Manual, edição julho de 2000.

[5] REISDORPH, Kent. Borland C++ Builder 3 in 21 days, USA 1998.

[6] MIZRAHI, Victorine Viviane. Treinamento em Linguagem C++, Rio de Janeiro, 1994.

[7] DUTRA, Jair Carlos. Tecnologia da Soldagem, Florianópolis, 1998.

[8] JAMSA, Kris; KLANDER, Lars. Programando em C/C++ “A Bı́blia”, São Paulo,
1999.

[9] DE CONTO, Augusto Marasca. Proposta de um Teach Pendant Para Robô de Eixo
Reduntante, CTC - Florianópolis, 2003.

[10] SANTOS, Vitor M. F. . Robótica Industrial, Universidade de Aveiro - Portugal, 2001.

Você também pode gostar