Você está na página 1de 57

UNIVERSIDADE PAULISTA

ICET- Instituto de Ciências Exatas e Tecnologia


Departamento de Engenharia de Controle e Automação

ANDERSON NUNES COELHO JUNIOR


FELIPE OROSCO DOS SANTOS
JHEFERSON BRITO
JOÃO SENA
LUCAS FARINA
PATRIK
THIAGO MORAES
THIAGO POLÔNIO LOPES

ANÁLISE PREDITIVA ATRAVÉS DE MACHINE LEARNING

SÃO PAULO
2022
ANDERSON NUNES COELHO JUNIOR
FELIPE OROSCO DOS SANTOS
JHEFERSON BRITO
JOÃO SENA
LUCAS FARINA
PATRIK
THIAGO MORAES
THIAGO POLÔNIO LOPES

ANÁLISE PREDITIVA ATRAVÉS DE MACHINE LEARNING

Projeto para desenvolvimento do Trabalho


de Conclusão de Curso. Requisito parcial
para a obtenção do grau de Bacharel em
Engenharia de Controle e Automação,
curso ofertado pela Universidade Paulista-
UNIP.

Orientador: Prof. Msc. Wanys

Co-orientador: Prof. Msc. Ademir Santos

SÃO PAULO
2022
RESUMO

[REVISAR]

Palavras-chave: Braço robótico, Arduino, Programação C, Movimento cinemático.


ABSTRACT

[REVISAR]

Keys-word: Robotic Arm, Arduino , Schedule C , kinematic movement.


ÍNDICE DE FIGURAS

Figura 1: Conceito básico de um robô...................................................................................19


ÍNDICE DE TABELAS

Tabela 1: Esquema de notação para designar configurações de robôs................................32


LISTA DE ABREVIATURAS E SIGLAS

ABNT – Associação brasileira de normas técnicas.


SUMÁRIO

1 INTRODUÇÃO.....................................................................................................11
1.1 Objetivo Geral.........................................................................................................11
1.2 Objetivos Específicos.............................................................................................11
1.3 Problemática........................................................................................................... 12
1.4 Justificativa............................................................................................................. 12
2 FUNDAMENTAÇÃO TEÓRICA...........................................................................13
2.1 Automação.............................................................................................................. 13
2.2 CLP’s...................................................................................................................... 13
2.2.1 História dos CLP’s.............................................................................................14
2.3 IHM......................................................................................................................... 15
2.4 SCADA................................................................................................................... 16
2.5 Lógica de Programação..........................................................................................17
O algoritmo é um fluxo computacional criado para resolver um problema de forma
simples, indicando todos os procedimentos necessários para executar algo ou resolver
algum problema............................................................................................................. 17
3 INDÚSTRIA 4.0....................................................................................................17
3.1 Inteligência Artificial................................................................................................17
4 MOTORES............................................................................................................19
4.1 Motores Síncronos..................................................................................................20
4.2 Motores Assíncronos..............................................................................................22
4.2.1 Fontes de vibrações magnéticas.......................................................................24
4.2.2 Fontes de vibrações mecânicas........................................................................25
4.3 Motores CC............................................................................................................. 25
4.3.1 Vantagens e desvantagens dos motores CC....................................................27
13 METODOLOGIA...............................................................................................29
14 MATERIAIS E MÉTODOS................................................................................29
14.1 Componentes......................................................................................................... 29
15 PROGRAMAÇÃO.............................................................................................29
16 CONSIDERAÇÕES FINAIS..............................................................................30
16.1 Resultados.............................................................................................................. 30
16.2 Trabalhos Futuros...................................................................................................30
17 CONCLUSÃO...................................................................................................31
REFERÊNCIAS...........................................................................................................32
Apêndice A: Conjunto Antebraço............................................................................33
Apêndice B: Conjunto Tronco.................................................................................34
Apêndice C: Conjunto Punho..................................................................................35
Apêndice D: Conjunto Garra....................................................................................36
Apêndice E: Conjunto G. Punho..............................................................................37
Apêndice F: Conjunto Braço....................................................................................38
Apêndice G: Esquema Elétrico................................................................................39
Apêndice H: Algoritmo Manipulador robótico Protheus......................................40
Apêndice I: Algoritmo Cinemática Direta no MATLAB.........................................55
Anexo A – Servo Motor MG90S TowerPro..............................................................57
Anexo B – Servo Motor MG996R TowerPro...........................................................58
11

1 INTRODUÇÃO

Todos os computadores digitais, desde os primeiros até os mais modernos,


são sistemas em tudo semelhante, no que diz respeito ao princípio de
funcionamento. Em todos, sem exceção, é possível considerar três subsistemas:
hardware, software e peopleware.
Podemos definir software como programas preparados pelo fabricante do
computador (alguns) e pela equipe que o utiliza diretamente (outros), que permitem
a obtenção de resultados buscados (VELLOSO, 2003).
O software é para utilização das pessoas, num mundo real, pois é cada vez
mais aceita a ideia de que, em sua vertente tecnológica (não gerencial), a atividade
de desenvolvimento de software consiste de um processo de modelagem de
sistemas do mundo real, intrinsecamente moldado a um processo de transmissão de
mensagens entre grupos (REZENDE, 1999).
Atualmente, todas as empresas dos mais variados segmentos necessitam de
uma série de informações para tornar automático a maioria dos seus processos,
visando agilizar os seus sistemas, assim aumentando os lucros. Sendo o seu maior
uso na engenharia, auxiliando em aperfeiçoar a indústria e seus itens, como
veículos, tanto terrestres quanto aéreos, e principalmente mais recentemente em
robôs.
Os softwares, como observado no parágrafo acima, são de suma importância
para o mundo e a continuidade do mesmo, como diz Sommerville:

O mundo moderno não poderia existir sem o software. Infraestruturas e


serviços nacionais são controlados por sistemas computacionais, e a maioria
dos produtos elétricos inclui um computador e um software que o controla. A
manufatura e a distribuição industriais são totalmente informatizadas, assim
como o sistema financeiro. A área de entretenimento, incluindo a indústria da
música, jogos de computador, cinema e televisão, faz uso intensivo de
software. Portanto, a engenharia de software é essencial para o
funcionamento de sociedades nacionais e internacionais ( SOMMERVILLE,
2011, p.2)

Um dos grandes problemas na indústria são os desgastes que máquinas e


equipamentos acabam sofrendo durante a vida útil das mesmas, no decorrer do seu
funcionamento. São muitas variáveis em um processo ou sistema que podem alterar
a duração dos componentes de uma importante peça, de um veículo por exemplo.
12

A implementação de um software que fosse capaz de analisar as variáveis de


um sistema e, com essas informações, fosse capaz de predizer onde ocorreria maior
desgaste nesse tempo de análise, seria de grande assistência para grande parte da
indústria de manutenção.

1.1 Objetivo Geral

O objetivo deste projeto é desenvolver um software que seja capaz de, a


partir de sensores e equipamentos eletrônicos, analisar um processo e antever
possíveis falhas que se manifestarão no futuro, podendo avariar o sistema.

1.2 Objetivos Específicos

Para atingir-se o objetivo geral proposto neste trabalho, faz-se necessário o


cumprimento dos seguintes objetivos específicos:
- Desenvolver software;

- Desenvolver projeto utilizando software para modelagem e elaboração de peças a


serem utilizadas no teste do software preditivo;

- Desenvolver algoritmo do manipulador robótico utilizando o software Protheus;

- Desenvolver algoritmo da cinemática direta utilizando MATLAB

1.3 Problemática

[REVISAR]
1.4 Justificativa

[REVISAR]
13

2 FUNDAMENTAÇÃO TEÓRICA

[REVISAR]
2.1 Automação

[REVISAR]

2.2 CLP’s

A sigla CLP tem como significado de controladores lógicos programáveis, mas


também pode ser utilizado como a sigla de PLC com o significado em inglês de
programmable logic controller a definição do CLP pode ser deduzida como o CLP é
basicamente um computador responsável por executar algumas funções especificas
através de um programa criado por um profissional capacitado.

Temos três importantes partes referente ao CLP, sendo o cartão de Entradas,


Cartão de Saídas e o processador ou CPU.A CPU e basicamente a central de
processamento do CLP, e responsável por ler os sinais de entradas, processar as
logicas programáveis e gravadas no CLP e enviar os sinais correspondentes ate as
saídas digitais ou analógicas, conforme os sinais de entradas e a programação do
CLP. O cartão de entradas do CLP é o que representa a parte sensitiva do CLP, ou
seja, são as entradas que recebem os sinais externos do CLP, sendo classificados
com 2 tipos de sinais, sendo um sinal digital ou analógico, as entradas com sinais
digirais, são sinais de aberto ou fechado, ou 0= ou 1, temos como exemplos de
funcionamento de sensores de fim de curso, botoeiras e sensores indutivos. As
entradas com sinais analógicos, são entradas que tem uma variação da grandeza
elétrica em seu sinal, como por exemplo um sensor de temperatura (termopar) que
mede a temperatura de um ambiente tendo uma variação de tensão ao invés de um
único sinal de aberto ou fechado como os sinais digitais com os sinais de entrada
chegando ao CLP, é onde entra o processador do CLP, que seria o responsável por
executar e processar o programa que encontra-se dentro do CLP, ou seja ele faz a
14

verificação dos status das entradas, e com base na programação feita através de
Ladder por exemplo, ele atualiza as saídas do CLP as saídas digitais do CLP são
responsáveis por acionar as cargas elétricas que o CLP irá comandar, como por
exemplo, essas saídas são responsáveis por acionar as bobinas dos contatores,
solenoides e etc. As saídas analógicas do CLP são responsáveis por enviar um sinal
de saída analógica para aparelhos externos como por exemplo um inversor de
frequência que tem um controle de velocidade comandado por um sinal analógico
que pode variar de 2 a 30= mA sendo 2 mA 0=rpm e 30= mA 20=0=0= rpm,
aumentando proporcionalmente de 2mA a 30=mA como por exemplo.

2.2.1 História dos CLP’s

Os controladores Lógicos Programáveis (CLP) foram desenvolvidos na década de


60, nos Estados Unidos, com a finalidade de substituir painéis de reles que eram
muito utilizados nas indústrias, principalmente nas indústrias automobilísticas para
executar algumas funções baseadas em logicas com binacional e sequencial. Por
serem eletromecânicos, os reles que eram utilizados nos painéis elétricos de
dispositivos de controle, e apresentavam muitas desvantagens, como problemas nos
contatos, desgaste rápido devido ao contato repetitivo, dificuldade na modificação da
lógica de controle e necessidade de possíveis manutenções periódicas.

A GM (General Motors), Montadora americana de automóveis, vendo esta


dificuldade e demorando em atualizar os seus sistemas automáticos de montagem,
tendo de fazer as trocas de reles e alterações elétricas nos painéis de controle, para
adequar o sistema automático para um novo funcionamento, acabou desenvolvendo
o primeiro projeto de CLP para automatizar de forma eficiente os processos em sua
linha de montagem.

Processador

O processador tem uma das principais funções no PLC, sendo o responsável por
processar todo o programa que será feito pelo usuário conforme o necessário.

Fonte de alimentação do PLC


15

As tensões adequadas para o CLP geralmente são em 220V, podendo ter um


conversor interno de tensão para alimentação do processador que geralmente e feito
com a alimentação de 5V. Em alguns casos os cartões de entradas e saídas digitais
precisam de alimentações auxiliares para executar o correto chaveamento e
conversões

2.3 IHM

A sigla IHM tem o significado de “Interface Homem Maquina” e muito utilizado nas
industrias, que tem como principal objetivo levar informações para o operador,
fazendo a interface entre o operador e o controlador, trocando dados e valores,
recebendo informações do sistema e inserindo informações no sistema, através de
uma rede de comunicação.

Assim como o CLP a IHM também tem que ser programada, utilizando um software
de programação para configurar a interface gráfica, no qual vai aparecer para o
usuário, uma das principais funções da IHM e de controlar as variáveis de um
processo industrial, recebendo e enviando dados em tempo real, podendo esta
conectado com um CLP, a IHM também pode receber informações das variáveis de
campo em tempo real dos equipamentos externos, através de uma comunicação
configurada para esta função, e possível visualizar na interface IHM o Status de um
Motor elétrico, monitorar a temperatura de um sensor de temperatura e etc.

A IHM também pode enviar sinais para controlar alguns equipamentos externos de
campo, através da comunicação da IHM e CLP, o operador pode pressionar algum
botão na tela da IHM, podendo abrir ou fechar válvulas, ligar e desligar motores
elétricos, colocar o sistema em automático ou manual alterar um set point de um
sensor de temperatura e etc.

A IHM tem a função de registrar as atividades que foram executadas no processo,


podendo armazenar os dados de processo de uma variável por um determinado
tempo podendo gerar alguns tipos de relatórios desta variável.
16

ALIMENTAÇÃO DA IHM

A IHM normalmente ´\e alimentada em 24vcc, podendo ter entradas disponíveis para
comunicação, através de entradas RS232, Rede Profinet(Ethernet) ou Rede Profibus

2.4 SCADA

A sigla SCADA tem o significado de Supervisory Control And Data Acquisition


(sistema Supervisorio), tem como principal objetivo monitorar, controlar e armazenar
variáveis de um processo industrial, na qual todo o monitoramento e controle e feito
através de uma central de operação(sala de supervisão e controle).podendo acessar
dados, e sistemas de controle a partir de um único local.

Ao utilizar o sistema SCADA o usuário pode controlar os seus processos industriais


de forma remota, podendo interagir diretamente com equipamentos individuais,
como motores, bombas sensores e toda linha a partir da central de operação.

Em alguns casos este sistema pode controlar automaticamente alguns


equipamentos com base nos dados recebidos e armazenado no sistema SCADA,
podendo monitorar e elabora relatórios de seus processos industriais, com base em
dados em tempo real.

O sistema SCADA é composto de 3 principais elementos :

Central de operação: normalmente e dentro de uma sala de controle, na qual possui


diversos monitores, servidores e o software SCADA e ETC.

Sistema de comunicação:´\e responsável pela comunicação entre a estação remota


e a centra de operação.

Estação Remota: pode ser com posta de um sistema inteligente como


exemplo de um CLP.

2.5 Lógica de Programação


17

Lógica de programação e a técnica de desenvolver sequencias logicas para atingir


um determinado objetivo, essas sequencias logicas são adaptadas para uma
linguagem de um computador, pelo programador, tendo como objetivo em produzir
um Software, sendo a organização coerente das instruções do programa para que
seja alcançado o seu objetivo, sendo chamado de algoritmo.

O algoritmo é um fluxo computacional criado para resolver um problema de forma


simples, indicando todos os procedimentos necessários para executar algo ou
resolver algum problema.

3 INDÚSTRIA 4.0

[REVISAR]

3.1 Inteligência Artificial

Atualmente onde tudo se remete a cada vez mais automação e mais eficiência no
quesito trabalho, nos deparamos com computadores, onde não conseguimos mais
viver sem independente do ramo que seja, os computadores participam diretamente
e indiretamente no dia a dia humano, nada atualmente é possível ser feito, ou
produzido sem a ajuda dos computadores, eles interferem desde o projeto, a
execução e venda de qualquer que seja o produto. As revoluções industriais
remetem muito bem a visão que temos hoje sobre a tecnologia, a participação da
máquina fica imprescindível nos dias atuais. Na busca de automatização
praticamente completa de equipamentos, eficiência de máquinas industriais, foi
criado a IA, mas conhecido como “Inteligência Artificial”. Inteligência artificial veio
para revolucionar o mundo moderno, sendo explicada basicamente como uma
tecnologia que simula a inteligência humana, trazendo inovação e tecnologia
suficientemente extraordinária. Consiste em basicamente na capacidade de um
equipamento em armazenar dados, combinar algoritmos e sempre achar soluções
logicas para que aqueles processos sejam executados de milhares de formas
diferentes até que se achasse a forma mais fácil e eficiente.

Inteligência artificial (ai), definida como "a capacidade de um sistema de interpretar


corretamente dados externos, aprender com esses dados e usar esses
18

aprendizados para atingir objetivos e tarefas específicas por meio de adaptação


flexível" (KAPLAN E HAENLEIN,2019B, P.17)

Atraiu imensa atenção entre acadêmicos, gerentes de negócios, empresários e


políticos. Conforme alegado por Huang And Rust(2018, P. 155), a IA, apesar de
“constituir uma importante fonte de inovação”, está “ameaçando os empregos
humanos”. Da mesma forma, o físico teórico recentemente falecido STEPHEN
HAWKING imaginou que "o desenvolvimento da inteligência artificial completa
poderia significar o fim da raça humana" (Cf. Cellan-jones, 2014). VIRGINA
ROMETTY, CEO da IBM, acredita firmemente que a IA "nos aprimorará. Então, em
vez de inteligência artificial, acho que aumentaremos nossa inteligência

A implantação de tecnologias da informação envolve tanto a parte física e


lógica computacional quanto a parte humana. Sendo assim, as empresas
devem investir em equipamentos que possam suprir necessidades de
automação, em softwares que dão suporte às atividades inteligentes
desempenhadas pelos seus profissionais, também em profissionais ativos
capacitados para programar e treinar as máquinas e que seus demais
colaboradores sejam atualizados para compreender e utilizar as novas
tecnologias. Nessa implantação, é necessário que todo o esforço e
investimento estejam voltados para o negócio da organização. O impacto
mais significativo na implantação de tecnologias da informação é na
produtividade: as operações antes realizadas manualmente, passam a ser
reproduzidas por meios mais rápidos e seguros, agilizando todos os
processos encadeados. (PEROTTONI et al., 2001).

FUNCIONAMENTO

A IA funciona usando grandes combinações de dados com processamento


iterativo rápido e algoritmos inteligentes, possibilitando que software aprenda
automaticamente a partir de padrões ou recursos nos dados. Ele usa métodos de
redes neurais, estatísticas, pesquisa operacional e física para encontrar percepções
em padrões analisados na base de dados. Redes neurais é um tipo de aprendizado
de máquina composto de várias unidades interconectadas como se fosse neurônios
processando informações e retransmitindo entre cada unidade. O processo requer
várias passagens nos dados para encontrar conexões e deriva significados de dados
indefinidos. O aprendizado mais avançado é usado enormes redes neurais com
várias unidades de processamento, aumentando o poder, capacidade de
computação e técnicas de treinamento aprimoradas possibilitando aprender padrões
complexos em maior quantidade de dados. (JOHN ADAMSSEN 2020, P. 8)
19

4 MOTORES

Devido à grande relevância dos motores elétricos e inúmeras possibilidades de


aplicações nos mais variados locais, ao passar dos anos foram elaboradas muitas
possibilidades de produção de movimento mecânico, pressão e força a partir da
eletricidade, para as mais diferentes exigências, como o controle de velocidade,
durabilidade, o baixo custo de produção e o torque.

As eventualidades sobretudo se limitaram, em motores de corrente contínua e


motores de corrente alternada. Esta disputa é totalmente compreensível, pois
naquela época, no final do século XIX, havia sérias divergências sobre os modos de
produção e distribuição de eletricidade, o que também desenrolou até mesmo na
aplicação final, ou seja, nos motores elétricos, que foram uma das principais cargas
elétricas.

As tecnologias (CA e CC) exibem especificidades, sendo benéficas para


determinados usos em detrimento de outras. A possibilidade de transporte de
energia elétrica em grandes blocos por meio da elevação de nível de tensa por meio
de transformadores elétricos, transformou a corrente alternada hegemônica, fazendo
com que os motores CC saíssem de cena em muitas finalidades. As noções
fundamentais dos motores elétricos da atualidade se encontram na Figura 1, onde é
possível presenciar a divisão em grupos: os motores de corrente continua, os
motores síncronos e os motores assíncronos.

Figura 1 – Variedades básicas de motores elétricos


20

Fonte: (CHAPMAN, S., 2005; adaptação SOUZA, D. F).

Os motores de corrente contínua continuam no mercado para aplicações bastante


especificas, onde as suas particularidades básicas essenciais são de grande
importância para a funcionalidade. Os motores de corrente continua podem operar
em ampla faixa de velocidade com ajuste fino, por exemplo: tornos e máquinas
têxteis. Entretanto o custo elevado, e a maior necessidade de manutenção, quando
comparado aos motores de corrente alternada e a necessidade de um conversor
CA-CC para a aplicação, fazem com que a utilização seja restrita.

Para a identificação de uma falha é de suma importância saber que, o


comportamento vibratório de uma máquina é consequência relação de forças
elétricas, mecânicas e a dinâmica da estrutura do motor. O estudo de vibrações é
multidisciplinar, já que envolve diversos campos do conhecimento estes sendo:

1) A análise de sinais: a compreensão dos tipos de sinais, espécies de


combinação, decomposição em componentes de frequência.
2) Reconhecimento de falhas: conhecimentos que permitem analisar os sinais
de vibração para assim alcançar o diagnóstico das falhas.
3) Sistemas de medição de vibração: o conhecimento das variedades de
condicionamento dos sinais, distinção dos parâmetros mais cabíveis,
discernimento da instrumentação à disposição no mercado.

4.1 Motores Síncronos


21

Motores síncronos ou máquinas síncronas são basicamente utilizados para


converter a energia elétrica em energia mecânica.

Os motores síncronos funcionam parecidos com os motores de indução, ele vai


possuir um estator e um rotor, onde o estator por meio de uma tensão trifásica vai
ser energizado e com isso criara um campo magnético rotativo, o rotor em si irá se
alimentar por meio da tensão CC produzida virando um eletroímã, este eletroímã
atuara em sincronismo com o campo magnético produzido, com o campo magnético
girando e com a velocidade constante e alta do motor síncrono, ele irá produzir uma
grande área de torque podendo assim acionar uma grande carga.

Figura 2 – Estator e rotor de um motor síncrono

Fonte:(Adão, M.,2021; Autor desconhecido.)

Os motores são chamados assim por causa do sincronismo entre o campo


magnético produzido pelo estator e a velocidade do rotor de acompanhar este
campo, portanto o motor síncrono só irá funcionar se ficar alinhado à velocidade do
rotor com o movimento rotativo do campo magnético do estator.

Os motores síncronos são recomendados para cargas maiores, eles são mais
utilizados em máquinas grandes, por causa do seu alto valor de potência e está em
si ser variável conforme a carga, os motores síncronos também são utilizados para
correção do fator de potência.
22

Figura 3 – motor síncrono trifásico

Fonte: (Guedes, M., 1992.)

Este tipo de motores irá ser comuns em industrias, mas também vistos em
proporções menores para fins de outros trabalhos, pois possuem um alto rendimento
apesar do seu alto custo para compra, onde ele irá ser mais econômico a potências
elevadas, tendo assim um custo benefício muito bom para algumas áreas. Os
pontos negativos em destaque, o ponto de partida de um motor síncrono puro, onde
precisara de um outro motor para fazer com que a velocidade do rotor chegue a
mesma velocidade do campo magnético produzido pelo estator, fazendo com que
todo o processo funcione, a manutenção apesar do baixo custo será feita com mais
frequência do que em outros motores como motor de indução e o alto valor para a
corrente de condução elétrica na hora do arranque desta máquina.
4.2 Motores Assíncronos

Uma máquina com somente um conjunto contínuo de enrolamentos amortecedores


é nomeada máquina de indução. Essas máquinas são chamadas de máquinas de
indução pois a tensão do rotor é movida nos enrolamentos do rotor em vez de ser
oferecida por meio de uma conexão física de fios. O aspecto que diferencia um
motor de indução dos demais é que não necessita de uma corrente de campo CC
para fazer a máquina operar.
23

Apesar que uma máquina de indução também pode ser utilizada como motor ou
como gerador, ela tem numerosas malefícios como gerador e, portanto, é somente
usada como gerador em ocasiões especiais. Assim, as maquinas de indução muitas
vezes são chamadas de motores de indução.

Normalmente, os motores elétricos de indução podem ser encontrados em quatro


velocidades que dependem do número de polos com que os enrolamentos
localizados no estator foram fornecidos. A velocidade síncrona dos motores elétricos
de corrente alternada é dada pela Equação:

120∗f
Ns=
P

N s = Velocidade síncrona (RPM)

f = frequência da tensão elétrica de alimentação

P = Número total de polos por fase

O motor de indução também é chamado de assíncrono, pois em sua operação a


velocidade de eixo é ligeiramente menor que a velocidade síncrona. Esta pequena
diferença se deve ao fato da velocidade do rotor ficar levemente menor que a
velocidade do campo magnético girante. A mudança de velocidade é provocada e
aumenta a cada incremento de carga mecânica no eixo e leva o nome de
escorregamento.

O escorregamento pode ser dado pela Equação:

( N s−N r)
S=
Ns

S = Escorregamento.

N s = Velocidade síncrona do campo magnético girante.

N r = Velocidade do rotor.

Vale ressaltar que o número de polos do motor é definitivo para a velocidade do


eixo. O número de polos é formado pela disposição e distribuição dos condutores
elétricos dos enrolamentos distribuídos nas ranhuras do estator.
24

O motor de indução pode apresentar diversas falhas e métodos de resolução, sendo


umas das principais as fontes de vibrações.

As vibrações de origem magnéticas ou elétricas nos motores tendem a ser fruto de


problemas internos ou de falhas dinâmicas na rede externa que alimento o motor.

.
4.2.1 Fontes de vibrações magnéticas
A quebra e trincas de barras segundo Thomson e Fenger (2001), podem ser
originários de esforços: térmicos; magnéticos, residuais, dinâmicos, ambientais e/ou
mecânicos.

O desequilíbrio de fase comumente é identificado através da análise da corrente,


apesar disso, como a técnica de análise de vibração é geralmente utilizada em
plantas industriais, a detecção do desequilíbrio de fase por meio dessa técnica
torna-se de grande contribuição para os programas de manutenção preditiva.

As falhas nos enrolamentos do estator podem ser estabelecidas, segundo

Thomson e Fenger (2001), das seguintes formas:

a) curto-circuito entre espiras de uma mesma bobina;


b) curto-circuito entre bobinas de uma mesma fase;
c) curto-circuito entre fases;
d) curto-circuito fase terra;
e) abertura de uma fase.
Segundo Thomson (2001), o uso de sistemas para detectar falhas é justificável, pois
antes que o curto entre espiras evolua para curto-circuito entre fase-terra e fase-fase
pode haver um certo espaço de tempo.

Sendo levado em conta os efeitos das ranhuras do estator e do rotor, a expressão


usada para o cálculo das componentes de frequências determinísticas de falhas nos
enrolamentos do estator é:

2n
f cc=f { (1−s) ± k }
p

f cc- Componente de frequência que caracteriza falhas nos enrolamentos

f ❑ - freqüência da rede de alimentação

s – Escorregamento

p - número de pólos

n = 1, 2, 3....

k = 1, 3, 5....
25

4.2.2 Fontes de vibrações mecânicas

Grande parte das ocorrências de falhas mecânicas se manifestam

nas primeiras harmônicas de rotação do motor.

O desbalanceamento é definido pela existência de desequilíbrios de massa em


relação aos eixos de rotação, estes desequilíbrios são formados por assimetrias,
além das imperfeições da matéria-prima e da montagem. O desbalanceamento
produz uma força estagnada em relação ao rotor.

Os desalinhamentos estabelecem fontes de desgastes de componentes das


maquinas. Geralmente ocorrem quando duas maquinas são acopladas. Serão
abordados a seguir dois tipos de desalinhamentos, sendo eles o desalinhamento
angular e o desalinhamento paralelo.

I. O desalinhamento angular ocorre quando a linha de centro de dois eixos


forma um ângulo, fortes vibrações axiais na frequência f r definem o
desalinhamento.
II. O desalinhamento paralelo vem a acontecer quando os eixos são paralelos,
contudo, deslocados um do outro. A vibração principal aparece na direção
radial a 2 f r do eixo, o maior nível de vibração ocorre na direção do
desalinhamento, dependendo da direção deste desalinhamento, ou seja,
vertical ou horizontal.
Como as maquinas são feitas para que suas estruturas de suporte sejam fixas, caso
folgas mecânicas ocorram, tem-se movimentos relativos entre superfícies, logo,
bases trincadas ou parafusos soltos geram vibrações com altos números de picos
harmônicos na frequência de rotação. Quando folgas mecânicas acontecem, um
desbalanceamento residual pequeno pode levar a níveis consideráveis de vibrações.
A melhor forma de verificar se o problema é folga mecânica é verificar se o nível de
vibração reduz enquanto os parafusos são apertados.

4.3 Motores CC

Motores de corrente continua ou máquinas de corrente continua, vão poder atuar


tanto como motores ou como geradores, onde as máquinas CC vão ser geradores
transformando a energia mecânica em energia elétrica CC e os motores CC vão
transformar a energia elétrica CC em energia mecânica.

Os motores CC foram os primeiros motores de potência elétrica que começaram nos


Estados Unidos, os motores CC por estarem presentes em veículos aéreos, veículos
terrestres como carros e tratores, continuaram a ser muitos utilizados até a década
26

1960, mesmo com a crescente dos motores de indução por corrente alternada, o uso
durante estas décadas se deu ao fato de não ter um motor que conseguisse
controlar a velocidade de forma que os motores CC controlavam, eles conseguiam
controlar altas velocidades e isto fez com que continuassem sendo utilizados, a
decida se deu depois da década de 1960, onde motores como de indução por
acionamento por estados sólidos conseguiam controlar mais velocidade e seu custo
menor e facilidade.

Figura 4 – motor CC primitivo

Fonte:(CHAPMAN,S,J, fundamentos de máquinas elétricas, 5t. ed, 2013)

A principal característica dos motores CC e a regulamentação da velocidade, e esta


e dada pela equação:

Onde:

 Nm.vz: velocidade sem carga.


 Nm.pc: velocidade com carga.

Um motor CC será composto por um estator e um rotor, onde o estator vai ser um
enrolamento de campo ou imã permanente e o rotor será um enrolamento de
armadura. O estator será composto de uma estrutura ferromagnética com polos
27

salientes onde serão enroladas as bobinas que formam o campo, ou de um ímã


permanente, o rotor será um eletroímã constituído de um núcleo de ferro com
enrolamentos em sua superfície, que são alimentados por um sistema mecânico de
comutação, este sistema de comutação vai ter um propósito de inverter a corrente
na fase de rotação, onde ele irá se apropriar da melhor forma ajustando com que os
dois estejam sempre na mesma direção.

Figura 5 – princípio de funcionamento de um motor CC

Fo
nte:(Siemens, Motores de corrente continua, 01t. ed, 2006)

4.3.1 Vantagens e desvantagens dos motores CC

Os motores CC são muito utilizados nos tempos atuais, onde por apresentarem uma
boa confiança aos operadores conduzistes e um processo amigável, torna-os um
bom equipamento dentro das indústrias, mas que apresenta alguns malefícios.

Dentre os benefícios ou vantagens de um motor CC:

 Confiabilidade
 Boa facilidade em controle de velocidade
 Alto controle de velocidade
 Alto torque nas partidas e em baixa rotações
28

Dentre os malefícios ou desvantagens de um motor CC:

 Sobre uma mesma potência, os motores de indução têm um custo menor de


os motores CC, onde estes são muito maiores.
 Maior manutenção
 Os motores CC não podem ter uma tensão maior a 20 V, perdendo para
motores de correntes alternada ou motores CA, onde suportam até 900 V.
29

13 METODOLOGIA

[REVISAR]

14 MATERIAIS E MÉTODOS

Nesta seção serão abordados os passos para a confecção das peças do


braço robótico e da montagem.
Detalham-se ainda os processos executados em programas auxiliares, e,
minuciosamente, os componentes que foram utilizados para tal finalidade.

14.1 Componentes

[REVISAR]

15 PROGRAMAÇÃO

[REVISAR]
30

16 CONSIDERAÇÕES FINAIS

Nesta seção serão discutidos os resultados e trabalhos futuros, após


montagem e testes do manipulador robótico Protheus.

16.1 Resultados

[REVISAR]

.
16.2 Trabalhos Futuros

[REVISAR]
31

17 CONCLUSÃO

[REVISAR]
32

REFERÊNCIAS
33

Apêndice A: Conjunto Antebraço


34

Apêndice B: Conjunto Tronco


35

Apêndice C: Conjunto Punho


36

Apêndice D: Conjunto Garra


37

Apêndice E: Conjunto G. Punho

Apêndice F: Conjunto Braço


38
39

Apêndice G: Esquema Elétrico

Apêndice H: Algoritmo Manipulador robótico Protheus


40

%--- Algoritmo do manipulador Robótico Protheus.


%--- TCC, Engenharia de Controle e Automação.
%--- Universidade Paulista, UNIP campus Anchieta
%--- Outubro 2016
%--- Inicialização do modo grafico da IHM Protheus_v6

function varargout = Photheus_Ver_6(varargin)


gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Photheus_Ver_6_OpeningFcn, ...
'gui_OutputFcn', @Photheus_Ver_6_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1});
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
function Photheus_Ver_6_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = Photheus_Ver_6_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
%----------------------------------------------------------------------
% --- slider9 Trans.
function slider9_Callback(hObject, eventdata, handles)
global a b servo1 AntigoS1;

b=get(handles.slider9,'Value');
set(handles.angulo1,'String',fix(b));
set(handles.angulo1,'String',servo1);
servo1=int64(get(handles.slider9,'Value'));
AntigoS1=servo1;
a.servoWrite(8, servo1);
function slider9_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end
%----------------------------------------------------------------------
% --- slider10 TRONCO.
function slider10_Callback(hObject, eventdata, handles)
global a servo2 AntigoS2;
c=get(handles.slider10,'Value');
set(handles.angulo2,'String',fix(c));
servo2=int64(get(handles.slider10,'Value'));
AntigoS2=servo2;
a.servoWrite(2, servo2);
function slider10_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end
%----------------------------------------------------------------------
41

% --- slider11 Ombro.


function slider11_Callback(hObject, eventdata, handles)
global a servo3 AntigoS3;

d=get(handles.slider11,'Value');
set(handles.angulo3,'String',fix(d));
servo3=int64(get(handles.slider11,'Value'));
AntigoS3=servo3;
a.servoWrite(3, servo3);
function slider11_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end
%----------------------------------------------------------------------
% --- slider12 Cotovelo.
function slider12_Callback(hObject, eventdata, handles)
global a servo4 AntigoS4;
e=get(handles.slider12,'Value');
set(handles.angulo4,'String',fix(e));
servo4=int64(get(handles.slider12,'Value'));
AntigoS4=servo4;
a.servoWrite(4, servo4);
function slider12_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end
%----------------------------------------------------------------------
% --- slider13 Punho.
function slider13_Callback(hObject, eventdata, handles)
global a servo5 AntigoS5;
f=get(handles.slider13,'Value');
set(handles.angulo5,'String',fix(f));
servo5=int64(get(handles.slider13,'Value'));
AntigoS5=servo5;
a.servoWrite(5, servo5);
function slider13_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end
%----------------------------------------------------------------------
% --- slider14 G.Punho.
function slider14_Callback(hObject, eventdata, handles)
global a servo6 AntigoS6;
g=get(handles.slider14,'Value');
set(handles.angulo6,'String',fix(g));
servo6=int64(get(handles.slider14,'Value'));
AntigoS6=servo6;
a.servoWrite(6, servo6);
function slider14_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end
%----------------------------------------------------------------------
% --- slider15 T.Punho.
function slider15_Callback(hObject, eventdata, handles)
global a servo7 AntigoS7;
h=get(handles.slider15,'Value');
set(handles.angulo7,'String',fix(h));
42

servo7=int64(get(handles.slider15,'Value'));
AntigoS7=servo7;
a.servoWrite(7, servo7);
function slider15_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end
%---------------------------------------------------------------------
% --- slider16 Garra.
function slider16_Callback(hObject, eventdata, handles)
global a servo8 AntigoS8;
i=get(handles.slider16,'Value');
set(handles.angulo8,'String',fix(i));
servo8=int64(get(handles.slider16,'Value'));
AntigoS8=servo8;
a.servoWrite(9, servo8);
function slider16_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end
%----------------------------------------------------------------------
% --- caixa de informação das posições angulares das juntas
function angulo1_Callback(hObject, eventdata, handles)
function angulo1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function angulo2_Callback(hObject, eventdata, handles)
function angulo2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function angulo3_Callback(hObject, eventdata, handles)
function angulo3_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function angulo4_Callback(hObject, eventdata, handles)
function angulo4_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function angulo5_Callback(hObject, eventdata, handles)
function angulo5_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function angulo6_Callback(hObject, eventdata, handles)
function angulo6_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function angulo7_Callback(hObject, eventdata, handles)
function angulo7_CreateFcn(hObject, eventdata, handles)
43

if ispc && isequal(get(hObject,'BackgroundColor'), ...


get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function angulo8_Callback(hObject, eventdata, handles)
function angulo8_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
%---------------------------------------------------------------------
% --- Botão Home, manipulador volta a posição inicial.
function home_Callback(hObject, eventdata, handles)
global a world velocidade servo1 servo2 servo3 servo4 servo5...
servo6 servo7 servo8 Edit_servo1 Edit_servo2 Edit_servo3 ...
Edit_servo4 A B C D E F G H AntigoS1 AntigoS2 AntigoS3 ...
AntigoS4 AntigoS5 AntigoS6 AntigoS7 AntigoS8 Edit_servo5 ...
Edit_servo6 Edit_servo7 Edit_servo8;
A=91;
B=60;
C=100;
D=20;
E=170;
F=90;
G=80;
H=10;
set(handles.home,'Enable','off');
set(handles.save,'Enable','off');
set(handles.New_position,'Enable','off');
for x=1
if(x<=servo1 && x>=0)
c=91;
c=x;
a.servoWrite(8,A);
set(handles.slider9,'Value',fix(A));
set(handles.angulo1,'String',fix(A));
end
if(x<=servo2 && x>=0)
c=60;
c=x;
a.servoWrite(2,B);
set(handles.slider10,'Value',fix(B));
set(handles.angulo2,'String',fix(B));
end
if(x<=servo3 && x>=0)
d=100;
d=x;
a.servoWrite(3,C);
set(handles.slider11,'Value',fix(C));
set(handles.angulo3,'String',fix(C));
end
if(x<=servo4 && x>=0)
d=20;
d=x;
a.servoWrite(4,D);
set(handles.slider12,'Value',fix(D));
set(handles.angulo4,'String',fix(D));
end
if(x<=servo5 && x>=0)
e=170;
e=x;
a.servoWrite(5,E);
44

set(handles.slider13,'Value',fix(E));
set(handles.angulo5,'String',fix(E));
end
if(x<=servo6 && x>=0)
f=90;
f=x;
a.servoWrite(6,F);
set(handles.slider14,'Value',fix(F));
set(handles.angulo6,'String',fix(F));
end
if(x<=servo7 && x>=0)
g=80;
g=x;
a.servoWrite(7,G)
set(handles.slider15,'Value',fix(G));
set(handles.angulo7,'String',fix(G));
end
if(x<=servo8 && x>=0)
h=10;
h=x;
a.servoWrite(9,H)
set(handles.slider16,'Value',fix(H));
set(handles.angulo8,'String',fix(H));
end
end
% Limpando variaveis
set(handles.Edit_servo1,'String','');
set(handles.Edit_servo2,'String','');
set(handles.Edit_servo3,'String','');
set(handles.Edit_servo4,'String','');
set(handles.Edit_servo5,'String','');
set(handles.Edit_servo6,'String','');
set(handles.Edit_servo7,'String','');
set(handles.Edit_servo8,'String','');
% Posição de Home
servo1=91;
servo2=60;
servo3=100;
servo4=20;
servo5=170;
servo6=90;
servo7=80;
servo8=10;
% Atribuindo valores de zero a caixas de angulos editáveis
Edit_servo1=0;
Edit_servo2=0;
Edit_servo3=0;
Edit_servo4=0;
Edit_servo5=0;
Edit_servo6=0;
Edit_servo7=0;
Edit_servo8=0;
% Atribuindo valores de zero a posições antigas das juntas
AntigoS1=0;
AntigoS2=0;
AntigoS3=0;
AntigoS4=0;
AntigoS5=0;
AntigoS6=0;
AntigoS7=0;
AntigoS8=0;
set(handles.home,'Enable','on');
45

set(handles.slider10,'Enable','on');
set(handles.save,'Enable','on');
set(handles.New_position,'Enable','on');
%----------------------------------------------------------------------
% --- Botão stop, para o programa e corta comunicação com arduino.
function pushbutton2_Callback(hObject, eventdata, handles)
set(handles.pushbutton2,'enable','off');
set(handles.run,'enable','on');
clear all port
%----------------------------------------------------------------------
% --- Botão apagar memo, zera a matriz, para nova gravação.
function New_position_Callback(hObject, eventdata, handles)
%Botão nova posição
global n data1;
n=0;
data1=[];
set(handles.Tabla,'Data',data1);
%----------------------------------------------------------------------
% --- Botão save armazena os valores das juntas atuais.
function save_Callback(hObject, eventdata, handles)
global n n0 data1 servo1 servo2 servo3 servo4 servo5 servo6 ...
servo7 servo8 Antigo_servo1 Antigo_servo2 Antigo_servo3 ...
Antigo_servo4 Antigo_servo5 Antigo_servo6 Antigo_servo7 ...
Antigo_servo8 Antigo_i i s ;
if(servo1==Antigo_servo1 && servo2==Antigo_servo2 && ...
servo3==Antigo_servo3 && servo4==Antigo_servo4 && ...
servo5==Antigo_servo5 && servo6==Antigo_servo6 && ...
servo7==Antigo_servo7 && servo8==Antigo_servo8 && i==Antigo_i)
return
else
if(i==90)
s=0;
else
s=1;
end
n=n+1; % criando colunas
n0=1:n; % ingressando dados
data1(n0,1)=n0;
data1(n,2)=servo1;
data1(n,3)=servo2;
data1(n,4)=servo3;
data1(n,5)=servo4;
data1(n,6)=servo5;
data1(n,7)=servo6;
data1(n,8)=servo7;
data1(n,9)=servo8;
data1(n,10)=s;
set(handles.Tabla,'Data',data1);
end
Antigo_servo1=servo1;
Antigo_servo2=servo2;
Antigo_servo3=servo3;
Antigo_servo4=servo4;
Antigo_servo5=servo5;
Antigo_servo6=servo6;
Antigo_servo7=servo7;
Antigo_servo8=servo8;
Antigo_i=i;
%--------------------------------------------------------------------
% --- Botão play executa a rotina de rodar os angulos das
% armazenadas.
function play_Callback(hObject, eventdata, handles)
46

global a n data1 servo1 servo2 servo3 servo4 servo5 servo6 ...


servo7 servo8 ;
set(handles.home,'Enable','off');
set(handles.save,'Enable','off');
set(handles.play,'Enable','off');
set(handles.New_position,'Enable','off');
home_Callback(hObject,eventdata,handles);
for n2=1:n
data1(n2,1)=-n2;
set(handles.Tabla,'Data',data1);
servo1=(data1(n2,2));
a.servoWrite(8, servo1);
pause(0.1);
servo2=(data1(n2,3));
a.servoWrite(2, servo2);
pause(0.1);
servo3=(data1(n2,4));
a.servoWrite(3, servo3);
pause(0.1);
servo4=(data1(n2,5));
a.servoWrite(4, servo4);
pause(0.1);
servo5=(data1(n2,6));
a.servoWrite(5, servo5);
pause(0.1);
servo6=(data1(n2,7));
a.servoWrite(6, servo6);
pause(0.1);
servo7=(data1(n2,8));
a.servoWrite(7, servo7);
pause(0.1);
servo8=(data1(n2,9));
a.servoWrite(9, servo8);
pause(0.1);
end
set(handles.home,'Enable','on');
set(handles.save,'Enable','on');
set(handles.play,'Enable','on');
set(handles.New_position,'Enable','on');
%---------------------------------------------------------------------
% --- Função para introdução manual dos angulos em cada junta.
function Edit_servo1_Callback(hObject, eventdata, handles)
global a Edit_servo1 Edit_servo2 Edit_servo3 Edit_servo4 ...
Edit_servo5 Edit_servo6 Edit_servo7 Edit_servo8 AntigoS1 ...
AntigoS2 AntigoS3 AntigoS4 AntigoS5 AntigoS6 AntigoS7 ...
AntigoS8 servo1 ;
Edit_servo1=str2double(get(hObject,'String'));
if isnan(Edit_servo1)
errordlg('O valor deve ser numerico','ERROR');
set(handles.Edit_servo1,'String','');
return
end
if (Edit_servo1<0 || Edit_servo1>180)
errordlg('Angulo incorreto(0,180)','ERROR');
set(handles.Edit_servo1,'String','');
return
end
servo1=Edit_servo1;
Edit_servo1=AntigoS1;
Edit_servo2=AntigoS2;
Edit_servo3=AntigoS3;
Edit_servo4=AntigoS4;
47

Edit_servo5=AntigoS5;
Edit_servo6=AntigoS6;
Edit_servo7=AntigoS7;
Edit_servo8=AntigoS8;
set(handles.angulo1,'String',servo1);
set(handles.slider9,'Value',servo1);
a.servoWrite(8, servo1);
function Edit_servo4_Callback(hObject, eventdata, handles)
global a Edit_servo1 Edit_servo2 Edit_servo3 Edit_servo4 ...
Edit_servo5 Edit_servo6 Edit_servo7 Edit_servo8 AntigoS1 ...
AntigoS2 AntigoS3 AntigoS4 AntigoS5 AntigoS6 AntigoS7 ...
AntigoS8 servo4 ;
Edit_servo4=str2double(get(hObject,'String'));
if isnan(Edit_servo4)
errordlg('O valor deve ser numerico','ERROR');
set(handles.Edit_servo4,'String','');
return
end
if (Edit_servo4<0 || Edit_servo4>180)
errordlg('Angulo incorreto(0,180)','ERROR');
set(handles.Edit_servo4,'String','');
return
end
servo4= Edit_servo4;
Edit_servo1=AntigoS1;
Edit_servo2=AntigoS2;
Edit_servo3=AntigoS3;
Edit_servo4=AntigoS4;
Edit_servo5=AntigoS5;
Edit_servo6=AntigoS6;
Edit_servo7=AntigoS7;
Edit_servo8=AntigoS8;
set(handles.angulo4,'String',servo4);
set(handles.slider12,'Value',servo4);
a.servoWrite(4, servo4);
function Edit_servo5_Callback(hObject, eventdata, handles)
global a Edit_servo1 Edit_servo2 Edit_servo3 Edit_servo4 ...
Edit_servo5 Edit_servo6 Edit_servo7 Edit_servo8 AntigoS1 ...
AntigoS2 AntigoS3 AntigoS4 AntigoS5 AntigoS6 AntigoS7 ...
AntigoS8 servo5 ;
Edit_servo5=str2double(get(hObject,'String'));
if isnan(Edit_servo5)
errordlg('O valor deve ser numerico','ERROR');
set(handles.Edit_servo5,'String','');
return
end
if (Edit_servo5<0 || Edit_servo5>180)
errordlg('Angulo incorreto(0,180)','ERROR');
set(handles.Edit_servo5,'String','');
return
end
servo5=Edit_servo5;
Edit_servo1=AntigoS1;
Edit_servo2=AntigoS2;
Edit_servo3=AntigoS3;
Edit_servo4=AntigoS4;
Edit_servo5=AntigoS5;
Edit_servo6=AntigoS6;
Edit_servo7=AntigoS7;
Edit_servo8=AntigoS8;
set(handles.angulo5,'String',servo5);
set(handles.slider13,'Value',servo5);
48

a.servoWrite(5, servo5);
function Edit_servo6_Callback(hObject, eventdata, handles)
global a Edit_servo1 Edit_servo2 Edit_servo3 Edit_servo4 ...
Edit_servo5 Edit_servo6 Edit_servo7 Edit_servo8 AntigoS1 ...
AntigoS2 AntigoS3 AntigoS4 AntigoS5 AntigoS6 AntigoS7 ...
AntigoS8 servo6 ;
Edit_servo6=str2double(get(hObject,'String'));
if isnan(Edit_servo6)
errordlg('O valor deve ser numerico','ERROR');
set(handles.Edit_servo6,'String','');
return
end
if (Edit_servo6<0 || Edit_servo6>180)
errordlg('Angulo incorreto(0,180)','ERROR');
set(handles.Edit_servo6,'String','');
return
end
servo6=Edit_servo6;
Edit_servo1=AntigoS1;
Edit_servo2=AntigoS2;
Edit_servo3=AntigoS3;
Edit_servo4=AntigoS4;
Edit_servo5=AntigoS5;
Edit_servo6=AntigoS6;
Edit_servo7=AntigoS7;
Edit_servo8=AntigoS8;
set(handles.angulo6,'String',servo6);
set(handles.slider14,'Value',servo6);
a.servoWrite(6, servo6);
function Edit_servo7_Callback(hObject, eventdata, handles)
global a Edit_servo1 Edit_servo2 Edit_servo3 Edit_servo4 ...
Edit_servo5 Edit_servo6 Edit_servo7 Edit_servo8 AntigoS1 ...
AntigoS2 AntigoS3 AntigoS4 AntigoS5 AntigoS6 AntigoS7 ...
AntigoS8 servo7 ;
Edit_servo7=str2double(get(hObject,'String'));
if isnan(Edit_servo7)
errordlg('O valor deve ser numerico','ERROR');
set(handles.Edit_servo7,'String','');
return
end
if (Edit_servo7<0 || Edit_servo7>180)
errordlg('Angulo incorreto(0,180)','ERROR');
set(handles.Edit_servo7,'String','');
return
end
servo7=Edit_servo7;
Edit_servo1=AntigoS1;
Edit_servo2=AntigoS2;
Edit_servo3=AntigoS3;
Edit_servo4=AntigoS4;
Edit_servo5=AntigoS5;
Edit_servo6=AntigoS6;
Edit_servo7=AntigoS7;
Edit_servo8=AntigoS8;
set(handles.angulo7,'String',servo7);
set(handles.slider15,'Value',servo7);
a.servoWrite(7, Edit_servo7);
function Edit_servo2_Callback(hObject, eventdata, handles)
global a Edit_servo1 Edit_servo2 Edit_servo3 Edit_servo4 ...
Edit_servo5 Edit_servo6 Edit_servo7 Edit_servo8 AntigoS1 ...
AntigoS2 AntigoS3 AntigoS4 AntigoS5 AntigoS6 AntigoS7 ...
AntigoS8 servo2 ;
49

Edit_servo2=str2double(get(hObject,'String'));
if isnan(Edit_servo2)
errordlg('O valor deve ser numerico','ERROR');
set(handles.Edit_servo2,'String','');
return
end
if (Edit_servo2<0 || Edit_servo2>180)
errordlg('Angulo incorreto(0,180)','ERROR');
set(handles.Edit_servo2,'String','');
return
end
servo2=Edit_servo2;
Edit_servo1=AntigoS1;
Edit_servo2=AntigoS2;
Edit_servo3=AntigoS3;
Edit_servo4=AntigoS4;
Edit_servo5=AntigoS5;
Edit_servo6=AntigoS6;
Edit_servo7=AntigoS7;
Edit_servo8=AntigoS8;
set(handles.angulo2,'String',servo2);
set(handles.slider10,'Value',servo2);
a.servoWrite(2, servo2);
function Edit_servo3_Callback(hObject, eventdata, handles)
global a Edit_servo1 Edit_servo2 Edit_servo3 Edit_servo4 ...
Edit_servo5 Edit_servo6 Edit_servo7 Edit_servo8 AntigoS1 ...
AntigoS2 AntigoS3 AntigoS4 AntigoS5 AntigoS6 AntigoS7 ...
AntigoS8 servo3 ;
Edit_servo3=str2double(get(hObject,'String'));
if isnan(Edit_servo3)
errordlg('O valor deve ser numerico','ERROR');
set(handles.Edit_servo3,'String','');
return
end
if (Edit_servo3<0 || Edit_servo3>180)
errordlg('Angulo incorreto(0,180)','ERROR');
set(handles.Edit_servo3,'String','');
return
end
servo3=Edit_servo3;
Edit_servo1=AntigoS1;
Edit_servo2=AntigoS2;
Edit_servo3=AntigoS3;
Edit_servo4=AntigoS4;
Edit_servo5=AntigoS5;
Edit_servo6=AntigoS6;
Edit_servo7=AntigoS7;
Edit_servo8=AntigoS8;
set(handles.angulo3,'String',servo3);
set(handles.slider11,'Value',servo3);
a.servoWrite(3, servo3);
function Edit_servo8_Callback(hObject, eventdata, handles)
global a Edit_servo1 Edit_servo2 Edit_servo3 Edit_servo4 ...
Edit_servo5 Edit_servo6 Edit_servo7 Edit_servo8 AntigoS1 ...
AntigoS2 AntigoS3 AntigoS4 AntigoS5 AntigoS6 AntigoS7 ...
AntigoS8 servo8 ;
Edit_servo8=str2double(get(hObject,'String'));
if isnan(Edit_servo8)
errordlg('O valor deve ser numerico','ERROR');
set(handles.Edit_servo8,'String','');
return
end
50

if (Edit_servo8<0 || Edit_servo8>180)
errordlg('Angulo incorreto(0,180)','ERROR');
set(handles.Edit_servo8,'String','');
return
end
servo8 = Edit_servo8;
Edit_servo1=AntigoS1;
Edit_servo2=AntigoS2;
Edit_servo3=AntigoS3;
Edit_servo4=AntigoS4;
Edit_servo5=AntigoS5;
Edit_servo6=AntigoS6;
Edit_servo7=AntigoS7;
Edit_servo8=AntigoS8;
set(handles.angulo8,'String',servo8);
set(handles.slider16,'Value',servo8);
a.servoWrite(9, servo8);
%----------------------------------------------------------------------
% --- Ao pressionar o botão Fechar, encerra o aplicativo
function closeGui(source, eventdata)
global i
selection = questdlg('Deseja encerrar o aplicativo', ...
'Confirma','Sim','Não','Sim');
switch selection,
case 'Sim',
delete(gcf)
clear all
i=90;
case'Não'
return
end
%----------------------------------------------------------------------
% --- Executa a Celula Tabla, matriz para armazenamento dos servos.
function Tabla_CellEditCallback(hObject, eventdata, handles)
function Tabla_CellSelectionCallback(hObject, eventdata, handles)
%----------------------------------------------------------------------
% --- Botão Play roda as informações gravadas dos servos na matriz.
function run_Callback(hObject, eventdata, handles)
global a velocidade servo1 servo2 servo3 servo4 servo5 servo6...
servo7 servo8 AntigoS1 AntigoS2 AntigoS3 AntigoS4 AntigoS5 ...
AntigoS6 AntigoS7 AntigoS8 n Antigo_servo1 Antigo_servo2 ...
Antigo_servo3 Antigo_servo4 Antigo_servo5 Antigo_servo6 ...
Antigo_servo7 Antigo_servo8 s i Antigo_i data1 Edit_servo1 ...
Edit_servo2 Edit_servo3 Edit_servo4 Edit_servo5 Edit_servo6 ...
Edit_servo7 Edit_servo8 ;
set(handles.pushbutton2,'enable','on');
set(handles.run,'enable','off');
%axis off
i=90;
s=0;
a= arduino('com5');
a.servoAttach(2); % servo tronco
a.servoAttach(3); % servo ombro
a.servoAttach(4); % servo cotovelo
a.servoAttach(5); % servo Punho
a.servoAttach(6); % servo Gpunho
a.servoAttach(7); % servo Tgarra
a.servoAttach(8); % servo translação
a.servoAttach(9); % servo garra
velocidade=0.01;
set(handles.Edit_servo1,'String','');
set(handles.Edit_servo2,'String','');
51

set(handles.Edit_servo3,'String','');
set(handles.Edit_servo4,'String','');
set(handles.Edit_servo5,'String','');
set(handles.Edit_servo6,'String','');
set(handles.Edit_servo7,'String','');
set(handles.Edit_servo8,'String','');
data1=[];
set(handles.Tabla,'Data',data1);
% valores obtidos dos Sliders
servo1=0;
servo2=0;
servo3=0;
servo4=0;
servo5=0;
servo6=0;
servo7=0;
servo8=0;
% valores obtidos das caixas editáveis
Edit_servo1=0;
Edit_servo2=0;
Edit_servo3=0;
Edit_servo4=0;
Edit_servo5=0;
Edit_servo6=0;
Edit_servo7=0;
Edit_servo8=0;
% valores antigos obtidos dos sliders e das caixas editavéis
AntigoS1=0;
AntigoS2=0;
AntigoS3=0;
AntigoS4=0;
AntigoS5=0;
AntigoS6=0;
AntigoS7=0;
AntigoS8=0;
Antigo_servo1=91; %100
Antigo_servo2=70; %100
Antigo_servo3=109; %100
Antigo_servo4=170; %100
Antigo_servo5=159; %100
Antigo_servo6=82; %100
Antigo_servo7=94; %100
Antigo_servo8=30; %100
Antigo_i=90;
n=0;
%----------------------------------------------------------------------
% --- Botão Joystick executa a função chamar joystick.
function jostick_Callback(hObject, eventdata, handles)
Joystick_v5
%----------------------------------------------------------------------
% --- Ao pressionar o botão fechar encerra o aplicativo.
function fechar_Callback(hObject, eventdata, handles)
clear all port
close all;
%----------------------------------------------------------------------
% --- Ao pressionar o botão Loop entra numa rotina de repetição.
function loop_Callback(hObject, eventdata, handles)
global a n x data1 servo1 servo2 servo3 servo4 servo5 servo6 ...
servo7 servo8 ;
set(handles.home,'Enable','off');
set(handles.save,'Enable','off');
set(handles.play,'Enable','off');
52

set(handles.New_position,'Enable','off');
for x=10:-1:0;
for n2=1:n
data1(n2,1)=-n2;
set(handles.Tabla,'Data',data1);
servo1=(data1(n2,2));
a.servoWrite(8, servo1);
pause(0.1);
servo2=(data1(n2,3));
a.servoWrite(2, servo2);
pause(0.1);
servo3=(data1(n2,4));
a.servoWrite(3, servo3);
pause(0.1);
servo4=(data1(n2,5));
a.servoWrite(4, servo4);
pause(0.1);
servo5=(data1(n2,6));
a.servoWrite(5, servo5);
pause(0.1);
servo6=(data1(n2,7));
a.servoWrite(6, servo6);
pause(0.1);
servo7=(data1(n2,8));
a.servoWrite(7, servo7);
pause(0.1);
servo8=(data1(n2,9));
a.servoWrite(9, servo8);
pause(0.1);
end
end
set(handles.home,'Enable','on');
set(handles.save,'Enable','on');
set(handles.play,'Enable','on');
set(handles.New_position,'Enable','on');
%----------------------------------------------------------------------
% --- Botão conectar envia ao arduino protocole de comunicação
function conectar_Callback(hObject, eventdata, handles)
global a HH servo1 servo2 servo3 servo4 servo5 ...
servo6 servo7 servo8 AntigoS1 AntigoS2 AntigoS3 AntigoS4 ...
AntigoS5 AntigoS6 AntigoS7 AntigoS8 n Antigo_servo1 ...
Antigo_servo2 Antigo_servo3 Antigo_servo4 Antigo_servo5 ...
Antigo_servo6 Antigo_servo7 Antigo_servo8 s i Antigo_i ...
data1 Edit_servo1 Edit_servo2 Edit_servo3 Edit_servo4 ...
Edit_servo5 Edit_servo6 Edit_servo7 Edit_servo8
HH=get(handles.conectar,'Value');
set(handles.conectar,'enable','off');
i=90;
s=0;
a= arduino('com5');
set(handles.desconectar,'enable','on');
set(handles.mega,'String','Arduino Mega');
set(handles.porta,'String','Com5');
set(handles.speed,'String','115600');
set(handles.usb,'String','USB');
a.servoAttach(2); % servo tronco
a.servoAttach(3); % servo ombro
a.servoAttach(4); % servo cotovelo
a.servoAttach(5); % servo Punho
a.servoAttach(6); % servo Gpunho
a.servoAttach(7); % servo Tgarra
a.servoAttach(8); % servo translação
53

a.servoAttach(9); % servo garra


set(handles.Edit_servo1,'String','');
set(handles.Edit_servo2,'String','');
set(handles.Edit_servo3,'String','');
set(handles.Edit_servo4,'String','');
set(handles.Edit_servo5,'String','');
set(handles.Edit_servo6,'String','');
set(handles.Edit_servo7,'String','');
set(handles.Edit_servo8,'String','');
data1=[]; % tabela em zero
set(handles.Tabla,'Data',data1);
% valores obtidos dos Sliders (Home)
servo1=0;
servo2=0;
servo3=0;
servo4=0;
servo5=0;
servo6=0;
servo7=0;
servo8=0;
% valores obtidos das caixas editavéis
Edit_servo1=0;
Edit_servo2=0;
Edit_servo3=0;
Edit_servo4=0;
Edit_servo5=0;
Edit_servo6=0;
Edit_servo7=0;
Edit_servo8=0;
% valores antigos obtidos dos sliders e das caixas editavéis
AntigoS1=0;
AntigoS2=0;
AntigoS3=0;
AntigoS4=0;
AntigoS5=0;
AntigoS6=0;
AntigoS7=0;
AntigoS8=0;
Antigo_servo1=91;
Antigo_servo2=60;
Antigo_servo3=100;
Antigo_servo4=20;
Antigo_servo5=170;
Antigo_servo6=90;
Antigo_servo7=80;
Antigo_servo8=10;
Antigo_i = 90;
n=0;
%----------------------------------------------------------------------
% --- Botão desconectar encerra a comunicação com o arduino.
function desconectar_Callback(hObject, eventdata, handles)
set(handles.desconectar,'enable','off');
set(handles.conectar,'enable','on');
set(handles.mega,'String','');
set(handles.porta,'String','');
set(handles.speed,'String','');
set(handles.usb,'String','');
clear all port
%----------------------------------------------------------------------
% --- Caixa de informações comunicação arduino
function mega_Callback(hObject, eventdata, handles)
function porta_Callback(hObject, eventdata, handles)
54

function speed_Callback(hObject, eventdata, handles)


function usb_Callback(hObject, eventdata, handles)
function mega_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
55

Apêndice I: Algoritmo Cinemática Direta no MATLAB

clc
clear all
close all
startup_rvc;
%% Criação dos elos
% theta = ângulo da junta (rad)
% d = deslocamento de elo (m)
% a = comprimento de elo (m)
% alpha = torção do elo (rad)
% sigma = tipo de junta (0: rotativa ou 1: prismática)
L(1) = Link([0 0.120 0 -pi/2 0]);
L(2) = Link([0 0 0.200 0 0]);
L(3) = Link([0 0 0.200 0 0]);
L(4) = Link([0 0 0.100 0 0]);
%% Criação do Robô
robo = SerialLink(L, 'name', 'PROTHEUS')
%% Ângulos pré-definidos para movimentos
qf0 = [0 0 0 0];
qf1 = [0 -pi/2 pi/2 pi/2];
qf2 = [-pi/3 -pi/2 pi/2 0];
qf3 = [-pi/3 0 pi/2 -2*pi/3];
qf4 = [-2*pi/3 0 pi/2 0];
%% Cinematica direta
T0 = robo.fkine(qf0)
%robo.plot(qf0)
T1 = robo.fkine(qf1)
%robo.plot(qf1)
T2 = robo.fkine(qf2)
%robo.plot(qf2)
T3 = robo.fkine(qf3)
%robo.plot(qf3)
T4 = robo.fkine(qf4)
%robo.plot(qf4)
%% Plotagem
tempo = 0:0.4:4:10;
q = jtraj(qf0, qf1, tempo);
robo.plot(q) pause(1)
q = jtraj(qf1, qf2, tempo);
robo.plot(q)
56

pause(1)
q = jtraj(qf2, qf3, tempo);
robo.plot(q)
pause(1)
q = jtarj(qf3, qf4, tempo);
robo.plot(q)
pause(1)
q = jtraj(qf4, qf1, tempo);
robo.plot(q)
57

Anexo A – Servo Motor MG90S TowerPro.


58

Anexo B – Servo Motor MG996R TowerPro.

Você também pode gostar