Baixe o app para aproveitar ainda mais
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 } }
Compartilhar