Escolar Documentos
Profissional Documentos
Cultura Documentos
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
SÃO PAULO
2022
RESUMO
[REVISAR]
[REVISAR]
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
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
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.
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.
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.
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
3 INDÚSTRIA 4.0
[REVISAR]
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.
FUNCIONAMENTO
4 MOTORES
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
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
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.
120∗f
Ns=
P
( N s−N r)
S=
Ns
S = Escorregamento.
N r = Velocidade do rotor.
.
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.
2n
f cc=f { (1−s) ± k }
p
s – Escorregamento
p - número de pólos
n = 1, 2, 3....
k = 1, 3, 5....
25
4.3 Motores CC
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.
Onde:
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
Fo
nte:(Siemens, Motores de corrente continua, 01t. ed, 2006)
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.
Confiabilidade
Boa facilidade em controle de velocidade
Alto controle de velocidade
Alto torque nas partidas e em baixa rotações
28
13 METODOLOGIA
[REVISAR]
14 MATERIAIS E MÉTODOS
14.1 Componentes
[REVISAR]
15 PROGRAMAÇÃO
[REVISAR]
30
16 CONSIDERAÇÕES FINAIS
16.1 Resultados
[REVISAR]
.
16.2 Trabalhos Futuros
[REVISAR]
31
17 CONCLUSÃO
[REVISAR]
32
REFERÊNCIAS
33
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
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
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
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
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