Escolar Documentos
Profissional Documentos
Cultura Documentos
2023
Instituto Federal de Educação, Ciência e Tecnologia Sul-rio-grandense
Departamento de Ensino de Graduação e Pós-Graduação
Campus Pelotas
Curso de Engenharia Elétrica
Pelotas-RS
2023
Instituto Federal de Educação, Ciência e Tecnologia Sul-rio-grandense
Departamento de Ensino de Graduação e Pós-Graduação
Curso de Engenharia Elétrica
Banca examinadora
This work presents the development of the project and construction of a five-degree-of-
freedom robotic arm with didactic purposes, aiming to implement control techniques and
other aspects studied in the robotics courses of the Electrical Engineering program at IFSul
Campus Pelotas. The mechanical structure of the project was based on the open-source
BCN 3D Moveo project, which was modified to meet the objectives of this work. The
robotic arm’s joints are actuated using DC motors with gearboxes, providing suitable
torque and speed. Incremental encoders coupled to the high-speed part of the motors
provide joint position readings. Control and power circuits were designed allowing the
implementation and testing of control algorithms using a microcontroller. The practical
tests of the robot yielded results that demonstrated the achievement of the proposed
objectives in this work.
Figura 1 – Média dos preços de robôs versus o custo médio de mão de obra . . . . 13
Figura 2 – Crescimento do mercado de robótica de 1975-2020 . . . . . . . . . . . . 13
Figura 3 – Protótipo BCN3D Moveo . . . . . . . . . . . . . . . . . . . . . . . . . 17
Figura 4 – Visão geral dos suportes projetados. . . . . . . . . . . . . . . . . . . . . 20
Figura 5 – Visão das alterações realizadas no elo do punho; à direita a peça original
e à esquerda a peça modificada. . . . . . . . . . . . . . . . . . . . . . . 20
Figura 6 – Fotografia da impressão do elo da junta 1. . . . . . . . . . . . . . . . . 21
Figura 7 – Captura de tela do software Ultimaker Cura: fatiamento do elo da junta 1 22
Figura 8 – Peças impressas antes do processo de acabamento . . . . . . . . . . . . 22
Figura 9 – Fotografia do processo de pintura e acabamento . . . . . . . . . . . . . 23
Figura 10 – Estrutura de perfis de alumínio estrutural elaborado no Autodesk Fusion
360 para fixação do braço robótico . . . . . . . . . . . . . . . . . . . . 24
Figura 11 – Braço Robótico instalado na base de perfis de alumínio estrutural . . . 25
Figura 12 – Peça para fixação da placa de potência e interface entre encoders e
microcontrolador do robô elaborada no Autodesk Fusion 360 . . . . . . 25
Figura 13 – Peça para fixação da fonte de energia e microcontrolador do robô
elaborada no Autodesk Fusion 360 . . . . . . . . . . . . . . . . . . . . 26
Figura 14 – Tampa de proteção dos componentes eletrônicos do robô elaborada no
Autodesk Fusion 360 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Figura 15 – Características construtivas dos motores utilizados no projeto . . . . . 27
Figura 16 – Esquemático da tensão de efeito Hall . . . . . . . . . . . . . . . . . . . 29
Figura 17 – Forma de onda típica de um encoder de dois canais . . . . . . . . . . . 29
Figura 18 – Sinal do encoder, com motor energizado com 1 Volt . . . . . . . . . . 30
Figura 19 – Sinal do encoder, com motor energizado com 24 Volts . . . . . . . . . 31
Figura 20 – Sinal do encoder, com motor energizado com 20 Volts, lido através da
ESP32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Figura 21 – Esquema básico de uma ponte H . . . . . . . . . . . . . . . . . . . . . 33
Figura 22 – Esquema de ligação de dois motores no modulo LN298N . . . . . . . . 34
Figura 23 – Esquemático dos circuitos para confecção de PCI . . . . . . . . . . . . 35
Figura 24 – Esquema para processo de usinagem da PCI . . . . . . . . . . . . . . 36
Figura 25 – PCI do módulo de controle durante a usinagem . . . . . . . . . . . . . 36
Figura 26 – Modelo de fonte chaveada utilizada na alimentação do robô. . . . . . . 37
Figura 27 – Regulador de tensão CC-CC . . . . . . . . . . . . . . . . . . . . . . . . 38
Figura 28 – Esquema do joystick personalizado para o braço robótico . . . . . . . . 39
Figura 29 – Base para controle, utilizando módulos joystick arduino . . . . . . . . . 40
Figura 30 – Sistema de referência da ferramenta com relação ao sistema da base
como uma função das variáveis das juntas . . . . . . . . . . . . . . . . 43
Figura 31 – Sistemas de referência de elos . . . . . . . . . . . . . . . . . . . . . . . 44
Figura 32 – Modelo esquemático do robô gerado a partir dos parâmetros de DH no
software RobotAnalyzer . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Figura 33 – Medição do ponto central do efetuador final do braço robótico, com
destaque para os frames da base e do efetuador do braço robótico . . . 48
Figura 34 – Medição do ponto central do efetuador final do braço robótico, com
junta 1 deslocada em 45 graus e junta 2 em 30 graus . . . . . . . . . . 49
Figura 35 – Diagrama de blocos do sistema de controle de um robô . . . . . . . . . 50
Figura 36 – Diagrama de blocos de um controle PID . . . . . . . . . . . . . . . . . 53
Figura 37 – Gráfico da posição da junta da base do robô . . . . . . . . . . . . . . . 55
Figura 38 – Gráfico da posição da junta do ombro do robô . . . . . . . . . . . . . . 56
Figura 39 – Gráfico da posição da junta do cotovelo do robô . . . . . . . . . . . . . 56
Figura 40 – Gráfico da posição da junta do punho do robô . . . . . . . . . . . . . . 57
Figura 41 – Gráfico da posição da junta da garra do robô . . . . . . . . . . . . . . 57
Lista de tabelas
3D Tridimensional
ABS Acrilonitrilo-butadieno-estireno
CC Corrente contínua
DH Denavit- Hartenberg
P Proporcional
PD Proporcional derivativo
e i−1
e Sinal de erro
u Sinal de controle
⃗i
X Eixo X do sistema de coordenadas i
⃗i
Z Eixo Z do sistema de coordenadas i
Kp Ganho proporcional
Ki Ganho integrativo
Kd Ganho derivativo
Lista de ilustrações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.1.1 Objetivo Principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.1.1.1 Objetivos Específicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.2 Visão Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.3 Estrutura do Trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5 CONCLUSÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
APÊNDICES 62
ANEXOS 75
Figura 1 – Média dos preços de robôs versus o custo médio de mão de obra
• Robôs Manipuladores: robôs com um ou mais braços que podem ser movidos em
várias direções para executar tarefas específicas.
• Robôs móveis: robôs com rodas, esteiras ou pernas que podem se mover em um
ambiente e executar tarefas específicas.
• Robôs de interface humano-robô: robôs que interagem com seres humanos e são
projetados para ajudá-los em tarefas específicas, como em hospitais ou em tarefas
domésticas.
• Robôs humanoides: robôs com uma aparência semelhante à dos seres humanos, com
braços, pernas e cabeça, projetados para executar tarefas que normalmente exigiriam
a presença humana, como assistência a idosos ou atuação em ambientes perigosos.
• Robôs de serviço: robôs projetados para executar tarefas de serviços, como limpeza,
transporte e manutenção em locais públicos ou privados.
IFSul Campus Pelotas uma ferramenta para implementação e testes dos algoritmos de
controle de robôs.
1.1 Objetivos
• Adaptar o projeto open source BCN3D Moveo para o uso de motores de corrente
contínua.
• Propor e implementar uma lei de controle no robô e fazer a aquisição dos dados para
demonstrar o funcionamento do sistema proposto.
O projeto da parte estrutural do braço robótico foi baseado no projeto BCN3D Moveo,
uma proposta open source elaborada pela BCN3D Technologies que tem como objetivo
difundir os processos de fabricação utilizando impressoras 3D, sendo este um projeto de
Capítulo 1. Introdução 17
Figura 5 – Visão das alterações realizadas no elo do punho; à direita a peça original e à
esquerda a peça modificada.
variando entre 10 e 20% (de acordo com o tamanho da peça); temperatura de impressão de
236 ºC e mesa aquecida a 100ºC (exigido pelo filamento utilizado); velocidade de impressão
120 mm/s. A Figura 7 ilustra a prévia da peça no ambiente do software.
O filamento ABS utilizado para impressão das peças foi obtido do estoque do curso
de Engenharia Elétrica do IFSul Campus Pelotas. Logo por questões de disponibilidade,
não foi possível utilizar apenas uma cor de filamento exigindo a necessidade de pintura
das peças para melhor apresentação estética do projeto. Na Figura 8, pode-se observar a
estética do manipulador antes do processo de finalização.
Após o preparo de todas as peças que compõem o braço robótico, bem como a montagem
da estrutura principal do manipulador através do encaixe e fixação por parafusos, se
elaborou o projeto da base onde foi fixado o braço robótico, bem como os compartimentos
onde as placas dos circuitos de potência e de controle encontram-se alocadas.
A base do robô é necessária para dar estabilidade ao braço e permitir que o mesmo
atue em todo seu espaço de trabalho sem que ocorram desequilíbrios ou quedas durante
a movimentação do robô. Nesse contexto, tendo em vista a disponibilidade de perfis de
alumínio estrutural no almoxarifado do curso de Engenharia Elétrica, optou-se pelo projeto
da estrutura de fixação do robô utilizando este material. Na Figura 10 é possível visualizar
o projeto da estrutura de perfis de alumínio estrutural elaborado no Autodesk Fusion 360
para fixação do braço robótico.
Capítulo 2. Projeto do Braço Robótico 24
Figura 12 – Peça para fixação da placa de potência e interface entre encoders e microcon-
trolador do robô elaborada no Autodesk Fusion 360
possuem caixa de redução e encoder incremental acoplado. Após uma minuciosa pesquisa
de mercado, esses motores foram escolhidos por apresentarem baixa corrente nominal,
uma boa relação de engrenagens na caixa de redução proporcionando torque nominal
satisfatório e uma boa resistência mecânica. É importante destacar que esses motores
são comercializados com diferentes velocidades e torques nominais, o que possibilita uma
maior flexibilidade na escolha dos parâmetros de operação do robô.
Para os atuadores do braço robótico, tendo em vista a relação de engrenagens estabele-
cidas entre a polia do eixo que será inserida no eixo do motor e a polia da estrutura da
junta, decidiu-se pelo uso de motores alimentados com 24V, com rotação nominal de 12
rpm e torque nominal de 9 kg.cm. O motor escolhido foi avaliado, observando as relações
de transformação de velocidade e torque entre engrenagens (polia fixada no eixo do motor
e na junta do braço robótico), e atende tanto o torque quanto a velocidade requerida pelo
braço robótico satisfatoriamente. A Figura 15 ilustra as características construtivas do
motor.
• Encoders Lineares: São utilizados para medir a posição linear de um objeto em vez
da posição angular. Eles podem ser usados para medir a posição linear de uma junta
em um braço robótico ou o deslocamento de um carro de linha. Os encoders lineares
são geralmente mais caros do que os encoders rotativos.
Para implantação dos tipos de encoders mencionados, podem ser utilizadas diferentes
tecnologias, como por exemplo, sistemas ópticos, magnéticos, transformadores rotativos
(resolvers), dentre outros:
• Encoders Ópticos: São comumente usados em robótica para medir posição e velocidade
do motor. Eles usam um disco com fendas ou marcas que são iluminadas por um LED.
Quando as fendas ou marcas passam pelo sensor óptico, um sinal elétrico é gerado.
Eles são precisos e confiáveis, mas podem ser afetados por sujeira e obstruções no
disco.
• Encoders Resolver: São encoders que utilizam um transformador rotativo para medir
a posição do eixo do motor. Eles são resistentes a choques e vibrações, e podem ser
mais precisos do que os encoders ópticos em ambientes industriais.
• Encoders Magnéticos: São similares aos encoders ópticos, mas usam sensores magnéti-
cos em vez de sensores ópticos para medir a posição. Eles podem ser mais resistentes
a poeira e detritos em ambientes industriais, mas também podem ser mais caros do
que os encoders ópticos.
• Encoders Magnéticos de Efeito Hall: São encoders que utilizam sensores de efeito
Hall para medir a posição angular do eixo do motor em relação a um ponto de
referência. Esses encoders são similares aos encoders magnéticos convencionais, mas
usam campos magnéticos em vez de luz para medir a posição do eixo do motor. Os
sensores de efeito Hall são dispositivos eletrônicos que medem campos magnéticos e
podem ser usados para detectar a posição angular do eixo do motor em relação a
um ponto de referência.
O efeito Hall se caracteriza basicamente pelo aparecimento de uma tensão (tensão Hall)
quando o elemento sensor é submetido a um campo magnético perpendicular (imã fixado
no disco do encoder) que distorce o fluxo de corrente no sensor de efeito Hall e causa o
aparecimento de uma DDP entre os terminais de saída do sensor.
Devido à quadratura dos elementos sensores, em um encoder com dois canais (dois
elementos sensores), o sinal A é o sinal principal, que fornece os pulsos (ou clock) à medida
que o encoder gira. O sinal B é equivalente ao sinal A, porém defasado em +/− 90°, cujo
objetivo é sinalizar o sentido da rotação. Assim sendo, é possível definir o sentido de rotação
do motor, pois quando ocorrer uma borda de subida no sinal do canal A em conjunto com
o sinal B em nível alto, significa que o motor está girando em sentido anti-horário, por
analogia, caso a borda de subida no canal A ocorra enquanto o sinal B está em nível baixo,
o motor está girando no sentido horário.
Figura 20 – Sinal do encoder, com motor energizado com 20 Volts, lido através da ESP32
17 void loop () {
// controle e demais algoritmos
19 }
// funcao chamada na interrupcao
21 void read_encoder () {
// se no momento da borda de subida do canal A ,
23 // o canal B estiver em nivel alto = sentido horario
if ( digitalRead ( ENC_B ) > 0)
25 pos ++;
else // caso contrario = sentido antihorario
27 pos - -;
}
Face ao acima exposto, conclui-se que não há restrições para operação dos motores na
faixa de 0 − 24V utilizando o microcontrolador ESP32 Dev.Board para processar os sinais
gerados pelos encoders acoplados aos motores das juntas do braço robótico. Além disso,
Capítulo 2. Projeto do Braço Robótico 33
observa-se uma precisão considerável nas medidas angulares das juntas do braço robótico,
pois a relação de engrenagens proporcionada pela caixa de redução acoplada ao motor
(1:500), diâmetro da polia acoplada ao eixo do motor e diâmetro da polia da junta 1 do
braço robótico, por exemplo, faz com que cada pulso gerado pelo encoder corresponda a
uma rotação de 0,065 graus geométricos.
Fonte: https://howtomechatronics.com/wp-content/uploads/2017/08/L298N-Block-
Diagram-Current-Flow-How-It-Works.png
Após definir que seria utilizado o módulo LN298N, projetou-se a placa de circuito
impresso que contém três módulos LN298N, necessários para possibilitar o uso dos seis
motores de corrente contínua do braço robótico. A placa contém ainda pontos para realizar
a conexão dos 12 terminais de controle dos módulos LN298N com o módulo de controle
do braço robótico, bem como possibilitar que futuros usuários do braço robótico possam
conectar seus próprios módulos de controle ao módulo de potência de modo simples e
eficaz. Na Figura 23 pode-se visualizar o esquemático para placa de circuito impresso do
módulo de potência do braço robótico.
Capítulo 2. Projeto do Braço Robótico 35
• Corrente de saída: 2A
• Potência: 48W
para o projeto foi o módulo regulador de tensão lm2596 3A, que pode ser visto na Figura
27.
De acordo com o fabricante do módulo regulador de tensão lm2596 3A, o dispositivo
possui as seguintes características técnicas (INDUSTRIES, 2008):
• Diferença entre a tensão de entrada e saída deve ser de maior que 1, 5V;
• Dimensões: 44x22x12mm;
Tendo em vista que o braço robótico possui apenas encoders incrementais, que são
dispositivos que não são capazes de armazenar sua posição anterior ao desligamento do
sistema, isto é, apenas contabiliza quantos incrementos ocorreram a partir da inicialização
do sistema, logo, existe a necessidade de possibilitar o controle manual do braço robótico
para viabilizar o posicionamento das juntas do robô na posição estabelecida como posição
inicial e, a partir desse momento, iniciar a operação do braço através das informações de
leitura dos encoders. Assim sendo, optou-se por projetar um joystick personalizado para o
braço robótico que possibilitasse o controle manual de todos os atuadores envolvidos no
projeto.
Para tanto, usando os joysticks de video-games como inspiração, elaborou-se o esquema
para o joystick conforme exposto na Figura 28. Conforme ilustrado na Figura, o joystick é
composto por dois módulos joystick KY-023 e dois botões, de modo que, torna-se possível
o controle dos seis motores do braço robótico.
A estrutura física para fixação dos módulos joystick e botões foi fabricada através
da impressão 3D do modelo open source Joystick HW-504 disponibilizado no Ultimaker
Thingverse, exposto na Figura 29.
A leitura dos sinais gerados pelos módulos joystick é realizada através de entradas
analógicas do microcontrolador, uma para leitura do sinal V Rx, que representa a leitura
do potenciômetro relacionado com o movimento no eixo X do joystick, e outra para leitura
do sinal V Ry, que representa a leitura do potenciômetro relacionado com o movimento no
eixo Y . A leitura da informação do uso do eixo Z do joystick, isto é, se ele está pressionado
ou não, é realizada através de uma entrada digital do microcontrolador, sendo que, quando
o sinal SW encontra-se em nível alto, significa que o eixo Z não está pressionado e, quando
em nível baixo, significa que o joystick está sendo pressionado no eixo Z.
O trecho de código a seguir, elaborado pelo autor, foi utilizado para validar o funciona-
Capítulo 2. Projeto do Braço Robótico 40
Fonte: https://www.thingiverse.com/thing:4705951.
mento do joystick projetado para o braço robótico e adaptado no Capítulo 4 para uso de
maneira conjunta com o algoritmo de teste implementado para validação do funcionamento
do robô.
void setup () {
2 Serial . begin (9600) ;
pinMode ( botao , INPUT ) ;
4 pinMode ( botao2 , INPUT ) ;
pinMode (X , INPUT ) ;
6 pinMode (Y , INPUT ) ;
pinMode ( X2 , INPUT ) ;
8 pinMode ( Y2 , INPUT ) ;
}
10
void loop () {
12 int eixo_X = analogRead ( X ) ; int eixo_Y = analogRead ( Y ) ;
int eixo_X2 = analogRead ( X2 ) ; int eixo_Y2 = analogRead ( Y2 ) ;
14
if (( eixo_X ==0) &&( eixo_Y >1700) ) {
16 Serial . println ( " Joystick 1 para baixo " ) ;
} else if (( eixo_X <=200) &&( eixo_Y ==0) ) {
18 Serial . println ( " Joystick 1 para esquerda " ) ;
} else if (( eixo_X <120) &&( eixo_Y >4000) ) {
20 Serial . println ( " Joystick 1 para direita " ) ;
} else if (( eixo_X >200) &&( eixo_Y >1700) ) {
22 Serial . println ( " Joystick 1 para cima " ) ;
}
24 if ( digitalRead ( botao ) ==0) {
Serial . println ( " Joystick 1 pressionado " ) ;
26 }
42 }
junta que deveriam ser calculados (usando cinemática inversa) ou estabelecidos (através
da cinemática direta) para posicionar a ferramenta do robô na posição desejada.
De acordo com Craig (2013) a metodologia para definição dos parâmetros de Denavit-
Hartenberg (DH) segue os seguintes passos:
Capítulo 3. Cinemática Direta do Braço Robótico 44
2. Identificação dos parâmetros DH: São identificados quatro parâmetros para cada
elo do robô. Dois desses parâmetros descrevem o elo em si, enquanto os outros dois
descrevem a relação com o elo vizinho.
- ai : Distância de Z
⃗i a Z
⃗ i+1 medida ao longo de X
⃗ i.
- di : Coordenada de X
⃗ i−1 em relação a X
⃗ i medida ao longo de Z
⃗i.
3. Atribuição dos valores dos parâmetros DH: Os valores dos parâmetros DH são
determinados com base na geometria do robô e na escolha da notação de DH. Esses
valores podem ser obtidos medindo as distâncias e ângulos entre os eixos de rotação e
translação ou através de softwares de desenho, como por exemplo, o Autodesk Fusion
360, utilizando o projeto do robô.
Capítulo 3. Cinemática Direta do Braço Robótico 45
cθi −sθi 0 ai−1
sθi cαi−1 cθi cαi−1 −sαi−1 −sαi−1 di
i−1
i T = (3.1)
sθi sαi−1 cθi sαi−1 cα cαi−1 di
i−1
0 0 0 1
cθ2 −sθ2 0 0
sθ2 c90◦ cθ2 c90◦ −s90◦ 0 · s90◦
2T = (3.4)
1
sθ2 s90◦ cθ2 s90◦
c90◦
0 · c90◦
0 0 0 1
cθ3 −sθ3 0 0
sθ3 c0◦
cθ3 c0 −s0 0 · −s0◦
◦ ◦
3T = (3.5)
2
sθ3 s0◦ cθ3 s0◦
c0 ◦
0 · c0
◦
0 0 0 1
cθ4 −sθ4 0 220
sθ c(−90 ) cθ4 c(−90 ) −s(−90 ) 230 · −s(−90 )
◦ ◦ ◦ ◦
4
4T = (3.6)
3
sθ4 s(−90◦ ) cθ4 s(−90◦ ) c(−90◦ ) 220 · c(−90 )
◦
0 0 0 1
Capítulo 3. Cinemática Direta do Braço Robótico 47
cθ5 −sθ5 0 0
sθ c90 cθ5 c90 −s90 0 · −s90
◦ ◦ ◦ ◦
5
5T = (3.7)
4
sθ5 s90◦ cθ5 s90◦
c90◦
0 · c90◦
0 0 0 1
1 0 0 120
0 1 0 0
Ef etuador T = (3.8)
5
0 0 1 0
0 0 0 1
Com base nas equações 3.3 a 3.8, utilizando a equação 3.2 obtém-se a matriz de
transformação homogênea exposta na equação 3.9. No Apêndice A encontra-se o algo-
ritmo elaborado no Octave para facilitar a multiplicação das matrizes de transformação
homogêneas do braço robótico.
a
11
a12 a13 a14
a21 a22 a23 a24
Ef etuador T = (3.9)
0
a31 a32 a33 a34
0 0 0 1
Onde:
a11 = −cθ5 (sθ1 sθ4 + cθ4 (cθ1 sθ2 sθ3 − cθ1 cθ2 cθ3 )) − sθ5 (cθ1 cθ2 sθ3 + cθ1 cθ3 sθ2 )
a21 = cθ5 (cθ1 sθ4 − cθ4 (sθ1 sθ2 sθ3 − cθ2 cθ3 sθ1 )) − sθ5 (cθ2 sθ1 sθ3 + cθ3 sθ1 sθ2 )
a31 = sθ5 (cθ2 cθ3 − sθ2 sθ3 ) + cθ4 cθ5 (cθ2 sθ3 + cθ3 sθ2 )
a12 = sθ5 (sθ1 sθ4 + cθ4 (cθ1 sθ2 sθ3 − cθ1 cθ2 cθ3 )) − cθ5 (cθ1 cθ2 sθ3 + cθ1 cθ3 sθ2 )
a22 = −sθ5 (cθ1 sθ4 − cθ4 (sθ1 sθ2 sθ3 − cθ2 cθ3 sθ1 )) − cθ5 (cθ2 sθ1 sθ3 + cθ3 sθ1 sθ2 )
a32 = cθ5 (cθ2 cθ3 − sθ2 sθ3 ) − cθ4 sθ5 (cθ2 sθ3 + cθ3 sθ2 )
a13 = cθ4 sθ1 − sθ4 (cθ1 sθ2 sθ3 − cθ1 cθ2 cθ3 )
a23 = −cθ1 cθ4 − sθ4 (sθ1 sθ2 sθ3 − cθ2 cθ3 sθ1 )
a33 = sθ4 (cθ2 sθ3 + cθ3 sθ2 )
a14 = 220cθ1 cθ2 cθ3 − 120sθ5 (cθ1 cθ2 sθ3 + cθ1 cθ3 sθ2 ) − 220cθ1 sθ2 sθ3 − 120cθ5 (sθ1 sθ4 +
cθ4 (cθ1 sθ2 sθ3 − cθ1 cθ2 cθ3 )) − 230cθ1 cθ2 sθ3 − 230cθ1 cθ3 sθ2
a24 = 120cθ5 (cθ1 sθ4 − cθ4 (sθ1 sθ2 sθ3 − cθ2 cθ3 sθ1 )) − 120sθ5 (cθ2 sθ1 sθ3 + cθ3 sθ1 sθ2 ) −
230cθ2 sθ1 sθ3 − 230cθ3 sθ1 sθ2 − 220sθ1 sθ2 sθ3 + 220cθ2 cθ3 sθ1
a34 = 230cθ2 cθ3 + 220cθ2 sθ3 + 220cθ3 sθ2 − 230sθ2 sθ3 + 120sθ5 (cθ2 cθ3 − sθ2 sθ3 ) + 120 ∗
cθ4 cθ5 (cθ2 sθ3 ) + cθ3 sθ2 ) + 230
Para exemplificar o modelo de cinemática direta proposto, realizou-se duas simulações
distintas, onde se estabeleceu ângulos para as variáveis de junta do braço robótico, calculou-
Capítulo 3. Cinemática Direta do Braço Robótico 48
Figura 33 – Medição do ponto central do efetuador final do braço robótico, com destaque
para os frames da base e do efetuador do braço robótico
Figura 34 – Medição do ponto central do efetuador final do braço robótico, com junta 1
deslocada em 45 graus e junta 2 em 30 graus
A escolha de um bom controlador para o projeto é crucial, pois conforme analogia feita
por Alves (2000) "em nosso organismo, o cérebro dá os comandos ao corpo, e nos processos
automatizados, os controladores dão os comandos ao atuador que promoverá alterações no
sistema". Existem maneiras distintas de elaborar um algoritmo de controle que satisfaça
a premissa adotada para o teste do braço robótico, isto é, que seja capaz de receber o
sinal dos encoders interpretando a posição atual de cada uma das juntas, comparando
com a posição desejada pelo usuário e tomando uma ação. Na teoria de controle é comum
atuar utilizando como parâmetro o valor do erro apresentado pelo processo para definir a
medida que será tomada, visando reduzir o erro a zero (ALVES, 2000). No caso do braço
robótico, evidentemente, o erro do processo é a diferença entre a posição atual e a posição
desejada pelo usuário.
Capítulo 4. Testes Práticos do Braço Robótico 51
• Controle on-off (ou liga-desliga): um dos controladores mais simples, que se resume
em ligar ou desligar o atuador do processo. Seu uso se resume a processos em que não
é exigido um bom desempenho dinâmico ou que não necessitam de grande precisão.
T
uint [k] = uint [k − 1] + (e[k − 1] + e[k]) (4.1)
2
Na implementação digital da parcela derivativa do controlador, utilizou-se a metodologia
proposta por DORF e BISHOP (2012), isto é, a regra da diferença atrasada, que realiza a
Capítulo 4. Testes Práticos do Braço Robótico 52
aproximação baseada na ideia que a taxa de variação de uma função em relação ao tempo
pode ser aproximada pela diferença entre seus valores em dois pontos próximos no tempo,
de acordo com a Equação 4.2.
1
uder [k] = (e[k] − e[k − 1]) (4.2)
T
No algoritmo proposto utilizou-se como tempo de amostragem 10ms, bem como, uma
vez que atuadores não possuem capacidade infinita, no algoritmo elaborado foi tomada a
precaução de limitar o controlador dentro da faixa de operação dos motores, isto é, entre
0 − 24V CC. Para tanto, utilizou-se a função constrain para limitar a integral e o PWM
entre −255 e 255.
A seguir observa-se o trecho do código de implementação do algoritmo de controle PID
para o braço robótico, sendo o código exposto na sua integra no Apêndice B.
// Logica de controle PID para o motor 1 ( motor da base )
2 error1 = setpoint1 - pos1_ang ;
// error1 = setpoint1 - pos1_ang ; // Calcula o erro atual
4 Kixintegral1 += Ki1 *( lastError1 + error1 ) *( t_amostragem /2) ;
// Acumula o erro
Kixintegral1 = constrain ( Kixintegral1 , -255 , 255) ;
6
derivative1 = ( error1 - lastError1 ) / t_amostragem ; // Calcula a
derivada do erro
8 lastError1 = error1 ; // Atualiza o ultimo erro
• add integer: a cada pulso do encoder, o microtronlador deve realizar a adição de uma
unidade na variável do tipo inteiro que armazena a quantidade de pulsos ocorridos a
partir da inicialização do sistema.
Além das instruções que necessitam ser executadas pelo microntrolador para leitura
correta dos encoders, cabe ressaltar que o controle do robô exige ainda a execução de
instruções de add float, multiply float e digitalWrite(). Assim sendo, ao analisar os tempos
de execução das principais instruções exigidas para controlar o braço robótico de maneira
correta, expostas na Tabela 2 observa-se que a ESP32 Dev Kit se mostra mais eficiente
em todas elas, com destaque para as instruções digitalRead onde a ESP demanda 0, 141µs
Capítulo 4. Testes Práticos do Braço Robótico 54
enquanto o DUE demanda 0, 402µs; e multiply float, onde o DUE demanda 0, 902µs
enquanto a ESP exige apenas 0, 054µs.
Assim sendo, acredita-se que devido ao menor desempenho na execução das instruções
necessárias no algoritmo de controle, o Arduino Due não é capaz de identificar rotações
em ambos os sentidos. A hipótese levantada foi que no momento da borda de subida do
canal A do encoder o canal B está em nível lógico baixo, o Arduino Due somente conseguia
executar a leitura da porta digital quando o canal B já havia passado para o nível lógico
alto. Portanto, apesar do algoritmo de controle, em um primeiro momento, agir de modo
Capítulo 4. Testes Práticos do Braço Robótico 55
correto ao inverter o sentido de rotação dos motores, devido a falta de capacidade para
interpretar os dados gerados pelos encoders, ele continuava a aumentar o torque aplicado
nos motores, aumentando cada vez mais o erro de posição.
Face ao acima exposto, optou-se pode substituir o microcontrolador Arduino Due por
outro que apresentasse maior velocidade nas instruções necessárias para rodar o algoritmo
de controle.
• Ganhos integrativos: Ki1 = 0, 2, Ki2 = 0, 44, Ki3 = 0, 45, Ki4 = 0, 45, Ki5 = 0, 45;
Neste trabalho foi realizado o projeto e construção de um braço robótico com cinco graus
de liberdade com intuito de proporcionar aos alunos das disciplinas da área de robótica
do IFSul Campus Pelotas uma ferramenta didática para o emprego dos conhecimentos
adquiridos nas aulas. A partir da adaptação do projeto open source BCN 3D Moveo, utilizou-
se motores de corrente contínua com encoders incrementais para realizar o acionamento
das juntas e obter informações em malha fechada da posição, velocidade e aceleração de
cada uma das cinco juntas rotacionais que compõem o braço robótico. Foram projetadas e
prototipadas placas de circuito impresso para os circuitos de controle e de potência do
robô, de modo que, com o uso de uma ESP 32 Dev Kit permite-se a implementação de
algoritmos de controle.
Durante os testes de funcionamento do robô, observou-se que a especificação dos
componentes que foram adicionados ao projeto open source que serviu de base para o
desenvolvimento do presente projeto, tais como, fonte de alimentação, retificadores de
tensão, motores de corrente contínua, encoders, bem como, as peças que necessitaram ser
projetadas e fabricadas, se mostraram acertadas, gerando um braço robótico que atende
os objetivos propostos na seção 1.1.
Os testes práticos realizados com uso de um algoritmo de controle PID no espaço de
juntas individuais indicaram um desempenho satisfatório, visto que o braço atingiu as
posições finais estabelecidas para as juntas conforme o esperado.
Algumas características do projeto, no entanto, necessitam ser analisadas mais profun-
damente, como por exemplo, a escolha do material para fabricação das polias acopladas
aos eixos dos motores de corrente contínua e a ausência de sensores capazes de armazenar
a posição do braço no instante anterior ao desligamento do microcontrolador. As polias
instaladas no braço robótico, prototipadas em ABS, se mostraram como um ponto frágil
do robô, pois quando submetidas a grandes esforços o chanfro que faz com que a polia não
deslize no eixo do motor pode se desgastar e perder sua função. No que tange à falta de
sensores ou elementos capazes de armazenar a posição das juntas após o desligamento do
microcontrolador, observa-se que tal fato implica na necessidade de controlar o robô de
modo manual até a sua posição inicial a cada inicialização do microcontrolador.
Face ao acima exposto, realiza-se as seguintes sugestões para trabalhos futuros que
visem aprimorar o braço robótico desenvolvido:
• Avaliar o uso de filamentos de maior resistência mecânica para manufatura aditiva das
polias acopladas ao eixo dos motores do projeto, como por exemplo, o polioximetileno
(ou acetal);
• Adicionar ao braço robótico sensores de fim de curso nas juntas do robô para
Capítulo 5. Conclusão 59
Referências
CRAIG, J. J. Robótica. [S.l.]: Pearson Educacion, 2013. Citado 6 vezes nas páginas 12,
15, 42, 43, 44, and 46.
DORF, R. C.; BISHOP, R. H. Sistemas de controle modernos, 12ª. Edição, Editora LTC,
2012. Citado na página 51.
FRANKLIN, G. F. et al. Feedback control of dynamic systems. [S.l.]: Prentice hall Upper
Saddle River, 2002. v. 4. Citado na página 51.
wevGPu59FmhDi9R9n8XHnO8IFU-KU__VJ8W4Tg6BikiIpK7caAmhWEALw_wcB>.
Acessado em 18/03/2023. Citado na página 37.
1 clc ;
clear ;
3 syms theta_1 theta_2 theta_3 theta_4 theta_5 ;
% informa os angulos de junta desejados
5 theta_1 =0; theta_2 =0; theta_3 =0; theta_4 =0;
theta_5 =0;
7
% define as matrizes de t r a n s f o r m a o h o m o g n a
9 T0_1 = [ cos ( theta_1 ) - sin ( theta_1 ) 0 0;
sin ( theta_1 ) * cos (0) cos ( theta_1 ) * cos (0) - sin (0) sin (0) *230;
11 sin ( theta_1 ) * sin (0) cos ( theta_1 ) * sin (0) cos (0) cos (0) *230;
0 0 0 1;];
13
T1_2 = [ cos ( theta_2 ) - sin ( theta_2 ) 0 0;
15 sin ( theta_2 ) * cos ( pi /2) cos ( theta_2 ) * cos ( pi /2) - sin ( pi /2) 0;
sin ( theta_2 ) * sin ( pi /2) cos ( theta_2 ) * sin ( pi /2) cos ( pi /2) 0;
17 0 0 0 1;];
2
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
4 * DECLARACAO DOS PINOS DE ENTRADA E SAIDA
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
6
// PINOS CONECTADOS NAS PONTES H ---> PORTAS COM PWM
8 # define M1_direita 22 // base
# define M1_esquerda 23 // base
10 # define M2_direita 15 // ombro
# define M2_esquerda 2 // ombro
12 # define M3_direita 21 // cotovelo verde
# define M3_esquerda 19 // cotovelo azul
14 # define M4_direita 5 // punho verde
# define M4_esquerda 18 // punho azul
16 # define M5_direita 17 // garra roxo
# define M5_esquerda 16 // garra cinza
18
// # define M6_direita 4
20 // # define M6_esquerda 2
24
# define ENC1_A 27
26 # define ENC1_B 14
# define ENC2_A 36
28 # define ENC2_B 39
# define ENC3_A 34
30 # define ENC3_B 35
# define ENC4_A 32
32 # define ENC4_B 33
# define ENC5_A 25
34 # define ENC5_B 26
// # define ENC6_A 38
36 // # define ENC6_B 40
38
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
40 * DEFINICAO DE VARIAVEIS GLOBAIS
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
42 // variaveis para salvar os incrementos dos encoders dos motores
int pos1 =0 , pos2 =0 , pos3 =0 , pos4 =0 , pos5 =0 , pos6 =0;
APÊNDICE B. Algoritmo de controle PID 65
128
// CONFIGURA AS INTERRUPCOES EXTERNAS PARA BORDA DE SUBIDA DO CANAL DO
ENCODER
130 attachInterrupt ( ENC1_A , read_encoder1 , RISING ) ;
attachInterrupt ( ENC2_A , read_encoder2 , RISING ) ;
APÊNDICE B. Algoritmo de controle PID 67
146 }
174
double pwm1 = Kp1 * error1 + Kixintegral1 + Kd * derivative1 ;
176
// Limita o valor do pwm dentro do intervalo adequado ( ajuste
conforme necessidade )
178 pwm1 = constrain ( pwm1 , -255 , 255) ;
252
// ... Controle PID para o motor 5
254 error5 = setpoint5 - pos5_ang ; // Calcula o erro atual
Kixintegral5 += Ki5 *( lastError5 + error5 ) *( t_amostragem /2) ;;
// Acumula o erro
256 Kixintegral5 = constrain ( Kixintegral5 , -255 , 255) ;
260
// Calculo do sinal de controle ( pwm ) com o PID
262 double pwm5 = Kp5 * error5 + Kixintegral5 + Kd * derivative5 ;
// Limita o valor do pwm dentro do intervalo adequado ( ajuste
conforme necessidade )
264 pwm5 = constrain ( pwm5 , -255 , 255) ;
// Aplica o sinal de controle ao motor 1
266 if ( pwm5 > 0) {
analogWrite ( M5_esquerda , pwm5 ) ;
268 analogWrite ( M5_direita , 0) ;
} else {
270 analogWrite ( M5_esquerda , 0) ;
analogWrite ( M5_direita , abs ( pwm5 ) ) ;
272 }
274
i =0;
276 }
278 if ( c ==200) {
Serial . print ( pos1_ang ) ; Serial . print ( " ; " ) ; Serial . print ( pos2_ang ) ;
Serial . print ( " ; " ) ; Serial . print ( pos3_ang ) ; Serial . print ( " ; " ) ; Serial .
print ( pos4_ang ) ; Serial . print ( " ; " ) ; Serial . println ( pos5_ang ) ;
280
c =0;
282 }
284
}
286 // FUNCAO DE CONTROLE TEMPO
void cb_timer () {
288
i = i + 1;
290
c = c +1;
292
}
294
1M1 1
Articulação 1 1M2 1
1M3 1
2M1 1
2M2M 1
Articulação 2 2M2H 1
T2M1D 1
T2M1I 1
3M1 1
3M2C 1
Articulação 3
3M2 1
T3M1 1
Partes 4M1 1
impressas 4M2 1
Articulação 4
4M2C 1
T4M1 1
Top plate 1
Bottom plate 1
Cilinder 2
Pivot arm 1
Efetuador
Gripper left 1
Gripper right 1
Idol gear 1
Servo gear 1
Suporte Fonte 1
Suportes para placas
Suporte Placas 1
Pulley T5, Bore 3
8mm, 14 tooth,
Polias 17mm width
Pulley T5, Bore 2
5mm, 10 tooth, 17
mm width
Anexos
76
Fonte: https://lobodarobotica.com/blog/esp32-pinout/
77