Escolar Documentos
Profissional Documentos
Cultura Documentos
DESENVOLVIMENTO DE UM ROBÔ
SEGUIDOR DE LINHA UTILIZANDO UM
MICROCONTROLADOR STM32
Joinville
2021
PEDRO PAULO VATRAZ
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.
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.
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
PD Proporcional Derivativo 1
SA Simulated Annealing 1
SO Sistema Operacional 1
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
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
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.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
𝑑𝑒(𝑡)
𝑢(𝑡) = 𝐾𝑝 𝑒(𝑡) + 𝐾𝑑 (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.2)
𝑥𝑚𝑎𝑥,𝑖 − 𝑥𝑚𝑖𝑛,𝑖
∑︀𝑛
𝑥𝑖 𝑦 𝑖
𝑥 = ∑︀𝑖=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
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.
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.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
2.2.1.2 EasyEDA
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
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
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
18
É um dispositivo utilizado em conversão de energia de uma natureza para outra.
Capítulo 2. FUNDAMENTAÇÃO 29
3 PROJETO
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.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.
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.
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
4 DESENVOLVIMENTO
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
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
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 15 – Ponte H
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
• 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
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.
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 }
• 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
• 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
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
• 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
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 }
• Diâmetro do Eixo: 3 mm
• Dimensões: 10 × 12 × 26 mm
• Peso: 9.5 g
Capítulo 4. DESENVOLVIMENTO 56
• 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.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.
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
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.
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
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
5 RESULTADOS
6 CONCLUSÃO
• Melhorar a PCB ou corrigir algum problema que a placa atual venha apresentar.
Referências
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.
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.
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.
GUEDES, G. T. UML 2-Uma abordagem prática. [S.l.]: Novatec Editora, 2018. Citado
2 vezes nas páginas 34 e 35.
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. 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.
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.
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.