Você está na página 1de 72

PEDRO PAULO VATRAZ

DESENVOLVIMENTO DE UM ROBÔ
SEGUIDOR DE LINHA UTILIZANDO UM
MICROCONTROLADOR STM32

Joinville
2021
PEDRO PAULO VATRAZ

DESENVOLVIMENTO DE UM ROBÔ SEGUIDOR DE


LINHA UTILIZANDO UM MICROCONTROLADOR
STM32

Trabalho de Conclusão de Curso apresentado


no curso de Bacharelado em Engenharia de
Software do Centro Universitário Católica de
Santa Catarina como requisito parcial para
obtenção do certificado do curso.

Católica de SC – Joinville – Programa de Graduação

Orientador: MSc. Manfred Heil Junior


Coorientador: MSc. Rodrigo Mello Habib Gregori

Joinville
2021
PEDRO PAULO VATRAZ
DESENVOLVIMENTO DE UM ROBÔ SEGUIDOR DE LINHA UTILI-
ZANDO UM MICROCONTROLADOR STM32/ PEDRO PAULO VATRAZ. –
Joinville, 2021- 71 p. : il. (algumas color.) ; 30 cm.

Orientador: MSc. Manfred Heil Junior

Coorientador: MSc. Rodrigo Mello Habib Gregori

Professor: MSc. Diogo Vinicius Winck

Trabalho de Conclusão de Curso – Católica de SC – Joinville – Programa de


Graduação, 2021.
1. Robô 2. Seguidor de Linha 3. Microcontrolador 4. STM32 5.
Performance 6. Grupo de Robótica I. MSc. Manfred Heil Junior MSc.
Rodrigo Mello Habib Gregori. II. Centro Universitário Católica de
SC – Joinville. III. DESENVOLVIMENTO DE UM ROBÔ SEGUI-
DOR DE LINHA UTILIZANDO UM MICROCONTROLADOR STM32.
CDU 02:141:005.7
PEDRO PAULO VATRAZ

DESENVOLVIMENTO DE UM ROBÔ SEGUIDOR DE


LINHA UTILIZANDO UM MICROCONTROLADOR
STM32

Trabalho de Conclusão de Curso apresentado


no curso de Bacharelado em Engenharia de
Software do Centro Universitário Católica de
Santa Catarina como requisito parcial para
obtenção do certificado do curso.

MSc. Manfred Heil Junior


Orientador

MSc. Rodrigo Mello Habib Gregori


Coorientador

MSc. Diogo Vinicius Winck


Professor

Joinville
2021
Dedico este Trabalho de Conclusão de Curso aos meus familiares e a minha namorada,
pois serviram de pilar para que o desenvolvimento deste trabalho fosse possível. Agradeço
também a motivação e apoio que me proporcionaram.
Agradecimentos

Primeiramente, agradeço a Deus, pois foi Ele que se fez presente em todos os meus
dias, o qual me deu estrutura para me manter firme, e me permitiu enxergar aquilo que
estava além dos meus olhos. Agradeço também a minha família e namorada por todo
apoio, e ao meu orientador MSc. Manfred Heil Junior, ao meu coorientador MSc. Rodrigo
Mello Habib Gregori e ao professor MSc. Diogo Vinicius Winck.
“Faça ou não Faça. Tentativa não há.“
Yoda
Resumo
Os robôs seguidores de linha contam com diversos componentes eletrônicos funcio-
nando simultaneamente para atingir o objetivo do robô. Para a construção de um
robô seguidor de linha, seguindo os requisitos de competições oficiais, alguns requi-
sitos devem ser seguidos: as dimensões do robô não devem ultrapassar um limite
solicitado, alguns componentes não podem ser utilizados etc. Visando o avanço no
desenvolvimento de robôs na categoria seguidor de linha, o trabalho busca utilizar
um STM32 como microcontrolador em um robô seguidor de linha. Apesar de ser um
grande desafio, o projeto foi colocado em pratica. Com a utilização do microcontro-
lador STM32 tornou-se possível a utilização de mais componentes eletrônicos que
não pudera ser utilizado com o uso de outros microcontroladores frequentemente
utilizados na categoria de robôs seguidores de linha, além do mais o robô desenvol-
vido pode se tornar uma ferramenta de aprendizado para os acadêmicos, também
podendo ser utilizado em competições pelo grupo de robótica, tendo também como
outra opção de microcontrolador em projetos futuros.

PALAVRAS-CHAVES: Robô, Seguidor de Linha, Microcontrolador, STM32,


Performance, Grupo de Robótica.
Lista de ilustrações

Figura 1 – Pinagem STM32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27


Figura 2 – Encoder Magnético de Efeito Hall . . . . . . . . . . . . . . . . . . . . . 29

Figura 3 – Diagrama de caso de uso . . . . . . . . . . . . . . . . . . . . . . . . . . 33


Figura 4 – Diagrama de instalação . . . . . . . . . . . . . . . . . . . . . . . . . . 35

Figura 5 – Pista para robôs seguidores de linha . . . . . . . . . . . . . . . . . . . 37


Figura 6 – Tela de configuração da URL . . . . . . . . . . . . . . . . . . . . . . . 38
Figura 7 – Tela de instalação de pacotes . . . . . . . . . . . . . . . . . . . . . . . 39
Figura 8 – Arquivo .zip com binários disponível no GitHub . . . . . . . . . . . . . 39
Figura 9 – Conversor USB serial posicionado para utilizar tensão de 5 V . . . . . 40
Figura 10 – Conexão microcontrolador ao conversor USB serial . . . . . . . . . . . 40
Figura 11 – Microcontrolador STM32 no modo boot . . . . . . . . . . . . . . . . . . 41
Figura 12 – STM32CubeProgrammer tela de configuração . . . . . . . . . . . . . . 41
Figura 13 – STM32CubeProgrammer tela de configuração . . . . . . . . . . . . . . 42
Figura 14 – Configurações da IDE para uso do microcontrolador STM32 . . . . . . 42
Figura 15 – Ponte H . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Figura 16 – Driver de motor TB6612FNG . . . . . . . . . . . . . . . . . . . . . . . 44
Figura 17 – Pinagem TB6612FNG . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Figura 18 – Sensor de refletância QTR-MD-01A . . . . . . . . . . . . . . . . . . . . 46
Figura 19 – Sensor de refletância QTR-MD-08A . . . . . . . . . . . . . . . . . . . . 47
Figura 20 – Pinagem do sensor de refletância QTR-MD-08A . . . . . . . . . . . . . 48
Figura 21 – Pinagem do sensor de refletância QTR-MD-08A . . . . . . . . . . . . . 48
Figura 22 – Encoder Magnético de Efeito Hall . . . . . . . . . . . . . . . . . . . . . 51
Figura 23 – Encoder Acoplado ao Motor . . . . . . . . . . . . . . . . . . . . . . . . 51
Figura 24 – Pinagem Encoder Magnético . . . . . . . . . . . . . . . . . . . . . . . . 52
Figura 25 – Efeito Hall em um Semicondutor . . . . . . . . . . . . . . . . . . . . . 52
Figura 26 – Motor de Corrente Contínua com Eixo Extendido . . . . . . . . . . . . 55
Figura 27 – Bateria de Polímero de Lítio . . . . . . . . . . . . . . . . . . . . . . . . 56
Figura 28 – Estrutura principal do robô seguidor de linha . . . . . . . . . . . . . . 57
Figura 29 – Suporte para fixação do sensor de refletância . . . . . . . . . . . . . . . 58
Figura 30 – Estrutura completa com as peças em seus respectivos lugares . . . . . . 58
Figura 31 – Face superior da PCB . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Figura 32 – Face inferior da PCB . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Figura 33 – Face superior da PCB, após ser fabricada. . . . . . . . . . . . . . . . . 61
Figura 34 – Face inferior da PCB, após ser fabricada. . . . . . . . . . . . . . . . . . 61
Figura 35 – Suporte do motor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Figura 36 – Roda de borracha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Figura 37 – Robô seguidor de linha desenvolvido no trabalho . . . . . . . . . . . . 63

Figura 38 – Resultados obtidos com a execução do algoritmo no microcontrolador


STM32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Figura 39 – Resultados obtidos com a execução do algoritmo no microcontrolador
ATmega328 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Lista de códigos fonte

Código Fonte 1 – Código fonte do driver de motor, que liga dois motores no sentido
horário e anti-horário. . . . . . . . . . . . . . . . . . . . . . . . . 44
Código Fonte 2 – Código fonte que lê os valores recebidos pelo sensor de refletância
QTR-MD-01A . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Código Fonte 3 – Código fonte que lê os valores recebidos por cada sensor do sen-
sor de refletância QTR-MD-08A . . . . . . . . . . . . . . . . . . 49
Código Fonte 4 – Código fonte do encoder, que faz a leitura do posicionamento da
roda individualmente para cada um dos motores. . . . . . . . . 52
Lista de tabelas

Tabela 1 – Requisitos funcionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32


Tabela 2 – Requisitos não funcionais . . . . . . . . . . . . . . . . . . . . . . . . . 32
Tabela 3 – Detalhamento caso de uso . . . . . . . . . . . . . . . . . . . . . . . . . 34

Tabela 4 – Comparativo técnico entre os microcontroladores . . . . . . . . . . . . 64


Tabela 5 – Comparativo dos resultados obtidos em microsegundos através da exe-
cução do algoritmo de teste de performance aplicado aos microcontro-
ladores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Lista de abreviaturas e siglas

ADC Analog to Digital Converter 1

CNC Controle Numérico Computadorizado 1

CPU Central Processing Unit 1

FDD Feature-driven development 1

FPGA Field Programmable Gate Array 1

GPIO General Purpose Input/Output 1

IDE Integrated Development Environment 1

LED Light Emitting Diode 1

MIMO Multiple Input Multiple Output 1

MISO Multiple Input Single Output 1

PAC Projeto de Aprendizagem Colaborativa 1

PCB Printed Circuit Board 1

PD Proporcional Derivativo 1

PID Proporcional Integral Derivativo 1

PWM Pulse Width Modulation 1

RGB Red, Green, Blue 1

RISC Reduced Instruction Set Computer 1

RPM Rotações por Minuto 1

SA Simulated Annealing 1

SO Sistema Operacional 1

SRAM Static Random Access Memory 1

TCC Trabalho de Conclusão de Curso 1


URL Uniform Resource Locator 1

USB Universal Serial Bus 1


SUMÁRIO

Lista de abreviaturas e siglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.1 PROBLEMATIZAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.2 JUSTIFICATIVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3 OBJETIVO GERAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.4 OBJETIVOS ESPECÍFICOS . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.5 METODOLOGIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2 FUNDAMENTAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.1 TRABALHOS RELACIONADOS . . . . . . . . . . . . . . . . . . . . . . . 20
2.1.1 Algoritmo de controle PID . . . . . . . . . . . . . . . . . . . . . . . 20
2.1.2 Calibração dos sensores de refletância . . . . . . . . . . . . . . . . . 21
2.1.3 Algoritmo de detecção de linha . . . . . . . . . . . . . . . . . . . . 21
2.1.4 Controle Fuzzy para robô seguidor de linha . . . . . . . . . . . . . . 22
2.1.5 Seguidor de linha utilizando algoritmos de aprendizado por reforço . 22
2.1.6 Planejamento de caminho de robô seguidor de linha . . . . . . . . . 23
2.1.7 Projeto e implementação de um robô seguidor de linha de compe-
tição utilizando Field Programmable Gate Array (FPGA) . . . . . . 23
2.1.8 Projeto e implementação de um robô autônomo seguidor de linha
baseado em visão computacional . . . . . . . . . . . . . . . . . . . . 24
2.2 PILHA TECNOLÓGICA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2.1 Ferramentas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2.1.1 Tinkercad . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2.1.2 EasyEDA . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2.1.3 Arduino IDE . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2.1.4 GIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.2.1.5 Trello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.2.2 Tecnologias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.2.2.1 STM32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2.2.2 Sensor de Refletância . . . . . . . . . . . . . . . . . . . . . 28
2.2.2.3 Encoder Magnético de Efeito Hall . . . . . . . . . . . . . . 28

3 PROJETO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.1 ESCOPO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2 PACOTES DE PROJETO . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.1 Pacote 1 - Calibrar Sensores . . . . . . . . . . . . . . . . . . . . . . 31
3.2.2 Pacote 2 - Mapear Percurso . . . . . . . . . . . . . . . . . . . . . . 31
3.2.3 Pacote 3 - Calcular Percurso . . . . . . . . . . . . . . . . . . . . . . 31
3.3 REQUISITOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3.1 Requisitos funcionais . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3.2 Requisitos não funcionais . . . . . . . . . . . . . . . . . . . . . . . . 32
3.4 DIAGRAMA DE CASO DE USO . . . . . . . . . . . . . . . . . . . . . . . 33
3.5 DIAGRAMA DE INSTALAÇÃO . . . . . . . . . . . . . . . . . . . . . . . 34
3.6 CONSIDERAÇÕES FINAIS . . . . . . . . . . . . . . . . . . . . . . . . . . 35

4 DESENVOLVIMENTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.1 CONSTRUÇÃO DA PISTA PARA O ROBÔ . . . . . . . . . . . . . . . . 36
4.2 COMPONENTES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.2.1 STM32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.2.2 Driver de Motor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.2.3 Sensores de Refletância . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.2.4 Encoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.2.5 Motor de Corrente Contínua . . . . . . . . . . . . . . . . . . . . . . 54
4.2.6 Fonte de Alimentação . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.3 CONSTRUÇÃO FÍSICA DO ROBÔ . . . . . . . . . . . . . . . . . . . . . 57
4.3.1 Chassi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.3.2 PCB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.3.3 Conexão dos Componentes . . . . . . . . . . . . . . . . . . . . . . . 60

5 RESULTADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

6 CONCLUSÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
6.1 TRABALHOS FUTUROS . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
16

1 INTRODUÇÃO

Este trabalho consiste na criação de um novo robô seguidor de linha utilizando um


microcontrolador STM32. Com o intuito de ser utilizado em projetos da faculdade, como
no Projeto de Aprendizagem Colaborativa (PAC) que utiliza projetos de forma lúdica para
abrangir várias matérias e assuntos em um mesmo projeto e também poderá ser utilizado
pela equipe de robótica Wickedbotz (WICKEDBOTZ, 2020) em futuras competições.
Atualmente, a aplicação da robótica vem aumentando constantemente graças ao
desenvolvimento de novas tecnologias em engenharia de software, elétrica e mecânica.
Robôs industriais estão atuando em várias áreas nas indústrias há décadas, e robôs cirúr-
gicos de ponta têm sido usados em aplicações médicas (SAADATMAND et al., 2020).
Competições de robótica nas mais diversas categorias estão ganhando mais desta-
que ao decorrer dos anos. Nessas competições equipes são criadas, e os acadêmicos que
nelas participam terão a oportunidade de colocar em prática boa parte daquilo que apren-
dem em sala de aula. Em um ambiente sob estresse e com problemas técnicos complexos
a serem resolvidos, os acadêmicos se familiarizam e geram habilidades para se preparar
para o "mundo da indústria". (SAADATMAND et al., 2020).
Este trabalho está organizado em 6 capítulos, sendo eles: Introdução, Fundamen-
tação, Projeto, Desenvolvimento, Resultados e Conclusão. No Capítulo 1 é realizada uma
introdução ao tema proposto, explanando algumas informações referente a área da ro-
bótica, definindo o problema, a justificativa, o objetivo geral e também mencionando a
metodologia utilizada nos capítulos. No Capítulo 2, estão descritas as tecnologias utiliza-
das para o desenvolvimento do projeto, bem como os trabalhos relacionados. No Capítulo
3, é elaborado o escopo do projeto, compondo as funcionalidades que o projeto deve
apresentar e suas limitações, os requisitos funcionais, não funcionais e os diagramas. O
Capítulo 4, descreve a implementação da proposta do projeto, detalhando cada passo
durante a implementação da solução. No Capítulo 5, é realizada a análise dos resultados
obtidos, demonstrando de forma qualitativa. Consta ainda neste trabalho as considerações
finais.

1.1 PROBLEMATIZAÇÃO
Os robôs seguidores de linha são aplicados na indústria para diminuir custos do
processo produtivo, reduzir a presença humana em locais de riscos, transportar merca-
dorias de um lugar para outro etc (TAX et al., 2018). Porém, robôs seguidores de linha
também são construídos para competições com o objetivo de conseguir completar um
Capítulo 1. INTRODUÇÃO 17

percurso em um menor tempo possível (ENGIN; ENGIN, 2012).


Atualmente os microcontroladores utilizados para o desenvolvimento dos robôs
seguidores de linha na equipe de robótica Wickedbotz (WICKEDBOTZ, 2020) são Ar-
duinos. Com o intuito de motivar a pesquisa na área da robótica, a construção de um
robô seguidor de linha utilizando um microcontrolador STM32 poderá ser mais complexa,
porém, trará consigo um abrangente leque de tecnologias a serem utilizadas com o mesmo,
podendo assim ser interessante para utilização nas atividades multidisciplinares do PAC.
Partindo do que é observado na construção de um robô seguidor de linha desenvol-
vido pela equipe de robótica Wickedbotz e nos projetos que vem sendo desenvolvidos pelo
PAC, surge uma questão: "É possível desenvolver um robô seguidor de linha utilizando
um microcontrolador STM32?".

1.2 JUSTIFICATIVA
Competições são importantes para familiarizar estudantes e jovens engenheiros
com conceitos básicos no campo de estudo da robótica (ENGIN; ENGIN, 2012). Nesse
intuito a equipe de robótica Wickedbotz (WICKEDBOTZ, 2020) foi criada. Em 2017 e
2018 a equipe conseguiu bons resultados em uma competição internacional, destacando-se
na categoria de robô seguidor de linha.
As competições de robótica são de grande valor para estudantes e jovens engenhei-
ros, pois o ajudam se preparar para o mundo "real", tanto para trabalhar na indústria
quanto em pesquisa aplicada. A resolução de problemas técnicos complexos em equipes
sob estresse, só podem ser alcançados se as habilidades técnicas forem combinadas com
habilidades pessoais e boa capacidade de resolução de problemas (FERRI et al., 2017).
Apresentando bons resultados em competições de robótica, estudantes e jovens
engenheiros trazem destaque para o seu currículo e reconhecimento para a instituição de
ensino, além de os auxiliar a se familiarizar com os conhecimentos adquiridos em sala de
aula.
A utilização de um novo microcontrolador trará mais possibilidades para o de-
senvolvimento do robô tanto na parte de hardware quanto de software, pois o seu poder
de processamento e recursos são melhores que utilizados atualmente, consequentemente
aprimorando o ensino dos estudantes, que também poderão gerar novas habilidades na
área de sistemas embarcados.
Capítulo 1. INTRODUÇÃO 18

1.3 OBJETIVO GERAL


O objetivo geral deste trabalho é desenvolver um robô seguidor de linha uti-
lizando um microcontrolador STM32, podendo tornar-se uma opção de microcon-
trolador para utilização em projetos do grupo de robótica Wickedbotz (2020), e também
para utilização nas atividades multidisciplinares do PAC.

1.4 OBJETIVOS ESPECÍFICOS


Visando atender o objetivo geral descrito na Seção 1.3, torna-se necessário o de-
senvolvimento dos seguintes objetivos específicos:

• Projetar o robô seguidor de linha para utilização de um microcontrolador STM32.

• Desenvolver uma Printed Circuit Board (PCB) que suporte o microcontrolador


STM32.

• Desenvolver um chassi dentro das medidas padrões para comportar os componentes


do robô.

• Desenvolver algoritmos de exemplo para o funcionamento do componentes do robô.

• Desenvolver uma pista para teste do robô.

• Testar a performance do microcontrolador utilizado no robô.

• Apresentar os resultados obtidos.

1.5 METODOLOGIA
A metodologia é um conjunto de técnicas e processos empregados para formulação
de uma pesquisa acadêmica, trata-se de um estudo analítico e crítico dos métodos de
investigação, que tem como objetivo auxiliar na resolução de problemas e/ou questões de
investigação (PRODANOV; FREITAS, 2013).
Entende-se pesquisa como um caminho para adquirir conhecimento que possui
como finalidade encontrar respostas a problemas e indagações teóricas e práticas (ZA-
NELLA, 2006).
Com o intuito de validar os objetivos específicos e visando adquirir novos conheci-
mentos para objetivo prático de um robô seguidor de linha, será relatado nos Capítulos 1
e 2 do trabalho em questão, duas técnicas de pesquisa que serão aplicadas: 1) a pesquisa
exploratória, que busca a familiarização com o tema investigado e auxilia na construção
Capítulo 1. INTRODUÇÃO 19

das hipóteses inicias; e 2) a pesquisa descritiva, que visa analisar trabalhos publicados
relacionados ao tema abordado.
Nos capítulos 3 e 4 serão utilizadas duas metodologias ágeis para realização do
trabalho, sendo o Kanban e o Feature Driven development (FDD). O Kanban terá como
objetivo principal o gerenciamento do projeto, e a metodologia FDD será aplicada no
desenvolvimento do projeto. Nestes capítulos será possível contemplar os objetivos espe-
cíficos de detalhamento da arquitetura do robô seguidor de linha, possibilitando aplicar os
conhecimentos obtidos através de pesquisas no desenvolvimento dos exemplos de código
para robô.
O Kanban é um termo japonês que significa "cartão de visualização". Original-
mente utilizado na Toyota para sinalizar a quantidade de trabalho em progresso na ala
de manufatura. Tem como objetivo gerenciar de maneira macro visual todas tarefas do
projeto, com um intuito de melhorar o fluxo de trabalho. É uma metodologia ágil que
diferente das outras não possui iterações (OTAVIO et al., 2015).
Feature Driven development é uma metodologia ágil que combina as principais
vantagens de outras abordagens ágeis para gerenciamento e desenvolvimento de software.
FDD é uma metodologia orientada a funcionalidade caracterizada por ter uma ênfase na
qualidade de todo o processo e um monitoramento de progresso direto, preciso e com
baixa ocupação (GONÇALVES; BOEIRA, 2008).
O ciclo da FDD inicia-se com a criação de um modelo de objetos do domínio
do problema, em seguida é elaborado um plano para cada funcionalidade e são atribuí-
das responsabilidades. O desenvolvimento por funcionalidade consiste em desenvolver as
funcionalidade separadas, tratando cada uma de forma única (GONÇALVES; BOEIRA,
2008).
No Capítulo 5 serão relatados os resultados alcançados no projeto. A demonstra-
ção dos resultados obtidos será realizada de forma qualitativa, através de análises do
comportamento do robô seguidor de linha utilizando um STM32 como microcontrolador.
20

2 FUNDAMENTAÇÃO

Neste capítulo serão expostas as ferramentas e tecnologias utilizadas no desen-


volvimento do projeto. Junto a projetos relacionados ao tema, que possivelmente irão
contribuir para a implementação da solução que foi proposta.

2.1 TRABALHOS RELACIONADOS


No decorrer da pesquisa exploratória sobre o tema do projeto, foi possível encon-
trar soluções que se enquadram nesse Trabalho de Conclusão de Curso junto a projetos
que se assemelham ao trabalho proposto. Na sequência, estão listados os projetos que
disponibilizam soluções parecidas às existentes no trabalho.

2.1.1 Algoritmo de controle PID


Há diversos algoritmos que podem ser utilizados para controlar a velocidade dos
motores e obter uma melhor estabilidade do robô seguidor de linha na pista, porém o
algoritmo mais utilizado é o Proporcional Integral Derivativo (PID). Na maioria das vezes
o controle integral não é utilizado, pois o erro estacionário é pequeno o suficiente para
não causar grandes problemas (LEE et al., 2008).
De acordo com Lee et al. (2008) o erro entre o centro da linha e onde o sensor está
posicionado, é processado pelo algoritmo Proporcional Derivativo (PD) que retorna o valor
Pulse Width Modulation (PWM) respectivo a cada motor naquele momento, fazendo assim
que o robô siga a linha estavelmente. O processamento do erro vem através da aplicação
de uma fórmula de PD que pode ser vista na Equação 2.1.

𝑑𝑒(𝑡)
𝑢(𝑡) = 𝐾𝑝 𝑒(𝑡) + 𝐾𝑑 (2.1)
𝑑𝑡
Onde 𝐾𝑝 é o ganho proporcional; 𝐾𝑑 o ganho derivativo; 𝑡 instante do estado a ser
processado; 𝑒(𝑡) o erro na entrada do controlador no instante 𝑡; 𝑢(𝑡) o valor de saída do
sistema no instante 𝑡; 𝑑𝑒(𝑡) a derivada do erro no instante 𝑡 e 𝑑𝑡 é a derivada do tempo
gasto em cado ciclo.
Segundo (LEE et al., 2008) os valores de ganho do controlador PD é cuidado-
samente ajustado, possibilitando o robô seguidor de linha realizar uma trajetória com
mudanças abruptas.
Capítulo 2. FUNDAMENTAÇÃO 21

2.1.2 Calibração dos sensores de refletância


Para a detecção de uma linha em robôs seguidores de linha, a maioria das im-
plementações utilizam algoritmos com valores de reflectância, máximo e mínimo, pré-
definidos. Apesar dessa implementação funcionar bem, informações adicionais do sensor
de refletância analógico em relação a posição que se encontra a linha, é perdida.
Os sensores de refletância apesar de serem os mesmos, retornam um valor diferente
quando expostos às mesmas condições. Com isso faz se necessário a calibração dos mesmos
(SU et al., 2010). A calibração dos sensores vem através da aplicação de uma Fórmula
(2.2) na hora da leitura de cada reflectância retornada pelo sensor. A fórmula pode ser
vista na Equação 2.2 (SU et al., 2010).

𝑦𝑚𝑎𝑥 − 𝑦𝑚𝑖𝑛
𝑦𝑗𝑜 = 𝑦𝑚𝑖𝑛 + (𝑥𝑗𝑖 − 𝑥𝑚𝑖𝑛,𝑖 ) (2.2)
𝑥𝑚𝑎𝑥,𝑖 − 𝑥𝑚𝑖𝑛,𝑖

Onde 𝑥𝑚𝑎𝑥,𝑖 e 𝑥𝑚𝑖𝑛,𝑖 são respectivamente os valores máximos e mínimos retornados


pelo sensor de posição 𝑖; 𝑦𝑚𝑎𝑥 e 𝑦𝑚𝑖𝑛 são os valores pré-definidos no datasheet 1 do sensor;
𝑥𝑗𝑖 é o valor obtido pelo sensor 𝑖 no momento da leitura da refletância, tendo então como
resultante para 𝑥𝑗𝑖 o valor de 𝑦𝑗𝑜 normalizado. Através de alguns testes em superfícies
com diferentes níveis de refletância, Su et al. (2010) prova a importância de calibrar os
sensores para obter resultados mais precisos na hora de identificar a linha.
Sensores não calibrados podem impactar na eficiência do robô durante o percurso.
Após a calibração dos sensores os resultados obtidos são significativos, comparado a um
mesmo conjunto de sensores que não foi calibrado (SU et al., 2010).

2.1.3 Algoritmo de detecção de linha


Existem diversas formas para calcular a posição da linha que deve ser seguida
pelo robô seguidor de linha na pista, dentre elas destaca-se a detecção de linha via média
ponderada.
A técnica de média ponderada, é comumente utilizada em processos de defuzzifica-
tion 2 em sistemas com lógica fuzzy 3 . Também utilizada para encontrar o centro de massas.
O modo de se encontrar uma linha utilizando média ponderada se dá pela fórmula que
pode ser vista na Equação 2.3 (SU et al., 2010).

∑︀𝑛
𝑥𝑖 𝑦 𝑖
𝑥 = ∑︀𝑖=0
𝑛 (2.3)
𝑖=0 𝑦𝑖
1
É um documento que resume o desempenho e outras características técnicas de um produto, máquina,
componente, etc.
2
Processo no qual as regiões resultantes são convertidas em valores para a variável de saída do sistema.
3
É a forma lógica multivalorada, na qual os valores de verdade das variáveis podem ser qualquer
número real entre zero e um.
Capítulo 2. FUNDAMENTAÇÃO 22

Onde 𝑛 é o número de sensores que o robô irá possuir; 𝑥𝑖 corresponde respectiva-


mente as coordenadas de cada sensor e 𝑦𝑖 corresponde ao valor retornado no momento da
leitura de cada sensor de refletância.
Testes feitos por Su et al. (2010) mostram a eficiência do algoritmo de média
ponderada, que possui um menor erro quadrático médio em comparação ao algoritmo
que utiliza interpolação quadrática, além de ter uma pequena vantagem na eficiência da
detecção da linha, o consumo de processamento do algoritmo que utiliza média ponderada
é inferior.

2.1.4 Controle Fuzzy para robô seguidor de linha


A lógica fuzzy, em contraposição aos valores crisp4 , rompe a lógica binária ao
estabelecer que podem existir estados intermediários entre "verdadeiro"e "falso"(PINTO;
EGUTI, 2013).
A aplicação de um controlador fuzzy é proveniente de valores de entrada, dados por
resposta de sensores ou da própria realimentação do sistema. Valores crisp, são obtidos nos
valores de entrada e devem ser transformados em valores fuzzy, utilizando algum processo
de fuzzyfication 5 . Tendo os conjuntos fuzzy de entrada montados, é aplicada a ação de
controle sobre eles. Essa ação tem base em uma regra linguística, baseada em uma ação
humana, impressão ou senso comum de engenharia (PINTO; EGUTI, 2013).
Após o processo anterior, as informações fuzzy são transformadas em dados que
façam sentido para o elemento controlado, utilizando um processo de defuzzyfication para
gerar valores crisp. O valor da saída da variável controlada deve ser comparado ao valor
desejado e usar a diferença (erro) para realimentar o controlador. Dessa forma, é possível
desenvolver um controlador fuzzy simples não adaptativo (PINTO; EGUTI, 2013).

2.1.5 Seguidor de linha utilizando algoritmos de aprendizado por reforço


Diversos tipos de algoritmos são aplicados em robôs seguidores de linha, Saadat-
mand et al. (2020) propõe quatro algoritmos: Multiple Input Single Output (MISO) e Mul-
tiple Input Multiple Output (MIMO) Simulated Annealing (SA) baseado em Q-Learning 6 ,
MISO greedy 7 Q-Learning, e o mais tradicional, o controle proporcional para esclarecer
as vantagens sobre os outros métodos propostos.
4
Valores designados aos elementos do conjunto universo U pertençam ao intervalo de números reais de
zero a um inclusive, isto é [0,1].
5
É o processo de conversão de um valor de entrada crisp em um valor difuso que é realizado pelo uso
das informações na base de conhecimento.
6
É um algoritmo de aprendizado por reforço sem modelo para aprender uma política que diz a um
agente que ação tomar em que circunstâncias.
7
É um algoritmo que segue a heurística de resolução de problemas de fazer a escolha ideal em cada
estágio, com a intenção de encontrar um ótimo global.
Capítulo 2. FUNDAMENTAÇÃO 23

Saadatmand et al. (2020) realizou algumas tomadas de tempo com robô seguidor
de linha, para verificar a eficiência de cada algoritmo, resultando no algoritmo de controle
proporcional o mais estável em todas as tomadas de tempo; no entanto, o desempenho dos
robôs baseados em Q-learning melhora com o processo de aprendizado. Depois de aprender
o processo, a exploração do algoritmo de controle greedy continua e causa resultados não
ideais, ao contrário dos algoritmos de controle baseados em SA, que reduz a exploração
conforme aumenta o aprendizado.
Os resultados experimentais obtidos por Saadatmand et al. (2020), verificam que
o controle Q-learning baseado em MIMO SA é a algoritmo de controle mais eficaz; no
entanto, para obter o melhor desempenho, o algoritmo precisa ser treinado completamente.

2.1.6 Planejamento de caminho de robô seguidor de linha


Os sistemas embarcados incluem diversas áreas de conhecimento, tanto em hard-
ware de microcontroladores quanto em software, tecnologias de interface, teoria do controle
automático, tecnologia de sensores, etc. A construção de um robô seguidor de linha de
baixo custo, serve como um bom exemplo para os estudantes aperfeiçoarem suas habili-
dades em sistemas embarcados (ENGIN; ENGIN, 2012).
O robô apresentado por Engin e Engin (2012), foi construído para ter um peso
relativamente baixo e com motores que proporcionam para o robô uma alta velocidade,
pois o objetivo é completar o percurso o mais rápido possível em um menor período
de tempo. O peso do robô e o raio das rodas foram levados em conta, pois eles têm
efeito na velocidade do robô. A técnica utilizada para detecção da linha foi a interpolação
quadrática, segundo Engin e Engin (2012) essa técnica é melhor do que as utilizadas em
outros seguidor de linha.
Segundo Engin e Engin (2012), o processo de construção de um seguidor de linha
da aos alunos a ideia de como os circuitos de hardware, e o software são ambos importantes
para um projeto de sistema embarcado bem sucedido.

2.1.7 Projeto e implementação de um robô seguidor de linha de competição


utilizando Field Programmable Gate Array (FPGA)
Jadan e Vera (2015) expõe uma alternativa de robô seguidor de linha, focando na
área de software e eletrônica, com uma implementação diferente do que é apresentado
em competições atualmente, dessa forma auxiliando a aumentar o nível de dificuldade de
competições locais e permitindo que o robô possa ser mais competitivo a nível internaci-
onal.
Um controlador de velocidade foi desenvolvido individualmente para cada motor.
Estes controladores são tratados por um controlador externo que é responsável por definir
Capítulo 2. FUNDAMENTAÇÃO 24

a velocidade na qual cada roda deve girar, isto é, define a referência do controlador de
velocidade de cada motor. Com base na posição angular, tendo como referencia o centro
de massa do robô, e na velocidade linear obtida pelo robô (JADAN; VERA, 2015).
O sinal de cada encoder 8 é filtrado independentemente, porém o sinal dos sensores
infravermelhos e do giroscópio passa por outro filtro que mescla os dois dados obtidos. É
utilizado o algoritmo de filtro de Kalman9 em ambo os casos, devido ao grande impacto
que essa estimativa tem nos dados reais (JADAN; VERA, 2015).
De acordo com Jadan e Vera (2015) o uso de FPGA permite projetar um mi-
crocontrolador personalizado, integrando o chip apenas com os módulos necessários para
controlar o robô. A aplicação de um algoritmo de filtro de Kalman permitiu Jadan e Vera
(2015) melhorar o controle de velocidade dos motores e também permitiu combinar os
dados obtidos pelos sensores infravermelhos e pelo giroscópio. A utilização do MATLAB10
possibilitou trabalhar em melhorias de código fazendo simulações com dados adquiridos.
A escolha das rodas é um ponto importante na construção do robô, deve-se levar em
consideração o material, o raio e a largura da roda (JADAN; VERA, 2015).

2.1.8 Projeto e implementação de um robô autônomo seguidor de linha ba-


seado em visão computacional
Tosta et al. (2016) em seu projeto implementa um robô autônomo seguidor de linha
baseado em visão computacional, com pretensão de utilização em uma competição. Um
sistema de detecção de objetos e navegação por meio de uma câmera foi desenvolvido, além
disso um sistema para as tomadas de decisão foi implementado utilizando Processing11 e
uma placa controladora PcDuino12 .
O algoritmo proposto por Tosta et al. (2016) para análise das imagens foi baseado
na biblioteca OpenCV13 ; as imagens capturadas em Red, Green, Blue (RGB) são enviadas
para o controlador PcDuino, onde a imagem é suavizada e processada. Para seguir a linha,
o centro de massa e os pixeis mais externos da imagem são utilizados para enviar ao robô
qual direção ele deve seguir para continuar em cima da linha, informando se a curva é
fechada ou não (TOSTA et al., 2016).
8
É um dispositivo eletromecânico que conta ou reproduz pulsos elétricos a partir do movimento rota-
cional de seu eixo.
9
É um algoritmo que produz estimativas do estado de um sistema usando medidas ruidosas observadas
ao longo do tempo.
10
É um software interativo de alta performance voltado para o cálculo numérico.
11
É uma linguagem de programação de código aberto e ambiente de desenvolvimento integrado, cons-
truído para as artes eletrônicas e comunidades de projetos visuais com o objetivo de ensinar noções
básicas de programação de computador em um contexto visual e para servir como base para cadernos
eletrônicos.
12
É uma placa de desenvolvimento.
13
É uma biblioteca multiplataforma, totalmente livre ao uso acadêmico e comercial, para o desenvol-
vimento de aplicativos na área de Visão computacional.
Capítulo 2. FUNDAMENTAÇÃO 25

A construção do projeto demonstrou ser viável a navegação de um robô seguidor


de linha utilizando uma câmera como principal sensor de orientação, diminuindo possíveis
falhas em robôs autônomos, quando comparado a robôs que utilizam somente sensores de
refletância ou infravermelho (TOSTA et al., 2016).

2.2 PILHA TECNOLÓGICA


Nesta seção estão descritas as ferramentas e tecnologias utilizadas na elaboração
do trabalho. No desenvolvimento do trabalho será utilizada a plataforma Arduino (IDE)
para o desenvolvimento dos códigos, o EasyEDA para desenvolvimento da PCB e o Tin-
kercad para desenvolvimento estrutural do robô. Dentre as tecnologias utilizadas para a
construção do robô tem-se: o STM32 e alguns periféricos para serem utilizados, como o
microcontrolador, os sensores de refletância e os encoders. Os recursos de gerenciamento
do projeto, como o GIT e Trello, também serão abordados a seguir.

2.2.1 Ferramentas
As ferramentas serão utilizadas no desenvolvimento e na gestão do código do pro-
jeto, auxiliando em todo o processo de desenvolvimento. A seção a seguir trata de todas as
ferramentas utilizadas, bem como uma breve explicação de funcionamento de cada uma.

2.2.1.1 Tinkercad

O Tinkercad é um software online gratuito de modelagem tridimensional, ele pode


ser utilizado para projetos 3D, componentes eletrônicos e codificação. Utilizado por alunos
e professores amadores e projetistas para imaginar, projetar e fabricar qualquer coisa que
se faça necessária (TINKERCAD, 2021).

2.2.1.2 EasyEDA

O EasyEDA é um software online gratuito de design de PCB e simulação de


circuitos elétricos. Com ele é possível compartilhar seus projetos com outros criadores
através da plataforma, por conta da empresa ter uma fábrica de construção de PCB, a
JLCPCB, é possível enviar o seu projeto diretamente para lá e em poucos dias recebê-lo
impresso (EASYEDA, 2021).

2.2.1.3 Arduino IDE

O Arduino (IDE), é uma Integrated Development Environment (IDE) de código


aberto, disponível para os principais Sistemas Operacionais (SO), que facilita a escrita e
upload de códigos para uma placa Arduino, ou qualquer outra previamente configurada
(ARDUINO, 2020).
Capítulo 2. FUNDAMENTAÇÃO 26

Com o Arduino (IDE) é possível programar sua placa Arduino ou semelhante uti-
lizando orientação a objetos, pois a linguagem de programação oferecida pela plataforma
é o C++.

2.2.1.4 GIT

O GIT é um sistema de controle de versão de software, gratuito e de código aberto.


Que possibilita lidar com todos tipos de projeto de software, desde os mais pequenos
aos maiores, mantendo velocidade e eficiência. Tem como principal objetivo garantir a
velocidade e desempenho do projeto (CHACON; STRAUB, 2014).
Utilizando o GIT é possível ter um projeto com vários desenvolvedores contribuin-
tes simultâneos. Além de permitir a criação de inúmeros repositórios remotos, e ter um
fluxo de trabalho que possibilita cada desenvolvedor ter acesso de gravação, em reposi-
tórios que foi convidado a contribuir, e/ou leitura em repositórios públicos. Com o GIT
também é possível ter um repositório privado. (CHACON; STRAUB, 2014).

2.2.1.5 Trello

Trello é uma ferramenta gratuita que tem por objetivo gerenciar projetos de forma
colaborativa em quadros, destacando cada atividade ou meta a ser atingida, também é
possível trabalhar de forma modular as colunas e cartões do quadro. (TRELLO, 2021)
No Trello é possível criar um quadro Kanban, tornando possível inserir listas de
tarefas para serem realizadas por equipes ou individualmente. Cada coluna recebe cartões,
com a descrição da tarefa, com um prazo para conclusão, objetivos e os responsáveis. Qual-
quer pessoa cadastrada no Trello pode compartilhar seus quadros com outras cadastradas
no mesmo, podendo assim adicionar múltiplos responsáveis para cada cartão. (LOUBAK,
2019)
Os usuário que utilizam Trello tem uma maior flexibilidade para adaptar a ferra-
menta de acordo com sua necessidade, adicionando aos cartões, recursos como checklists,
upload de arquivos multimídia e etiquetas coloridas. A ferramenta conta também com um
controle de progresso que facilita o usuário visualizar o que já foi feito e o que ainda está
pendente. (LOUBAK, 2019)

2.2.2 Tecnologias
As tecnologias empregadas no trabalho, foram escolhidas essencialmente com base
nos requisito exigidos pelo robô, sendo ele de ter uma melhor locomoção e ter respostas
rápidas ao meio em que foi submetido. A partir dos estudos e análises feitos, nessa seção
está descrito o funcionamento básico das tecnologias que serão utilizadas para solucionar
o problema proposto neste projeto.
Capítulo 2. FUNDAMENTAÇÃO 27

2.2.2.1 STM32

O microcontrolador STM32 utilizado no projeto, é um módulo desenvolvido com


um microcontrolador Reduced Instruction Set Computer (RISC) STM32F103C8T6 de 32
bits que possui um núcleo ARM Cortex-M3, com um clock 14 interno de Central Processing
Unit (CPU) de 72 MHz, uma memória flash 15 de 64 KB e uma memória volátil16 de 20KB.
Após algumas configurações, é possível programar o STM32 através da IDE do Arduino
ou equivalente, utilizando um conversor Universal Serial Bus (USB) serial ou um ST-
Link V2 para realizar as configurações do STM32 e programá-lo em C++17 . Na Figura
1 é possível verificar a lista de pinagens referente ao STM32, tornando assim possível a
identificação de cada porta, assim como as entradas de alimentação e suas respectivas
tensões de operação (STMICROELECTRONICS, 2020).

Figura 1 – Pinagem STM32

Fonte: (KJELDSEN, 2020).

14
É o número de ciclos por segundo de um sinal de sincronismo usado dentro do processador.
15
É uma memória que mesmo se não tiver energia ela manterá as informações que foram salvas nela.
16
É a memória do computador que requer energia para manter as informações armazenadas.
17
É uma linguagem de programação compilada multi-paradigma e de uso geral.
Capítulo 2. FUNDAMENTAÇÃO 28

2.2.2.2 Sensor de Refletância

O sensor de refletência é muito utilizado em robôs seguidores de linha, que tem


como finalidade detectar as linhas de marcação que determinam o caminho a ser seguidor
pelo robô ou o início e fim de uma curva na pista. Esse tipo de sensor é constituído
basicamente por um Light Emitting Diode (LED) infravermelho e um fototransistor. O
LED infravermelho emite um feixe de luz infravermelha que não é visível a olho nu. No
momento em que o LED emite o feixe de luz em uma superfície, essa pode refletir com
intensidade diferentes dependendo do tipo de material. Superfícies mais claras e lisas
possuem um grau de refletância maior do que superfícies escuras, opacas e menos lisas
(GUADAGNIN, 2014).
O fototransistor tem como finalidade capturar os feixes de luz emitidos pelo LED
infravermelho. O funcionamento de um fototransistor, pode ser comparado ao de um
transistor, ambos possuem um emissor e um coletor, mas a diferença está no fato da base
do fototransistor ser acionada ao receber um feixe de luz infravermelha (GUADAGNIN,
2014).
Esses dois componentes trabalhando em conjunto, compõem um sensor de refle-
tância. O sinal capturado pelo fototransistor é enviado ao componente responsável pelo
controle do robô, que interpreta o valor recebido.

2.2.2.3 Encoder Magnético de Efeito Hall

O encoder é um transdutor18 , que converte movimento mecânico angular ou linear


em uma série de pulsos analógicos ou digitais. Com os pulsos gerados pelo encoder pode-se
por exemplo determinar a velocidade, taxa de aceleração, distância, rotação, posição ou
direção. (DYNAPAR, 2021)
O encoder pode ser acoplado a um eixo estendido do motor, e utilizando um disco
magnético e sensores de efeito Hall, pode-se medir 12 contagens por revolução do eixo do
motor. (POLOLU, 2021b)

18
É um dispositivo utilizado em conversão de energia de uma natureza para outra.
Capítulo 2. FUNDAMENTAÇÃO 29

Figura 2 – Encoder Magnético de Efeito Hall

Fonte: (POLOLU, 2021b).


30

3 PROJETO

A metodologia ágil utilizada no desenvolvimento do projeto, é o Feature Driven


Development (FDD), a metodologia tem como primeiro processo a elaboração de um
modelo geral, tendo como finalidade estruturar o escopo geral do projeto. Será apresentado
neste capítulo o projeto como um todo, identificando o escopo, os pacotes do projeto, os
requisitos (tanto funcionais quanto não funcionais), os diagramas de caso de uso e de
instalação.

3.1 ESCOPO
Definir o escopo consiste em desenvolver uma explicação detalhada do projeto,
retratando o que está incluso e o que não está incluso no mesmo (LAGE; MARTINS,
2014). De acordo com a metodologia ágil FDD, a definição de escopo é a primeira etapa
do processo, que é denominada Desenvolver o Modelo Geral, essa etapa tem como
objetivo compreender o escopo do projeto.
A etapa Desenvolver o Modelo Geral do projeto começa com uma análise
superficial do escopo do projeto e do contexto do mesmo. Sendo assim, é possível definir
um modelo geral do processo. Após o modelo ser definido, é discutido pelos membros do
projeto as possíveis melhorias, contudo é definido a melhor versão do modelo geral do
projeto (VASCONCELOS; MOURA, 2009).
O projeto tem como objetivo utilizar um STM32 para o o desenvolvimento de um
robô seguidor de linha, podendo se tornar uma opção de microcontrolador para estudo
e utilização nas atividades multidisciplinares do PAC e também do grupo de robótica
Wickedbotz (2020). Por ser um microcontrolador com mais recursos, possibilitará ter
uma melhoria nos outros componentes que serão utilizados na construção do robô, o robô
seguidor de linha contará com sensores de refletância frontais para leitura da linha e
laterias, para mapear as curvas e pontos na pista, e um encoder magnético de efeito Hall,
para calcular ângulos das curvas e a distância da pista, podendo ser utilizando também
para coletar outros tipos de informações caso necessário, como por exemplo velocidade,
taxa de aceleração, posição ou direção.

3.2 PACOTES DE PROJETO


A metodologia FDD tem como seu segundo processo a Construção da Lista de
Funcionalidades do projeto, essa etapa tem como objetivo elencar as funcionalidades
Capítulo 3. PROJETO 31

do projeto a serem desenvolvidas.


Para a criação dos pacotes foi considerado as principais funcionalidades do sistema,
deste modo os pacotes são: Calibrar sensores, Mapear percurso, Calcular percurso.

3.2.1 Pacote 1 - Calibrar Sensores


As demais funcionalidades do sistema só funcionaram corretamento após os senso-
res de refletância do robô serem calibrados pelo usuário, utilizando o modo que permite
essa funcionalidade.

3.2.2 Pacote 2 - Mapear Percurso


Após os sensores serem calibrados o robô irá realizar o percurso, para obter todas
informações necessárias da pista, sendo elas: o tamanho da pista, angulação das curvas,
pontos onde onde iniciam e terminam as curvas, cruzamentos e inicio e fim do percurso.

3.2.3 Pacote 3 - Calcular Percurso


Depois de obter todas as informações, é calculada quais ações deveram ser tomadas
pelo robô quando o percurso for realizado; levando em consideração os ângulos das curvas,
os pontos de inicio e fim de curva, cruzamentos e o tamanho do percurso.

3.3 REQUISITOS
Os requisitos consistem na definição documentada de uma propriedade ou compor-
tamento do sistema. De um modo geral, os requisitos refletem o que o software deve fazer,
os serviços oferecidos tão quão suas restrições, tendo como principal objetivo descrever
quais as necessidades do cliente para o sistema em questão (SOMMERVILLE, 2011).
Segundo SOMMERVILLE (2011) o processo de descobrir, analisar, documentar
e verificar esses serviços e restrições é conhecido como engenharia de requisitos. Na en-
genharia de requisitos, os requisitos do sistemas são frequentemente classificados como
requisitos funcionais e não funcionais. Nas seções seguintes serão descritos os requisitos
funcionais e não funcionais do projeto.

3.3.1 Requisitos funcionais


Segundo SOMMERVILLE (2011) os requisitos funcionais são declarações de servi-
ços que o sistema deve fornecer, a maneira na qual o sistema deve funcionar considerando
entradas específicas e de como o sistema deve se comportar em determinadas situações.
Capítulo 3. PROJETO 32

Esses requisitos definem as funcionalidades do sistema de forma completa e concisa. Re-


quisitos funcionais do sistema variam de requisitos gerais, que abrangem o que o sistema
deve fazer, até requisitos muito específicos.
A Tabela 1 descreve os requisitos funcionais do trabalho de maneira geral, retra-
tando as funcionalidades do robô em questão.

Tabela 1 – Requisitos funcionais

Identificador Descrição
RF001 A solução deve permitir a calibração dos sensores de refletância.
RF002 A solução deve permitir mapear o percurso da pista.
RF003 A solução deve armazenar os dados mapeados da pista.
RF004 A solução deve calcular as curvas e velocidades do robô conforme
os dados obtidos no mapeamento da pista.
RF006 A solução deve informar ao usuário curvas, cruzamento e inicio e
fim do percurso.
RF007 O robô deve agir de forma autônoma.
RF008 O robô não deve exceder 250mm de comprimento, 250mm de lar-
gura e 200mm de altura.

3.3.2 Requisitos não funcionais


Os requisitos não funcionais descrevem as restrições aos serviços ou funções ofe-
recidas pelo sistema, esses requisitos resultam das necessidades dos usuários, das restri-
ções de orçamento, políticas organizacionais, da necessidade de se comunicar de forma
transparente com outro sistema de software ou hardware, ou para seguir regulamentos de
segurança e legislações de privacidade (SOMMERVILLE, 2011).
Os requisitos não funcionais não estão especificamente relacionados com os serviços
oferecidos pelo sistema a seus usuário, e sim com as propriedades emergentes do sistema,
bem como a confiabilidade, tempo de resposta e ocupação de área. (SOMMERVILLE,
2011).
O Tabela 2 apresenta os requisitos não funcionais do trabalho em questão.

Tabela 2 – Requisitos não funcionais

Identificador Descrição
RNF001 O robô deve utilizar sensores de refletância para identificar a linha
e as marcações.
RNF002 O robô deve utilizar encoder magnético para medir a distância do
percurso.
RNF003 O robô deve sinalizar ao usuário o estado em que se encontra.
RNF004 O robô deve permanecer em cima da linha demarcada como pista.
Capítulo 3. PROJETO 33

3.4 DIAGRAMA DE CASO DE USO


Casos de uso representam uma abstração de pequenas histórias envolvendo um
ou vários usuários, e o sistema. Uma história de usuário baseia-se em funcionalidades
que representam o sistema. Por exemplo: “registrar usuários”, “remover usuários” ou
“gerenciar os usuários”, esses são todos exemplos de caso de uso. (GUDWIN, 2015).
Os diagramas de caso de uso tem como objetivo descrever os requisitos funcio-
nais do sistema, de forma que haja concordância entre usuários e o desenvolvedor. Para
que as funcionalidades se relacionem umas com as outras no sistema, previamente as
responsabilidades devem ser descritas claramente. (JÚNIOR, 2010).
De acordo com Gudwin (2015) os casos de uso são documentados através de di-
agramas de casos de uso de alto nível. Um conjunto de casos de uso representam todas
possíveis interações entre usuário e sistema, expondo todos seus relacionamentos. O dia-
grama facilita a identificação do sistema como um todo, onde todas funcionalidades estão
expostas.
Na Figura 3 é possível visualizar o diagrama de caso de uso, representando as
interações do usuário com o robô seguidor de linha.

Figura 3 – Diagrama de caso de uso

Fonte: O autor, 2020.

O usuário poderá calibrar os sensores antes de realizar os percursos. Para facilitar


o entendimento do caso de uso, e para detalhar cada função disponível no robô, o mesmo
será representado em forma de tabela. Na Tabela 3 tem-se o detalhamento do caso de uso.
Capítulo 3. PROJETO 34

Tabela 3 – Detalhamento caso de uso

Ator Caso de Uso Descrição


Usuário Calibrar Senso- Sendo um usuário, posso calibrar os sensores de refle-
res tância.
Usuário Ligar robô no Sendo um usuário, posso definir o modo de percurso do
modo mapea- robô para mapeamento da pista.
mento
Robô Mapear Pista Sendo um robô, devo obter as informações necessárias
da pista.
Robô Sinalizar curva Sendo um robô, devo sinalizar que estou passando por
alguma curva, cruzamento ou inicio e fim de percurso.
Robô Processar dados Sendo um robô, devo processar/calcular os dados obti-
dos no mapeamento da pista.
Robô Armazenar Sendo um robô, devo armazenar os dados obtidos e cal-
dados culados.
Usuário Ligar robô no Sendo um usuário, posso definir o modo de percurso do
modo de per- robô para que ele realize o percurso da pista.
curso
Robô Realizar per- Sendo um robô, devo realizar o percurso com as infor-
curso com os mações processadas e armazenadas anteriormente.
últimos dados
processados
Usuário Desligar robô Sendo um usuário, posso desligar o robô.
Robô Apagar todos os Sendo um robô, devo apagar todos os dados de mapea-
dados de mape- mento da pista.
amento armaze-
nados

3.5 DIAGRAMA DE INSTALAÇÃO


O diagrama de instalação, conhecido também como diagrama de implantação,
determina as necessidades de hardware do sistema, apresentando quais componentes de-
veram ser implementados. Exibe as características físicas, como a topologia, estações,
servidores, protocolos de comunicação etc (GUEDES, 2018).
O diagrama de implantação, é o que evidência a questão da organização da ar-
quitetura física, na qual o software será implantado e executado em termos de hardware.
Um diagrama de implementação possui componentes básicos como: nós, associações e
artefatos (GUEDES, 2018).
Um nó simboliza um item de hardware ou um ambiente que dá suporte ao sistema.
Um nó é simbolizado por um cubo contendo um texto exibindo o nome do hardware ou
ambiente de execução, no diagrama. Associações representam as ligações entre os nós,
indicando a forma de comunicação e de troca de informações entre um nó e outro. Os
artefatos representam entidades físicas do mundo real, um artefato pode ser um arquivo
Capítulo 3. PROJETO 35

fonte, um arquivo executável, um documento de texto entre outros (GUEDES, 2018).


A Figura 4 apresenta o diagrama de instalação do robô proposto neste Traba-
lho de Conclusão de Curso (TCC). O robô é constituído de vários equipamentos que se
comunicam internamente entre si, conectados todos a um microcontrolador.

Figura 4 – Diagrama de instalação

Fonte: O autor, 2020.

3.6 CONSIDERAÇÕES FINAIS


O desenvolvimento deste capítulo, busca apresentar um visão geral do projeto que
está sendo estudado neste TCC. Com intuito de facilitar a compreensão do trabalho, fo-
ram elaborados diagramas, requisitos funcionais e não funcionais, bem como o escopo do
projeto, seguindo a metodologia FDD, a qual foi escolhida para ser aplicada no desenvol-
vimento do trabalho.
Este modelo será utilizado como base para execução do projeto, na etapa de desen-
volvimento, que será apresentada em seguida no Capítulo 4. Ressaltando que no capítulo
de desenvolvimento do projeto, será contextualizado de forma mais minuciosa e apurada
o modelo geral do projeto.
36

4 DESENVOLVIMENTO

O capítulo a seguir nos mostra os processos para o desenvolvimento do projeto,


desde as etapas de desenvolvimento da PCB e do chassi do robô, até o desenvolvimento
de exemplos de códigos para os componentes utilizados no robô. As etapas e os processos
de construção do projeto também serão apresentados.
Para o desenvolvimento desse trabalho, foi utilizado o Arduino (IDE) e o
STM32CubeProgrammer para configuração do microcontrolador STM32, assim como o
Arduino (IDE) para o desenvolvimento dos exemplos de código do robô seguidor de linha,
utilizando como linguagem de programação o C++. No estágio de criação da PCB foi
utilizado a ferramenta EasyEDA para a prototipagem da placa, e para a fabricação da
mesma, foi contratada uma fabricante chinesa de protótipos de PCB, a JLCPCB. Também
foi utilizado o Tinkercad como ferramenta de modelagem tridimensional para construção
do chassi do robô seguidor de linha; o chassi foi fabricado em acrílico e cortado em uma
máquina de Controle Numérico Computadorizado (CNC) de corte a laser.
De acordo coma definição dos pacotes definidos na Seção 3.2, foi necessário a sepa-
ração de três pacotes, sendo eles: Calibrar Sensores, Mapear Percurso e Calcular Percurso.
O pacote de Calibrar Sensores tem como objetivo calibrar os sensores de refletância para
um melhor aproveitamento e funcionamento do hardware escolhido. O segundo pacote,
Mapear Percurso tem como objetivo fazer com que o robô de forma autônoma de uma
volta na pista e mapeie os pontos de curvas e distância entre uma curva e outra. O último
pacote, Calcular Percurso tem como objetivo calcular, com os dados obtidos na volta de
mapeamento, as melhores ações que deveram ser tomadas pelo robô durante o percurso
e realizar o percurso utilizando essas informações.

4.1 CONSTRUÇÃO DA PISTA PARA O ROBÔ


A pista do robô seguidor de linha é a superfície onde o robô realiza o percurso e
os testes de funcionamento. Para a fabricação da pista foi utilizado uma manta preta de
borracha de 3 mm de espessura, e para demarcar o percurso da pista, uma fita isolante
branca de 19 mm foi utilizada. Seguindo as especificações da categoria de seguidor de
linha pro, descrito nas regras da Robocore (2016) as demarcações na pista foram feitas,
indicando onde é o inicio do percurso, inicio e fim de curvas e obedecendo um ângulo de
90 graus em cruzamentos. Na Figura 5 é possível observar a foto de uma pista para robôs
seguidores de linha em uma competição internacional.
Capítulo 4. DESENVOLVIMENTO 37

Figura 5 – Pista para robôs seguidores de linha

Fonte: Internet, 2021.

4.2 COMPONENTES
Para construção do robô seguidor de linha vários componentes eletrônicos devem
ser utilizados, bem como algumas configurações nesses componentes devem ser feitas.
O modo de configuração, caso seja necessário, e os códigos explicando como devem ser
utilizados cada componente estão nas subseções abaixo.

4.2.1 STM32
Para utilização do microcontrolador STM32 com Arduino algumas configurações
são necessárias. Utilizando um conversor USB serial ou um ST-Link V2, é possível realizar
o processo de bootloader 1 no microcontrolador, permitindo assim configurar com sucesso o
mesmo. Neste trabalho um conversor USB serial do modelo FTDI FT232RL foi utilizado.
O primeiro passo para realizar a configuração do STM32 é instalar o pa-
cote Arduino Core STM32 no Arduino IDE. O pacote está disponível neste link.
No Arduino IDE clique no botão nomeado como "Arquivo", na parte superior
da janela, selecione a opção "Preferências", então cole a Uniform Resource Lo-
cator (URL) https://raw.githubusercontent.com/stm32duino/BoardManagerFiles
/master/package_stmicroelectronics_index.json, no campo "URLs Adicionais para
1
O bootloader é um programa presente em todo dispositivo que use um sistema operacional, sendo
responsável por gerenciar a inicialização.
Capítulo 4. DESENVOLVIMENTO 38

Gerenciadores de Placas", conforme pode ser visto na Figura 6.

Figura 6 – Tela de configuração da URL

Fonte: O autor, 2021.

Em seguida clique no botão nomeado como "Ferramentas", na parte superior do


Arduino IDE, na sequência escolha a opção "Placa"e "Gerenciados de Placas", uma nova
janela será aberta junto a um campo de pesquisa. Na barra de pesquisa procure por
"STM32", uma listagem será exibida e deverá aparecer um opção de pacote chamado
STM32 MCU based boards, em seguida clique em "Instalar", conforme apresentado na
Figura 7.
Realizado a instalação do pacote STM32 MCU based boards, é necessários baixar e
instalar uma ferramenta chamada, STM32CubeProgrammer. Ela pode ser baixada neste
link. Um requisito para poder instalar essa ferramenta é ter o Java2 instalado em sua
versão 8 ou superior.
O próximo passo é baixar um binário para sua posterior utilização nos passos se-
guintes. Acessando este link, basta clicar em stm32_binariesżip para baixar os arquivos
necessários. Como mostra a Figura 8.
Com o programar STM32CubeProgrammer instalado no computador, o abra e na
sequência conecte o conversor USB serial, FTDI FT232RL, no microcontrolador STM32
corretamente. Para isso mude para 5 V a tensão do FTDI FT232RL, conforme apresentado
na Figura 9 e conecte os pinos do FTDI FT232RL ao STM32 conforme ilustrado na Figura
10. Após o conversor USB serial estar conectado ao microcontrolador, mova os pinos do
2
Java é o ambiente computacional, ou plataforma, criada pela empresa estadunidense Sun Microsys-
tems.
Capítulo 4. DESENVOLVIMENTO 39

Figura 7 – Tela de instalação de pacotes

Fonte: O autor, 2021.

Figura 8 – Arquivo .zip com binários disponível no GitHub

Fonte: O autor, 2021.

STM32 para o modo boot, conforme apresentado na Figura 11. Em seguida conecte um
cabo micro USB ao conversor USB serial e a outra ponta USB no computador.
Assim que conectado ao computador vá até o programa STM32CubeProgrammer
aberto anteriormente, localize um botão na lateral esquerda, clicando nele será possível re-
alizar as próximas configurações do microcontrolador STM32. No lado direito haverá uma
Capítulo 4. DESENVOLVIMENTO 40

Figura 9 – Conversor USB serial posicionado para utilizar tensão de 5 V

Fonte: Internet, 2021.

Figura 10 – Conexão microcontrolador ao conversor USB serial

Fonte: Internet, 2021.

caixa de seleção na cor azul onde será possível escolher a opção "UART", pois foi utilizado
um conversor USB serial para configuração deste microcontrolador, em seguida escolha a
porta que o microcontrolador está conectada, então clique no botão verde "Connect". Na
Figura 12 pode ser visto a localização de cada botão explicado acima.
Após efetuada a conexão do microcontrolador, é preciso realizar a extração dos
arquivos binários compactados no zip3 , baixados anteriormente. Depois da extração do
aquivo, volte ao programa STM32CubeProgrammer, e clique no botão azul nomeado
como "Browse", navegue até a pasta previamente extraída, selecione a pasta F103, de-
pois a pasta low_and_medium_density e selecione o arquivo respectivo à porta indicada
pelo LED verde no microcontrolador, neste caso, o arquivo hid_generic_pc13.bin foi
3
Zip é um formato de compactação de arquivos muito difundido pela Internet.
Capítulo 4. DESENVOLVIMENTO 41

Figura 11 – Microcontrolador STM32 no modo boot

Fonte: Internet, 2021.

Figura 12 – STM32CubeProgrammer tela de configuração

Fonte: Internet, 2021.

utilizado, pois o LED do microcontrolador utilizado se encontra na porta PC13. Então


clique no botão azul nomeado como "Start Programming"para finalizar a configuração do
microcontrolador no STM32CubeProgrammer. Na Figura 13 pode ser visto a localização
de cada botão explicado acima.
Antes de desconectar o cabo USB do STM32, volte o microcontrolador para a
posição de boot original. Após realizado esses passos ainda é preciso realizar algumas con-
figurações no Arduino IDE para poder utilizar o STM32 nele. No Arduino IDE encontre
Capítulo 4. DESENVOLVIMENTO 42

Figura 13 – STM32CubeProgrammer tela de configuração

Fonte: Internet, 2021.

o menu nomeado como "Ferramentas", e configure a IDE conforme apresentado na Figura


14. Assim o microcontrolador STM32 estará pronto para uso com Arduino no Arduino
IDE.

Figura 14 – Configurações da IDE para uso do microcontrolador STM32

Fonte: O autor, 2021.

4.2.2 Driver de Motor


O driver de motor ou ponte H, nome dado por conta da típica representação gráfica
do circuito conforme apresentado na Figura 15, tem a função de determinar um sentido
de corrente e valor de tensão no controle de um motor de corrente contínua.
O driver de motor TB6612FNG, apresentado na Figura 16, foi escolhido para ser
utilizado no trabalho pelo fato de ser, pequeno, leve e ter a capacidade de controlar
independentemente dois motores de corrente contínua, sendo assim ideal para um robô
Capítulo 4. DESENVOLVIMENTO 43

Figura 15 – Ponte H

Fonte: (BUTTAY, 2006).

seguidor de linha. Podendo ser utilizado com um motor de tensão mínima e máxima
recomendada de 4.5 V a 13.5 V e saída de corrente com um pico de 3 A por canal e 1 A
contínuo, sendo assim ideal para os motores que foram escolhidos para serem utilizados
no trabalho. Abaixo estão listadas as especificações mais detalhadas do driver de motor
de acordo com a fabricante (POLOLU, 2021e).

• Canais do motor: 2

• Tensão mínima de operação: 4.5 V

• Tensão máxima de operação: 13.5 V

• Corrente de saída contínua por canal: 1 A

• Corrente de pico de saída por canal: 3 A

• Corrente de saída em paralelo contínuo: 2 A

• Frequência máxima de PWM: 100 kHz

• Tensão lógica mínima: 2.7 V

• Tensão lógica máxima: 5.5 V

• Proteção de tensão reversa: Sim

• Dimensões: 15.20 x 20.30 mm

• Peso: 1.5 g

As conexões do driver de motor, como pode ser visto na Figura 17, permitem a
conexão com o microcontrolador STM32 e os motores. Sendo o pino GND o terra que é
comum para tensão do motor e tensão lógica, o VMOT é o pino que recebe tensão de
4.5 V à 13.5 V da fonte de alimentação que alimenta os motores, o pino VCC é o que
recebe a tensão lógica de 2.7 V à 5.5 V e que se comunica com o microcontrolador, o
Capítulo 4. DESENVOLVIMENTO 44

Figura 16 – Driver de motor TB6612FNG

Fonte: (POLOLU, 2021e).

pino STBY quando recebe uma tensão lógica de HIGH permite que o driver de motor
funcione e saia do modo stand by, os pinos PWMA e PWMB controlam a potência que
será entregue a carga, sendo ela o motor, impactando diretamente na velocidade que
os motores giram, os pinos AIN1, AIN2, BIN1 e BIN2 são respectivamente as entradas
lógicas que se comunicam com o microcontrolador para determinar a direção do motor,
já os pinos AO1, AO2, BO1 e BO2 são eles que vão ser conectados aos motores. Abaixo
no Código Fonte 1 está um exemplo de código de como utilizar esse driver de motor com
dois motores conectados.

Figura 17 – Pinagem TB6612FNG

Fonte: (POLOLU, 2021e).

Código fonte 1 – Código fonte do driver de motor, que liga dois motores no sentido horário
e anti-horário.
1 #define AIN1 PA10
2 #define AIN2 PA9
3 #define PWMA PA8
4
5 #define BIN1 PB7
6 #define BIN2 PB8
7 #define PWMB PB6
8
Capítulo 4. DESENVOLVIMENTO 45

9 void setup() {
10 pinMode(AIN1, OUTPUT);
11 pinMode(AIN2, OUTPUT);
12 pinMode(PWMA, OUTPUT);
13
14 pinMode(BIN1, OUTPUT);
15 pinMode(BIN2, OUTPUT);
16 pinMode(PWMB, OUTPUT);
17
18 digitalWrite(PWMA, HIGH);
19 analogWrite(PWMA, 250);
20
21 digitalWrite(PWMB, HIGH);
22 analogWrite(PWMB, 250);
23 }
24
25 void loop() {
26 digitalWrite(AIN1, HIGH);
27 digitalWrite(AIN2, LOW);
28 digitalWrite(BIN1, HIGH);
29 digitalWrite(BIN2, LOW);
30 delay(3000);
31
32 digitalWrite(AIN1, LOW);
33 digitalWrite(AIN2, LOW);
34 digitalWrite(BIN1, LOW);
35 digitalWrite(BIN2, LOW);
36 delay(1000);
37
38 digitalWrite(AIN1, LOW);
39 digitalWrite(AIN2, HIGH);
40 digitalWrite(BIN1, LOW);
41 digitalWrite(BIN2, HIGH);
42 delay(3000);
43
44 digitalWrite(AIN1, LOW);
45 digitalWrite(AIN2, LOW);
46 digitalWrite(BIN1, LOW);
47 digitalWrite(BIN2, LOW);
48 delay(1000);
49 }

4.2.3 Sensores de Refletância


Sensores de refletância são constituídos por um LED infravermelho e um fototran-
sistor. O LED infravermelho emite um feixe de luz infravermelha, que pode ser refletido
Capítulo 4. DESENVOLVIMENTO 46

com intensidades diferentes, dependendo da superfície e do material, superfícies mais cla-


ras e lisas possuem um grau de refletância maior, diferente de superfícies escuras e rugosas.
O fototransistor tem como finalidade realizar a captura dos feixes de luz infravermelhos
emitidos pelo LED infravermelho, e enviar os sinais ao microcontrolador que interpreta
os valores obtidos identificando o tipo de superfície (GUADAGNIN, 2014).
Dois tamanhos de sensores de refletância foram escolhidos para utilização no tra-
balho, sendo um para leitura da linha, na parte frontal do robô, e outros dois para leitura
lateral das marcações na pista. Os sensores de refletância escolhidos, são sensores analó-
gicos que contam com uma alta precisão, identificando mudanças de refletância de forma
quase instantânea, sendo ideal para utilização em robôs seguidores de linha. A marca
escolhida para adquirir os sensores foi a Pololu (2021c), pois contam com sensores de
qualidade, existem dois modelos de sensores oferecido por eles, o QTR e o QTRX, sendo
basicamente o QTR um sensor que possui uma leitura ideal para 5 mm e o QTRX uma
leitura ideal para 10 mm, como os sensores de refletância dos robôs seguidores de linha
operam muito próximo ao solo, os sensores do modelo QTR acabaram se saindo melhor,
sendo eles os modelos escolhidos para serem utilizados no trabalho.
Duas placas QTR-MD-01A que contam com apenas um sensor, e uma placa QTR-
MD-08A que possuí oito sensores paralelos foram utilizadas no presente trabalho, a placa
com apenas um sensor foi utilizada para detecção das marcações laterias da pista, não
havendo necessidade de mais de um sensor apenas para a detecção das marcações, e uma
placa com oito sensores foi escolhida para detecção da linha da pista, pois havendo a
necessidade de detectar as curvas uma placa com sensores paralelos possibilita isto. Nas
Figuras 18 e 19 abaixo pode ser visto a frente e verso das placas mencionadas acima,
e em seguida estão listadas as especificações de cada sensor de acordo com a fabricante
(POLOLU, 2021c).

Figura 18 – Sensor de refletância QTR-MD-01A

Fonte: (POLOLU, 2021c).

Especificações técnicas do sensor de refletância QTR-MD-01A:


Capítulo 4. DESENVOLVIMENTO 47

• Alcance máximo: 30 mm
• Alcance ideal: 5 mm
• Tensão mínima de operação: 2.9 V
• Tensão máxima de operação: 5.5 V
• Corrente do LED: 30 mA
• Comprimento de onda de pico: 940 nm
• Consumo máximo de corrente: 32 mA
• Tipo de sensor: QTR
• Quantidade de sensores: 1
• Tipo de saída: A (tensão analógica)
• Dimensões: 7.50 x 20 x 2.5 mm
• Peso: 0.35 g

Figura 19 – Sensor de refletância QTR-MD-08A

Fonte: (POLOLU, 2021c).

Especificações técnicas do sensor de refletância QTR-MD-08A:

• Alcance máximo: 40 mm
• Alcance ideal: 5 mm
• Tensão mínima de operação: 2.9 V
• Tensão máxima de operação: 5.5 V
• Corrente do LED: 30 mA
• Comprimento de onda de pico: 940 nm
• Consumo máximo de corrente: 125 mA
Capítulo 4. DESENVOLVIMENTO 48

• Tipo de sensor: QTR


• Distância entre sensores: 8 mm
• Quantidade de sensores: 8
• Tipo de saída: A (tensão analógica)
• Dimensões: 61 x 20 x 2.5 mm
• Peso: 3.1 g

O GND é o pino terra, o pino VCC é o responsável pelo recebimento da tensão de


alimentação de 2.9 V a 5.5 V, o pino CTRL é o responsável por controlar a emissão de
luz infravermelha dos sensores e o pino S para o sensor de refletância QTR-MD-01A e os
pinos numéricos para o sensor de refletância QTR-MD-08A são os pinos de tensão lógica
analógica que enviam as informações de refletância para o microcontrolador. Abaixo no
Código Fonte 2 está um exemplo de código de como utilizar o sensor de refletância QTR-
MD-01A, e no Código Fonte 3, está um exemplo de como utilizar o sensor de refletância
QTR-MD-08A.

Figura 20 – Pinagem do sensor de refletância QTR-MD-08A

Fonte: (POLOLU, 2021c).

Figura 21 – Pinagem do sensor de refletância QTR-MD-08A

Fonte: (POLOLU, 2021c).


Capítulo 4. DESENVOLVIMENTO 49

Código fonte 2 – Código fonte que lê os valores recebidos pelo sensor de refletância QTR-
MD-01A
1 #define S0 PB1
2 #define CTRL PB13
3
4 #include <QTRSensors.h>
5
6 QTRSensors qtr;
7
8 const uint8_t SensorCount = 1;
9 uint16_t sensorValues[SensorCount];
10
11 void setup()
12 {
13 qtr.setTypeAnalog();
14 qtr.setSensorPins((const uint8_t[]){S0}, SensorCount);
15 Serial.begin(9600);
16 }
17
18
19 void loop()
20 {
21 qtr.read(sensorValues);
22
23 for (uint8_t i = 0; i < SensorCount; i++)
24 {
25 Serial.print(sensorValues[i]);
26 Serial.print('\t');
27 }
28 Serial.println();
29
30 delay(250);
31 }

Código fonte 3 – Código fonte que lê os valores recebidos por cada sensor do sensor de
refletância QTR-MD-08A
1 #define S0 PA0
2 #define S1 PA1
3 #define S2 PA2
4 #define S3 PA3
5 #define S4 PA4
6 #define S5 PA5
7 #define S6 PA6
8 #define S7 PA7
9 #define CTRL PB9
10
Capítulo 4. DESENVOLVIMENTO 50

11 #include <QTRSensors.h>
12
13 QTRSensors qtr;
14
15 const uint8_t SensorCount = 8;
16 uint16_t sensorValues[SensorCount];
17
18 void setup()
19 {
20 qtr.setTypeAnalog();
21 qtr.setSensorPins((const uint8_t[]){S0, S1, S2, S3, S4, S5, S6, S7}, SensorCount
);
22 qtr.setEmitterPin(CTRL);
23
24 Serial.begin(9600);
25 }
26
27
28 void loop()
29 {
30 qtr.read(sensorValues);
31
32 for (uint8_t i = 0; i < SensorCount; i++)
33 {
34 Serial.print(sensorValues[i]);
35 Serial.print('\t');
36 }
37 Serial.println();
38
39 delay(250);
40 }

4.2.4 Encoder
Encoder são dispositivos/sensores, que tem a funcionalidade de transformar a posi-
ção em sinal elétrico digital. Com a utilização de encoders, é possível quantizar distâncias,
controlar velocidades, medir ângulos, número de rotações, realizar posicionamentos e etc.
O encoder, apresentado na Figura 22, foi escolhido para ser utilizado no trabalho,
pois se encaixa perfeitamente nos motores que foram utilizados. O encoder possui uma
placa com sensores de efeito Hall que vai soldado nos conectores de energia do motor,
utilizando um disco magnético acoplado ao eixo do motor, próximo aos sensores de efeito
Hall, como mostrado na Figura 23, possibilitando medir até 12 contagens por revolução
do motor. Abaixo estão listadas as especificações mais detalhadas do encoder de acordo
com a fabricante (POLOLU, 2021b).
Capítulo 4. DESENVOLVIMENTO 51

Figura 22 – Encoder Magnético de Efeito Hall

Fonte: (POLOLU, 2021b).

Figura 23 – Encoder Acoplado ao Motor

Fonte: (POLOLU, 2021b).

• Tensão mínima de operação: 2.7 V

• Tensão máxima de operação: 18 V

• Conector: Macho de 6 pinos JST SH-type

• Dimensões: 14.20 × 11.60 mm

• Peso: 1.5 g

As conexões do encoder, como pode ser visto na Figura 24, permitem a conexão
com o driver de motor, motor e com microcontrolador STM32. O GND é o pino terra, o
pino VCC é o responsável pelo recebimento da tensão lógica de 2.7 V a 18 V, os pinos
M1 e M2 recebem a tensão que vem do driver de motor para alimentar o mesmo, uma
das pontas de cada pino é soldada diretamente no motor e a outra conectada ao driver
de motor, os pinos OUT A e OUT B são conectados diretamente ao microcontrolador
que recebe as tensões Hall emitidas pelo encoder magnético de efeito Hall possibilitando
a contagem. A Figura 25 exemplifica o funcionamento de um sensor de efeito Hall em
Capítulo 4. DESENVOLVIMENTO 52

um semicondutor4 , no Código Fonte 4 está um exemplo de código de como utilizar esse


encoder.

Figura 24 – Pinagem Encoder Magnético

Fonte: (POLOLU, 2021b).

Figura 25 – Efeito Hall em um Semicondutor

Fonte: (BRAGA, 2013).

Código fonte 4 – Código fonte do encoder, que faz a leitura do posicionamento da roda
individualmente para cada um dos motores.
1 #define FIRST_CHANNEL_RIGHT PB8
2 #define SECOND_CHANNEL_RIGHT PB7
3
4 #define FIRST_CHANNEL_LEFT PB13
5 #define SECOND_CHANNEL_LEFT PB14
6
7 volatile long channelStepRight = 0;
8 volatile long channelStepLeft = 0;
9
10 void setup() {
11 pinMode(FIRST_CHANNEL_RIGHT, INPUT);
4
Semicondutores são sólidos geralmente cristalinos de condutividade elétrica intermediária entre con-
dutores e isolantes.
Capítulo 4. DESENVOLVIMENTO 53

12 pinMode(SECOND_CHANNEL_RIGHT, INPUT);
13
14 pinMode(FIRST_CHANNEL_LEFT, INPUT);
15 pinMode(SECOND_CHANNEL_LEFT, INPUT);
16
17 attachInterrupt(digitalPinToInterrupt(FIRST_CHANNEL_RIGHT),
ReadFirstChannelRight, CHANGE);
18 attachInterrupt(digitalPinToInterrupt(SECOND_CHANNEL_RIGHT),
ReadSecondChannelRight, CHANGE);
19
20 attachInterrupt(digitalPinToInterrupt(FIRST_CHANNEL_LEFT), ReadFirstChannelLeft,
CHANGE);
21 attachInterrupt(digitalPinToInterrupt(SECOND_CHANNEL_LEFT),
ReadSecondChannelLeft, CHANGE);
22
23 Serial.begin(9600);
24 }
25
26 void loop() {
27 Serial.print(channelStepRight);
28 Serial.print(" - ");
29 Serial.println(channelStepLeft);
30 delay(100);
31 }
32
33 void ReadFirstChannelRight() {
34 if (digitalRead(FIRST_CHANNEL_RIGHT) == HIGH) {
35 if (digitalRead(SECOND_CHANNEL_RIGHT) == LOW) {
36 channelStepRight++;
37 } else {
38 channelStepRight--;
39 }
40 } else {
41 if (digitalRead(SECOND_CHANNEL_RIGHT) == LOW) {
42 channelStepRight--;
43 } else {
44 channelStepRight++;
45 }
46 }
47 }
48
49 void ReadSecondChannelRight() {
50 if (digitalRead(SECOND_CHANNEL_RIGHT) == HIGH) {
51 if (digitalRead(FIRST_CHANNEL_RIGHT) == HIGH) {
52 channelStepRight++;
53 } else {
54 channelStepRight--;
Capítulo 4. DESENVOLVIMENTO 54

55 }
56 } else {
57 if (digitalRead(FIRST_CHANNEL_RIGHT) == LOW) {
58 channelStepRight++;
59 } else {
60 channelStepRight--;
61 }
62 }
63 }
64
65 void ReadFirstChannelLeft() {
66 if (digitalRead(FIRST_CHANNEL_LEFT) == HIGH) {
67 if (digitalRead(SECOND_CHANNEL_LEFT) == LOW) {
68 channelStepLeft++;
69 } else {
70 channelStepLeft--;
71 }
72 } else {
73 if (digitalRead(SECOND_CHANNEL_LEFT) == LOW) {
74 channelStepLeft--;
75 } else {
76 channelStepLeft++;
77 }
78 }
79 }
80
81 void ReadSecondChannelLeft() {
82 if (digitalRead(SECOND_CHANNEL_LEFT) == HIGH) {
83 if (digitalRead(FIRST_CHANNEL_LEFT) == HIGH) {
84 channelStepLeft++;
85 } else {
86 channelStepLeft--;
87 }
88 } else {
89 if (digitalRead(FIRST_CHANNEL_LEFT) == LOW) {
90 channelStepLeft++;
91 } else {
92 channelStepLeft--;
93 }
94 }
95 }

4.2.5 Motor de Corrente Contínua


O robô seguidor de linha deve ter um torque considerável para conseguir ter uma
boa arrancada e uma alta taxa de Rotações por Minuto (RPM) para conseguir completar
Capítulo 4. DESENVOLVIMENTO 55

o percurso no menor tempo possível.


A velocidade do motor é ajustada de acordo com o feedback dos sensores de re-
fletância frontais e laterais, levando em conta também as informações obtidas através do
encoder. O motor escolhido, apresentado na Figura 26, para utilização no trabalho é espe-
cífico para utilização com um encoder, pois possui o seu eixo extendido na parte traseira
que possibilita acoplar o disco magnético do encoder para realizar as respectivas medições,
é um motor de corrente contínua de 6 V com uma alta potência que possuí escovas de
carvão de longa duração. Além de ser um motor pequeno, leve e possuir uma alta taxa de
rotações por minuto, o mesmo possuí um desempenho ideal para o fim que foi utilizado.
Abaixo estão listadas as especificações mais detalhadas do motor de corrente contínua de
acordo com a fabricante (POLOLU, 2021a).

Figura 26 – Motor de Corrente Contínua com Eixo Extendido

Fonte: (POLOLU, 2021a).

• Relação de engrenagem: 9.96:1

• Velocidade sem carga: 3300 rpm

• Corrente sem carga: 0.10 A

• Corrente de parada: 1.5 A

• Torque de parada: 0.17 kg/cm

• Potência máxima de saída: 1.3 W

• Diâmetro do Eixo: 3 mm

• Dimensões: 10 × 12 × 26 mm

• Peso: 9.5 g
Capítulo 4. DESENVOLVIMENTO 56

4.2.6 Fonte de Alimentação


As baterias de polímero de lítio ou LiPo, são baterias que contém em seus eletrólitos
sais de lítio retidos em um polímero sólido em vez de solventes tornando-as adaptáveis a
diferentes formatos e permitindo altas taxas de descarga (UNIVERSITY, 2010).
Pela necessidade de o robô seguidor de linha ter que funcionar como um sistema
embarcado, tem-se a necessidade da fonte de alimentação ser uma bateria, para isto, uma
bateria de polímero de lítio de duas células, com uma capacidade de 300 mAh, tensão
de 7.4 V e uma descarga constante de 35 C foi utilizada no trabalho, suprindo assim
toda necessidade exigida pelo sistema. Na Figura 27 pode ser vista a bateria utilizada no
trabalho.
Figura 27 – Bateria de Polímero de Lítio

Fonte: Internet, 2021.

As tensões de 5 V e 7.4 V são necessárias para suprir a necessidade do sistema,


sendo 5 V para alimentar o microcontrolador e 7.4 V para os motores. De acordo com
as necessidades um circuito básico foi projetado, a tensão que vem direto da bateria vai
para o driver de motor que alimenta diretamente os motores e também é dividida e passa
por um regulador de tensão 78M05 que converte a tensão de 7.4 V para 5 V, em seguida
passa por um capacitor eletrolítico 47uF 10 V para evitar problemas de oscilações em
alta frequência podendo assim alimentar o microcontrolador. Abaixo estão listadas as
especificações mais detalhadas da bateria.

• Capacidade: 300 mAh

• Tensão: 2 células comando 7.4 V

• Descarga contínua: 35 C

• Pico de descarga: 75 C

• Dimensões: 10 × 12 × 26 mm

• Peso: 17 g
Capítulo 4. DESENVOLVIMENTO 57

4.3 CONSTRUÇÃO FÍSICA DO ROBÔ


A construção do robô seguidor de linha foi dividida em duas partes, a conexão
de todos componentes eletrônicos e a estrutura/chassi do robô, resultando em um robô
seguidor de linha completo juntando as partes.

4.3.1 Chassi
A estrutura do robô foi modelada em um software gratuito de modelagem 3D, o
Tinkercad. Assim que modelado, foi feita uma impressão do modelo em 3D para descobrir
se alguns ajustes deveriam ser feitos. Depois dos ajustes serem feitos, o modelo foi cortado
em acrílico de 3 mm em uma máquina CNC de corte a laser. A estrutura é composta por
duas peças, sendo uma maior a principal onde vão fixados os componentes e uma menor
que serve como suporte para fixação do sensor de refletância frontal do robô. Nas Figuras
28 e 29 podem ser vistas as duas partes de compõe a estrutura do robô seguidor de linha
e na Figura 30 a seguir a estrutura completo com sua respectivas peças nos lugares.

Figura 28 – Estrutura principal do robô seguidor de linha

Fonte: O autor, 2021.

4.3.2 PCB
A PCB foi desenvolvida na ferramenta EasyEDA, com objetivo de evitar a utiliza-
ção de fios, possibilitando uma maior modulação dos componentes, facilitando assim caso
venha ocorrer algum problema. Projetada para utilização do microcontrolador STM32
que possibilita a conexão do driver de motor, sensores de refletância, encoder, fonte de
alimentação e também a utilização de outros componentes, bem como um interruptor de
energia, um botão para outras configurações e um buzzer para emissão de alguns alertas
Capítulo 4. DESENVOLVIMENTO 58

Figura 29 – Suporte para fixação do sensor de refletância

Fonte: O autor, 2021.

Figura 30 – Estrutura completa com as peças em seus respectivos lugares

Fonte: O autor, 2021.

sonoros. Para controlar a transmissão de tensão para o microcontrolador, um regulador de


tensão 78M05 é soldado à PCB, que converte a tensão de 7.4 V vinda da fonte de alimen-
tação para uma tensão de 5 V, em seguida passa por um capacitor eletrolítico 47uF 10 V
para evitar problemas com oscilações de alta frequência, a transmissão de tensão para os
motores vem direto da bateria de 7.4 V, que passa pelo driver de motor consequentemente
enviando a tensão diretamente aos motores.
Capítulo 4. DESENVOLVIMENTO 59

A PCB foi projetada durante o desenvolvimento do projeto, a fim de facilitar a


manutenção do projeto, pois há uma grande modulação entre os componentes, podendo
trocar somente algumas partes caso necessário. As conexões fêmea e macho para o encaixe
do STM32, driver de motor, sensor de refletância foram soldadas a placa, junto a alguns
componentes genéricos, sendo eles o buzzer, regulador de tensão, capacitor eletrolítico,
interruptor, botão e os fios da fonte de alimentação.
Desenvolvida em duas faces, a PCB, em um pequeno espaço consegue realizar
todas conexões necessárias para o funcionamento correto dos componentes, uma das faces é
responsável pela alimentação dos componentes e outra pela tensão lógica dos componentes.
A face superior é responsável pela distribuição da alimentação entre os compo-
nentes, por possuir uma malha de aterramento com baixa resistência elétrica consegue
estabilizar a tensão entre todos os componentes. Como ilustrado na Figura 31, a parte
vermelha é a malha de aterramento, polo negativo, e as trilhas são as conexões de alimen-
tação dos componentes, polo positivo.

Figura 31 – Face superior da PCB

Fonte: O autor, 2021.

A face inferior é responsável pela distribuição da tensão lógica no sistema. Todos os


componentes estão conectados em suas respectivas portas ao STM32, sendo elas digitais
Capítulo 4. DESENVOLVIMENTO 60

ou analógicas. Como ilustrado na Figura 32, as trilhas azuis são as conexões lógicas feitas
entre o STM32 e os respectivos componentes.

Figura 32 – Face inferior da PCB

Fonte: O autor, 2021.

Após a PCB ser projetada no software de prototipagem de placa EasyEDA, o pro-


jeto da PCB foi enviado para uma empresa chinesa, chamada JLCPCB, para a fabricação.
Na Figura 33 e 34 é possível visualizar a PCB em sua real versão após ser fabricada.

4.3.3 Conexão dos Componentes


Para construção do robô, um chassi foi desenvolvido para comportar todas as
partes, a conexão de todos componentes ao microcontrolador STM32 se dá através da
PCB que é fixada por alguns parafusos a orifícios pré projetados no chassi. O sensor de
refletância frontal é parafusado a um suporte antes de ser parafusado a ponta do chassi,
o suporte serve para proteger o sensor de possíveis acidentes, já os sensores de refletância
laterais são presos diretamente no chassi com parafusos. Cada motor foi fixado no chassi
com dois parafusos e um suporte, como pode ser visto na Figura 35, e na ponta de seu
eixo foi acoplada uma roda de borracha, como pode ser vista na Figura 36, com dureza
Capítulo 4. DESENVOLVIMENTO 61

Figura 33 – Face superior da PCB, após ser fabricada.

Fonte: O autor, 2021.

Figura 34 – Face inferior da PCB, após ser fabricada.

Fonte: O autor, 2021.

de 20 D. A bateria foi fixada no chassi com uma fita de velcro acoplada na traseira do
robô, facilitando a troca de bateria.
Capítulo 4. DESENVOLVIMENTO 62

Figura 35 – Suporte do motor

Fonte: Internet, 2021.

Figura 36 – Roda de borracha

Fonte: (POLOLU, 2021d).

Na Figura 37 pode ser visto o robô seguidor de linha com todos os componentes
conectados em sua versão final.
Capítulo 4. DESENVOLVIMENTO 63

Figura 37 – Robô seguidor de linha desenvolvido no trabalho

Fonte: O autor, 2021.


64

5 RESULTADOS

Neste capítulo serão demonstrados os resultados obtidos através do desenvolvi-


mento no Capítulo 4, por meio de testes de performance e desempenho serão avaliados os
resultados da solução proposta, através dos conhecimentos obtidos durante o desenvolvi-
mento do trabalho.
Com o propósito de analisar o desempenho e a performance do microcontrolador
STM32, um Blue Pill, que utiliza o STM32 como microcontrolador e um Arduino Nano
3.0, que utiliza um ATmega328 como microcontrolador, foi utilizado para fins compara-
tivos, pois este é um microcontrolador frequentemente utilizado em inúmeros projetos de
robótica, dentre eles os robôs seguidores de linha, além de ter sido utilizado em vários
projetos do grupo de robótica Wickedbotz (2020), inclusive em robôs seguidores de linha
do grupo.
O microcontrolador STM32 foi projetado para ser de baixo custo e funcionar com
um baixo consumo de energia, por conta de o STM32 ter mais portas que o ATmega328
ele abre mais possibilidades para utilização de componentes conjuntos, logo, mais fun-
cionalidades para o projeto que o utiliza. Também possui uma vantagem em relação ao
hardware do microcontrolador ATmega328, como pode ser visto na Tabela 4.
Apesar de todos os prós encontrados no microcontrolador STM32 em relação as
portas e hardware com maior capacidade de processamento, do que o microcontrolador
ATmega328, a configuração entretanto precisa ser feita com um conversor USB serial,
fazendo assim que a curva de aprendizado seja razoavelmente superior a de um Arduino
por exemplo, já que o Arduino funciona quase que instantaneamente após ser plugado e
ter feito pequenas configurações em sua IDE.
A Tabela 4 se refere a um comparativo técnico entre os microcontroladores STM32
e ATmega328. Os dados foram obtidos através do site oficial dos fabricantes STMicroele-
trnoics (2021) e Arduino (2021).

Tabela 4 – Comparativo técnico entre os microcontroladores

Blue Pill (STM32) Arduino Nano 3.0 (ATmega328)


Velocidade CPU: 72MHz; Velocidade CPU: 16MHz;
Memória Flash 64KB; Memória Flash 32KB;
SRAM: 20KB; SRAM: 2KB;
ADC: 12-bit; ADC: 10-bit;
GPIO: 33; GPIO: 22;
Peso: 6,5 g; Peso: 7 g;
Dimensões: 22 mm x 53 mm; Dimensões: 18 mm x 45 mm;
Capítulo 5. RESULTADOS 65

Um algoritmo de teste, que terá como métrica a verificação da média aritmética


do tempo de execução em microsegundos (us), em três iterações1 com de dez mil iterações
cada, será utilizado para fazer um comparativo de performance entre os dois microcon-
troladores.
O código para teste de performance foi desenvolvido com base em um algoritmo
disponível no repositório do GitHub Gist, que pode ser acessado através da URL a seguir:
https://gist.github.com/SyncChannel/1e509ae9e8a34cc1e56a. O código desenvol-
vido faz o uso de algumas funções nativas implementadas pelo Arduino para fazer o
comparativo de performance entre os microcontroladores. Para ter acesso ao código que
foi utilizado nos testes, é possível acessar o repositório do GitHub através da URL a
seguir: https://github.com/pedropaulovtz/teste-microcontrolador. Os resultados
obtidos através do algoritmo desenvolvido podem ser vistos na Figura 38 e na Figura 39.

Figura 38 – Resultados obtidos com a execução do algoritmo no microcontrolador STM32

Fonte: O autor, 2021.

Figura 39 – Resultados obtidos com a execução do algoritmo no microcontrolador AT-


mega328

Fonte: O autor, 2021.

No comparativo pode-se perceber que o microcontrolador STM32 executou mais


rapidamente as iterações, apenas ficando ligeiramente atrás do microcontrolador AT-
mega328 nos testes com a função pinMode(), no geral o STM32 obteve uma vantagem
1
É o processo chamado na programação de repetição de uma ou mais ações.
Capítulo 5. RESULTADOS 66

no tempo de execução das iteração das demais funções comparado ao microcontrolador


ATmega328, conforme apresentado na Tabela 5.

Tabela 5 – Comparativo dos resultados obtidos em microsegundos através da execução


do algoritmo de teste de performance aplicado aos microcontroladores.

Função STM32 ATmega328


pinMode() 36.77 us 28.67 us
digitalRead() 6.77 us 29.40 us
digitalWrite() 6.37 us 37.73 us
analogRead() 466.10 us 672.00 us
analogWrite() 8.17 us 29.47 us
67

6 CONCLUSÃO

Com o intuito de auxiliar os alunos do grupo de robótica Wickedbotz (2020), em


competições ou projetos futuros, e também para fins acadêmicos na disciplina do PAC,
foi proposta a utilização de outra opção de microcontrolador para criação de um robô
seguidor de linha, o STM32, que por si só garante uma maior performance, comparado a
maioria dos microcontroladores utilizados em projetos anteriores da Wickedbotz (2020).
Mas neste caso, foi comparado a um microcontrolador bastante utilizado em projetos de
robótica no geral, o microcontrolador ATmega328, encontrado tanto no Arduino Nano,
quanto no conhecido Arduino Uno.
Conforme solicitado pelos objetivos específicos, o robô com seus componentes e
suas funcionalidades conseguem atender aos requisitos propostos, sendo eles: mapear a
pista e calcular dados da pista, pois conta com um encoder para auxiliar neste processo;
percorrer a pista seguindo a linha e avisar sonoramente quando estiver passando por
demarcações na pista, pois conta com sensores infravermelhos frontais e laterais; e também
conta com o STM32 para realizar os cálculos necessários.
A utilização do microcontrolador STM32, comparado ao microcontrolador AT-
mega328 (que também é utilizado em projetos de robô seguidor de linha pela Wickedbotz
(2020)) trouxe resultados satisfatórios, pois como descrito no Capítulo 5 na Tabela 4, o
microcontrolador STM32 possui um hardware superior e com maior capacidade de pro-
cessamento, além de ser mostrar mais eficiente nos testes realizados no capítulo anterior,
comparado ao microcontrolador ATmega328.
De acordo com os testes realizados com o microcontrolador STM32 empregado a
um robô seguidor de linha, pode-se concluir que o objetivo geral do trabalho foi atingido.
Além de conseguir resultados de performance mais satisfatórios do que o do microcon-
trolador ATmega328 utilizado pela equipe Wickedbotz (2020), o número de portas do
STM32 possibilita empregar novos componentes ao robô, trazendo a ele novas funciona-
lidades. Salvo também os conhecimentos de robótica por mim adquiridos ao decorrer do
desenvolvimento do trabalho.

6.1 TRABALHOS FUTUROS


Com o resultados do desenvolvimento do projeto, foi possível identificar melhorias
e novas funcionalidades a serem implementadas em projetos futuros do robô, bem como:

• Utilizar a PCB como estrutura do robô.


Capítulo 6. CONCLUSÃO 68

• Melhorar a PCB ou corrigir algum problema que a placa atual venha apresentar.

• Testar estratégias de utilização do encoder para melhorar a eficiência no percurso.

• Testar o robô desenvolvido em uma competição oficial.

• Aplicar orientação a objetos em um código desenvolvido para o robô seguidor de


linha.
69

Referências

ARDUINO. Arduino Software IDE. 2020. (Acesso em 21/06/2020). Disponível em:


<https://www.arduino.cc/en/software>. Citado na página 25.

ARDUINO. The classic Arduino Nano is the smallest board to build your projects with.
2021. (Acesso em 03/07/2021). Disponível em: <https://store.arduino.cc/usa/arduino-
nano>. Citado na página 64.

BRAGA, N. C. Descrição do efeito Hall em semicondutor. 2013. (Acesso em 27/05/2021).


Disponível em: <https://upload.wikimedia.org/wikipedia/commons/3/38/EfeitoHall-
.jpg>. Citado na página 52.

BUTTAY, C. H-Bridge. 2006. (Acesso em 25/05/2021). Disponível em: <https://upload-


.wikimedia.org/wikipedia/commons/thumb/d/d4/H bridge.svg/256px-H bridge.svg-
.png>. Citado na página 43.

CHACON, S.; STRAUB, B. Pro Git. second. Apress, 2014. (Acesso em 26/06/2020).
Disponível em: <https://git-scm.com/book/en/v2>. Citado na página 26.

DYNAPAR. O que é Encoder? 2021. (Acesso em 20/05/2021). Disponível em:


<https://www.dynaparencoders.com.br/blog/o-que-e-encoder/>. Citado na página 28.

EASYEDA. EasyEDA - PCB design simulação de circuitos online. 2021. (Acesso em


01/07/2021). Disponível em: <https://easyeda.com/pt>. Citado na página 25.

ENGIN, M.; ENGIN, D. Path planning of line follower robot. In: IEEE. 2012 5th
European DSP Education and Research Conference (EDERC). [S.l.], 2012. p. 1–5.
Citado 2 vezes nas páginas 17 e 23.

FERRI, G.; FERREIRA, F.; DJAPIC, V. Multi-domain robotics competitions: The


CMRE experience from SAUC-E to the European Robotics League Emergency Robots.
OCEANS 2017 - Aberdeen, v. 2017-October, p. 1–7, 2017. Citado na página 17.

GONÇALVES, S.; BOEIRA, H. Ferramenta para Gerenciamento de Requisitos em


Metodologias Ágeis. v. 32, p. 148–155, 2008. Citado na página 19.

GUADAGNIN, A. J. Controle híbrido de um robô seguidor de linha. Dissertação (B.S.


thesis) — Universidade Tecnológica Federal do Paraná, 2014. Citado 2 vezes nas páginas
28 e 46.

GUDWIN, R. R. Engenharia de Software: Uma Visão Prática. 2015. Citado na página


33.

GUEDES, G. T. UML 2-Uma abordagem prática. [S.l.]: Novatec Editora, 2018. Citado
2 vezes nas páginas 34 e 35.

JADAN, H. I. V.; VERA, C. R. M. Diseño e implementación de un robot velocista de


competencia sobre plataforma fpga. Espol, 2015. Citado 2 vezes nas páginas 23 e 24.

JÚNIOR, W. M. P. Engenharia de software. 2010. Citado na página 33.


Referências 70

KJELDSEN, R. F. Generic STM32F103C boards. 2020. (Acesso em 26/06/2020).


Disponível em: <http://reblag.dk/stm32/>. Citado na página 27.

LAGE, N. O.; MARTINS, C. E. Gerência de projetos: teoria e prática. Escola Nacional


de Administração Pública (ENAP), 2014. Citado na página 30.

LEE, C.-S. et al. A hands-on laboratory for autonomous mobile robot design courses.
IFAC Proceedings Volumes, Elsevier, v. 41, n. 2, p. 9743–9748, 2008. Citado na página
20.

LOUBAK, A. L. Como funciona o Trello? Saiba tudo sobre programa para organizar
projetos. 2019. (Acesso em 20/05/2021). Disponível em: <https://www.techtudo.com-
.br/listas/2019/10/como-funciona-o-trello-saiba-tudo-sobre-programa-para-organizar-
projetos.ghtml>. Citado na página 26.

OTAVIO, J.; GENARI, S.; FERRARI, F. C. Times de alto desempenho no contexto das
metodologias Scrum e Kanban. p. 200–208, 2015. Citado na página 19.

PINTO, S. C.; EGUTI, C. Controle fuzzy para robô seguidor de linha. XIX Encontro de
Iniciação Científica e Pós-Graduação do ITA (ENCITA), 2013. Citado na página 22.

POLOLU. 10:1 Micro Metal Gearmotor HPCB 6V with Extended Motor Shaft. 2021.
(Acesso em 27/05/2021). Disponível em: <https://www.pololu.com/product/3071>.
Citado na página 55.

POLOLU. Magnetic Encoder. 2021. (Acesso em 20/05/2021). Disponível em: <https:-


//www.pololu.com/product/4761>. Citado 5 vezes nas páginas 28, 29, 50, 51
e 52.

POLOLU. Pololu QTR Reflectance Sensors. 2021. (Acesso em 31/05/2021). Disponível


em: <https://www.pololu.com/category/123/pololu-qtr-reflectance-sensors>. Citado 3
vezes nas páginas 46, 47 e 48.

POLOLU. Solarbotics RW2 Wheel (external set screw). 2021. (Acesso em 11/06/2021).
Disponível em: <https://www.pololu.com/product/642>. Citado na página 62.

POLOLU. TB6612FNG Dual Motor Driver Carrier. 2021. (Acesso em 25/05/2021).


Disponível em: <https://www.pololu.com/product/0713>. Citado 2 vezes nas páginas
43 e 44.

PRODANOV, C. C.; FREITAS, E. C. de. Metodologia do trabalho científico: métodos


e técnicas da pesquisa e do trabalho acadêmico-2ª Edição. [S.l.]: Editora Feevale, 2013.
Citado na página 18.

ROBOCORE. Regras Seguidor de Linha. 2016. (Acesso em 24/05/2021).


Disponível em: <https://www.robocore.net/upload/attachments-
/robocore regras seguidor de linha 108.pdf>. Citado na página 36.

SAADATMAND, S. et al. Autonomous Control of a Line Follower Robot Using a


Q-Learning Controller. n. ii, p. 0556–0561, 2020. Citado 3 vezes nas páginas 16, 22 e 23.

SOMMERVILLE, I. Engenharia de Software. 9o Edição. [S.l.]: Pearson Education-BR,


2011. Citado 2 vezes nas páginas 31 e 32.
Referências 71

STMICROELECTRONICS. STM32F103 - STMicroelectronics. 2020. (Acesso em


26/06/2020). Disponível em: <https://www.st.com/en/microcontrollers-microprocessors-
/stm32f103.html>. Citado na página 27.

STMICROELETRNOICS. Mainstream Performance line, Arm Cortex-M3 MCU with


64 Kbytes of Flash memory, 72 MHz CPU, motor control, USB and CAN. 2021.
(Acesso em 03/07/2021). Disponível em: <https://www.st.com/en/microcontrollers-
microprocessors/stm32f103c8.html>. Citado na página 64.

SU, J.-H. et al. An intelligent line-following robot project for introductory robot courses.
World Transactions on Engineering and Technology Education, v. 8, n. 4, p. 455–461,
2010. Citado 2 vezes nas páginas 21 e 22.

TAX, N. et al. Proceedings of SAI Intelligent Systems Conference (IntelliSys) 2016.


v. 16, n. September, p. 21–22, 2018. Disponível em: <http://link.springer.com/10.1007-
/978-3-319-56991-8>. Citado na página 16.

TINKERCAD. Tinkercad - Crie projetos digitais 3D com CAD online. 2021. (Acesso em
01/07/2021). Disponível em: <https://www.tinkercad.com/>. Citado na página 25.

TOSTA, O. et al. Projeto e implementação de um robô autônomo seguidor de linha


baseado em visão computacional. 2016. Citado 2 vezes nas páginas 24 e 25.

TRELLO. Introdução ao Trello. 2021. (Acesso em 14/05/2021). Disponível em:


<https://trello.com/guide>. Citado na página 26.

UNIVERSITY, B. Is Lithium-ion the Ideal Battery? 2010. (Acesso em


28/05/2021). Disponível em: <https://batteryuniversity.com/index.php/learn-
/archive/is lithium ion the ideal battery>. Citado na página 56.

VASCONCELOS, A.; MOURA, H. Processos , Qualidade e Gestão de Software. 2009.


Citado na página 30.

WICKEDBOTZ. Wickedbotz: O maior grupo de robótica de Santa Catarina. 2020.


(Acesso em 24/04/2020). Disponível em: <http://www.wickedbotz.com.br/>. Citado 6
vezes nas páginas 16, 17, 18, 30, 64 e 67.

ZANELLA, L. C. H. Metodologia da pesquisa. [S.l.]: SEAD/UFSC, 2006. Citado na


página 18.

Você também pode gostar