Você está na página 1de 83

Curso de Engenharia Elétrica

Monografia do Projeto de Fim de Curso

Projeto e Construção de um Braço Robótico com Cinco Graus de


Liberdade

Allan de Souza Bobroski

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

Allan de Souza Bobroski

Orientador: Prof. Dr. Eng. Mauro André Barbosa Cunha


Coorientador: Prof. Dr. Eng. Cláudio Luís d’Elia Machado

Projeto e Construção de um Braço Robótico com Cinco Graus de Liberdade

Monografia do Projeto de Fim de Curso

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

Monografia do Projeto de Fim de Curso

Projeto e Construção de um Braço Robótico com Cinco Graus de Liberdade

Allan de Souza Bobroski

Relatório submetido como requisito parcial


para obtenção do grau de Engenheiro Eletricista

Prof. Dr. Eng. Mauro André Barbosa Cunha


Orientador

Prof. Dr. Eng. Cláudio Luís d’Elia Machado


Coorientador

Banca examinadora

Prof. Dr. Eng. Mauro André Barbosa Cunha


Orientador

Prof. Dr. Eng. Carlos Mendes Richter

Prof. Me. Eng. Gabriel de Borba Luche


CESSÃO DE DIREITOS
AUTOR: Allan de Souza Bobroski
TÍTULO: Projeto e Construção de um Braço Robótico com Cinco Graus de Liberdade
GRAU: Engenheiro Eletricista ANO: 2023

É concedida ao Instituto Federal de Educação, Ciência e Tecnologia Sul-rio-


grandense permissão para reproduzir cópias desta monografia de graduação e
para emprestar ou vender tais cópias somente para propósitos acadêmicos e
científicos. O(s) autor(es) reserva(m) outros direitos de publicação e nenhuma
parte desta monografia de graduação pode ser reproduzida sem autorização por
escrito do(s) autor(es).

Allan de Souza Bobroski


Av. Bento Gonçalves 4122, Apto 402
96015-140 – Pelotas – RS – Brasil
Este trabalho é dedicado a todos os profissionais e entusiastas que contribuem para
a evolução da engenharia, moldando o mundo em que vivemos e impulsionando a
sociedade em direção a um futuro brilhante.
Agradecimentos

Agradeço de coração a todas as pessoas que contribuíram para a realização deste


trabalho e que estiveram a meu lado ao longo da minha jornada acadêmica. Em primeiro
lugar, gostaria de expressar minha imensa gratidão aos meus pais, cujo amor, apoio e
encorajamento inabaláveis foram fundamentais para que eu chegasse até aqui. Sem a
presença deles a meu lado, minha caminhada teria sido muito mais difícil.
Em seguida, desejo expressar minha sincera gratidão ao meu orientador, Professor
Mauro Cunha, e ao meu coorientador, Professor Cláudio Machado. A disponibilidade e
dedicação de vocês em me ajudar na solução de problemas e guiar meu desenvolvimento
neste projeto e, inclusive, nas disciplinas do curso foram inestimáveis. Seu conhecimento,
orientação e paciência foram essenciais para que eu pudesse concluir este trabalho da
melhor forma possível. Sem a presença e o apoio de vocês, este projeto não teria atingido
seu potencial máximo.
Gostaria também de agradecer ao meu colega e amigo Yuri Gayer. Sua disposição
em me ajudar e sua colaboração em discussões a respeito de aspectos do trabalho foram
extremamente valiosas. A troca de conhecimentos e experiências entre nós foi enriquecedora
e ajudou a expandir minha compreensão sobre o tema abordado. Sua amizade e apoio
foram imprescindíveis ao longo dessa jornada.
Não posso deixar de mencionar a importância do IFSul, instituição que me proporcio-
nou uma formação de qualidade e um ambiente propício ao aprendizado. Agradeço aos
professores, funcionários e colegas de curso que contribuíram para o meu crescimento e
desenvolvimento como estudante de Engenharia Elétrica.
Por fim, mas não menos importante, agradeço aos meus amigos, cuja presença constante
foi um verdadeiro suporte nos momentos de dificuldade e nas conquistas que fazem parte
da graduação. Seu apoio, incentivo e companheirismo foram fundamentais para que eu
pudesse enfrentar os desafios da jornada acadêmica com determinação e perseverança.
Neste momento de agradecimentos, quero expressar minha gratidão às demais pessoas
que, de alguma forma, contribuíram para o meu sucesso acadêmico.
Sei que esta conquista não seria possível sem o apoio e a colaboração de todas as
pessoas aqui mencionadas. Vocês fazem parte da minha história e levo comigo a gratidão
eterna por tudo que fizeram por mim. Muito obrigado a todos!
Resumo

Este trabalho apresenta o desenvolvimento do projeto e da construção de um braço robótico


com cinco graus de liberdade, com fins didáticos para implementação das técnicas de
controle e demais aspectos estudados nas disciplinas da área de robótica do curso de
Engenharia Elétrica do IFSul Campus Pelotas. A estrutura mecânica do robô foi baseada
no projeto open source BCN 3D Moveo, que foi modificado para atender aos objetivos
propostos no trabalho. O acionamento das juntas do braço robótico foi realizado por meio
do uso de motores de corrente contínua com caixa de redução que proporcionam torque e
velocidade adequados. Encoders incrementais acoplados à parte de alta rotação dos motores
fornecem a leitura da posição das juntas do robô. Foram projetados circuitos de controle e
de potência que através do uso de um microcontrolador permitem a implementação e testes
de algoritmos de controle. Os resultados obtidos nos testes práticos do robô demonstraram
que o braço robótico construído atende aos objetivos propostos no trabalho.

Palavras-chave: Robótica. Braço robótico. Controle de robôs. Open Source.


Abstract

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.

Keywords: Robotics. Robotic arm. Robot control. Open Source.


Lista de ilustrações

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

Tabela 1 – Parâmetros de Denavit-Hartenberg. . . . . . . . . . . . . . . . . . . . . 45


Tabela 2 – Específicações ESP32 Dev Kit x Arduino Due . . . . . . . . . . . . . . 54
Lista de abreviaturas e siglas

3D Tridimensional

A3 Associação para o Avanço da Automação

ABS Acrilonitrilo-butadieno-estireno

CAD Computer aided design

CC Corrente contínua

DDP Diferença de potencial

DH Denavit- Hartenberg

IDE Integrated Development Environment

IFR International Federation of Robotics

P Proporcional

PID Proporcional integrativo derivativo

PD Proporcional derivativo

PCI Placa de circuito impresso

PWM Pulse Width Modulation

RIA Robot Institute of America

VCC Voltagem de corrente contínua

VCA Voltagem de corrente alternada


Lista de símbolos

ai Distância ao longo do eixo de translação Z


⃗ i entre os sistemas de coorde-
nadas i e i + 1, medida ao longo de X⃗i

αi Ângulo em torno do eixo comum perpendicular Z ⃗ i entre os sistemas de


coordenadas i e i + 1, medido em torno de de X
⃗i

di Distância ao longo do eixo de rotação X


⃗ i entre os sistemas de coordena-
das i e i + 1, medido ao longo de Z
⃗i

θi Ângulo em torno do eixo de rotação comum entre os sistemas de coor-


denadas i e i + 1, medido em torno de Z
⃗i

θd Ângulo de junta desejado

cθi Cosseno do ângulo θi

sθi Seno do ângulo θi

i T Matriz de transformação homogênea entre os sistemas de coordenadas i


i−1

e i−1

Ef etuador T Matriz de transformação homogênea entre os sistemas de coordenadas


0

da base do manipulador 0 e o efetuador final

e Sinal de erro

u Sinal de controle

T Tempo de amostragem periódico

⃗i
X Eixo X do sistema de coordenadas i

Y⃗i Eixo Y do sistema de coordenadas i

⃗i
Z Eixo Z do sistema de coordenadas i

Kp Ganho proporcional

Ki Ganho integrativo

Kd Ganho derivativo

k Índice da amostra de uma função de tempo discreto


Sumário

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

2 PROJETO DO BRAÇO ROBÓTICO . . . . . . . . . . . . . . . . . . . 19


2.1 Estrutura Mecânica do Braço Robótico . . . . . . . . . . . . . . . . . . 19
2.1.1 Alterações Realizadas no Projeto Original do BCN3D . . . . . . . . . . 19
2.1.2 Montagem Virtual do Braço Robótico . . . . . . . . . . . . . . . . . . . 20
2.1.3 Impressão das Peças do Braço Robótico . . . . . . . . . . . . . . . . . . 21
2.1.4 Montagem da Estrutura Mecânica do Braço Robótico . . . . . . . . . . 23
2.2 Atuadores e Sensores de Posição e Velocidade . . . . . . . . . . . . . . 26
2.2.1 Tipos de Encoders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2.2 Testes dos Atuadores e Encoders em Laboratório . . . . . . . . . . . . . 30
2.3 Circuitos de Potência e Controle dos Atuadores . . . . . . . . . . . . . 33
2.4 Fonte de Energia do Braço Robótico . . . . . . . . . . . . . . . . . . . . 36
2.5 Joystick para Controle Manual do Braço Robótico . . . . . . . . . . . . 39

3 CINEMÁTICA DIRETA DO BRAÇO ROBÓTICO . . . . . . . . . . . 42


3.1 Desenvolvimento dos Parâmetros de Denavit-Hartenberg e das Matrizes
de Transformação Homogênea do Braço Robótico . . . . . . . . . . . . 43

4 TESTES PRÁTICOS DO BRAÇO ROBÓTICO . . . . . . . . . . . . . 50


4.1 Algoritmo de Controle . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.2 Resultados Obtidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.2.1 Usando o Arduino Due como Microcontrolador do Braço Robótico . . . 53
4.2.2 Usando a ESP32 Dev Kit como Microcontrolador do Braço Robótico . . 55

5 CONCLUSÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
APÊNDICES 62

APÊNDICE A – ALGORITMO OCTAVE PARA MULTIPLICAÇÃO


DAS MATRIZES DE TRANSFORMAÇÃO HOMO-
GÊNEA . . . . . . . . . . . . . . . . . . . . . . . . . 63

APÊNDICE B – ALGORITMO DE CONTROLE PID . . . . . . . . . 64

APÊNDICE C – LISTA DE PEÇAS E COMPONENTES DO BRAÇO


ROBÓTICO . . . . . . . . . . . . . . . . . . . . . . . 72

ANEXOS 75

ANEXO A – DIAGRAMA ESQUEMÁTICO DO MICROCONTROLA-


DOR ESP32 DEV KIT . . . . . . . . . . . . . . . . . . . 76

ANEXO B – CARACTERÍSTICAS TÉCNICAS DOS MOTORES DO


BRAÇO ROBÓTICO . . . . . . . . . . . . . . . . . . . . 77
1 Introdução

De acordo com o Robot Institute of America – RIA, um robô é um manipulador


programável multifuncional, projetado para manipular materiais, partes, ferramentas, ou
dispositivos específicos, por meio de movimentos programados variáveis para executar uma
variedade de tarefas. A robótica possui diversas aplicações possíveis como, por exemplo,
operações de resgate de emergência, reconhecimento de ambientes, construção, automação
industrial, entretenimento, procedimentos cirúrgicos, exploração espacial, entre outras
aplicações industriais e não industriais (ROBLA-GÓMEZ et al., 2017).
A robótica de modo geral vem possibilitando grandes avanços na indústria em termos de
redução de custo, aumento de eficiência em processos e qualidade dos produtos. De acordo
com Craig (2013), o uso de manipuladores robóticos industriais passou a ser tendência na
década de 60 levando à automação dos processos de manufatura para níveis mais elevados.
A partir de 1980 a adoção dos robôs na indústria passou a ser muito intensa, o que pode
ser explicado pelo fato de os custos para inserir a robótica na indústria se mostrarem em
tendência de declínio ao passo que os custos de mão de obra evoluem no sentido oposto.
No gráfico exposto na Figura 1, pode-se observar que conforme a implantação dos
robôs na indústria norte-americana foi crescendo, os custos para aquisição dos robôs foram
se reduzindo de modo significativo, de tal forma que nas últimas três décadas o preço
médio dos robôs se reduziu em 50%, ao passo que os custos da mão de obra humana
apresentaram crescimento de mais de 100%.
Assim sendo, conforme se observa na Figura 2, o mercado da robótica nos Estados
Unidos da América vem apresentando crescimento substancial à medida que o custo e a
complexidade para implantação dos robôs na execução de atividades vêm se reduzindo.
Todavia, aqui cabe ressaltar que ao se traçar paralelos com o nível de automação e custos
de mão de obra na indústria brasileira, deve-se levar em conta aspectos como diferenças
significativas entre a legislação trabalhista brasileira e a norte-americana, remuneração
média dos trabalhadores brasileiros, que por via de regra, é inferior à remuneração norte-
americana, dentre outros.
Capítulo 1. Introdução 13

Figura 1 – Média dos preços de robôs versus o custo médio de mão de obra

Fonte: Adaptado de Tilley (2017)

Figura 2 – Crescimento do mercado de robótica de 1975-2020

Fonte: Adaptado de Tilley (2017)


Capítulo 1. Introdução 14

No Brasil, infelizmente, há certa dificuldade em se encontrar dados atualizados referentes


à quantidade de robôs instalados na indústria e seus custos comparados com a mão de obra
humana. De acordo com a International Federation of Robotics - IFR, em 2017 o Brasil
possuía 12.373 robôs industriais instalados, representando apenas 0,6% dos robôs instalados
no mundo e, assim sendo, ocupando a 18ª posição no ranking de nações automatizadas.
Entretanto, especialistas entrevistados pela VDI-Brasil (Verein Deutscher Ingenieure,
Associação de Engenheiros Brasil-Alemanha) afirmam que esses números ainda estão longe
do potencial de automação do país, sendo as possíveis razões para essa baixa adoção a
falta de conhecimento em automação por parte das equipes de engenharia nas empresas
brasileiras, escassez de profissionais capacitados para análise e solução de problemas,
mentalidade de redução de custos em detrimento de uma abordagem de custo-benefício,
entre outras (ROBOTS, 2023).
Atualmente, a indústria 4.0 com sua busca incessante por processos de produção cada
vez mais eficientes e flexíveis (produção em massa personalizada) vem impulsionando
mudanças significativas na indústria e na robótica, pois o surgimento de novos avanços
tecnológicos em métodos de comunicação, análise de dados e instrumentação estão fazendo
com que os robôs industriais possuam projetos mecânicos e de controle não mais restritos
à simples transferência de objetos ou tarefas repetitivas. Há um crescimento de tarefas
em que humanos e robôs atuam de modo conjunto, o que se convencionou denominar de
robótica colaborativa (ROBLA-GÓMEZ et al., 2017).
O estudo e o desenvolvimento da robótica face ao grande desenvolvimento que a indústria
apresenta, se mostram cruciais para o desenvolvimento da indústria e da nação, uma vez que
ao substituir-se a mão de obra clássica (operadores humanos) por manipuladores robóticos
surge a necessidade de disponibilizar ao mercado mão de obra qualificada, isto é, técnicos e
engenheiros com conhecimento sobre os processos de implantação, operação e manutenção
dos sistemas automatizados. Todavia, é importante ressaltar que apesar de a automação
ter capacidade de alterar a natureza do trabalho e reduzir a demanda por alguns empregos
específicos, de modo geral, a tecnologia tem potencial para criar oportunidades de empregos
e impulsionar o crescimento econômico. A robótica e a automação são ferramentas valiosas
para aprimorar a eficiência e a produtividade das empresas, tornando-as mais competitivas
no mercado global e gerando novas oportunidades para trabalhadores especializados.
De acordo com a Associação para o Avanço da Automação (A3 ), conforme a indústria
aumenta o emprego de processos automatizados e robôs para execução de atividades de
produção, ocorre a transformação de cargos e atividades desempenhadas. Todavia, tal fato
não gerou a redução da quantidade de empregos, muito pelo contrário, observa-se que
de 2010 a 2016 apesar de 136.748 unidades robóticas terem sido instaladas na indústria
dos Estados Unidos da América, o emprego industrial no país aumentou em 894.000 e a
taxa de desemprego diminuiu de 9,8% para 4,7% (PINEDA, 2018). Logo, a sociedade no
geral deve se preocupar com a qualificação da sua mão de obra, existindo aqui um papel
importante das instituições de ensino na busca por ofertar e possibilitar o desenvolvimento
Capítulo 1. Introdução 15

dos indivíduos no mesmo passo com que a tecnologia avança.


O projeto da estrutura mecânica e de controle de manipuladores robóticos é uma
ciência multidisciplinar da engenharia (mecânica, eletrônica, programação, controle, dentre
outras áreas), uma vez que o projeto de um manipulador robótico envolve a escolha
dos componentes, como motores, sensores e controladores, além do projeto da estrutura
mecânica do robô. A escolha de componentes depende da tarefa que o robô irá executar, das
características do ambiente de trabalho e do orçamento disponível. A estrutura mecânica
deve ser projetada para fornecer a capacidade de movimento necessária para o robô realizar
a tarefa desejada, bem como, o controle de um manipulador robótico envolve a programação
dos movimentos do robô, de forma que ele possa executar a tarefa de forma eficiente e
precisa (CRAIG, 2013; SCIAVICCO; SICILIANO, 2001).
Existem várias técnicas de controle que podem ser usadas, incluindo controle de malha
aberta e técnicas de controle em malha fechada como controle de posição e controle de
força. O tipo de controle utilizado dependerá da tarefa que o robô irá executar e das
características do ambiente de trabalho (LEWIS; DAWSON; ABDALLAH, 2003). Existem
diversas classificações para robôs que são baseadas na sua estrutura mecânica. John J.
Craig (CRAIG, 2013) apresenta a seguinte classificação:

• 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 autônomos: robôs que têm a capacidade de operar de forma independente e


tomar decisões por conta própria, sem intervenção humana direta.

• 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.

Neste contexto, propõe-se nesse trabalho o projeto e a construção de um robô manipu-


lador com cinco graus de liberdade, com fins didáticos, construído utilizando manufatura
aditiva, utilizando como base o projeto open source BCN3D Moveo, que será adaptado
para possuir as características necessárias para propiciar aos alunos das disciplinas de
Introdução à Robótica Industrial e Controle de Robôs do curso de Engenharia Elétrica do
Capítulo 1. Introdução 16

IFSul Campus Pelotas uma ferramenta para implementação e testes dos algoritmos de
controle de robôs.

1.1 Objetivos

1.1.1 Objetivo Principal


Este trabalho tem como objetivo a construção de um manipulador robótico com fins
didáticos para desenvolver estudos e práticas dos conhecimentos estudados nas disciplinas
da área de automação e controle do curso e Engenharia Elétrica do IFSul Campus Pelotas,
tais como leis de controle, geração de trajetórias, dentre outros.

1.1.1.1 Objetivos Específicos

Tendo em vista o objetivo principal traçado para o projeto, são estabelecidos os


seguintes objetivos específicos:

• Adaptar o projeto open source BCN3D Moveo para o uso de motores de corrente
contínua.

• Realizar a construção da estrutura mecânica do manipulador, utilizando impressão


3D para fabricação das peças.

• Especificar os tipos de atuadores e sensores utilizados no robô.

• Projetar placas de circuito impresso para os circuitos de controle e de potência de


modo que o sistema se apresente modular.

• Modelar as equações da cinemática do braço robótico.

• Propor e implementar uma lei de controle no robô e fazer a aquisição dos dados para
demonstrar o funcionamento do sistema proposto.

Com estes objetivos específicos estabelecidos, espera-se atingir o objetivo geral do


projeto, que é a construção e implementação de um manipulador robótico controlado
eletronicamente.

1.2 Visão Geral

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

design de um braço robótico com intuito educacional desenvolvido pelos engenheiros da


empresa em colaboração com o Departament d’Ensenyament da Generalitat de Catalunya.
O protótipo do projeto pode ser visualizado na Figura 3.

Figura 3 – Protótipo BCN3D Moveo

Fonte: Technologies (2016).

A empresa disponibiliza em um repositório no Github o projeto BCN3D Moveo na sua


íntegra, fornecendo toda a lista dos componentes necessários para a montagem do braço,
os arquivos CAD, assim como, algumas rotinas de programação que podem ser utilizadas
para o controle do braço robótico (TECHNOLOGIES, 2016).
No entanto, o projeto original da empresa não atende aos objetivos do presente Projeto
de Fim de Curso. O projeto original utiliza motores de passo como atuadores das juntas e
não trabalha em malha fechada. Portanto, para a implementação de algoritmos de controle
de torque computado (PD, PID, etc.), é necessário fazer alterações no projeto, permitindo
o uso de motores de corrente contínua como atuadores das juntas e a inclusão de sensores
que proporcionem feedback de posição e velocidade das juntas do braço robótico.

1.3 Estrutura do Trabalho

Este trabalho se apresenta distribuído da seguinte forma:

• Descreve-se no Capítulo 2 o projeto do braço robótico, abordando as questões


referentes à estrutura mecânica, sensores e atuadores, circuitos de acionamento e
microprocessador utilizados no controle do robô.

• Descreve-se no Capítulo 3 a modelagem do braço robótico, descrevendo a cinemática


direta através dos parâmetros de Denavit–Hartenberg.

• Apresenta-se no Capítulo 4 os experimentos práticos realizados.


Capítulo 1. Introdução 18

• Apresenta-se no Capítulo 5 as conclusões obtidas no desenvolvimento do trabalho,


apontando as dificuldades encontradas e apresentando sugestões para trabalhos
futuros.
2 Projeto do Braço Robótico

2.1 Estrutura Mecânica do Braço Robótico

Como mencionado anteriormente na introdução deste trabalho, a estrutura mecânica


do manipulador foi baseada no projeto open source BCN3D Moveo, um braço robótico
com 5 graus de liberdade, fabricado integralmente por meio de impressão 3D. No entanto,
para atender aos objetivos definidos, algumas modificações foram necessárias no projeto
original.

2.1.1 Alterações Realizadas no Projeto Original do BCN3D


A principal modificação realizada no projeto original foi a substituição dos motores
de passo por motores de corrente contínua e a implementação de encoders para operar
em malha fechada. No entanto, os novos motores apresentaram dimensões físicas bastante
distintas das dos motores de passo originais do projeto BCN3D Moveo, o que exigiu a
adaptação das peças do projeto original para acomodar os novos motores. Com o intuito de
modificar o menor número possível de peças, optou-se por fabricar suportes para encaixar
os motores de corrente contínua, tornando o conjunto (suporte e motor) com dimensões
semelhantes aos motores de passo originalmente instalados no braço robótico.
O braço robótico possui cinco juntas acionadas pelos motores de corrente contínua,
sendo que, a junta da base do braço robótico é acionada por dois motores de maneira
simultânea. Assim sendo, houve a necessidade de projetar suportes para os motores de
quatro juntas e modificar o projeto das peças que formam o elo do punho do braço robótico
para acomodar o motor que fica instalado no seu interior.
Utilizando o o software Autodesk Fusion 360 Student Version realizou-se a análise das
dimensões dos encaixes dos motores de passo na estrutura do braço robótico e projetou-se
os suportes para os motores de modo a garantir um encaixe perfeito, assim como, alterou-se
a parte interna do elo da junta 4 (punho) do braço robótico, para permitir o encaixe do
motor de corrente contínua em seu interior. Na Figura 4 observa-se os suportes projetados
para permitir o uso dos motores de corrente contínua e na Figura 5 pode-se visualizar as
alterações realizadas no elo da junta 4.
Capítulo 2. Projeto do Braço Robótico 20

Figura 4 – Visão geral dos suportes projetados.

Fonte: elaborada pelo autor

Figura 5 – Visão das alterações realizadas no elo do punho; à direita a peça original e à
esquerda a peça modificada.

Fonte: elaborada pelo autor

2.1.2 Montagem Virtual do Braço Robótico


Utilizando o software Autodesk Fusion 360 Student Version, uma plataforma abrangente
de desenho assistido por computador (Computer Aided Design - CAD), realizou-se a
montagem do braço robótico impondo as restrições e conexões entre cada elemento
da estrutura do braço robótico, de modo que cada peça foi devidamente posicionada,
assegurando a correta interação entre as juntas e elos do braço robótico.
A montagem virtual no Autodesk Fusion 360 permitiu uma visão clara do resultado
final da estrutura do braço robótico, bem como, devido à possibilidade de girar, ampliar e
explorar digitalmente o modelo 3D, foi possível compreender de modo mais profundo a
estrutura do robô.
Capítulo 2. Projeto do Braço Robótico 21

2.1.3 Impressão das Peças do Braço Robótico


Após a montagem virtual do braço robótico no Autodesk Fusion 360, garantindo
que as dimensões das peças modificadas estavam corretas e o encaixe ocorreria de modo
satisfatório, iniciou-se a impressão das peças em ABS utilizando a impressora 3D GTMAX
Core A1v2 disponível no laboratório do curso de Engenharia Elétrica do IFSul Campus
Pelotas.
A impressora 3D GTMAX Core A1v2 realiza a fabricação das peças através da
modelagem por deposição fundida (Fused Deposition Modeling) onde o filamento de ABS
é fornecido para extrusora responsável por fundir o material e realizar a deposição do
material camada por camada, da base até o topo da peça. Na Figura 6 pode-se visualizar
uma etapa do processo de impressão da peça que compõe a junta da base do robô.

Figura 6 – Fotografia da impressão do elo da junta 1.

Fonte: elaborada pelo autor

As impressoras 3D operam realizando a leitura de instruções numéricas, ou seja, trata-se


de um processo de manufatura auxiliada por computador (Computer Aided Manufacturing).
Logo, é necessário o uso de um software capaz de transformar o modelo 3D das peças do
robô em um arquivo G-code contendo as informações necessárias para manufatura das
peças, como por exemplo, altura de cada uma das camadas, velocidade de movimentação
da extrusora, temperatura de trabalho da mesa e da extrusora, dentre outras.
Os softwares responsáveis pela preparação do arquivo G-code para impressão 3D FDM
são normalmente chamados de "fatiadores"(slicers), devido à natureza do processo de
impressão por camadas. Para realizar o preparo das peças para impressão, foi utilizado o
software open sorce Ultimaker Cura, uma das ferramentas de fatiamento mais difundida na
comunidade, pois apresenta uma gama de ferramentas que possibilitam um bom resultado
de impressão.
O “fatiamento” das peças foi realizado no Ultimaker Cura seguindo com os seguintes
parâmetros de impressão: altura de camada de 0,32 mm; quatro filetes por parede; seis
camadas superiores e inferiores com um milímetro de espessura; densidade de preenchimento
Capítulo 2. Projeto do Braço Robótico 22

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.

Figura 7 – Captura de tela do software Ultimaker Cura: fatiamento do elo da junta 1

Fonte: elaborada pelo autor.

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.

Figura 8 – Peças impressas antes do processo de acabamento

Fonte: elaborada pelo autor.


Capítulo 2. Projeto do Braço Robótico 23

2.1.4 Montagem da Estrutura Mecânica do Braço Robótico


Durante a montagem da estrutura mecânica do robô, surgiram desafios inesperados
devido à dilatação das peças de ABS, o que exigiu ajustes nos orifícios destinados aos
motores. Além disso, as rebarbas deixadas pelos suportes necessários para a impressão de
partes com angulação superior a 55º tornaram o encaixe entre as peças de ABS inviável
em muitas ocasiões. Como solução, optou-se por realizar o lixamento manual das peças,
removendo cerca de um milímetro de material para permitir o encaixe dos motores nos
suportes e a eliminação de todas as rebarbas e falhas de impressão.
Com relação às questões estéticas, buscou-se aprimorar a aparência do braço robótico
através do lixamento manual da parte externa de todas as peças impressas em ABS, seguido
da aplicação de tinta primer e pintura com tinta automotiva na cor laranja, conforme visto
na Figura 9.

Figura 9 – Fotografia do processo de pintura e acabamento

Fonte: elaborada pelo autor.

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 10 – Estrutura de perfis de alumínio estrutural elaborado no Autodesk Fusion 360


para fixação do braço robótico

Fonte: elaborada pelo autor.

A base projetada se mostrou eficiente e cumpriu com o objetivo de proporcionar


estabilidade para o braço robótico no seu espaço de trabalho. Na Figura 11 observa-se o
braço robótico instalado na base de perfis de alumínio estrutural, assim como, o sistema
de transmissão de movimento das juntas baseado em correias dentadas e polias fixadas
nos eixos dos motores.
No que tange aos compartimentos para alocação das placas de circuito de potência e
de controle, bem como da fonte de energia do robô, foram projetadas e fabricadas através
de impressão 3D peças para fixar as placas de circuito impresso e a fonte de energia na
estrutura da base do robô. Na Figura 12 se observa o projeto da peça para fixar a placa de
potência e de interface entre os encoders e o microcontrolador; na Figura 13 visualiza-se a
peça projetada para fixar a fonte de energia e o microcontrolador do braço robótico; e na
Figura 14 se observa as tampas que protegem os componentes dos circuitos do robô.
Capítulo 2. Projeto do Braço Robótico 25

Figura 11 – Braço Robótico instalado na base de perfis de alumínio estrutural

Fonte: elaborada pelo autor.

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

Fonte: elaborada pelo autor.


Capítulo 2. Projeto do Braço Robótico 26

Figura 13 – Peça para fixação da fonte de energia e microcontrolador do robô elaborada


no Autodesk Fusion 360

Fonte: elaborada pelo autor.

Figura 14 – Tampa de proteção dos componentes eletrônicos do robô elaborada no Auto-


desk Fusion 360

Fonte: elaborada pelo autor.

2.2 Atuadores e Sensores de Posição e Velocidade

Existem diversas opções de motores de corrente contínua disponíveis no mercado. Para


o presente projeto, optou-se por utilizar os motores de corrente contínua 25GA370, que
Capítulo 2. Projeto do Braço Robótico 27

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.

Figura 15 – Características construtivas dos motores utilizados no projeto

Fonte: Aliexpress (2023)

Quando se deseja operar motores em malha fechada, surge a necessidade da existência


de um sensor capaz de proporcionar um feedback da posição e velocidade de rotação do
eixo do motor. Existem diversas maneiras diferentes de implementar a leitura da posição
do eixo do motor, todavia, os encoders se mostram como uma boa alternativa, pois são
capazes de fornecer uma boa precisão de leitura de modo simples e eficaz.

2.2.1 Tipos de Encoders


Existem vários tipos de encoders disponíveis para medir a posição e a velocidade dos
motores elétricos em robótica, dentre eles, estão os:

• Encoders Incrementais: São os encoders mais comuns utilizados em robótica. Eles


produzem um pulso de saída para cada rotação do eixo do motor, permitindo assim
a contagem do número de rotações. Eles não fornecem a posição absoluta do eixo,
apenas a sua posição relativa. São relativamente baratos e possuem alta resolução.
Capítulo 2. Projeto do Braço Robótico 28

• Encoders Absolutos: Fornecem a posição absoluta do eixo do motor elétrico em


relação a um ponto de referência, geralmente o ponto de partida. Os encoders
absolutos geralmente são mais caros do que os encoders incrementais, mas fornecem
uma maior precisão na medição da posição do eixo.

• 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.

No presente projeto, utilizou-se os motores de corrente contínua 25GA370 que contam


com um encoder incremental magnético com sensores de efeito Hall. O encoder de efeito
Hall é composto basicamente por um disco com imãs e sensores de efeito Hall, sendo que
os sensores e imãs ficam posicionados defasados geometricamente a 90 graus, isto é, em
quadratura.
Capítulo 2. Projeto do Braço Robótico 29

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.

Figura 16 – Esquemático da tensão de efeito Hall

Fonte: Neis (2000).

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 17 – Forma de onda típica de um encoder de dois canais

Fonte: Almeida (2017).


Capítulo 2. Projeto do Braço Robótico 30

O modelo de motor escolhido para a implementação do presente projeto, conta com


um encoder de efeito Hall acoplado no eixo na parte de alta rotação. O encoder acoplado
ao motor possui dois canais (canal A e canal B) em quadratura, possibilitando a leitura
da velocidade, posição e direção de deslocamento do eixo do motor. Além disso, observa-se
que o encoder acoplado ao motor possui resolução de 11 pulsos por rotação, todavia,
uma vez que ele encontra-se acoplado à parte de alta rotação, devido à redução de 1:500
proporcionada pela caixa de redução, obtém-se uma resolução de 5.500 pulsos por rotação.

2.2.2 Testes dos Atuadores e Encoders em Laboratório


Visando obter dados referentes às limitações dos motores e encoders utilizados, realizou-
se testes em laboratório operando o motor na velocidade mínima, intermediária e na sua
velocidade máxima, observando-se os sinais gerados nos canais do encoder acoplado ao
motor. Além disso, também realizou-se testes de inversão de sentido de rotação e parada
após alguns ciclos de operação.
Ao observar o sinal do encoder no osciloscópio conclui-se que não há limitação para se
operar em toda a faixa do motor (0-24V), uma vez que é possível observar com precisão a
forma de onda típica do encoder com dois canais ( Figura 17). Nas Figuras 18 e 19 pode-se
observar os sinais obtidos ao energizar o motor com 1 e 24 Volts, respectivamente.

Figura 18 – Sinal do encoder, com motor energizado com 1 Volt

Fonte: elaborada pelo autor.

Entretanto, conforme visto nas Figuras 18 e 19 o tempo decorrido entre as bordas de


subida do sinal de cada um dos canais do encoder operando com o motor energizado com
1 V é de 3, 5 ms, já quando energizado com 24 V, esse tempo é de apenas 118µs .
Capítulo 2. Projeto do Braço Robótico 31

Figura 19 – Sinal do encoder, com motor energizado com 24 Volts

Fonte: elaborada pelo autor.

Na Figura 20 visualiza-se a leitura do sinal gerado pelos canais A e B do encoder


acoplado ao motor energizado com 20V . Conforme visto na Figura 20, foi obtida uma
ótima precisão de leitura, isto é, o sinal se apresenta equivalente ao observado através do
osciloscópio, de modo que, vislumbra-se a possibilidade de usar um algoritmo baseado em
interrupções de pino externo para incrementar e decrementar a posição do eixo do motor.

Figura 20 – Sinal do encoder, com motor energizado com 20 Volts, lido através da ESP32

Fonte: elaborada pelo autor.


Capítulo 2. Projeto do Braço Robótico 32

O código a seguir, elaborado na IDE do Arduino, apresenta a metodologia utilizada para


leitura da posição do eixo do motor através do uso de interrupções externas e incremento da
variável que representa a posição relativa do eixo do motor. O algoritmo usa o canal A do
encoder para identificar uma borda de subida do sinal, isto é, identificar a passagem do imã
fixado no eixo do motor pelo sensor de efeito Hall do canal A; em seguida, realiza a leitura
do sinal do canal B, pois conforme visto na Figura 17, no momento da borda de subida do
canal A, se o canal B estiver em nível alto, tem-se rotação em um determinado sentido e,
caso ao contrário, significa que o motor está girando em sentido oposto. Assim sendo, a
variável que realiza a contagem de pulsos do encoder é incrementada ou decrementada.
Além disso, cabe ressaltar que a variável de contagem de pulsos posteriormente será
convertida para representar a posição angular da junta na qual o motor está instalado, de
acordo com a relação de polias existente no acoplamento.
1
// define os pinos onde estao conectados os canais do encoder
3 # define ENC_A 39
# define ENC_B 25
5
void setup () {
7 // configura os pinos como entrada
// e ajusta o baud rate da porta serial
9 pinMode ( ENC_A , INPUT ) ;
pinMode ( ENC_B , INPUT ) ;
11 Serial . begin (250000) ;
// configura a interrupcao externa
13 // para borda de subida do canal A do encoder
attachInterrupt ( ENC_A , read_encoder , RISING ) ;
15 }

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 - -;
}

Listagem 2.1 – Leitura da posição do eixo do motor.ino

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.

2.3 Circuitos de Potência e Controle dos Atuadores

Para aplicações em robótica é necessário que o circuito de potência seja implementado


de modo da possibilitar que os motores dos atuadores tenham sua direção, velocidade
e torque controlados. Em se tratando de motores de corrente contínua, tais controles
podem ser realizados através da polaridade e amplitude da tensão aplicada ao motor. Uma
metodologia de controle de motores de corrente contínua amplamente utilizada na robótica,
devido à sua capacidade de fornecer uma tensão variável e reversível ao motor, é o uso de
circuitos denominados "Ponte H". Na Figura 21, pode-se observar o esquemático básico de
uma ponte H.

Figura 21 – Esquema básico de uma ponte H

Fonte: Eletrogate (2020).

Ao usar a ponte H, é possível controlar a velocidade do motor por meio do ajuste da


tensão aplicada nos seus terminais, usando técnicas de modulação por largura de pulso
(Pulse Width Modulation - PWM ). Além disso, a inversão da polaridade da tensão permite
que o motor gire em direções opostas, como por exemplo, tomando como base o circuito
exposto na Figura 21, ao fecharmos as chaves CH AD e CH BE faremos com que o motor
apresente rotação em um sentido (horário ou anti-horário), ao passo que, se fecharmos as
chaves CH AE e CH BD, faremos com que o motor gire no sentido oposto.
Capítulo 2. Projeto do Braço Robótico 34

No desenvolvimento do circuito do presente projeto, optou-se pelo uso do módulo


Ponte H L298N que realiza a comutação entre as chaves do circuito da ponte H de forma
eletrônica, permite o controle de dois motores de corrente contínua com tensões entre 5 e
35V e corrente de pico de até 2A de modo independente, e conta com dissipador de calor
para o circuito integrado responsável pela comutação da ponte H. O módulo possui quatro
entradas para acionamento dos motores, as entradas IN1 e IN2 são responsáveis pelo
chaveamento do motor A, e as entradas IN3 e IN4 controlam o chaveamento dos terminais
do motor B. Assim sendo, observa-se que o módulo é compatível com os motores utilizados
no braço robótico que operam com tensão de no máximo 24V e correntes inferiores a
2A. Na Figura 22 encontra-se exposto o esquema de conexão de dois motores no módulo
LN298N.

Figura 22 – Esquema de ligação de dois motores no modulo LN298N

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

Figura 23 – Esquemático dos circuitos para confecção de PCI

Fonte: elaborada pelo autor.

A produção da placa de circuito impresso para o módulo de potência do braço robótico,


visualizada na Figura 24, foi realizada utilizando a prototipadora de PCI PCB-Proto
2 disponível no laboratório do curso de Engenharia Elétrica do IFSul Campus Pelotas.
Na Figura 25 pode-se visualizar a PCI sendo feita durante o processo de usinagem na
PCB-Proto 2.
Capítulo 2. Projeto do Braço Robótico 36

Figura 24 – Esquema para processo de usinagem da PCI

Fonte: elaborada pelo autor.

Figura 25 – PCI do módulo de controle durante a usinagem

Fonte: elaborada pelo autor.

2.4 Fonte de Energia do Braço Robótico

Para alimentar os circuitos de potência e de controle do robô utilizou-se uma fonte


chaveada capaz de converter a energia elétrica da rede da concessionária de energia para o
nível de trabalho dos motores do braço robótico, isto é, na Região de Pelotas/RS, de 220
Capítulo 2. Projeto do Braço Robótico 37

VAC para 24 VCC. A Figura 26 ilustra o modelo de fonte utilizada no projeto.


De acordo com o fabricante da fonte chaveada exposta na Figura 26, o equipamento
possui as seguintes características técnicas (MERCADOLIVRE, 2023):

• Corrente de saída: 2A

• Tensão de saída: 24V

• Potência: 48W

• Proteções: Contra Sobre Corrente e Filtro contra ruído

• Tolerância de Saída: ± 15%

• Tensão de Entrada: 110VAC a 220VAC

• Frequência de Entrada: 50/60Hz

• Conexão de Saída: Borne com Parafuso

• Conexão de Entrada: Borne com Parafuso

• Ajuste de Tensão de Saída: Trimpot

• Dimensões: 85mm x 58mm x 32mm.

Figura 26 – Modelo de fonte chaveada utilizada na alimentação do robô.

F onte : https : //http2.mlstatic.com/DN QN P2 X6 81594 − M LB516489182780 92022 −


F.jpg

Além disso, para energizar o microcontrolador e os encoders do braço robótico, uma


vez que os mesmos operam com 3, 3 VCC optou-se pelo uso de um regulador de tensão
CC-CC (step down) para retificar o sinal de 24 VCC da saída da fonte chaveada para os
3, 3 VCC exigidos pelos encoders e microcontrolador. O regulador de tensão especificado
Capítulo 2. Projeto do Braço Robótico 38

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):

• Tensão de entrada: 3, 2 a 40V;

• Tensão de saída ajustável: 1, 23 a 37V;

• Diferença entre a tensão de entrada e saída deve ser de maior que 1, 5V;

• Corrente máxima de saída: 3A (recomenda-se adicionar dissipador de calor se


potência > 15W);

• Eficiência de conversão: até 92%;

• Velocidade de comutação: até 150kHz;

• Circuito de proteção: SS36;

• Temperatura de operação: −40 a 850 C;

• Regulação de carga: + ou − 0, 5%;

• Dimensões: 44x22x12mm;

Figura 27 – Regulador de tensão CC-CC

Fonte: https : //http2.mlstatic.com/DN QN P2 X9 09612−M LB534445632050 12023−F.jpg


Capítulo 2. Projeto do Braço Robótico 39

2.5 Joystick para Controle Manual do Braço Robótico

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.

Figura 28 – Esquema do joystick personalizado para o braço robótico

Fonte: elaborado pelo autor.

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

Figura 29 – Base para controle, utilizando módulos joystick arduino

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 }

28 if (( eixo_X2 ==0) &&( eixo_Y2 >1390) ) {


Capítulo 2. Projeto do Braço Robótico 41

Serial . println ( " Joystick 2 para baixo " ) ;


30 } else if (( eixo_X2 >1700) &&( eixo_Y2 <120) ) {
Serial . println ( " Joystick 2 para esquerda " ) ;
32 } else if (( eixo_X2 <2200) &&( eixo_Y2 >4000) ) {
Serial . println ( " Joystick 2 para direita " ) ;
34 } else if (( eixo_X2 >4000) &&( eixo_Y2 >1200) ) {
Serial . println ( " Joystick 2 para cima " ) ;
36 }
if ( digitalRead ( botao2 ) ==0) {
38 Serial . println ( " Joystick 2 pressionado " ) ;
}
40 delay (1000) ;

42 }

Listagem 2.2 – Leitura dos sinais do joystick.ino


3 Cinemática Direta do Braço Robótico

A modelagem é um processo necessário no desenvolvimento do projeto de robótica,


pois é por meio dela que se pode entender o comportamento do robô e simular seu
funcionamento nas mais diversas situações e condições. Ainda, a modelagem também é
uma ferramenta muito importante para a criação de algoritmos de controle para o robô,
uma vez que ela fornece uma representação matemática precisa do seu comportamento,
permitindo a elaboração de simulações para validação dos algoritmos de controle e também
o planejamento de trajetórias para que o robô possa realizar as tarefas desejadas.
O desenvolvimento da modelagem de um robô está baseada principalmente em duas
áreas da física: a cinemática e a dinâmica. A cinemática é uma área da física que estuda
o movimento sem considerar as forças que o causam, dedicando-se à análise da posição,
velocidade e aceleração em relação ao tempo ou a outras variáveis. A cinemática, portanto,
se refere às propriedades geométricas e temporais do movimento das juntas do robô,
enquanto que a relação entre esses movimentos e as forças e torques que os geram é
explorada no campo da dinâmica (CRAIG, 2013).
Ao desenvolver as equações da cinemática do robô, obtém-se uma maneira de determinar
a posição do efetuador do robô com base na leitura das posições fornecidas pelos sensores de
posição acoplados nos motores que realizam o movimento das juntas. Além disso, também
tem-se condições de determinar matematicamente a velocidade e a aceleração das juntas
do robô.
De acordo com Craig (2013), um manipulador robótico consiste em elos que se conectam
através de juntas onde ocorre o movimento relativo entre os elos vizinhos. No caso do
presente projeto as juntas são do tipo rotacionais (ou de revolução), onde as variáveis que
relacionam o movimento entre os elos são denominadas como ângulos de junta. Assim
sendo, observa-se que a cinemática do manipulador pode ser abordada através de dois
pontos de vista distintos:

• através da formulação de equações matemáticas que, dado um conjunto de ângulos


de junta definidos, seja possível calcular a posição e a orientação da ferramenta do
robô em relação ao sistema de referência da base, o que se denomina cinemática
direta;

• através de um conjunto de equações que, dada a posição e a orientação desejada para


o efetuador do robô, seja possível calcular todos os possíveis conjuntos de ângulos de
junta que poderiam ser utilizados para atingir a posição e orientação desejada, o que
se define como cinemática inversa.

Na Figura 30 encontra-se exposto esquemático que permite observar os ângulos de


Capítulo 3. Cinemática Direta do Braço Robótico 43

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.

Figura 30 – Sistema de referência da ferramenta com relação ao sistema da base como


uma função das variáveis das juntas

Fonte: (CRAIG, 2013)

A descrição cinemática de um robô manipulador pode ser realizada por meio da


atribuição de quatro valores para cada elo do robô, sendo dois deles para descrever as
características próprias do elo e outros dois para descrever a maneira como ocorre a conexão
com o elo vizinho. A convenção utilizada para definir a relação cinemática entre os elos de
um robô manipulador por meio dessas quatro variáveis é conhecida como a notação de
Denavit-Hartenberg (CRAIG, 2013).
Essa notação foi proposta por Denavit e Hartenberg (1955) e, atualmente, é uma
convenção amplamente utilizada na área da robótica para descrever de forma sistemática
a geometria e cinemática de um robô manipulador, pois ao utilizar a notação de Denavit-
Hartenberg, é possível descrever a posição e orientação de cada elo em relação à base do
robô, bem como a relação cinemática entre os elos adjacentes.

3.1 Desenvolvimento dos Parâmetros de Denavit-Hartenberg e das Matri-


zes de Transformação Homogênea do Braço Robótico

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

1. Atribuição de um sistema de coordenadas: É estabelecido um sistema de coordenadas


para cada elo do robô manipulador. O sistema é fixado a junta de modo que o eixo
Zi seja localizado ao longo da linha de simetria da junta de rotação i. A origem do
sistema de referência i está localizada onde a perpendicular ai cruza o eixo da junta
i. Xi aponta ao longo de ai na direção da junta i para a junta i + 1. Na Figura 31
observa-se um exemplo de convenção de sistema de coordenadas proposto por Craig
(2013).

Figura 31 – Sistemas de referência de elos

Fonte: Craig (2013)

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.

- αi : Ângulo formado entre Z⃗i e Z


⃗ i+1 medido em torno de X
⃗ i . Para definir o sinal de
αi se usa a regra da mão direita, colocando o polegar na direção e sentido do eixo
X⃗ i e definindo o ângulo positivo quando o giro da mão ocorre na direção do eixo Z ⃗i
para Z ⃗ i+1 .

- di : Coordenada de X
⃗ i−1 em relação a X
⃗ i medida ao longo de Z
⃗i.

- θi : Ângulo em torno do eixo de rotação comum entre os sistemas de coordenadas i


e i + 1, medido em torno 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

Através dessa metodologia, os parâmetros de Denavit-Hartenberg são estabelecidos,


permitindo a descrição da cinemática do robô manipulador de forma sistemática e padro-
nizada. A Tabela 1 apresenta os parâmetros de Denavit-Hartenberg do braço robótico
desenvolvido no presente projeto.

Tabela 1 – Parâmetros de Denavit-Hartenberg.


i αi−1 ai−1 (mm) di (mm) θi
1 0◦ 0 230 θ1
2 90 ◦
0 0 θ2
3 0◦ 220 0 θ3
4 -90 ◦
0 230 θ4
5 90 ◦
0 0 θ5
6 0◦ 120 0 0◦
Fonte: elaborada pelo autor

A partir dos parâmetros expostos na Tabela 1 utilizou-se o software livre RobotAnalyzer


para realizar a montagem de um modelo virtual do braço robótico, visando a conferência
dos parâmetros definidos. Na Figura 32, pode-se visualizar o modelo gerado pelo software
a partir dos parâmetros de DH. Importante ressaltar que na Figura 32 não é possível
visualizar os eixos ⃗y2 e ⃗y5 , pois eles são sobrepostos pelos eixos ⃗z1 e ⃗z4 , respectivamente.

Figura 32 – Modelo esquemático do robô gerado a partir dos parâmetros de DH no software


RobotAnalyzer

Fonte: elaborada pelo autor


Capítulo 3. Cinemática Direta do Braço Robótico 46

Tendo os parâmetros de DH definidos e revisados, o próximo passo a ser realizado é a


definição das matrizes de transformação homogênias i−1 i T que definem as transformações
existentes entre os sistemas de referência i e i − 1. De acordo com Craig (2013), a forma
geral da matriz de transformação homogênea entre dois sistemas de referência (i − 1) e (i)
é definida como:

 

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

Portanto, após a definição de todas as matrizes de transformação homogênea do braço


robótico, as mesmas podem ser multiplicadas para encontrar a transformação isolada que
relaciona o sistema de referência do efetuador final com o sistema de referência 0, seguindo
a seguinte equação:

Ef etuador T =01 T ·12 T ·23 T ·34 T ·45 T ·5Ef etuador T (3.2)


0

Logo, com a modelagem da cinemática direta do manipulador através dos parâmetros


de DH, partiu-se para a definição das matrizes de transformação para cada segmento do
robô, aos moldes da Equação 3.1:
 

cθ1 −sθ1 0 0 
sθ c0◦
cθ c0◦
−s0 ◦
230 · s0 ◦

1 1
1T =  (3.3)
0
 
 

sθ1 s0 cθ1 s0 ◦
c0 ◦
230 · c0◦ 

 
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

se a matriz de transformação homogênea e comparou-se com a medição e orientação do


braço robótico no software Fusion 360 Student Version.
A primeira simulação teve como objetivo mostrar a parcela da matriz de transformação
homogênea responsável pela informação da orientação do sistema de coordenadas do
efetuador do braço robótico, estabelecendo então a variável de junta θ1 como 90 graus
geométricos, obtendo-se os seguintes resultados expostos na Equação 3.10 e na Figura 33.
 

0 0 1 0 
1 0 0 340
 
Ef etuador T =  (3.10)
0  
0 1 0 460

 
0 0 0 1

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

Fonte: elaborada pelo autor.

A segunda simulação, realizada com objetivo de exemplificar a parcela da posição


da origem do frame do efetuador na matriz de transformação homogênea, foi realizada
estabelecendo-se como variáveis das juntas 1 e 2, respectivamente, 45 e 30 graus, obtendo,
portanto, o resultado exposto na Equação 3.11 que foi confirmado através da medição da
localização do ponto no centro do efetuador final do robô no modelo montado no software
Capítulo 3. Cinemática Direta do Braço Robótico 49

Fusion 360 Student Version, conforme exposto na Figura 34.


 

0, 6124 −0, 3536 0, 7071 126
0, 6124 −0, 3536 −0, 7071 126
 
Ef etuador T =  (3.11)
0  
0, 5000 0, 8660 0 599

 
0 0 0 1

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

Fonte: elaborada pelo autor.


4 Testes Práticos do Braço Robótico

Para testar o funcionamento do braço robótico implementou-se um algoritmo de controle


em malha fechada, utilizando como variáveis controladas os ângulos das juntas do robô e
como sinal de controle o torque aplicado em cada atuador. O objetivo proposto nos testes
realizados era fazer com que os atuadores dos robôs movessem suas juntas até posições
previamente definidas, pois desta maneira é possível avaliar a resposta dos sensores de
posição (encoders) e atuadores (motores) utilizados no projeto.
Na Figura 35, observa-se o diagrama de blocos ilustrativo de um sistema de controle
de juntas independentes, que se movimentam de modo simultâneo, onde o algoritmo de
controle recebe o setpoint (θd ) com as informações quanto às posições de juntas desejadas,
calcula o sinal de controle (tensão aplicada ao motor) necessário para cada atuador (u)
e envia para o circuito de potência do braço robótico, que através dos seus encoders
realimenta o sistema com informações a respeito da posição atual das juntas (θ).

Figura 35 – Diagrama de blocos do sistema de controle de um robô

Fonte: elaborada pelo autor

4.1 Algoritmo de Controle

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

De acordo com Alves (2000), as ações básicas de controle apresentam a seguinte


classificação:

• 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.

• Proporcionais: nesse tipo de controlador, o sinal de controle aplicado no sistema é


proporcional ao valor do erro apresentado pelo processo a cada instante, sendo que a
aplicação deste tipo de controle gera um erro de regime permanente em sua resposta.
Nesse tipo de controlador é comum denominar o ganho proporcional ao erro de Kp .

• Integrais: os controladores denominados integrais aplicam no sinal de controle um


valor que se altera com variação proporcional à integral do erro de processo. A
ação integrativa tem como consequência a tendência de eliminar o erro de regime
permanente do sistema.

• Derivativos: nos controles derivativos, o valor da saída do controlador é proporcional a


derivada do erro do processo. Em outras palavras, o controlador atua somente quando
existe taxa de variação do erro do processo e, assim sendo, em regime permanente
tem efeito nulo.

Os controladores adotados na prática utilizam as ações básicas de controle citadas


anteriormente de maneira combinada, formando controladores chamados de Proporcionais
Derivativos - PD, Proporcionais Integrativos - PI ou, ainda, Proporcionais Integrativos
Derivativos - PID. Isso ocorre na busca por aliar as características de cada um dos
controladores básicos e atacar o erro de processo de modo que o mesmo seja completamente
anulado.
No teste do braço robótico utilizou-se um controlador PID, sendo este o controlador
mais utilizado na indústria, pois faz com que o sinal de erro seja atenuado pela ação
proporcional, eliminado pela ação integrativa e tem sua ação acelerada pela ação derivativa
(ALVES, 2000). O diagrama de blocos exposto na Figura 36 ilustra o funcionamento do
controlador PID.
Para implementação digital da parcela integrativa do controlador, utilizou-se o Mé-
todo de Tustin proposto por Franklin et al. (2002), que realiza o cálculo da integral a
cada amostra por meio da integração trapezoidal (cálculo da área da curva através de
aproximações trapezoidais) conforme Equação 4.1.

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

10 // Calculo do sinal de controle ( pwm ) com o PID

12 double pwm1 = Kp1 * error1 + Kixintegral1 + Kd * derivative1 ;

14 // Limita o valor do pwm dentro do intervalo adequado ( ajuste


conforme necessidade )
pwm1 = constrain ( pwm1 , -255 , 255) ;
16
// Aplica o sinal de controle ao motor 1
18 if ( pwm1 > 0) {
analogWrite ( M1_esquerda , pwm1 ) ;
20 analogWrite ( M1_direita , 0) ;
} else {
22 analogWrite ( M1_esquerda , 0) ;
analogWrite ( M1_direita , ( -1* pwm1 ) ) ;
24 }

Listagem 4.1 – Trecho do Algoritmo de controle PID.ino


Capítulo 4. Testes Práticos do Braço Robótico 53

Figura 36 – Diagrama de blocos de um controle PID

Fonte: elaborada pelo autor

4.2 Resultados Obtidos

4.2.1 Usando o Arduino Due como Microcontrolador do Braço Robótico


Nos testes iniciais optou-se pelo uso do Arduino Due como microcontrolador responsável
pela leitura e interpretação dos sinais gerados pelos encoders, calculando os sinais de saída
que deveriam ser aplicados em cada uma das juntas do robô. Todavia, observou-se que
com o algoritmo proposto o Arduino Due mostrou-se capaz de realizar a leitura dos sinais
dos encoders de maneira correta em apenas um dos sentidos de rotação.
Tendo em vista os testes realizados na seção 2.2.2, onde utilizando-se como microntro-
lador a ESP 32 Dev Kit se obteve sucesso na leitura dos sinais dos encoders, acredita-se
que a capacidade de processamento apresentada pelo Arduino Due não seja suficiente para
a execução das instruções necessárias em tempo hábil. Ao analisar o algoritmo proposto
para leitura dos encoders, observa-se que as principais instruções que devem ser realizadas
pelo microcontrolador são:

• digitalRead(): visando indentificar a borda de subida do canal A do encoder, bem


como, realizar a leitura do canal B, pois no momento da borda de subida do canal
A, se o canal B estiver em nível lógico alto, significa rotação em um sentido e, caso
contrário, significa que o motor está girando no sentido oposto;

• 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.

Tabela 2 – Específicações ESP32 Dev Kit x Arduino Due


SOC IC Part # ESP32 240mhz ATSAM3X8E
Amazon Board ESP32-devkit Arduino Due
Test Date 19.02.2017. 2016-12-1
F_CPU 240 MHz 84 MHz
1/F_CPU 0.0042 us 0.0119 us
nop 0.004 us 0.012 us
digitalRead 0.141 us 0.402 us
digitalWrite 0.109 us 1.567 us
pinMode 2.659 us 3.199 us
multiply byte 0.036 us 0.116 us
divide byte 0.049 us 0.114 us
add byte 0.032 us 0.104 us
multiply integer 0.053 us 0.083 us
divide integer 0.054 us 0.094 us
add integer 0.053 us 0.081 us
multiply long 0.054 us 0.082 us
divide long 0.049 us 0.069 us
add long 0.053 us 0.080 us
multiply float 0.054 us 0.902 us
divide float 0.224 us 4.944 us
add float 0.054 us 1.244 us
itoa() 0.704 us 1.504 us
ltoa() 0.699 us 3.194 us
random() 0.474 us 1.494 us
y |= (1<<x) (bv) 0.045 us -
bitSet() 0.045 us 0.071 us
analogRead() 5.649 us 4.494 us
analogWrite() PWM / 3.659 us
ESP32 DACWrite() 5.554 us -
ESP32 SigmaDelta 6.989 us -
delay_ms(1) 999.999 us 999.994 us
delay_ms(100) 100000.000 us 99999.992 us
delay_us(2) 2.007 us 2.001 us
delay_us(5) 4.999 us 5.004 us
delay_us(100) 99.999 us 100.244 us
Fonte: Lowrey (2016)

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.

4.2.2 Usando a ESP32 Dev Kit como Microcontrolador do Braço Robótico


Utilizando a ESP32 Dev Kit como microcontrolador responsável pela execução da
leitura e interpretação dos sinais gerados pelos encoders, bem como, executar os cálculos
e ações necessárias para executar de forma adequada o algoritmo proposto na seção 4.1
foram obtidos resultados satisfatórios conforme visto nos gráficos expostos nas Figuras 37
a 41, onde observa-se que os set points estabelecidos para juntas do robô foram atingidos
com margem de erro aceitável e a aplicação de algoritmos de controle se mostrou viável.
Sendo que os seguintes ganhos foram utilizados nos testes:

• Ganhos proporcionais: Kp1 = 5, 8, Kp2 = 7, 5, Kp3 = 7, 5, Kp4 = 7, 5, Kp5 = 7, 5;

• Ganhos integrativos: Ki1 = 0, 2, Ki2 = 0, 44, Ki3 = 0, 45, Ki4 = 0, 45, Ki5 = 0, 45;

• Ganho derivativo: Kd = 0, 035 (aplicado em todas as juntas).

Figura 37 – Gráfico da posição da junta da base do robô

Fonte: elaborada pelo autor


Capítulo 4. Testes Práticos do Braço Robótico 56

Figura 38 – Gráfico da posição da junta do ombro do robô

Fonte: elaborada pelo autor

Figura 39 – Gráfico da posição da junta do cotovelo do robô

Fonte: elaborada pelo autor


Capítulo 4. Testes Práticos do Braço Robótico 57

Figura 40 – Gráfico da posição da junta do punho do robô

Fonte: elaborada pelo autor

Figura 41 – Gráfico da posição da junta da garra do robô

Fonte: elaborada pelo autor


5 Conclusão

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

possibilitar a execução de um algoritmo de inicialização e posicionar de maneira


automática o braço na sua posição inicial;

• Modelar a cinemática inversa e o comportamento dinâmico do braço robótico para


possibilitar implementação e testes práticos de algoritmos de torque computado; e

• Desenvolver uma interface homem-máquina que facilite o teste e implementação de


leis de controle de maneira amigável.
60

Referências

ALIEXPRESS. JGA25-370 DC Motor De Desaceleração com Código De Medição


De Velocidade Do Codificador, Disco Permanente, 6V 12V 24V. 2023. <https:
//pt.aliexpress.com/item/4001314473291.html?spm=a2g0o.order_list.order_list_main.
15.21efcaa4eQOVJZ&gatewayAdapt=glo2bra>. Acessado em 05/01/2023. Citado na
página 27.

ALMEIDA, F. O que é Encoder? 2017. <https://materiais.hitecnologia.com.br/blog/


o-que-%C3%A9-encoder-para-que-serve-como-escolher-como-interfacear/>. Acessado em
20/04/2023. Citado na página 29.

ALVES, J. L. L. Instrumentação, Controle E Automação de Processos . [S.l.]: São Paulo:


Grupo Gen-LTC, 2000. Citado 2 vezes nas páginas 50 and 51.

CRAIG, J. J. Robótica. [S.l.]: Pearson Educacion, 2013. Citado 6 vezes nas páginas 12,
15, 42, 43, 44, and 46.

DENAVIT, J.; HARTENBERG, R. S. A kinematic notation for lower-pair mechanisms


based on matrices. ASME - Journal of Applied Mechanics. v. 22, n. 2, p. 215-221, 1955.
Citado na página 43.

DORF, R. C.; BISHOP, R. H. Sistemas de controle modernos, 12ª. Edição, Editora LTC,
2012. Citado na página 51.

ELETROGATE. Guia Definitivo de uso da Ponte H L298N. 2020. <https:


//blog.eletrogate.com/guia-definitivo-de-uso-da-ponte-h-l298n/>. Acessado em
25/04/2023. Citado na página 33.

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.

INDUSTRIES, S. C. Lm2596 3.0 a, step-down switching regulator. 2008. Citado na


página 38.

LEWIS, F. L.; DAWSON, D. M.; ABDALLAH, C. T. Robot manipulator control: theory


and practice. [S.l.]: New York: CRC Press, 2003. Citado na página 15.

LOWREY, C. Which is the fastest Arduino – ESP32, ESP8266, Arduino Uno,


Arduino 101 +Others Speed Test Comparison Chart. 2016. <https://hilo90mhz.com/
arduino-esp32-esp8266-101-speed-test-comparison-chart/>. Acessado em 08/06/2023.
Citado na página 54.

MERCADOLIVRE. Fonte Chaveada Estabilizada 24v


2a 48w. 2023. <https://produto.mercadolivre.com.br/
MLB-2810283000-fonte-chaveada-estabilizada-24v-2a-48w-led-som-cftv-bivolt-_
JM?matt_tool=40343894&matt_word=&matt_source=google&matt_campaign_
id=14303413655&matt_ad_group_id=133855953276&matt_match_type=&matt_
network=g&matt_device=c&matt_creative=584156655519&matt_keyword=&matt_
ad_position=&matt_ad_type=pla&matt_merchant_id=109739114&matt_product_
id=MLB2810283000&matt_product_partition_id=1816238256222&matt_target_id=
aud-2009166904988:pla-1816238256222&gclid=Cj0KCQjw1rqkBhCTARIsAAHz7K1o9f_
Referências 61

wevGPu59FmhDi9R9n8XHnO8IFU-KU__VJ8W4Tg6BikiIpK7caAmhWEALw_wcB>.
Acessado em 18/03/2023. Citado na página 37.

NEIS, P. Transdutores de Corrente por Efeito Hall. 2000. <http://www.eletrica.ufpr.br/


edu/Sensores/2000/neis/>. Acessado em 20/04/2023. Citado na página 29.

PINEDA, D. Mercado de robótica cresce e alerta sobre a escassez de mão de obra


qualificada no país. [S.l.]: In: Eletronor, 2018. <https://www.eletronor.com/blog/
mercado-de-robotica-cresce-e-alerta-sobre-a-escassez-de-mao-de-obra-qualificada-no-pais>.
Acessado em 18/03/2023. Citado na página 14.

ROBLA-GÓMEZ, S. et al. Working together: A review on safe human-robot collaboration


in industrial environments. IEEE Access, v. 5, p. 26754–26773, 2017. Citado 2 vezes nas
páginas 12 and 14.

ROBOTS, B. U. Robótica no Brasil: conheça a história e o cenário atual do


setor no país. 2023. <https://www.universal-robots.com/br/blog/rob%C3%
B3tica-no-brasil-conheca-a-hist%C3%B3ria-e-o-cen%C3%A1rio-atual-do-setor-no-pa%
C3%ADs/>. Acessado em 15/04/2023. Citado na página 14.

SCIAVICCO, L.; SICILIANO, B. Modelling and control of robot manipulators. [S.l.]:


Springer Science & Business Media, 2001. Citado na página 15.

TECHNOLOGIES, B. BCN3D-Moveo USER MANUAL. 2016. <https://github.com/


BCN3D/BCN3D-Moveo/tree/master/USER%20MANUAL>. Acessado em 15/12/2022.
Citado na página 17.

TILLEY, J. Automation, robotics, and the factory of the future.


2017. <https://www.mckinsey.com/capabilities/operations/our-insights/
automation-robotics-and-the-factory-of-the-future#/>. Acessado em 05/03/2023. Citado
na página 13.
Apêndices
63

APÊNDICE A – Algoritmo Octave para Multiplicação das


Matrizes de Transformação Homogênea

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;];

19 T2_3 = [ cos ( theta_3 ) - sin ( theta_3 ) 0 0;


sin ( theta_3 ) * cos (0) cos ( theta_3 ) * cos (0) - sin (0) 0;
21 sin ( theta_3 ) * sin (0) cos ( theta_3 ) * sin (0) cos (0) 0;
0 0 0 1;];
23
T3_4 = [ cos ( theta_4 ) - sin ( theta_4 ) 0 220;
25 sin ( theta_4 ) * cos ( - pi /2) cos ( theta_4 ) * cos ( - pi /2) - sin ( - pi /2) - sin ( - pi
/2) *230;
sin ( theta_4 ) * sin ( - pi /2) cos ( theta_4 ) * sin ( - pi /2) 0 0;
27 0 0 0 1;];

29 T4_5 = [ cos ( theta_5 ) - sin ( theta_5 ) 0 0;


sin ( theta_5 ) * cos ( pi /2) cos ( theta_5 ) * cos ( pi /2) - sin ( pi /2) 0;
31 sin ( theta_5 ) * sin ( pi /2) cos ( theta_5 ) * sin ( pi /2) 0 0;
0 0 0 1;];
33 T5E = [1 0 0 120;
0 1 0 0;
35 0 0 1 0;
0 0 0 1;];
37 % multiplica as matrizes , obtendo a matriz de transformacao do efetuador
para base
T = T0_1 * T1_2 * T2_3 * T3_4 * T4_5 * T5E
64

APÊNDICE B – Algoritmo de controle PID

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

22 // PINOS DOS ENCODERS ( CANAL A e CANAL B ) --> PINOS ENTRADA COM


INTERRUPCAO EXTERNA

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

44 // variaveis para salvar os incrementos dos encoders dos motores ,


convertido em angulos
double pos1_ang =0 , pos2_ang =0 , pos3_ang =0 , pos4_ang =0 , pos5_ang =0 ,
pos6_ang =0;
46
// GANHOS PRO CONTROLADOR
48 double Kp1 =5.8 , Kp2 =7.5 , Kp3 =7.5 , Kp4 =7.5 , Kp5 =7.5; // Ganho
proporcional // tava 5 ,5
double Ki1 =0.2 , Ki2 =0.44 , Ki3 =0.45 , Ki4 =0.45 , Ki5 =0.45; // Ganho
integral
50 double Kd = 0.035; // Ganho derivativo

52 double error1 = 0 , error2 = 0 , error3 = 0 , error4 = 0 , error5 = 0 ,


error6 = 0;
double pwm1 = 0 , pwm2 = 0 , pwm3 = 0 , pwm4 = 0 , pwm5 = 0;
54

56 double lastError1 = 0; // Ultimo erro do motor 1


double integral1 = 0; // Acumulador do erro do motor 1
58
double lastError2 = 0; // Ultimo erro do motor 2
60 double integral2 = 0; // Acumulador do erro do motor 2

62 double lastError3 = 0; // Ultimo erro do motor 3


double integral3 = 0; // Acumulador do erro do motor 3
64
double lastError4 = 0; // Ultimo erro do motor 4
66 double integral4 = 0; // Acumulador do erro do motor 4

68 double lastError5 = 0; // Ultimo erro do motor 5


double integral5 = 0; // Acumulador do erro do motor 5
70
double lastError6 = 0; // Ultimo erro do motor 6
72 double integral6 = 0; // Acumulador do erro do motor 6

74 double derivative1 =0 , derivative2 =0 , derivative3 =0 , derivative4 =0 ,


derivative5 =0;

76 double integrador1 =0 , integrador2 =0 , integrador3 =0 , integrador4 =0 ,


integrador5 =0;
// POSICAO DESEJADA PARA OS MOTORES ( M1 = MOTOR DA BASE , M2 = MOTOR JUNTA
1 , ...)
78 double setpoint1 = 15; // Posicao desejada para o motor 1
double setpoint2 = 15; // Posicao desejada para o motor 2
80 double setpoint3 = 15; // Posicao desejada para o motor 3
double setpoint4 = 10; // Posicao desejada para o motor 4
82 double setpoint5 = 12; // Posicao desejada para o motor 5
// double setpoint6 = 5; // Posicao desejada para o motor 6
84
APÊNDICE B. Algoritmo de controle PID 66

hw_timer_t * timer = NULL ; // cria um ponteiro para o timer do tipo


hw_timer_t
86 double t_amostragem = 0.01; // ms ?
int i =0 , c =0;;
88
void setup () {
90 // velocidade da serial
Serial . begin (9600) ;
92
// pinos de entrada digital dos encoders
94 pinMode ( ENC1_A , INPUT ) ;
pinMode ( ENC1_B , INPUT ) ;
96
pinMode ( ENC2_A , INPUT ) ;
98 pinMode ( ENC2_B , INPUT ) ;

100 pinMode ( ENC3_A , INPUT ) ;


pinMode ( ENC3_B , INPUT ) ;
102
pinMode ( ENC4_A , INPUT ) ;
104 pinMode ( ENC4_B , INPUT ) ;

106 pinMode ( ENC5_A , INPUT ) ;


pinMode ( ENC5_B , INPUT ) ;
108
pinMode ( botao_modo , INPUT ) ;
110 // pinMode ( ENC6_B , INPUT ) ;

112 // pinos de saida PWM para os motores


pinMode ( M1_esquerda , OUTPUT ) ;
114 pinMode ( M1_direita , OUTPUT ) ;

116 pinMode ( M2_esquerda , OUTPUT ) ;


pinMode ( M2_direita , OUTPUT ) ;
118
pinMode ( M3_esquerda , OUTPUT ) ;
120 pinMode ( M3_direita , OUTPUT ) ;

122 pinMode ( M4_esquerda , OUTPUT ) ;


pinMode ( M4_direita , OUTPUT ) ;
124
pinMode ( M5_esquerda , OUTPUT ) ;
126 pinMode ( M5_direita , OUTPUT ) ;

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

132 attachInterrupt ( ENC3_A , read_encoder3 , RISING ) ;


attachInterrupt ( ENC4_A , read_encoder4 , RISING ) ;
134 attachInterrupt ( ENC5_A , read_encoder5 , RISING ) ;
// attachInterrupt ( ENC6_A , read_encoder6 , RISING ) ;
136
// configurando o timer para interrupcao
138 timer = timerBegin (0 , 80 , true ) ; // timerBegin ( n do timer usado (0 a
3) , prescaler , sentido da contagem )
// a ESP tem clock 80 Mhz , utilizando 80 no prescaler , o clock do
contador sera de 1 MHz ( incrementa a cada 1 us )
140 t i m e r A t t a c h I n t e r r u p t ( timer , & cb_timer , true ) ; // chama a funcao da
interrupcao sempre que a interrupcao disparar

142 timerAlarmWrite ( timer , 500 , true ) ; // define o tempo de amostragem .

144 timerAlarmEnable ( timer ) ; // habilita o timer

146 }

148 void loop () {


/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
150 * LOGICA PARA CONVERTER OS PASSOS INCREMENTAIS DOS ENCODERS EM
* VALORES CORRESPONDENTES AOS ANGULOS DAS JUNTAS
152 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
if ( i ==20) {
154 pos1_ang = pos1 * 0.065454 * 0.106;
pos2_ang = pos2 * 0.065454 * 0.14;
156 pos3_ang = pos3 * 0.065454 * 0.17;
pos4_ang = pos4 * 0.065454;
158 pos5_ang = pos5 * 0.065454 * 0.24;
// pos6_ang = pos6 * 0.065454 * 0.16;
160 /*
***********************************************************************

* APLICA O PID e JOGA NAS SAIDAS PARA A PONTE H


162 */

164 // Logica de controle PID para o motor 1 ( motor da base )


error1 = setpoint1 - pos1_ang ;
166 // error1 = setpoint1 - pos1_ang ; // Calcula o erro atual
Kixintegral1 += Ki1 *( lastError1 + error1 ) *( t_amostragem /2) ;
// Acumula o erro
168 Kixintegral1 = constrain ( Kixintegral1 , -255 , 255) ;

170 derivative1 = ( error1 - lastError1 ) / t_amostragem ; // Calcula a


derivada do erro
lastError1 = error1 ; // Atualiza o ultimo erro
172
// Calculo do sinal de controle ( pwm ) com o PID
APÊNDICE B. Algoritmo de controle PID 68

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) ;

180 // Aplica o sinal de controle ao motor 1


if ( pwm1 > 0) {
182 analogWrite ( M1_esquerda , pwm1 ) ;
analogWrite ( M1_direita , 0) ;
184 } else {
analogWrite ( M1_esquerda , 0) ;
186 analogWrite ( M1_direita , ( -1* pwm1 ) ) ;
}
188

190 // ... Controle PID para o motor 2 ( motor da junta 1)


error2 = setpoint2 - pos2_ang ; // Calcula o erro atual
192 Kixintegral2 += Ki2 *( lastError2 + error2 ) *( t_amostragem /2) ;
// Acumula o erro
Kixintegral2 = constrain ( Kixintegral2 , -255 , 255) ;
194 derivative2 = ( error2 - lastError2 ) / t_amostragem ; // Calcula a
derivada do erro
lastError2 = error2 ; // Atualiza o ultimo erro
196
// Calculo do sinal de controle ( pwm ) com o PID
198 double pwm2 = Kp2 * error2 + Kixintegral2 + Kd * derivative2 ;

200 // Limita o valor do pwm dentro do intervalo adequado ( ajuste


conforme necessidade )
pwm2 = constrain ( pwm2 , -255 , 255) ;
202 // Aplica o sinal de controle ao motor 1
if ( pwm2 > 0) {
204 analogWrite ( M2_esquerda , pwm2 ) ;
analogWrite ( M2_direita , 0) ;
206 } else {
analogWrite ( M2_esquerda , 0) ;
208 analogWrite ( M2_direita , ( -1* pwm2 ) ) ;
}
210
// ... Controle PID para o motor 3
212
error3 = setpoint3 - pos3_ang ; // Calcula o erro atual
214 Kixintegral3 += Ki3 *( lastError3 + error3 ) *( t_amostragem /2) ;
// Acumula o erro
Kixintegral3 = constrain ( Kixintegral3 , -255 , 255) ;
216 derivative3 = ( error3 - lastError3 ) / t_amostragem ; // Calcula a
derivada do erro
APÊNDICE B. Algoritmo de controle PID 69

lastError3 = error3 ; // Atualiza o ultimo erro


218 // Calculo do sinal de controle ( pwm ) com o PID
double pwm3 = Kp3 * error3 + Kixintegral3 + Kd * derivative3 ;
220
// Limita o valor do pwm dentro do intervalo adequado ( ajuste
conforme necessidade )
222 pwm3 = constrain ( pwm3 , -255 , 255) ;
// Aplica o sinal de controle ao motor 1
224 if ( pwm3 > 0) {
analogWrite ( M3_esquerda , pwm3 ) ;
226 analogWrite ( M3_direita , 0) ;
} else {
228 analogWrite ( M3_esquerda , 0) ;
analogWrite ( M3_direita , ( -1* pwm3 ) ) ;
230 }

232 // ... Controle PID para o motor 4


error4 = setpoint4 - pos4_ang ; // Calcula o erro atual
234 Kixintegral4 += Ki4 *( lastError4 + error4 ) *( t_amostragem /2) ;
// Acumula o erro
Kixintegral4 = constrain ( Kixintegral4 , -255 , 255) ;
236 derivative4 = ( error4 - lastError4 ) / t_amostragem ; // Calcula a
derivada do erro
lastError4 = error4 ; // Atualiza o ultimo erro
238
// Calculo do sinal de controle ( pwm ) com o PID
240 double pwm4 = Kp4 * error4 + Kixintegral4 + Kd * derivative4 ;
// Limita o valor do pwm dentro do intervalo adequado ( ajuste
conforme necessidade )
242 pwm4 = constrain ( pwm4 , -255 , 255) ;
// Aplica o sinal de controle ao motor 1
244 if ( pwm4 > 0) {
analogWrite ( M4_esquerda , pwm4 ) ;
246 analogWrite ( M4_direita , 0) ;
} else {
248 analogWrite ( M4_esquerda , 0) ;
analogWrite ( M4_direita , abs ( pwm4 ) ) ;
250 }

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) ;

258 derivative5 = ( error5 - lastError5 ) / t_amostragem ; // Calcula a


derivada do erro
lastError5 = error5 ; // Atualiza o ultimo erro
APÊNDICE B. Algoritmo de controle PID 70

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

296 // FUNCOES DE LEITURA DOS ENCODERS


void read_encoder1 () {
298 if ( digitalRead ( ENC1_B ) > 0)
pos1 ++;
300 else
pos1 - -;
302 }

304 void read_encoder2 () {


if ( digitalRead ( ENC2_B ) > 0)
APÊNDICE B. Algoritmo de controle PID 71

306 pos2 ++;


else
308 pos2 - -;
}
310
void read_encoder3 () {
312 if ( digitalRead ( ENC3_B ) > 0)
pos3 ++;
314 else
pos3 - -;
316 }

318 void read_encoder4 () {


if ( digitalRead ( ENC4_B ) > 0)
320 pos4 ++;
else
322 pos4 - -;
}
324
void read_encoder5 () {
326 if ( digitalRead ( ENC5_B ) > 0)
pos5 ++;
328 else
pos5 - -;
330 }

Listagem B.1 – Algoritmo de controle PID.ino


72

APÊNDICE C – Lista de Peças e Componentes do Braço


Robótico
Item Quantidade
ESP Dev Module V1 1
Ponte H 3
Fonte 24V 3A 1
RAMPS V1.4 1
Regulador de tensão 24-3V 1
Motor JGA25-370 12 rpm 24 V 6
Rolamento 608ZZ 8mm x 22mm x 7mm 10
Rolamento 625ZZ 5mm x 16mm x 5mm 8
Rolamento 624ZZ 4mm x 13mm x 5mm 9
Rolamento 623ZZ 3mm x 10mm x 4mm 3
Cabo para Fonte de Alimentação 1
Rolamento 5mm x 8mm x 10mm 8
Rolamento 8mm x 12mm x 20mm 2
Correia Dentada T5, 16mm 1,8 m
Parafuso: Dimensão A: M-3 Dimensão B: 10 mm 30
Parafuso: Dimensão A: M-3 Dimensão B: 12 mm 6
Parafuso: Dimensão A: M-3 Dimensão B: 16 mm 13
Parafuso: Dimensão A: M-3 Dimensão B: 20 mm 4
Parafuso: Dimensão A: M-3 Dimensão B: 25 mm 5
Parafuso: Dimensão A: M-3 Dimensão B: 30 mm 2
Parafuso: Dimensão A: M-3 Dimensão B: 40 mm 7
Parafuso: Dimensão A: M-4 Dimensão B: 12 mm 2
Parafuso: Dimensão A: M-4 Dimensão B: 10 mm 2
Parafuso: Dimensão A: M-4 Dimensão B: 16 mm 8
Parafuso: Dimensão A: M-4 Dimensão B: 40 mm 4
Parafuso: Dimensão A: M-4 Dimensão B: 45 mm 6
Parafuso: Dimensão A: M-4 Dimensão B: 60 mm 4
Parafuso: Dimensão A: M-5 Dimensão B: 14 mm 120
Parafuso: Dimensão A: M-5 Dimensão B: 20 mm 8
Parafuso: Dimensão A: M-8 Dimensão B: 65 mm 1
Parafuso: Dimensão A: M-4 Dimensão B: 25 mm 4
Porca: Dimensão A: M-3 30
Porca: Dimensão A: M-4 4
Porca auto travante: Dimensão A: M-4 18
Porca auto travante: Dimensão A: M-5 16
Fixação Porca auto travante: Dimensão A: M-8 2
Parafuso: Dimensão A: M-4 Dimensão B: 20 3
mm
Parafuso: Dimensão A: M-3 Dimensão B: 8 4
mm
Parafuso: Dimensão A: M-4 Dimensão B: 30 8
mm
Parafuso: Dimensão A: M-3 Dimensão B: 35 4
mm
Arruela M-3 10
Peças Nome do arquivo Quantidade

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

ANEXO A – Diagrama esquemático do microcontrolador


ESP32 Dev Kit

Fonte: https://lobodarobotica.com/blog/esp32-pinout/
77

ANEXO B – Características Técnicas dos Motores do Braço


Robótico
DC12V 25GA370

Você também pode gostar