Buscar

Robô Seguidor de Linha Com PIC18F4550 Pedro Bezerra e Mauricio

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

INSTITUTO FEDERAL DO CEARÁ – IFCE CAMPUS SOBRAL 
CURSO DE TECNOLOGIA EM MECATRÔNICA INDUSTRIAL 
 
 
 
 
 
MAURÍCIO ALBUQUERQUE MOURA 
PEDRO SANTIAGO BEZERRA FERREIRA 
 
 
 
 
 
 
 
SEGUIDOR DE LINHA CONTROLADO POR MICROCONTROLADOR PIC 
18F4550 
 
 
 
 
 
 
 
 
 
 
SOBRAL, 2018 
1 
 
MAURÍCIO ALBUQUERQUE MOURA 
PEDRO SANTIAGO BEZERRA FERREIRA 
 
 
 
 
 
 
 
SEGUIDOR DE LINHA CONTROLADO POR MICROCONTROLADOR PIC 
18F4550 
 
Relatório técnico apresentado como requisito 
parcial para obtenção da aprovação na 
disciplina de Microprocessadores e 
Microcontroladores, no Curso de Mecatrônica 
Industrial, no Instituto Federal do Ceará. 
Prof. Me.: Aldinei Aragão. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
SOBRAL, 2018 
2 
 
RESUMO 
Este trabalho apresenta o projeto de um seguidor de linha utilizando um microcontrolador 
PIC18F4550 para realizar o controle necessário e o funcionamento do mesmo. Além disso, foi 
usado servo motores para movimentar as rodas e dois tipos de sensores, um sensor de refletância 
e dois sensores de obstáculos infravermelho reflexivo para verificar a linha. Foi confeccionado 
a placa e montado o protótipo, que funcionou corretamente como solicitado. Foi encontrado 
algumas dificuldades, uma delas seria como selecionar a bateria mais adequada e a verificação 
do funcionamento dos sensores para essa aplicação. 
Palavras-chave: Seguidor de Linha, microcontrolador PIC18F4550, sensor, servo motor. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3 
 
SUMÁRIO 
 
1 INTRODUÇÃO ..................................................................................................................... 6 
2 DESENVOLVIMENTO ........................................................................................................ 6 
2.1 FUNDAMENTAÇÃO TEÓRICA ....................................................................................... 6 
2.1.1 Robôs Móveis ................................................................................................................... 6 
2.1.2 Robô seguidor de linha .................................................................................................... 8 
2.1.3 Microcontroladores ......................................................................................................... 9 
2.1.4 Servo motor .................................................................................................................... 13 
2.1.5 Sensor .............................................................................................................................. 14 
2.1.6 PWM ............................................................................................................................... 15 
2.2 OBJETIVO ......................................................................................................................... 16 
2.3 METODOLOGIA ............................................................................................................... 16 
2.4 MATERIAIS E MÉTODOS ............................................................................................. 16 
2.4.1 Dispositivos eletrônicos ................................................................................................. 17 
2.4.1.1 Servo motor .................................................................................................................. 17 
2.4.1.2 Sensores ....................................................................................................................... 18 
2.4.2 Lógica do projeto ........................................................................................................... 22 
2.4.3 Aparato montado para a fase de testes ........................................................................ 25 
2.4.4 Construção da placa ...................................................................................................... 26 
2.5 RESULTADOS ................................................................................................................. 28 
2.5.1 Montagem prática ......................................................................................................... 28 
2.5.3 Circuitos para os testes práticos ................................................................................... 29 
2.5.3 Resultados práticos ........................................................................................................ 31 
3 CONCLUSÕES E RECOMENDAÇÕES ......................................................................... 34 
REFERÊNCIAS ..................................................................................................................... 35 
ANEXO I – Código fonte utilizando três sensores .............................................................. 37 
ANEXO II – Código fonte utilizando dois sensores digitais ............................................... 43 
 
 
 
 
4 
 
LISTA DE FIGURAS 
 
Figura 1 – Robô móvel terrestre com pernas. ............................................................................. 7 
Figura 2 – Robô móvel terrestre com esteira. ............................................................................. 7 
Figura 3 – Robô móvel terrestre com rodas. .............................................................................. 8 
Figura 4 – Robô seguidor de linha.............................................................................................. 8 
Figura 5 – Família dos microcontroladores Microchip PIC. ...................................................... 9 
Figura 6 – Microcontrolador PIC18F4550. .............................................................................. 10 
Figura 7 – Pinos do PIC18F4550. ........................................................................................... 11 
Figura 8 – Diagrama de Bloco do PIC18F4550. ...................................................................... 12 
Figura 9 – Servo motor com vista interna. ............................................................................... 13 
Figura 10 – Sinais de controle do servo motor. ........................................................................ 14 
Figura 11 – Componentes internos do servo motor. ................................................................. 14 
Figura 12 – Sinal PWM. ........................................................................................................... 15 
Figura 13 - Servo motor utilizado (SpringRC SM-S4303R Continuous Rotation Servo) ....... 17 
Figura 14 - Informações do servo motor .................................................................................. 18 
Figura 15 - Sensor de Refletância QTR-1A ............................................................................. 19 
Figura 16 - Esquemático do sensor de Refletância QTR-1A ................................................... 19 
Figura 17 - Sensor de obstáculo Infravermelho reflexivo (series flying fish) .......................... 21 
Figura 18- Detalhes do sensor .................................................................................................. 21 
Figura 19 - Esquemático do sensor de obstáculo infravermelho reflexivo .............................. 21 
Figura 20 - Kit utilizado para os testes ..................................................................................... 25 
Figura 21 – Aparato montado ................................................................................................... 26 
Figura 22 – Esquemático completo da placa do protótipo. ...................................................... 27
Figura 23 – Placa completa do projeto ..................................................................................... 27 
Figura 24 - Chassi utilizado ...................................................................................................... 28 
Figura 25 - Projeto finalizado ................................................................................................... 29 
Figura 26 - Circuito 1 ............................................................................................................... 29 
Figura 27 - Circuito 2 ............................................................................................................... 30 
Figura 28 - Circuito 3 ............................................................................................................... 30 
Figura 29 - Fonte de alimentação do projeto ............................................................................ 31 
Figura 30 - Tempo de 2 ms ....................................................................................................... 32 
Figura 31 - Tempo de 0,8 ms .................................................................................................... 32 
Figura 32 - Tempo de 3 ms ....................................................................................................... 33 
Figura 33 - Saída dos dois servos motores ............................................................................... 33 
 
 
 
 
 
5 
 
LISTA DE TABELAS 
 
Tabela 1 - Dados do servo motor ............................................................................................. 18 
Tabela 2 - Especificações do sensor de refletância QTR-1A ................................................... 20 
Tabela 3 – Especificações do sensor de obstáculo infravermelho reflexivo ............................ 22 
Tabela 4 - Lógica dos sensores ................................................................................................. 25 
Tabela 5 – Componentes utilizados na placa do protótipo. ...................................................... 26 
Tabela 6 – Descrição dos pinos de saída. ................................................................................. 28 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6 
 
1 INTRODUÇÃO 
 
 Nos últimos anos tem se elevado a presença de robôs nas indústrias, isto se deve ao fato 
de essas máquinas serem capaz de executar e suprir com eficiência as tarefas humanas. Em 
2017, foram comercializados 381 mil robôs industriais em todo o mundo. O número representou 
um recorde de vendas desses produtos e um aumento de 30% em relação ao ano de 2016 
(AGÊNCIA BRASIL, 2018). 
 Robôs móveis têm sido tema de pesquisas e de desenvolvimento tecnológico dos 
últimos anos, pois os mesmos são bastante utilizados em diversas áreas de aplicação que trazem 
melhorias para o ser humano. Desses robôs podemos citar o seguidor de linha, na qual um robô 
com rodas percorre um trajeto específico definido através de uma linha. 
 Este trabalho visa a apresentação dos conceitos e criação de um robô seguidor de linha 
controlado por um microcontrolador PIC guiado por sensores. Tendo em vista uma estrutura 
quase pronta para uso, necessitando apenas a implementação da união das partes e controle. 
2 DESENVOLVIMENTO 
 
2.1 FUNDAMENTAÇÃO TEÓRICA 
 
2.1.1 Robôs Móveis 
 Segundo Pscheidt (2007), robô é a máquina controlada por computador e são 
programadas para mover, manipular objetos e realizar diversos trabalhos. A ideia em usar um 
robô é que ele executa tarefas mais rápidas que um ser humano de modo barato, mais eficiente 
em determinados momentos e capaz de executar tarefas repetitivas sem acusar cansaço ou 
qualquer outro desgaste que um ser humano teria. O robô móvel, como o próprio nome já diz, 
é o robô tem a capacidade de se movimentar ao redor do seu ambiente. 
 Alguns robôs podem funcionar sobre circunstâncias menos controladas do que outros 
robôs, eles possuem diversos sensores que lhes permitem captar informações do ambiente. Os 
robôs móveis podem ser classificados pela sua anatomia (aquáticos, aéreos e terrestres), 
funcionalidade (pessoais, serviços, campos e industriais) e tipo de controle (tele operados, 
semiautônomos e autônomos). Para esse trabalho, o robô implementado é classificado por 
terrestre. 
7 
 
 Os robôs terrestres podem ser com pernas, com esteiras e com rodas. Com pernas são 
utilizados em ambientes como escadas, subidas, entre outras aplicações que movam pelo chão. 
A desvantagem desse tipo de robô está nas articulações e mobilidades das pernas. A Figura 1 
mostra um robô com pernas. Os robôs com esteiras são mais utilizados para aplicações em 
ambientes com solos irregulares e pode ser visto na Figura 2, o problema está no alto consumo 
de energia da esteira. As máquinas terrestres com rodas são os mais utilizados, pois são os mais 
simples de serem implementados de acordo com o projeto solicitado, esse robô pode ser visto 
na Figura 3. São aplicados em terrenos irregulares, brinquedos e, até mesmo em chão de fábrica 
(PSCHEIDT, 2007). Sabendo disso, o robô realizado nesse trabalho tem como classificação 
móvel, terrestre com rodas, mais conhecido como robô seguidor de linha. 
Figura 1 – Robô móvel terrestre com pernas. 
 
Fonte: (SOMAI, Acesso em 2018). 
Figura 2 – Robô móvel terrestre com esteira. 
 
Fonte: (ROBÓTICA, Acesso em 2018). 
 
8 
 
Figura 3 – Robô móvel terrestre com rodas. 
 
Fonte: (DIRECT INDUSTRY, Acesso em 2018). 
2.1.2 Robô seguidor de linha 
 O seguidor de linha ou seguidor de trilhas são robôs pré-programados cuja função é, 
através da leitura de sensores, detectar onde existe um caminho em uma superfície ou uma linha 
e seguir este caminho. A Figura 4 apresenta um exemplo de seguidor de linha. É possível 
observar através da imagem que o robô tende a seguir em frente enquanto estiver “enxergando” 
a linha preta na superfície. 
 Esse sistema depende diretamente de como foi realizado a programação do mesmo e 
como os sensores estão detectando a linha e enviando as respostas para o microcontrolador. 
Lembrando que geralmente utiliza linhas brancas ou pretas e que, a partir disso, realiza o código 
responsável pelo controle do robô. Normalmente esse robô é possui um microcontrolador para 
realizar todo o controle, sensores para detectarem a linha, estrutura do chassi e rodas, motor 
para rodas, além de outros componentes inseridos junto aos citados. Nos tópicos seguintes serão 
descritos todos esses componentes. 
Figura 4 – Robô seguidor de linha. 
 
Fonte: (FILIPEFLOP, Acesso em 2018). 
9 
 
2.1.3 Microcontroladores 
 Os Microcontroladores são dispositivos eletrônicos capazes de realizar controle de 
máquinas e equipamentos eletroeletrônicos através de programas. São dispositivos que reúnem, 
em um único circuito integrado, diversos componentes de um sistema computacional 
simplificado. Em outras palavras, podemos afirmar que um microcontrolador é um pequeno 
microcomputador integrado em um único chip. Por se tratar de um componente programável, é 
bem versátil, podendo ser empregado em aplicações das mais diversas (CORTELETTI, 2006). 
 A empresa mais conhecida e com mais tipos de microcontroladores no mercado é a 
Microchip Technology Inc. É uma empresa de grande porte, com sede em Arizona nos Estados 
Unidos da América. É uma empresa de expressiva participação no mercado de 
microcontroladores e semicondutores analógicos. Entre seus principais produtos, destaca-se o 
microcontrolador PIC® (Periferal Interface Controler), que possui uma boa diversidade de 
recursos,
capacidades de processamento, custo e flexibilidade de aplicações. Os 
microcontroladores PIC estão classificados em famílias, cada qual com uma característica 
relativa à sua performance e funcionalidade. A Figura 5 apresenta a família dos principais 
microcontroladores da Microchip (MICROCHIP TECHNOLOGY INC., Acesso em 2018). 
Figura 5 – Família dos microcontroladores Microchip PIC. 
 
Fonte: (MICROCHIP TECHNOLOGY INC., Acesso em 2018). 
10 
 
 O microcontrolador utilizado no projeto do presente relatório também foi fabricado pela 
Microchip, o PIC18F4550 de alto desempenho, memória flash aprimorada com tecnologia USB 
e pode ser visto na Figura 6. Segundo Miyadaira (2009), o PIC18F4550 é construído com base 
da arquitetura Harvard com instruções do tipo RISC (Computer com Conjunto Reduzido de 
Instruções), contém 8 bits dotado de 32 Kbytes de memória de programa e 2.048 bytes de 
memória RAM. Pode ser alimentado com tensões entre 4 V e 5.5 V, além de operar em 
frequência de até 48 MHz ou por um cristal associado com o bloco PLL. 
 Além disso, possui um oscilador interno de 8 MHz, que pode ser derivado em 8 MHz, 
4 MHz, 2 MHz, 1 MHz, 500 kHz, 250 kHz, 125 kHz e 31 kHz. Onde possui 40 pinos, dos quais 
35 podem ser configurados como entrada e saída, e diversos periféricos, tais como memória 
EEPROM de 256 bytes, os pinos podem ser vistos na Figura 7. Possui módulos CCP, ECCP, 
SPI e I2C com 13 conversores A/D de 10 bits de resolução com tempo de aquisição 
programável, dois comparadores analógicos, uma comunicação EUSART, um TIMER de 8 bits 
(TIMER2) e três de 16 bits (TIMER0, TIMER1 e TIMER3). Assim como um módulo de 
detecção de alta/baixa tensão, um módulo USB 2.0 capaz de operar no modo low-speed (1.5 
Mbps) ou full-speed (12 Mbps) (MIYADAIRA, 2009). 
Figura 6 – Microcontrolador PIC18F4550. 
 
Fonte: (MICROCHIP TECHNOLOGY INC., Acesso em 2018). 
 
 
 
 
11 
 
Figura 7 – Pinos do PIC18F4550. 
 
Fonte: (DATASHEET PIC18F4550, 2007). 
 As demais informações sobre o PIC18F4550 podem ser vistas no Datasheet, acima 
foram mostradas as principais informações. O diagrama de blocos desse microcontrolador pode 
ser visto na Figura 8. Onde à esquerda estão os circuitos internos como bloco de oscilador 
interno, o bloco de programação/debugação, regulador de tensão da USB, PWRT, OST, POR, 
WDT, BOR e FSCM. Na parte superior visualiza-se o bloco de memória de dados (RAM). 
 No canto superior esquerda tem-se a memória de programa FLASH, endereçada por um 
ponteiro de 21 bits representado pelos registros PCU, PCH, PCL. Do lado direito encontram-se 
as portas de entrada e saída (PORT A, PORT B, PORT C, PORT D e PORT E), e na parte 
inferior do diagrama estão os periféricos, memória de dados EEPROM, TIMERs (1,2 e 3), 
comparador analógico, módulo ECCP1 e CCp2, módulo MSSP, EUSART, conversor A/D de 
10 bits e USB (MIYADAIRA, 2009). 
 
 
 
12 
 
Figura 8 – Diagrama de Bloco do PIC18F4550. 
 
Fonte: (DATASHEET PIC18F4550, 2007). 
 Para esse projeto, todas as informações utilizadas do microcontrolador PIC18F4550 
estão descritas no item Materiais e Métodos. 
13 
 
2.1.4 Servo motor 
 O servo motor é uma máquina eletromecânica que se movimento a partir de um 
comando, como dispositivos de malha fechada. Assim, recebe um sinal de controle que verifica 
a posição atual para controlar o seu movimento, indo para a posição desejada com velocidade 
monitorada externamente sob feedback de um dispositivo denominado taco ou sensor de efeito 
Hall, encoder, esolver, ou tachsin, dependendo do tipo de servo motor e aplicação. Em contraste 
com os motores contínuos que giram indefinidamente, o eixo dos servos motores possui a 
liberdade de apenas cerca de 180º graus (360º em alguns modelos) mas são precisos quanto à 
sua posição (WIKIPÉDIA, Acesso em 2018). A Figura 9 apresenta a imagem de um servo 
motor e sua respectiva vista interna. 
Figura 9 – Servo motor com vista interna. 
 
Fonte: (Adaptado de ROBOTISTAN, Acesso em 2018). 
 Algumas características importantes do servo motor são: dinâmica, controle de rotação, 
torque constate e precisão de posicionamento. Essas características do servo motor são 
exclusivas de cada controle do servo motor. A posição angular da maioria dos servos motores 
é controlada através de um sinal PWM, que será mais detalhado no item 2.1.6 deste relatório. 
Através do PWM é controlado o sentido de giro do servo motor, bem como seu torque, a Figura 
10 mostra os sinais de controle do servo motor. Para o presente projeto, foi utilizado um servo 
motor com giro 360°, podendo realizar várias voltas de acordo com o controle. 
 
 
 
 
14 
 
Figura 10 – Sinais de controle do servo motor. 
 
Fonte: (Aula 4 - SERVOMOTOR, 2013). 
 A Figura 11 apresenta os componentes internos do servo motor, onde as engrenagens 
fazem o conjunto da caixa de redução para diminuir velocidade e aumentar torque, o circuito 
de controle para receber e enviar informações da posição do giro, o motor para gerar a rotação, 
e o potenciômetro para verificar a posição angular do servo. 
Figura 11 – Componentes internos do servo motor. 
 
Fonte: (Aula 4 - SERVOMOTOR, 2013). 
2.1.5 Sensor 
 Segundo De Moraes (2011), sensores são transdutores especiais que transformam algum 
tipo de energia como luminosa, térmica, elétrica, mecânica em energia elétrica em um 
determinado nível. Sendo que transdutor é considerado qualquer componente que transforma 
um tipo de energia em outra. Para complementar, os sensores são dispositivos que tem 
propriedades elétricas, como capacitância ou resistividade, que se alteram com mudanças em 
outras varáveis físicas. Um sistema de instrumentação consegue, através da utilização de 
15 
 
sensores e circuitos de condicionamento do sinal, traduzir uma variação de uma grandeza física 
em variação elétrica. 
 Os sensores podem ser divididos em 4 tipos: ativos ou passivos e analógicos ou digitais. 
Sensores analógicos assumem infinitos valores entre um máximo e um mínimo enquanto os 
digitais assumem valores discretos. Os sensores ativos atuam como geradores, ou seja, geram 
uma grandeza elétrica a partir de uma perturbação de entrada. Exemplo destes são os 
piezoeléctricos que geram tensão a partir de uma deformação. Sensores passivos atuam como 
uma impedância, gerando uma variação de resistência, indutância ou capacitância (DE 
MORAES, 2011). Neste projeto foi utilizado um sensor de refletância e dois sensores de 
obstáculos infravermelho reflexivo. 
2.1.6 PWM 
 PWM (Pulse Width Modulation), que significa Modulação por Largura de Pulso, refere-
se ao conceito de pulsar rapidamente um sinal digital em um condutor. Além de várias outras 
aplicações, esta técnica de modulação pode ser utilizada para simular uma tensão estática 
variável e é comumente aplicada no controle de motores elétricos, aquecedores, LEDs ou luzes 
em diferentes intensidades ou frequências. Um dispositivo digital como um microcontrolador 
pode trabalhar com entradas e saídas que possuem apenas dois estados: ligado ou desligado. 
 Assim, você pode facilmente usá-lo para controlar o estado de um LED por exemplo 
ligando ou desligando o mesmo. Da mesma forma que você pode usá-lo para controlar qualquer 
dispositivo elétrico usando dispositivos adequados (transistor, triac, relés etc) (CITISYSTEMS, 
Acesso em 2018). A Figura 12 mostra um típico sinal PWM, onde é possível aumentar o tempo 
ligado diminuindo o tempo desligado e vice e versa. 
Figura 12 – Sinal PWM. 
 
Fonte: (CITISYSTEMS, Acesso em 2018). 
16 
 
2.2 OBJETIVO 
 
Este trabalho tem como objetivo fazer todo o projeto para o funcionamento de um 
seguidor
de linha utilizando um microcontrolador PIC. Além disso, realizar um estudo sobre o 
assunto para conhecer os principais parâmetros do projeto e verificar quais componentes e 
dispositivos que devem ser utilizados. 
2.3 METODOLOGIA 
 
 Para a realização deste projeto, foi utilizado uma metodologia de execução que 
constituía em análises a respeito da parte física do robô, e posteriormente a parte eletrônica e 
lógica, tais como motores a serem utilizados, sensores, e entre outros. Entretanto, foi utilizado 
um chassi já existente que foi encontrado no laboratório onde este já continha os motores 
(motores de passo) e dois sensores. Este protótipo era próprio para o uso de um robô seguidor 
de linha, que também tinha sua parte mecânica que era característica de um robô sumô. 
Posteriormente foram especificados os componentes necessários para a implementação das 
funcionalidades do robô. 
Com isso, foram utilizados os motores em questão que já se fazia presente no chassi, e 
a ideia inicial, era utilizar os dois sensores que já se faziam presente no chassi. Entretanto, por 
problemas técnicos em um dos sensores, foi utilizado apenas um deles, e depois foi pensado em 
utilizar mais dois sensores de linha, para a melhor performance do projeto. Estes dois sensores, 
eram diferentes do sensor que era empregado antes no chassi, pois era um sensor digital, 
enquanto o outro era analógico. Foi então realizada a montagem dos outros dois novos sensores 
no chassi, na parte interna, enquanto o sensor analógico foi posto no meio, pelo fato de possuir 
já um pequeno aparato que auxiliava a locomoção do robô. 
Em seguida, as partes lógica e eletrônica foram construídas e acopladas ao chassi. Nas 
subseções seguintes serão descritos os materiais utilizados no projeto, a forma como foram 
empregados e a sua finalidade 
2.4 MATERIAIS E MÉTODOS 
 Nos tópicos a seguir, serão descritos os procedimentos experimentais para a realização 
das partes constituintes do projeto. A partir das informações obtidas e dos materiais e métodos 
utilizados para a construção do projeto final, foi construída uma placa de circuito englobando 
toda a parte eletrônica contendo o microcontrolador sendo o celebro de todo o sistema. 
17 
 
2.4.1 Dispositivos eletrônicos 
 Logo abaixo, será dada as informações dos dispositivos utilizados no projeto 
2.4.1.1 Servo motor 
 Os motores utilizados, que são responsáveis pela parte móvel do robô, foram do tipo 
servos motores, onde estes são controlados pelo ângulo de rotação do rotor. Estes dispositivos, 
são compostos por um motor de corrente contínua, porém com um circuito eletrônico acoplado 
e um conjunto de engrenagens onde fazem com que o motor tenha um melhor controle e um 
maior torque. 
 O servo motor utilizado no projeto é do modelo SM-S4303R que apresenta um tamanho 
padrão que foi construído pelo SpringRC especificamente para rotação contínua, tornando-o 
uma maneira mais eficiente de mover o robô. Possui dois rolamentos de esferas no eixo de saída 
para atrito reduzido e oferece um acesso relativamente fácil ao potenciômetro de ajuste do ponto 
médio (ponto zero). Este é o servo de rotação contínua mais deste fabricante (POLOLU, 2018). 
Na Figura 13 é mostrado o motor utilizado no projeto. 
Figura 13 - Servo motor utilizado (SpringRC SM-S4303R Continuous Rotation Servo) 
 
Fonte: (POLOLU, Acesso em 2018). 
 Na Tabela 1 é mostrado as informações básicas deste motor, retirado do site do 
fabricante. Neste se encontra as tensões de operação, juntamente com rotação e outros 
parâmetros. 
18 
 
Tabela 1 - Dados do servo motor 
 
Fonte: (SPRINGRC, Acesso em 2018). 
A Figura 14 mostra as dimensões do motor, onde também pode-se observar onde se 
encontra o potenciômetro para o ajuste do ponto zero. 
Figura 14 - Informações do servo motor 
 
Fonte: (SPRINGRC, Acesso em 2018). 
2.4.1.2 Sensores 
 Como dito anteriormente na Metodologia, foram utilizados três sensores no projeto. 
Dois deles foram utilizados nas extremidades e apresentam as mesmas características, com 
saídas digitais. Já o terceiro sensor, possui característica do tipo analógica. Este sensor 
analógico, é responsável para fazer a verificação se o robô está em cima da linha em uma reta, 
já os outros dois das extremidades, servem para quando for submetido a uma curva. 
O sensor de refletância QTR-1A (analógico) carrega um único LED infravermelho e um 
par de fototransistor em um módulo pequeno e econômico de 0,5 "x 0,3" que pode ser montado 
em praticamente qualquer lugar e é ótimo para detecção de bordas e seguimento de linhas. A 
medição de refletância é emitida como uma tensão analógica (POLOLU, 2018). Na Figura 15 
pode ser observado o este sensor descrito anteriormente. 
19 
 
Figura 15 - Sensor de Refletância QTR-1A 
 
Fonte: (POLOLU, Acesso em 2018). 
 A Figura 16 mostra o esquemático do sensor acima. Pode ser observado que o circuito 
é bem simples e de fácil compreensão. 
Figura 16 - Esquemático do sensor de Refletância QTR-1A 
 
Fonte: (Adaptado de POLOLU, Acesso em 2018). 
 Com isso, foi construída uma tabela contendo as principais informações deste sensor 
(Tabela 2), baseada nas especificações que o mesmo apresenta. 
 
 
 
20 
 
Tabela 2 - Especificações do sensor de refletância QTR-1A 
Dimensões 0,3’’ x 0,5’’ x 0,1’’ (sem pinos) 
Tensão de operação 5 V 
Corrente de alimentação 17 mA 
Tipo de saída Tensão analógica 
Faixa de tensão de saída De 0 a tensão fornecida 
Distância de detecção ótima 0,125”(3 mm) 
Distância máxima de detecção 0,25” (6 mm) 
Peso sem pinos de cabeçalho 0,008 oz (0,2 g) 
Fonte: (POLOLU, Acesso em 2018). 
 Os outros dois sensores utilizados são idênticos, e de característica digital diferente do 
outro descrito anteriormente. Estes são sensores de obstáculo infravermelho reflexivo LM393 
em que é baseado no sistema de reflexão de luz infravermelha. Possui um LED emissor de 
infravermelho e um receptor (fotodiodo), juntamente com o CI comparador LM393. 
O funcionamento desse sensor é relativamente simples: Ao detectar um obstáculo, o 
sinal infravermelho é refletido para o receptor, a saída (out) vai para nível lógico baixo (0) e 
um LED verde na placa acende, indicando que algum obstáculo foi detectado. 
O alcance do sensor é de 2 a 30 cm, que pode ser ajustado por meio do potenciômetro 
na placa na própria placa. Esta distância, mesmo ajustada, poderá ser diferente dependendo do 
tamanho, cor do obstáculo ou até da alimentação do sensor. Sua tensão de trabalho é de 3.3V a 
5V o que facilita sua conexão com Arduino, PIC ou Raspberry Pi (QQ ONLINE 
TRADING,_2018). Este dispositivo pode ser ideal para aplicações em projetos como robôs, 
contadores, alarmes e para a vertente deste projeto de um robô seguidor de linha. A Figura 17 
mostra a parte física deste sensor. 
21 
 
Figura 17 - Sensor de obstáculo Infravermelho reflexivo (series flying fish) 
 
Fonte: (QQ ONLINE TRADING, Acesso em 2018). 
 Na Figura 18 pode-se observar as partes principais constituintes do sensor com sua 
respectiva localização na placa. 
Figura 18- Detalhes do sensor 
 
Fonte: (QQ ONLINE TRADING, Acesso em 2018). 
 A Figura 19 traz o esquemático do sensor. Com ele, é possível observar e analisar bem 
o circuito interno presente nesse dispositivo. 
Figura 19 - Esquemático do sensor de obstáculo infravermelho reflexivo 
 
Fonte: (PLAYEMBEDDED, Acesso em: 2018). 
22 
 
 Já na Tabela 1Tabela 3 mostra as informações gerais dos sensores utilizados com as 
algumas informações já descritas acima. 
Tabela 3 – Especificações do sensor de obstáculo infravermelho reflexivo 
Tipo de transmissão IR – Infravermelho
CI controlador LM393 
Distância de detecção 2 a 30 cm 
Ângulo de detecção 35° 
Tipo de ajuste da distância Potenciômetro 
Dimensões 37 x 14 x 6 mm 
Fonte: (QQ ONLINE TRADING, Acesso em 2018). 
2.4.2 Lógica do projeto 
Como a finalidade do projeto é fazer com que o robô siga uma faixa preta, independente 
do circuito em que o mesmo seja submetido, a lógica e posteriormente a programação foi toda 
baseada neste intuito geral. Com isso, foi desenvolvido uma lógica para que independente do 
circuito, o robô siga a linha que está presente. 
Inicialmente, foi feito um estudo de como funcionava o servo motor que seria utilizado 
no projeto. Para uma análise inicial, como descrita na ficha de dados do servo motor, foi 
constatado que o mesmo se trata de um servo com rotação continua, porém, a configuração do 
seu ângulo de operação, que está diretamente relacionado com a frequência, se trata da 
velocidade e do seu sentido de giro. 
Com isso, foi pesquisado a frequência de trabalho em que normalmente os servos 
funcionam. Não foram encontradas algumas informações na ficha de dados do servo utilizado, 
entretanto, foi utilizada algumas informações de outro servo semelhante. Logo, foi observado 
que os servos motores trabalham em faixas de frequências estreitas, em torno de 50 Hz que 
totaliza um tempo de 20 ms. 
Com isso, para fazer o controle do servo motor, vendo agora a relação do seu ângulo 
com a frequência de operação, chegou-se à conclusão que: Na posição “0”, que equivale ao 
servo está em seu estado de repouso, o tempo de operação deve estar em aproximadamente 2 
ms. Já para o servo motor girar, este tempo tem que ser diferente de 2 ms, onde sendo este 
23 
 
tempo maior do que 2 ms, o servo girava para em um sentido, e para um tempo menor que 2 
ms, o servo girava para outro sentido. Isto ocorre, por que 2 ms é o tempo referência. Para se 
ajustar este tempo como sendo o tempo em que o servo se mantenha em repouso, primeiro é 
colocada uma razão cíclica de 2 ms, e com o potenciômetro regulado até que o servo pare. 
Logo, com essa análise foi possível ter o controle do servo motor, e ajusta-lo para as funções 
que o projeto demanda. Foi observado também que, como os motores estão em posições 
diferentes referentes ao chassi, para que o servo faça o robô ir para a frente, foi preciso fazer 
com que um servo gire em sentido contrário ao outro. Outra análise muito importante, foi que 
quanto mais próximo de 2 ms (Valor referência), mas lento o motor girava. Isto é importante 
para se fazer a regulação da velocidade alterando o 𝑡𝑜𝑛 da razão cíclica. 
O microcontrolador utilizado para a parte lógica do projeto, possui funções internas para 
gerar PWM em determinadas portas. Contudo, depois de analisar as frequências de operação 
dessas funções, verificou-se que, são frequências elevadas em comparação com os 50 Hz que 
seria necessária para se trabalhar com o servo motor. Para isso foi implementada um novo 
método em que se consistia em gerar um PWM a partir de outras portas digitais do 
microcontrolador. 
Para gerar o PWM necessário para o controle e funcionamento do servo, foi utilizado as 
funções Timers do microcontrolador, na função contador. 
Para a configuração do Timer0, de acordo com o tempo desejado de operação de 20 ms 
e encontrar o TMR0 máximo e trabalhar com esta variável para alterar a razão cíclica do PWM, 
foi realizado o seguinte equacionamento: 
 
 
 
 
 
 
3
6
Tempo desejado
0 256 (1)
Ciclo de máquina Prescaler
20 10
0 256
0,5 10 256
0 256 156,25
0 99,75 ~ 100
TMR
TMR
TMR
TMR


 


 
 
 

 
Já para o Timer2 para se encontrar o valor máximo com o tempo desejado de 20 ms, 
utilizou-se um prescaler de 1:16 e um potscaler de 1:10. Com isso o PR2 máximo para este 
tempo desejado pode ser encontrada a partir do equacionamento abaixo: 
24 
 
 
 
 
 
3
6
Tempo desejado
2 (2)
Ciclo de máquina Prescaler Postscaler
20 10
2
0,5 10 16 10
2 250
PR
PR
PR



 


  

 
 Com isso, encontrando estes valores para o tempo de 20 ms, pode-se facilmente escolher 
o valor de TMR0 ou PR2 para trabalhar em qualquer tempo abaixo de 20 ms, ou para uma razão 
cíclica já pré-definida, utilizando as equações desenvolvidas abaixo: 
 
3
3
256
Valor_TMR0 = (3)
20 10
Valor_TMR0 20 10
Tempo = 
256
Tempo




 
 
Onde: 
Tempo – 𝑡𝑜𝑛 da razão cíclica. 
Valor_TMR0
 – Valor da variável TMR0 de acordo com o 𝑡𝑜𝑛 desejado. 
 
3
3
250
Valor_PR2 = (4)
20 10
Valor_PR2 20 10
Tempo = 
250
Tempo




 
 
Onde: 
Tempo – 𝑡𝑜𝑛 da razão cíclica. 
Valor_PR2
– Valor da variável 
Valor_PR2
de acordo com o 𝑡𝑜𝑛 desejado. 
Com estes valores encontrados, pode-se então encontrar valores de razão cíclica mínima 
e máxima de acordo com a análise feita anteriormente no tange aos valores de 𝑡𝑜𝑛 diretamente 
ligado com a velocidade e o sentido do servo. No código-fonte que está presente no Anexo I, 
poderá ser verificado como estas variáveis foram manipuladas para trabalha com os valores de 
𝑡𝑜𝑛. No código, já foram encontradas constantes para o sevo em questão, para valores de razão 
25 
 
cíclica mínima e máxima, ou seja, velocidade mínima e máxima do motor, juntamente com os 
sentidos de giro dos servos. 
A lógica dos sensores que auxiliou a construção do código do projeto está presente na 
Tabela 4, onde foi analisada apenas as condições possíveis, ou seja, desconsiderada as 
possibilidade de dois sensores ativos, por conta da quantidade de sensores e das disposições 
destes no chassi. 
Tabela 4 - Lógica dos sensores 
Sensor 1 Sensor 2 Sensor 3 Ação do robô 
0 1 0 Frente rápido 
0 0 1 Esquerda 
1 0 0 Direita 
0 0 0 Frente devagar 
1 1 1 Frente rápido 
Fonte: (Autor). 
2.4.3 Aparato montado para a fase de testes 
 Para se verificar o funcionamento do robô, inicialmente o circuito foi montado com o 
auxílio de uma protoboard e de um kit didático (Figura 20) que está disponível no laboratório. 
Este kit é composto por vários dispositivos de entrada e saída, e possui o microcontrolador 
PIC18F4550 que pode ser gravado com um dispositivo conectado via USB com o computador, onde o 
compilador utilizado MPLABX é devidamente configurado antes de passar o código. 
Figura 20 - Kit utilizado para os testes 
 
Fonte: (Autor). 
26 
 
 Com isto, foi então montado o protótipo de testes com a utilização deste dispositivo 
visto acima. Na Figura 21 pode ser visto como foi realizada as conexões. Para a alimentação 
deste sistema, foi utilizada a própria fonte do kit. 
Figura 21 – Aparato montado 
 
Fonte: (Autor). 
2.4.4 Construção da placa 
 Após os testes realizados no kit, foi montado o circuito na protoboard para realizar novos 
testes e começar o processo de confecção da placa. Com o circuito funcionando corretamente 
na protoboard, foi feito o levantamento dos componentes e iniciado o processo de layout da 
placa. A Tabela 5 apresenta os componentes utilizados na placa do protótipo. O layout foi 
realizado no Eagle, que é um software destinado a design eletrônico e layouts de placa de 
circuito impresso (PCI). O circuito completo da placa e esquemático utilizado no Eagle pode 
ser visto na Figura 22. 
Tabela 5 – Componentes utilizados na placa do protótipo. 
 Componente Valor/Modelo Quantidade 
U1 Microcontrolador
PIC18F4550 1 
Q1 Cristal de Quartzo LGE8000M 1 
D1, D2 Diodo IN4007 2 
C6, C7, C8, C9 Capacitor Poliester 100 nF/µ1K63 4 
C5 Capacitor Eletrolítico 10 µF Sancon 1 
C1, C2, C3, C4 Capacitor Cerâmico 2x22 pF / 2x100 nF 4 
R1 Resistor 10 kΩ 1 
RT1, RT2 Regulador de Tensão 7805CT / LM7805C 2 
B1 Botão Push Button 1 
- Barramento pino macho 2x 6 pinos / 1x 2 pinos 3 
- Conector Borne KRE 3x 2 vias / 1x 3vias 4 
Fonte: (Autor). 
27 
 
Figura 22 – Esquemático completo da placa do protótipo. 
 
Fonte: (Autor). 
 
 Com o layout da placa finalizado, foi utilizada a máquina de prototipagem para PCI 
PROTOMAT E33 da LPKF Laser e Eletronics, para passar o layout para a placa. A Figura 23 
mostra a imagem da placa finalizada com as informações de entrada e saída, onde a entrada do 
gravador possui os seis pinos para conexão do PICkit 3 responsável e passar o código para o 
microcontrolador. Os pinos de saída do gravador e dos servos são apresentados na Tabela 6. 
Sendo que o pino 6 do gravador não foi utilizado, pois o mesmo foi desabilitado no código. 
 
Figura 23 – Placa completa do projeto 
 
Fonte: (Autor). 
28 
 
Tabela 6 – Descrição dos pinos de saída. 
 
Pino 
Descrição 
Gravador Servos 
1 MCLR/Vpp SERVO 1 
2 VDD 5 V 
3 VSS (GND) GND 
4 PGD (ICSPDAT) GND 
5 PGC (ICSPCLK) 5 V 
6 PGM (LVP) SERVO 2 
Fonte: (Autor). 
 
2.5 RESULTADOS 
 Neste tópico será descrito os resultados finais obtidos diante dos procedimentos 
realizados e supracitados. 
2.5.1 Montagem prática 
 Para a montagem final do seguidor de linha, foi utilizado um chassi que já estava pronto, 
juntamente com o local onde os servos iriam ser instalados, com isso, ajudou em relação a parte 
mecânica do projeto. A Figura 24 - Chassi utilizado mostra a estrutura utilizada do projeto. 
Figura 24 - Chassi utilizado 
 
Fonte: (Autor). 
 
 Com base neste suporte que a placa de circuito impresso visto acima foi dimensionada, 
a ponto de se ajustar na parte superior do robô. Para que não houvesse curto-circuito na parte 
de baixo da placa, foi colocado fita isolante, como pode ser visto na figura acima. Portanto, 
29 
 
com a placa de circuito finalizada, e com a utilização de jumpers para a conexão dos sensores, 
o robô ficou da seguinte forma mostrada na Figura 25. 
Figura 25 - Projeto finalizado 
 
Fonte: (Autor). 
 
2.5.3 Circuitos para os testes práticos 
 
 Para a realização de testes práticos utilizando o projeto final, foi montado circuitos com 
o uso de fita isolante, sobre a bancada do laboratório. Na Figura 26 pode ser visto o primeiro 
circuito montado para a realização dos primeiros testes. O robô seguiu tranquilamente este 
circuito mostrado. 
Figura 26 - Circuito 1 
 
Fonte: (Autor). 
 
 Para um segundo teste, foi montado um segundo circuito onde este era um caminho 
fechado próximo ao círculo. Este trajeto possibilitou verificar a continuidade do robô em 
30 
 
sempre seguir a linha, mesmo com curvas fechadas, o robô teve um ótimo desempenho, não 
saindo do trajeto. A Figura 27 mostra este circuito. 
Figura 27 - Circuito 2 
 
Fonte: (Autor). 
 
 Contudo, foi montado um terceiro circuito onde este apresentava uma falha na linha e 
uma linha preta perpendicular ao trajeto. Este circuito foi montado para a verificação do 
desempenho do robô diante da programação desenvolvida. O robô apresentou um bom 
desempenho como o esperado. Na Figura 28 é possível visualizar este circuito. 
Figura 28 - Circuito 3 
 
Fonte: (Autor). 
 
31 
 
2.5.3 Resultados práticos 
 Com o projeto já finalizado, utilizou-se para fazer a alimentação do mesmo, uma fonte 
de bancada presente no laboratório. Esta foi utilizada, pois fazendo o uso de baterias 
convencionais que se faziam presente, não foi necessário para que fornecesse energia suficiente 
para os servos juntamente com o microcontrolador. A ideia inicial era fazer o uso de duas 
baterias de 9 V uma para aa alimentação do motor, e a outra para alimentar o microcontrolador. 
Para isso, utilizou-se reguladores de tensão 7805CT / LM7805C para suprir com a tensão 
nominal para o funcionamento do micro que é de 5 V e para o servo que também era 5 V. 
 Ao utilizar-se a fonte de alimentação de bancada, foi ajustada para uma tensão de 9,5 V 
e limitou-se a corrente para 400 mA. Diante disso, quando o sistema era acionado, foi percebido 
a corrente que o sistema consumia analisando os dados da fonte. A Figura 29 mostra que a 
corrente consumida pelo sistema foi de aproximadamente 300 mA. 
Figura 29 - Fonte de alimentação do projeto 
 
Fonte: (Autor). 
 
Para verificar as formas de onda das saídas para o servo, e comprovar o que foi analisado 
na Lógica do projeto, foi utilizado um osciloscópio para a análise. Com isso, foi colocado a 
ponteira de prova nas saídas de cada um dos servos motores, e verificados o seu 𝑡𝑜𝑛. Na Figura 
30 é possível observar a forma de onda com um 𝑡𝑜𝑛 de aproximadamente 2 ms, ou seja, o ponto 
em que os servos permanecem com suas velocidades mínimas quase parado, pois foi definido 
um valor no código fonte para se obter esse tempo. 
32 
 
Figura 30 - Tempo de 2 ms 
 
Fonte: (Autor). 
 Com o tempo médio já visto anteriormente, e como descrito em tópicos anteriores, para 
um 𝑡𝑜𝑛 acima ou abaixo deste valor referência o servo motor gira em sentidos e velocidades 
diferentes. Para isso, os servos funcionaram em sentidos diferentes, para que o robô possa ir 
sempre para frente. Com isso, como pode ser observado na Figura 31, no servo 1 para uma 
velocidade x porém com o sentido programado para que ele possa ir para frente, foi definido 
seu 𝑡𝑜𝑛 de aproximadamente 0,8 ms, pois abaixo de 2 ms, o servo gira para um sentido 
diferente do que quando o 𝑡𝑜𝑛 está acima de 2 ms . 
Figura 31 - Tempo de 0,8 ms 
 
Fonte: (Autor). 
 
33 
 
 Já para o servo 2, com descrito antes, deverá girar no sentido contrário ao servo1. Com 
isso, seu 𝑡𝑜𝑛 foi atribuído a um valor de aproximadamente 3ms, resultando então uma 
velocidade mais elevada, por não estar próximo do valor de referência 2 ms. Na Figura 32 é 
mostrado o 𝑡𝑜𝑛 de aproximadamente 3 ms. 
Figura 32 - Tempo de 3 ms 
 
Fonte: (Autor). 
 
 Na Figura 33 pode ser observado como é o comportamento das formas de onda quando 
o robô segue em linha reta. Observa-se que eles operam com tempos diferentes, porém, esta 
configuração faz com que os dois servos girem na mesma velocidade, porém em sentidos 
diferentes para ter o movimento para frente do robô. 
Figura 33 - Saída dos dois servos motores 
 
Fonte: (Autor). 
 
34 
 
3 CONCLUSÕES E RECOMENDAÇÕES 
 Este trabalho apresentou um projeto de um seguidor de linha utilizando um 
microcontrolador PIC18F4550 para realizar o controle necessário e o funcionamento do 
mesmo. Além disso, foi usado servo motores para movimentar as rodas e dois tipos de sensores, 
um sensor de refletância e dois sensores de obstáculos infravermelho reflexivo para verificar a 
linha. Foi confeccionado a placa e montado o protótipo, que funcionou corretamente como 
solicitado. Foi encontrado algumas dificuldades, uma delas seria como selecionar a bateria mais 
adequada e a verificação do funcionamento dos sensores para essa aplicação. Com isso, para a 
realização dos testes práticos utilizou-se uma fonte de bancada onde a mesma foi capaz de 
mandar energia suficiente para o sistema. 
 No começo do projeto, o intuito era de se utilizar os dois sensores analógicos que já se 
faziam presentes do chassi encontrado juntamente com os dois servos motores. Entretanto, 
houve problemas quanto a leitura de um dos sensores,
onde foi tentado conserta-lo, porém 
depois de vários testes, o mesmo não apresentou um bom resultado e foi decidido não o utilizar. 
Com isso, foi pensado em utilizar-se mais dois sensores. No entanto, nos testes iniciais com 
estes sensores, fazendo o uso de um deles, quando colocado em contato com a carcaça de 
alumínio do chassi, o mesmo danificou. Analisando o sensor, viu-se que havia dado um curto 
no LED infravermelho. Diante disso, o mesmo foi substituído e o sensor em questão funcionou 
corretamente. 
 Nos testes práticos, quando já finalizado o projeto, houve problemas quando o robô se 
deparava com uma curva para a esquerda, sendo que curvas para a direita eram feitas 
normalmente. Contudo, foi percebido que um dos sensores não estava posicionado 
corretamente e sua regulagem não estava tão precisa quanto ao outro sensor. Então, regulando-
se o potenciômetro com uma chave estrela e ajustando o sensor em uma posição mais acima, 
foi possível sanar este problema. 
 
 
 
 
 
35 
 
REFERÊNCIAS 
 
AGÊNCIA BRASIL. Vendas mundiais de robôs industriais batem recorde. 2018. 
Disponível em: http://agenciabrasil.ebc.com.br/economia/noticia/2018-06/vendas-mundiais-
de-robos-industriais-batem-recorde. Acesso em outubro de 2018. 
AMORIM, Andrique Figueirêdo. Robô seguidor de linha autônomo utilizando o 
Controlador Proporcional-derivativo em uma Plataforma de Hardware/Software livre. 
2011. Monografia – Universidade Estadual do Sudoeste da Bahia. 
AULA4–SERVOMOTOR. Disponível em: http://www.feis.unesp.br/Home/departamentos/ 
engenhariaeletrica/aula-4---servo-motor-13-03-2013-final.pdf. Acesso em Outubro de 2018. 
CITISYSTEMS. O que é PWM e para que serve. Disponível em: https://www.citisystems. 
com.br/pwm/. Acesso em Outubro de 2018. 
CORTELETTI, D. Dossiê Técnico: Introdução à programação de microcontroladores 
Microchip PIC. SENAI-RS. Centro Tecnológico de Mecatrônica. 2006. 
DE MORAES, Henrique Araújo. Robô seguidor de trilhas: Protótipo de um modelo 
automotivo com tração elétrica microcontrolado guiado por sensoriamento. 2011. 
Monografia – Universidade Estadual de Londrina. 
DIRECT INDUSTRY. Robô de inspeção com rodas / Modular / Polivalente. Disponível em: 
http://www.directindustry.com/pt/prod/robosynthesis/product-183567-1818832.html. Acesso 
em Outubro de 2018. 
FILIPEFLOP. Robô seguidor de linha. Disponível em: https://www.filipeflop.com/blog/robo-
seguidor-de-linha-pi-zero-w-opencv/robo-seguindo-linha/. Acesso em Outubro de 2018. 
MICROCHIP TECHNOLOGY INC. Disponível em: https://www.microchip.com/. Acesso em 
Outubro de 2018. 
MICROCHIP TECHNOLOGY INC. Datasheet PIC18F2455/2550/4455/4550. 2007. 
MIYADAIRA, Alberto Noboru. Microcontroladores PIC18: Aprenda e programe em 
linguagem C. 1 ed. São Paulo: Érica, 2009. ISBN 978-85-365-0244-1. 
MORETO, Marcelo. Controle de Servomotor. 2007. Monografia – Universidade São 
Francisco. 
PLAYEMBEDDED, detecting obstacle with ir sensor. Disponível em 
:http://www.playembedded.org/blog/detecting-obstacle-with-ir-sensor-and-arduino/ Acesso 
em Outubro de 2018. 
POLOLU, Disponível em: https://www.pololu.com/product/1248 Acesso em outubro de 2018. 
36 
 
POLOLU, Disponível em: https://www.pololu.com/product/958 Acesso em outubro de 2018. 
PSCHEIDT, Élio Rubens. Robô autônomo – Modelo chão de Fábrica. 2007. Monografia – 
Centro Universitário Positivo. 
ROBÓTICA, Blogger. Robô Móvel. 2009. Disponível em: http://robotica-
calheta.blogspot.com/2009/06/robo-movel.html. Acesso em Outubro de 2018. 
ROBOTISTAN. Servo motor análogo da engrenagem de cobre padrão de PowerHD - HD-
9001MG. Disponível em: https://www.robotistan.com/powerhd-standard-copper-gear-analog-
servo-motor-hd-9001mg. Acesso em Outubro de 2018. 
SOMAI, Tecnologia e Educação. Disponível em: https://www.somai.com.br/robo-nao/. Acesso 
em Outubro de 2018. 
WIKIPÉDIA. Servomotor. Disponível em: https://pt.wikipedia.org/wiki/Servomotor. Acesso 
em Outubro de 2018. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37 
 
ANEXO I – Código fonte utilizando três sensores 
 
#pragma config FOSC = HS 
#pragma config PLLDIV = 1 
#pragma config CPUDIV = OSC1_PLL2 
#pragma config MCLRE = ON 
#pragma config LVP = OFF 
#pragma config WDT = OFF 
 
#include <xc.h> 
#include <pic18f4550.h> 
#define _XTAL_FREQ 8000000 
 
 
#define SENSOR2 PORTBbits.RB1 //botao para aumentar a razao ciclica //int1 
#define SENSOR1 PORTBbits.RB0 //botao para reduzir a razao cilcica 
 
#define SERVO1 PORTDbits.RD0 //Saida para o servo1 
#define SERVO2 PORTDbits.RD1 //Saida para o servo2 
 
//Variáveis para razão ciclica de acordo com o tOn 
unsigned char duty_cycle1 = 0, duty_cycle2 = 0; 
 
//variaveis para o armazenamento das razões ciclicas 
unsigned char vel_max1 = 0, vel_media1 = 0,vel_max2 = 0, vel_media2 = 0; 
 
int adc; //variaavel para armazenar valor analogico 
38 
 
float sensor3; //variáveis para o armazenar dados dos sensores 
char centro = 0; //Controle do sensor3 para verificação da linha 
 
float ref = 4.0; //realizar ajuste aqui 
 //variável de referencia quando estiver sobre o preto 
 
/* Logica para o funcionamento do robô seguidor de linha */ 
void logica_seguidor() 
{ 
 if(!SENSOR1 && centro && !SENSOR2) //Caso o robô esteja em cima da linha 
 { 
 duty_cycle1 = vel_max1; //velocidade máxima para o servo1 
 duty_cycle2 = vel_max2; //velocidade máxima para o servo2 
 
 } 
 else if (!SENSOR1 && centro && SENSOR2) //Caso haja uma curva para a direita 
 { 
 duty_cycle1 = vel_media1; //velocidade media para o servo1 
 duty_cycle2 = vel_max2; //velocidade máxima para o servo2 
 } 
 else if (SENSOR1 && centro &&!SENSOR2) //Caso haja uma curva para a esquerda 
 { 
 duty_cycle1 = vel_max1; //velocidade maxima para o servo1 
 duty_cycle2 = vel_media2; //velocidade media para o servo2 
 } 
 else if (SENSOR1 && centro && SENSOR2) //Caso todos os sensores ficarem no preto 
39 
 
 { 
 duty_cycle1 = vel_max1; //velocidade máxima para o servo1 
 duty_cycle2 = vel_max2; //velocidade máxima para o servo2 
 } 
 else if (!SENSOR1 && !centro &&!SENSOR2) //caso o robô veja só branco 
 { 
 duty_cycle1 = vel_media1; //velocidade media para o servo1 
 duty_cycle2 = vel_media2; //velocidade media para o servo2 
 } 
 
} 
void main(void) { 
 
 /* CONFIGURAÇÃO DOS SINAIS ANALÓGICOS */ 
 ADCON0 = 0b00000101; //seleciona o canal AN0; conversão não inicializada habilitando 
modulo AD 
 ADCON1 = 0b00001110; //ref de tensão pro AD: GND - VCC (5 V); habilita AN0 
 ADCON2 = 0b10000111; //jutificação a direita; tempo de aquisição 0 TAD; fonte de clock 
interna do AD 
 
 INTCON = 0b11100000; //interrupçao global e de perifericos, e Timer0 habilitado 
 
 T2CON = 0b01001111; //potscale 1:10 prescale 1:16 
 PR2 = 250; //PR2 para tempo de 20 ms, 50 Hz 
 
 PIE1bits.TMR2IE = 1; //Habilita a interrupção para o módulo TIMER2 
 T0CON = 0b11000111; //prescale 256 
40 
 
 TMR2 = 0; //timer2 inicialmente zerado 
 
 TRISD = 0b11111100; //Saidas para o PWM 
 
 /*Configurações de velocidade*/ 
 //SERVO 2 RD0 
 //constantes para as velocidade para o servo em questão 
 vel_max1 = 22; //velocidade máxima 
 vel_media1 = 14; //velociadade minima 
 //SERVO 1 RD1 
 vel_max2 = 243; //velocidade máxima 
 vel_media2 = 229; //velociadade minima 
 
 //inicializa
com razão cíclica media 
 duty_cycle1 = vel_media1; 
 duty_cycle2 = vel_media2; 
 
 while(1) 
 { 
 ADCON0 = 0b00000001; //habilita AN0 para a saída do sensor 
 
 ADCON0bits.GODONE = 1; 
 
 while(ADCON0bits.GODONE); 
 
 adc = ADRESH; 
41 
 
 adc = (adc << 8) + ADRESL; 
 
 sensor3 = ((float)adc * 5.0)/1023.0; //converte para tensao [V] 
 
 if(sensor3 > ref) //Se a leitura do sensor3 for maior que a referencia 
 centro = 1; //a variavel de verificação do preto no centro vai para 1 
 else //caso o contrario, se o sensor não estiver no preto 
 centro = 0; //variavel é zerada 
 
 logica_seguidor(); //função com a lógica do seguidor 
 } 
} 
/* Interrupção para tratar os TIMERs (TIMER0 e TIMER2)*/ 
void interrupt interrup_tmr0tmr2 () 
{ 
 if(TMR0IF) //Se flag TMR0iF (Interrupção do TIMER0) = 1 
 { 
 if(SERVO1) //Tempo do servo1 ligado 
 { 
 TMR0 = duty_cycle1; 
 SERVO1 = 0; //e o servo1 é ligado 
 } 
 else //Tempo do servo1 desligado 
 { 
 TMR0 = 255 - duty_cycle1; 
 SERVO1 = 1; //e o servo1 liga novamente, gerando uma condição de PWM 
42 
 
 } 
 TMR0IF = 0; //zera a flag 
 } 
 if (TMR2IF) //Se flag TMR2IF (Interrupção do TIMER2) = 1 
 { 
 if(SERVO2) //Tempo do servo2 ligado 
 { 
 PR2 = duty_cycle2; //PR2 vai se igualar a razão ciclica atribuida 
 SERVO2 = 0; //e o servo2 é desligado 
 } 
 else //Tempo do servo1 ligado 
 { 
 PR2 = 250 - duty_cycle2; 
 SERVO2 = 1; // e o servo2 liga novamente, gerando uma condição de PWM 
 } 
 TMR2 = 0; 
 TMR2IF = 0; //Limpa o flag da interrupção do TIMER2 
 } 
} 
 
 
 
 
 
 
 
43 
 
ANEXO II – Código fonte utilizando dois sensores digitais 
 
#pragma config FOSC = HS 
#pragma config PLLDIV = 1 
#pragma config CPUDIV = OSC1_PLL2 
#pragma config MCLRE = ON 
#pragma config LVP = OFF 
#pragma config WDT = OFF 
 
#include <xc.h> 
#include <pic18f4550.h> 
 
 
#define _XTAL_FREQ 8000000 
 
#define SENSOR2 PORTBbits.RB1 //botao para aumentar a razao ciclica //int1 
#define SENSOR1 PORTBbits.RB0 //botao para reduzir a razao cilcica 
 
#define SERVO1 PORTDbits.RD0 
#define SERVO2 PORTDbits.RD1 
// #define LED PORTDbits.RD2 
 
unsigned char duty_cycle1 = 14, duty_cycle2 = 230,controle = 0, controle2 = 0;//inicia razaõ 
ciclica minima com 0 = //duty max 25.6 ~ 26 
 
unsigned char vel_max1 = 0, vel_media1 = 0,vel_max2 = 0, vel_media2 = 0; 
 
44 
 
void logica_seguidor() 
{ 
 
 if(!SENSOR1 && !SENSOR2) //Caso o robô esteja em cima da linha 
 { 
 duty_cycle1 = vel_max1; //velocidade máxima para o servo1 
 duty_cycle2 = vel_max2; //velocidade máxima para o servo2 
 
 } 
 else if (!SENSOR1 && SENSOR2) //Caso haja uma curva para a direita 
 { 
 duty_cycle1 = vel_media1; //velocidade media para o servo1 
 duty_cycle2 = vel_max2; //velocidade máxima para o servo2 
 } 
 else if (SENSOR1 &&!SENSOR2) //Caso haja uma curva para a esquerda 
 { 
 duty_cycle1 = vel_max1; //velocidade maxima para o servo1 
 duty_cycle2 = vel_media2; //velocidade media para o servo2 
 } 
 else if (SENSOR1 && SENSOR2) //Caso todos os sensores ficarem no preto 
 { 
 duty_cycle1 = vel_max1; //velocidade máxima para o servo1 
 duty_cycle2 = vel_max2; //velocidade máxima para o servo2 
 } 
 else if (!SENSOR1 &&!SENSOR2) //caso o robô veja só branco 
 { 
45 
 
 duty_cycle1 = vel_media1; //velocidade media para o servo1 
 duty_cycle2 = vel_media2; //velocidade media para o servo2 
 } 
} 
void main(void) { 
 
 INTCON = 0b11100000; //interrupçao global e de perifericos, e Timer0 habilitado 
 
 T2CON = 0b01001111; //potscale 1:10 prescale 1:16 
 
 PR2 = 250; //PR2 para tempo de 20 ms, 50 Hz 
 
 PIE1bits.TMR2IE = 1; //Habilita a interrupção para o módulo TIMER2 
 
 T0CON = 0b11000111; //prescale 256 
 TMR2 = 0; 
 
 TRISD = 0b11111100; //Saidas para o PW 
 /*Configurações de velocidade*/ 
 //SERVO 2 RD0 
 vel_max1 = 22; //velocidade máxima 
 vel_media1 = 14; //velociadade minima 
 //SERVO 1 RD1 
 vel_max2 = 243; 
 vel_media2 = 229; 
 
46 
 
 //robô inicializa com velocidade média 
 duty_cycle1 = vel_media1; 
 duty_cycle2 = vel_media2; 
 while(1) 
 { 
 logica_seguidor(); //função para a logica do projeto 
 } 
} 
 
/* Interrupção para tratar os TIMERs (TIMER0 e TIMER2)*/ 
void interrupt interrup_tmr0tmr2 () 
{ 
 if(TMR0IF) //Se flag TMR0iF (Interrupção do TIMER0) = 1 
 { 
 if(SERVO1) //Tempo do servo1 ligado 
 { 
 TMR0 = duty_cycle1; 
 SERVO1 = 0; //e o servo1 é ligado 
 } 
 else //Tempo do servo1 desligado 
 { 
 TMR0 = 255 - duty_cycle1; 
 SERVO1 = 1; //e o servo1 liga novamente, gerando uma condição de PWM 
 } 
 TMR0IF = 0; //zera a flag 
 } 
47 
 
 
 if (TMR2IF) //Se flag TMR2IF (Interrupção do TIMER2) = 1 
 { 
 if(SERVO2) //Tempo do servo2 ligado 
 { 
 PR2 = duty_cycle2; //PR2 vai se igualar a razão ciclica atribuida 
 SERVO2 = 0; //e o servo2 é desligado 
 } 
 else //Tempo do servo1 ligado 
 { 
 PR2 = 250 - duty_cycle2; 
 SERVO2 = 1; // e o servo2 liga novamente, gerando uma condição de PWM 
 } 
 TMR2 = 0; 
 TMR2IF = 0; //Limpa o flag da interrupção do TIMER2 
 } 
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais