Prévia do material em texto
INSTITUTO FEDERAL DO MARANHÃO. CAMPUS AÇAILÂNDIA. CURSO TÉCNICO EM AUTOMAÇÃO INDUSTRIAL MATHEUS VICTOR SARMENTO PEDRO MANOEL LIMA GUSTAVO SOUSA VITOR MAGALHÃES SAMPAIO APLICAÇÃO DE CONTROLE PROPORCIONAL EM ROBÔ SEGUIDOR DE LINHA AÇAILÂNDIA 2017 MATHEUS VICTOR SARMENTO PEDRO MANOEL LIMA GUSTAVO SOUSA VITOR MAGALHÃES SAMPAIO APLICAÇÃO DE CONTROLE PROPORCIONAL EM ROBÔ SEGUIDOR DE LINHA Trabalho de Conclusão de Curso elaborado sob a orientação do professor Brehme Mesquita e apresentado ao curso de Automação Industrial, do IFMA – Campus Açailândia, com o objetivo de obtenção de nota de aprovação para a titulação de técnico em Automação Industrial. Orientador: Prof. Mestre Brehme Dnapoli Mesquita AÇAILÂNDIA 2017 LISTA DE FIGURAS FIGURA 1 – ESQUEMA DE MODULAÇÃO POR LARGURA DE PULSO. ................. 5 FIGURA 2 - CICLO DE TRABALHO PWM. ................................................................. 5 FIGURA 3 - ESTRUTURA DE UM SISTEMA DE CONTROLE REALIMENTADO ...... 7 FIGURA 4 - SISTEMA COM CONTROLE PROPORCIONAL ..................................... 8 FIGURA 5 - SISTEMA DE CONTROLE PROPORCIONAL EM ATUAÇÃO .............. 10 FIGURA 6 - PLACA ARDUINO UNO ........................................................................ 10 FIGURA 7 - FOTOTRANSISTOR .............................................................................. 11 FIGURA 8 - ESQUEMA DE FUNCIONAMENTO DO FOTOTRANSISTOR .............. 11 FIGURA 9 - DESENHO (A) FOTO (B) DE UM MOTOR CC. ..................................... 13 FIGURA 10 – PRINCÍPIO DE FUNCIONAMENTO DE MOTOR CC ......................... 13 FIGURA 11 - SEGUIDOR DE LINHA EM INDÚSTRIA ............................................. 14 FIGURA 12- ESQUEMA DO FUNCIONAMENTO DO SEGUIDOR DE LINHA ......... 16 FIGURA 13 - DEMONSTRAÇÃO DO FUNCIONAMENTO DOS SENSORES.......... 17 LISTA DE TABELAS TABELA 1 - VARIAÇÃO DO VALOR PWM EM RELAÇÃO AO ERRO ..................... 22 TABELA 2 - VALORES DE AJUSTE DE CADA SENSOR. ....................................... 23 LISTA DE EQUAÇÕES EQUAÇÃO 1 – CICLO DE TRABALHO ...................................................................... 6 EQUAÇÃO 2 – TENSÃO MÉDIA EM PWM ................................................................ 6 EQUAÇÃO 3 – RELAÇÕES DE PROPORÇÃO ENTRE O AJUSTE E O ERRO ........ 8 EQUAÇÃO 4 – RELAÇÕES DE PROPORCIONALIDADE ......................................... 9 EQUAÇÃO 5 – VALORES DE ERRO NA REALIMENTAÇÃO DO KP ........................ 9 EQUAÇÃO 6 – FORMA FINAL DE ESQUEMATIZAÇÃO DO AJUSTE ...................... 9 EQUAÇÃO 7 – RELAÇÕES DE CORRENTE NOS TRASISTORES ........................ 12 EQUAÇÃO 8 – RELAÇÕES DE TENSÃO NO TRANSISTOR .................................. 12 SUMÁRIO 1. INTRODUÇÃO .................................................................................................. 3 1.1. OBJETIVO GERAL........................................................................................ 3 1.2. OBJETIVOS ESPECÍFICOS .......................................................................... 3 2. REFERENCIAL TEÓRICO ................................................................................ 4 2.1. MODULAÇÃO POR LARGURA DE PULSO (PWM) ...................................... 4 2.2. CONTROLE PROPORCIONAL ..................................................................... 6 2.2.1. SISTEMA REALIMENTADO ....................................................................... 7 2.2.2. PRINCÍPIO DE FUNCIONAMENTO DO CONTROLADOR PROPORCIONAL .................................................................................................... 8 2.3. ARDUINO ..................................................................................................... 10 2.4. FOTOTRANSISTOR .................................................................................... 11 2.5. MOTOR DE CORRENTE CONTÍNUA ......................................................... 12 2.6. ROBÔ SEGUIDOR DE LINHA NA INDÚSTRIA ........................................... 14 3. FUNCIONAMENTO DO ROBÔ SEGUIDOR DE LINHA ................................. 16 3.1. CAPTAÇÃO E PROCESSAMENTO DO SINAL ........................................... 17 3.2. MOVIMENTAÇÃO DO SEGUIDOR DE LINHA ............................................ 18 3.3. CONTROLE DOS MOTORES ..................................................................... 18 3.4. FONTE DE ALIMENTAÇÃO ........................................................................ 19 3.5. CONTROLE GERAL DO SISTEMA ............................................................. 20 4. RESULTADOS FINAIS ................................................................................... 21 5. CONCLUSÕES ............................................................................................... 24 6. REFERÊNCIAS BIBLIOGRÁFICAS ............................................................... 25 ANEXO A ............................................................................................................... 26 3 1. INTRODUÇÃO As revoluções industriais desempenharam um papel crucial para o desenvolvimento tecnológico, pois através delas, técnicas de mecanização e posteriormente a robótica, esta última a partir da terceira revolução industrial, começaram a ser desenvolvidas. Com os avanços tecnológicos cada vez mais presentes no mundo, o desenvolvimento da automação, técnica de automatizar os processos, começou a surgir. O primeiro termo utilizado para designar automação foi o de controle automático de processos [1]. O presente trabalho consiste na demonstração de um tipo de robótica autônoma, com percurso “auto-programável”. Trata-se de um robô seguidor de linha que funcionará com base em um controle do tipo Proporcional, em que a ação corretiva da trajetória é proporcional ao erro atuante. Tal funcionamento será fruto da interação de circuitos com sensores, atuadores e uma lógica de programação que fará com que o robô percorra um circuito desenhado por uma faixa de cor preta com uma cor clara ao redor. 1.1. OBJETIVO GERAL Realizar o experimento de uma lógica de programação que guie o robô seguidor de linha ao longo de uma faixa preta em um circuito qualquer, com uma cor clara ao redor da referida faixa. 1.2. OBJETIVOS ESPECÍFICOS Testar um controle do tipo Proporcional para o funcionamento do seguidor de linha; Explicar o funcionamento dos sensores e atuadores envolvidos; Explicitar o funcionamento do microcontrolador Arduino e sua programação; 4 2. REFERENCIAL TEÓRICO Neste tópico abordaremos alguns temas importantes para o entendimento do projeto do seguidor de linha. Falaremos sobre modulação por largura de pulso, que é uma tecnologia de controle de potência que utilizamos para controlar a velocidade dos motores; controle proporcional, tipo de controle utilizado neste projeto; o Arduino, microcontrolador que fará o controle geral do sistema; fototransistores, que são os sensores presentes no seguidor de linha; motores de corrente contínua, que são os atuadores presentes no robô; além de robô seguidor de linha na indústria, para um melhor entendimento da importância deste tipo de tecnologia. 2.1. MODULAÇÃO POR LARGURA DE PULSO (PWM) PWM, ou modulação por largura de pulso, é uma tecnologia de controle de potência muito utilizada em diversos circuitos eletrônicos e também em micromotores elétricos. Por meio desta tecnologia, podem-seobter resultados analógicos a partir de sinais digitais [2]. Basicamente, o PWM gera uma onda quadrada de alta frequência, e controla a porcentagem de tempo em que essa onda permanece em nível lógico alto. Tal percentual é o chamado ciclo de trabalho, e conforme este se altera, provoca uma mudança no valor médio de tensão da onda. Este valor médio pode variar entre 0 e 5V para o Arduino [2]. 5 Figura 1 – Esquema de modulação por largura de pulso. Fonte: https://www.arduino.cc/en/Tutorial/PWM . O ciclo de trabalho é um valor expresso em percentual, calculado a partir da razão entre o tempo em que o sinal permanece em nível alto e o tempo total da oscilação [2], como mostra o esquema a seguir: Figura 2 - Ciclo de trabalho PWM. Fonte: https://www.arduino.cc/en/Tutorial/PWM. O ciclo de trabalho pode ser determinado a partir da seguinte equação: 6 𝐶𝑡(%) = 𝑥 𝑥 + 𝑦 × 100 = 𝑥 𝑇 × 100 (Equação 1) Em que: Ct (%) = Ciclo de trabalho (valor percentual) x = tempo em nível alto y = tempo em nível baixo T = tempo total O valor médio da onda é obtido por meio da seguinte equação: 𝑉𝑚é𝑑𝑖𝑎 = 𝑉𝑚á𝑥 × 𝐶𝑡(%) (Equação 2) Vmédia = tensão média Vmáx = tensão máxima Ct (%) = Ciclo de trabalho (valor percentual) No Arduino, o ciclo de trabalho é um valor armazenado em 8 bits que vai de 0 (0%) a 255 (100%). Para um sinal PWM de valor 165, por exemplo, tem-se: se 255 é 100%, 165 é aproximadamente 65%. Considerando a tensão máxima do Arduino sendo 5V, tem-se: 𝑉𝑚é𝑑𝑖𝑎 = 5 × 65% 𝑉𝑚é𝑑𝑖𝑎 = 3,25𝑉 2.2. CONTROLE PROPORCIONAL Para um melhor entendimento do controle Proporcional, é necessário o entendimento de como funciona um sistema realimentado, utilizado amplamente no ramo da automação. A seguir iremos explicar como funciona este tipo de sistema. 7 2.2.1. SISTEMA REALIMENTADO Um sistema realimentado consiste em um esquema de funcionamento de malha fechada, em que o estado da variável controlado é sempre monitorado pelos sensores na saída do sistema, que enviam um sinal que retorna à entrada do sistema para um comparador, que detecta se há erro, ou seja, diferença entre o valor desejado e o valor real do estado da variável, para que desta forma o sistema continue a manipulá-la até obter sucesso. . Figura 3 - Estrutura de um sistema de controle realimentado Fonte: https://www.embarcados.com.br/controlador-proporcional/ Um sistema realimentado pode ser dividido em três estruturas básicas: O Sistema a ser controlado; O controlador utilizado nesse sistema; A realimentação, por meio dos sensores. Na entrada do sistema existe uma referência, que é o valor para o qual a variável manipulada deverá ser modificada. O sinal da referência passa para o centro de controle, que é responsável pelo funcionamento do sistema em si, dando ordens para os atuadores realizarem seus respectivos papéis na manipulação da variável. Esses atuadores podem ser dos mais diversos tipos, como motores, resistências, relés, cilindros, entre outros. Os atuadores então realizam o trabalho definido e desta forma, o sistema possui um sinal de saída [3]. Em sistemas de malha aberta, em que não há realimentação, este sinal de saída não é recuperado pela entrada do sistema, e o processo acaba ali. No caso de sistema realimentado, os sensores captam o sinal da saída do sistema, apontando desta forma o novo estado da variável manipulada. Este sinal é reenviado para um comparador na entrada do sistema, que compara o valor da saída com o valor 8 configurado inicialmente no setpoint. Havendo erro, ou seja, diferença entre os dois sinais, o sistema de controle permanece atuando para o ajuste da variável [3]. Em resumo, o controle e a realimentação trabalham de maneira rápida e em conjunto para que o sistema apresente o melhor desempenho, rapidez e eficácia possíveis. Tal tipologia visa reduzir ao máximo o erro, e aproximar ao máximo o estado da variável ao valor de referência [3]. 2.2.2. PRINCÍPIO DE FUNCIONAMENTO DO CONTROLADOR PROPORCIONAL Controladores Proporcionais realizam uma ação corretiva proporcional ao valor do erro da saída do sistema. Figura 4 - Sistema com Controle Proporcional Fonte: https://www.embarcados.com.br/controlador-proporcional/ De acordo com o que foi dito anteriormente, e conhecendo a forma de funcionamento de um controlador proporcional, pode-se fazer uma análise matemática do funcionamento do mesmo e de como se dá o ajuste quando existe um sinal de erro recebido por intermédio da realimentação. Pode-se, matematicamente, analisar a proporcionalidade entre os sinais de ajuste e de erro da seguinte forma: 𝑎(𝑡) ∝ 𝑒(𝑡) (Equação 3) Em que: PWMM 9 a (t)= ajuste e (t) = erro Assim, para chegar-se a uma fórmula de determinar o ajuste, admitiu-se uma constante de proporcionalidade Kp entre os dois termos, que será o ganho proporcional, como mostrado abaixo na equação do ajuste: 𝑎(𝑡) = 𝐾𝑝 ∙ 𝑒(𝑡) (Equação 4) O erro é a diferença entre o valor da referência e o coletado na saída do sistema. Matematicamente pode-se defini-lo como: 𝑒(𝑡) = 𝑃𝑊𝑀𝑀 − 𝑠(𝑡) (Equação 5) Em que: PWMM = valor de referência (PWM médio) s(t) = valor da saída do sistema Assim, a fórmula final é dada por: 𝑎(𝑡) = 𝐾𝑝 𝑥 [𝑃𝑊𝑀𝑀 − 𝑠(𝑡)] (Equação 6) A imagem abaixo expressa a forma com a qual o sistema de controle proporcional corrige o erro, trazendo o traçado ao valor de referência do sistema. 10 Figura 5 - Sistema de Controle Proporcional em atuação Fonte: https://www.smarti.blog.br/controladores-pid/ 2.3. ARDUINO Os microcontroladores são dispositivos que podem ser programados para a realização de determinadas funções. São comumente usados para controlar circuitos e devido a isto é facilmente encontrado numa variedade de dispositivos. O Arduino é um microcontrolador que atualmente tem sido o cérebro de uma variedade de dispositivos. Uma grande comunidade de fabricantes atualmente se reúne em torno desta plataforma de código aberto [4]. Figura 6 - Placa Arduino Uno Fonte: Wikimedia, Disponível em:<https://commons.wikimedia.org/wiki/File:Arduino-uno-perspective- whitw.jpg>. Acesso em 25 de agosto de 2017. Como já dito anteriormente, é uma plataforma eletrônica de código aberto, mas, além disso, é baseada em hardware e software fáceis de usar. As placas 11 Arduino são capazes de ler entradas e transformá-las em uma saída que é determinada por um conjunto de instruções previamente declaradas pelo seu programador. Para fazer isso, é necessário o uso da linguagem de programação Arduino (com base na fiação) e o software Arduino (IDE), com base no processamento [5]. 2.4. FOTOTRANSISTOR O fototransistor consiste em um dispositivo eletrônico fundamentado nos conceitos de fotocondutividade [6]. Nos seus aspectos construtivos, assim como o transistor convencional é a combinação de dois diodos de junção, contudo, associado ao efeito transistor aparece o efeito fotoelétrico. Por meio disto, além de detectar a incidência de luz, amplifica o sinal a ele referido. Em geral, possui dois terminais acessíveis, o coletor e o emissor, sendo a base incluída apenas para o controle elétrico [7]. Conforme isso, o fototransistor funciona como resistência elétrica em função da intensidade da luz incidente na sua base. Figura 7 - fototransistor Fonte: http://pteletronica.com/optoacoplador-foto-diodo-foto-transistor/Figura 8 - esquema de funcionamento do fototransistor Fonte: https://www.abcelectronica.net/productos/sensores/ftrans/ 12 A corrente que passa pela base do fototransistor depende especificamente do fluxo luminoso incidente [7]. Os fototransistores são dispositivos que apresentam uma alta sensibilidade à luz [8]. Deste modo, na ausência de luz, a corrente de base será zero e o fototransistor cortado, resultando em uma tensão no coletor igual à tensão de polarização Vcc, quando o que ocorre é o contrário, ou seja, quando há incidência de luz na base do fototransistor, a tensão irá diminuir no coletor conforme o aumento da corrente na base [7]. A corrente de emissor (IE) é composta pela soma das correntes de base (IB) e de coletor (IC). Analogamente, observamos que, a tensão entre coletor-emissor (VCE) é composta pela soma das tensões base-emissor (VBE) e base-coletora (VCB) [9]. Portanto, podemos escrever: IE = IB + IC (Equação 7) VCE = VBE + VBC (NPN) (Equação 8) 2.5. MOTOR DE CORRENTE CONTÍNUA O motor de corrente contínua é constituído principalmente de duas estruturas magnéticas, sendo estas: o estator (circuito indutor) e o rotor (circuito induzido). Dá-se o nome de estator a parte fixa, responsável pela criação de um campo magnético permanente. A figura 10 mostra o desenho de um motor CC de 2 polos com enrolamento de campo. O rotor, a parte móvel do motor, é um eletroímã composto de um núcleo de ferro, os enrolamentos em sua superfície são alimentados por um sistema mecânico de comutação (figura 9). Esse sistema é formado por um comutador, que tem como função inverter a corrente na fase de rotação apropriada de forma a que o conjugado desenvolvido seja na mesma direção [10]. 13 Figura 9 - Desenho em (a) foto em (b) de um motor de corrente contínua de dois polos. Fonte: SIEMENS – Motor de corrente contínua edição 01.2006 Os condutores do rotor são dispostos com as mesmas distâncias entre seus dois polos, desta forma o motor apresentará mesmo torque em suas fases de rotação. A imagem a seguir demonstra o esquema de funcionamento de um motor de corrente contínua [10]. Figura 10 – Princípio de funcionamento de motor CC Fonte: SIEMENS – Motor de corrente contínua edição 01.2006 O esquema acima demonstra de maneira simples e detalhada de como se dá o movimento do motor. O campo magnético do estator permanece fixo e o rotor é uma bobina por onde circula a corrente elétrica. Assim que rotor recebe corrente 14 elétrica, esta bobina se comporta com polaridade N (norte) em uma de suas extremidades e S (sul) como mostrados na figura[10]. Num primeiro instante (a) a bobina se encontra na sua posição horizontal, devido à tração magnética, a bobina experimenta um torque que age no sentido anti- horário (b). Assim que a bobina encontra sua posição de estabilidade (c), ou seja, o momento em que o torque é nulo, o comutador age, invertendo o sentido da corrente, aproveitando o torque anterior e mantendo a continuidade do giro (d) [10]. Tem um alto custo, além disso, para seu funcionamento ocorra, é necessária uma fonte de corrente contínua. Podem funcionar com velocidade ajustável entre amplos limites e se prestam a controles de grande flexibilidade e precisão. Por isso seu uso é restrito a casos especiais em que estas exigências compensam o custo muito mais alto da instalação [11]. 2.6. ROBÔ SEGUIDOR DE LINHA NA INDÚSTRIA Ao longo dos anos, o sistema de produção industrial foi se tornando cada vez mais exigente, em função da demanda e da concorrência. Desta forma, os avanços tecnológicos foram se tornando rotina, e cada vez mais as tarefas, desde as mais simples até as mais complexas, passaram a ser executadas de forma autônoma, dispensando intervenção humana e aumentando o ritmo de trabalho [12]. Nos dias atuais, em que o uso da tecnologia está cada vez mais necessário, os robôs seguidores de linha possuem um papel muito importante nas indústrias, comércios, hospitais e clínicas e até mesmo no âmbito residencial. Figura 11 - Seguidor de linha em indústria Fonte:http://www.jornaldasavassi.com.br/arquivos/images/mer_12%20(4)(1).JPG São chamados também de "robôs industriais" e realizam tarefas como mapeamento de uma área, monitoramento, transporte de materiais entre os setores 15 da produção, entre outras tarefas, e fazem essas tarefas de forma automática, na maioria das vezes sem intervenção humana alguma. Desta forma, sua importância não se resume ao fato de executar algumas tarefas, mas ao passo que reduz a intervenção humana, reduz também o risco de acidentes e de alguém se machucar no processo [13]. Robôs seguidores de linha são tipos de veículos guiados automaticamente (ou AGVs - Automated Guided Vehicle), capazes de se deslocar em trajetos pré- definidos, assim excluindo o uso de mão de obra humana. Sendo autônomos, eles são capazes de seguir determinadas instruções, carregar e distribuir materiais com inúmeras vantagens, ou seja, podem se deslocar em áreas apertadas, podendo se adaptar a mudanças de percurso. Suas aplicações são comuns no transporte de matérias para linhas de produção, devido a uma capacidade de carga variável e pouca necessidade de manutenção [13]. 16 3. FUNCIONAMENTO DO ROBÔ SEGUIDOR DE LINHA O seguidor de linha utilizado é o μMaRT-INO e funciona, essencialmente, com base em um grupo de sensores, dois motores, e um microcontrolador. O sensoriamento ótico do robô lhe permite distinguir a diferentes intensidades luminosas e, por meio disto, é viável a movimentação do robô em determinado ambiente. Este sistema de sensoriamento pode ser realizado com o uso de sensores fotoelétricos. O robô μMaRT-INO dispõe de fototransistores para o sensoriamento das variáveis que compõem o nosso sistema. O circuito de controle do robô seguidor de linha é fundamentado com base em dois grupos de sensores de linha como é mostrado na figura 11. Os sensores são dispostos de tal forma que tenha um espaçamento, o qual deve ser o lugar da faixa de contraste. Mesmo estando estes sensores conectados às portas analógicas do Arduino, enviam um sinal que por sua vez apresenta características digitais devido à lógica do sistema de controle com a função de se tratar do sinal e controlar os dois motores por meio da saída do sistema. Quando um dos sensores identifica uma faixa de contraste, detecta a mudança, o que permite corrigir sua rota. Figura 12- Esquema do funcionamento do seguidor de linha Fonte: Próprio autor O tipo de controle utilizado neste robô seguidor de linha foi controle Proporcional. Os sensores captam a todo instante os sinais luminosos advindos do solo; sendo eles da faixa de contraste e do restante do solo. Os sinais captados pelos seis fototransistores são enviados para o Arduino. Estes sinais são interpretados, seguindo a lógica do algoritmo que foi utilizado. A lógica de programação foi feita no ambiente ARDUINO IDE, versão 1.8.1. As saídas do Arduino foram ligadas aos motores de corrente contínua de ambos os lados do robô. A lógica proporcional então processa os sinais recebidos dos sensores e, de acordo com os mesmos, é possível manipular a velocidade dos motores de forma 17 independente. Desta forma o robô se movimenta e se estabiliza por sobre a faixa preta, percorrendo assim o traçado definido. 3.1. CAPTAÇÃO E PROCESSAMENTO DO SINAL O robô utilizado neste trabalho é guiado por meio da navegação por referência ótica. Assim, utiliza-se de dois grupos de fototransistores que operam em modo de reflexão. Um dos grupos opera à direitaenquanto o outro opera à esquerda. Os fototransistores dispõem de uma base coletora muito sensível à luz. O sensor converte luz em corrente elétrica, a qual é gerada quando fótons são absorvidos no fotodiodo, dependendo da frequência da cor do plano, a corrente gerada também varia por meio das resistências do circuito, isso permite com que seja efetuada a diferenciação de cores. Os sensores, ao captarem a linha preta, emitem um sinal 1 (alto) para o Arduino. Quando estivessem sobre o solo em branco, o sinal dos sensores é 0 (baixo). O esquema a seguir demonstra como se dá esse comportamento. Figura 13 - Demonstração do funcionamento dos sensores [15] Sinal 0 (baixo) Sinal 0 (baixo) Sinal 1 (alto) Sinal 0 (baixo) 18 O sinal da saída dos sensores é comparado no sistema de controle, distribui a alimentação devida a cada motor do sistema. Os sensores, quando em funcionamento, distinguem a diferença da cor, pois quanto mais claro maior é a corrente gerada, possibilitando uma resposta aos motores do robô por intermédio da lógica desenvolvida. 3.2. MOVIMENTAÇÃO DO SEGUIDOR DE LINHA O sinal enviado pelo bloco comparador controla o acionamento dos motores do robô de tal forma que sua velocidade varie conforme a tensão média gerada na entrada PWM do motor. Quando um dos sensores envia um sinal lógico alto (HIGH), ou seja, quando um dos sensores está localizado na faixa escura, a velocidade dos motores é ajustada para que seja possível realizar a correção de sua trajetória. Portanto, o veículo precisa para realizar tais manobras, motores posicionados de forma oposta e polarizados de forma independente, para que o sentido seja o mesmo. Para facilitação do processo, foram empregados dois micromotores com caixa de redução para aumentar o torque e dar mais precisão no giro das rodas, nos micromotores também existem encoders1 para melhor controle de velocidade de cada roda. 3.3. CONTROLE DOS MOTORES Após o tratamento do sinal, os motores do seguidor de linha são alimentados para se manterem na rota indicada pela faixa de contraste (branco/preto). As entradas IN1 e IN2, definem o sentido de rotação dos motores enquanto a entrada PWM, a velocidade com a qual os motores giram. 1 - sensor que converte um movimento angular ou linear em uma série de pulsos digitais elétricos, fornecendo para o controlador dados suficientes para transforma-los em informações como posição, velocidade ou rpm (rotação por minuto)[14]. 19 Figura 14 – Controle do motor [16] 3.4. FONTE DE ALIMENTAÇÃO Para conferir autonomia ao robô, é possível que este seja alimentado pela sua própria placa ou Arduino. Seu sistema que propicia a fonte de alimentação é composto por um chaveamento que é responsável por ligar ou desligar o robô completo. Figura 15 – Diagrama de alimentação do seguidor de linha via placa [16] 20 3.5. CONTROLE GERAL DO SISTEMA O Arduino é responsável pelo controle geral do processo, desde receber o sinal dos sensores até o envio dos resultados para os motores. Na figura abaixo, é possível ver a definição de cada um dos pinos utilizados. Figura 16 - Definições dos pinos das portas do Arduino [16] Na memória do Arduino foi armazenada a lógica de programação responsável pelo controle do seguidor de linha. Através dela, o processamento dos sinais advindos dos sensores é realizado e desta forma ocorre a tomada de decisões. 21 4. RESULTADOS FINAIS Este projeto teve o intuito de experimentar uma programação em um robô para que este seguisse um traçado definido por uma fita de cor preta, com o restante do solo em cor branca. Através da ação conjunta dos sensores e atuadores, seguindo o algoritmo, o robô a todo o momento corrigiria sua trajetória de modo a seguir o traçado. Para programar no microcontrolador Arduino do robô, utilizamos o software próprio do Arduino, que dispões de uma biblioteca que o torna capaz de ser programado em diversas linguagens, como C ou C++. A programação apresentou alguns erros no decorrer da elaboração do trabalho, que faziam com que o microcontrolador não a entendesse, ou o robô apresentasse comportamento diferente do esperado, entre outros. No entanto, ao longo de dias, nos aprofundamos no assunto e fomos corrigindo um a um os erros presentes na programação, até atingir o objetivo. Optamos por utilizar o tipo de controle proporcional para guiar o seguidor de linha. Assim, as correções de sua trajetória seriam sempre proporcionais ao erro da posição do robô. Após vários testes, fomos definindo valores na programação que apresentassem um melhor resultado na prática. Adotamos para o ajuste da trajetória do robô a constante de proporcionalidade 3 que multiplica o sinal de erro. Desta forma, a correção sempre seria maior que o erro. Essas adaptações permitiram realizar as curvas com uma maior precisão. A alimentação do robô seguidor de linha, incialmente seria feita através de uma bateria de 9V, que por sua vez tinha tensão suficiente, mas o robô seguidor de linha não teria potência hábil para realizar as funções do algoritmo. Após vários testes escolhemos que para a alimentação do robô seguidor de linha a entrada USB do Arduino dispõe de potência suficiente para a alimentação dos motores, e por sua vez, o algoritmo. Como visto ao longo do trabalho, o movimento do robô se deu através dos sinais coletados dos sensores e da lógica de programação, que por sua vez, tem a função de realizar o controle dos atuadores, que são os motores. A tabela 1 a seguir mostra as situações às quais o robô foi submetido e como o motor reagiu a essas situações. 22 SENSORES DA ESQUERDA SENSORES DA DIREITA PWM DOS MOTORES LINHA 1 LINHA 2 LINHA 3 LINHA 4 LINHA 5 LINHA 6 ESQUERDA DIREITA 1 0 0 0 0 0 -15 165 1 1 0 0 0 0 0 150 0 1 0 0 0 0 15 135 1 1 1 0 0 0 0 1 1 0 0 0 30 120 0 0 1 0 0 0 45 105 0 0 1 1 0 0 75 75 0 0 0 0 0 0 0 0 0 1 0 0 105 45 0 0 0 1 1 0 120 30 0 0 0 1 1 1 135 15 0 0 0 0 1 0 0 0 0 0 1 1 150 0 0 0 0 0 0 1 165 -15 Tabela 1 - Variação do valor PWM em relação ao erro diagnosticado Para o PWM médio, após alguns testes, foi definido o valor 75. Os sensores estão definidos, da esquerda para a direita na visão superior do seguidor de linha, como: LINHA 1, LINHA 2, LINHA 3, LINHA 4, LINHA 5 e LINHA 6. O peso inicial de cada um dos motores foi estabelecido da seguinte forma: Os sensores LINHA 1 e LINHA 6, presentes na extremidades, têm um peso maior. Para estes, foi definido -30 e 30, respectivamente. Para os sensores LINHA 2 e LINHA 5, o peso é o correspondente a aproximadamente 66% do peso dos sensores das extremidades, totalizando -20 e 20, respectivamente. Para os sensores centrais, LINHA 3 e LINHA 4, estabeleceu-se o valor que corresponde a aproximadamente 33% do peso dos sensores da extremidades, ou seja, -10 e 10, respectivamente. Pelo fato de se tratar de um controle proporcional, e tendo admitido uma constante de proporcionalidade entre o erro e o ajuste, sendo esse valor igual a 3, os valores de cada um dos sensores ficaram segundo mostra a tabela a seguir: 23 SENSORES DA ESQUERDA SENSORES DA DIREITA LINHA 1 LINHA 2 LINHA 3 LINHA 4 LINHA 5 LINHA 6 -90 -60 -30 30 60 90 Tabela 2 - Valores de ajuste de cada sensor. O valor do PWM dos motores é calculado somando-se o valor do ajuste, dado pela média aritmética entre os sensores que detectam algum sinal, ao valor doPWM médio, no caso do motor da esquerda, ou subtraindo o valor do ajuste do PWM médio, no caso do motor da direita. Quando todos os sensores têm sinal alto/baixo, o erro é sempre igual a 0, o que mantém uma trajetória retilínea do seguidor de linha. Matematicamente, fica da seguinte maneira: PWM esquerdo 𝑃𝑊𝑀𝑀 + 𝑎 (9) PMW direito 𝑃𝑊𝑀𝑀 − 𝑎 (10) Onde a é o ajuste de acordo com o erro coletado e PWMM é o valor do PWM médio. Desta forma é dado o ajuste para correção do erro do robô seguidor de linha, o que permite que ele siga o traçado sempre corrigindo sua rota. 24 5. CONCLUSÕES O projeto apresentou resultado satisfatório. A partir de um sistema de malha fechada, dotado de controle, atuadores e sensores, foi possível realizar um programa com fim a colocar para funcionar um robô seguidor de linha. As simulações nos permitiram realizar ajustes e correções. O seguidor de linha realizou todos os percursos aos quais foi submetido de forma satisfatória, conseguindo realizar todas as curvas, inclusive de até 90º. 25 6. REFERÊNCIAS BIBLIOGRÁFICAS [1] RIBEIRO, Marco Antônio. Automação Industrial, 3ºed. Tek Treinamento & Consultoria Ltda. Salvador – BA, 1999. [2] ARDUINO TUTORIAL PWM >https://www.arduino.cc/en/Tutorial/PWM< [3] MADEIRA, Daniel. Controlador proporcional. Julho, 2016. [4] Arduino, Introduction. Disponível em:< https://www.arduino.cc/en/Guide/Introduction>. Acesso em 25 de agosto de 2017. [5] Wikimedia, Disponível em:<https://commons.wikimedia.org/wiki/File:Arduino-uno- perspective-whitw.jpg>. Acesso em 25 de agosto de 2017. [6] CEFET – FLORIANÓPOLIS – SC Prof. Valdir Noll. Disponível em:<http://www.cefetsc.rct-sc.br/vnoll/fotoscondutivos.pdf>. [7] Eletrônica, Volume 1 - Albert Paul Malvino. [8] Instituto Newton C Braga, Como testar fototransistores, 2014. [9] Laboratório de Eletricidade e Eletrônica , F. G. Capuano e M. A. M. Marino. Ed. Érica. [10] SIEMENS – Motor de corrente contínua edição 01.2006. [11] MERLIN, Victor Luiz, 2014. [12] SILEVIRA, Leonardo e LIMA, Weldson. Um breve histórico conceitual da Automação Industrial e Redes para Automação Industrial, maio de 2013. [13] http://roboticaufopa.blogspot.com.br/2014/06/introducao-ao-robo-seguidor-de- linha.html. [14] http://www.mecatronicaatual.com.br/educacao/1027-encoders. [15] ANDRADE, Daniel Spillere, Projeto: Robô Seguidor de Linha, 2013. [16] SILVA, Kléber Lima, Micromouse_and_robotracer, janeiro de 2015. 26 ANEXO A - ALGORITMO /** ***************************************************************** * Arquivo umart_ino_seguidor_linha.ino * Autor Kleber Lima da Silva (micromousebrasil@gmail.com) * Versão V1.0.0 * Data 12-Maio-2015 * Resumo Programa de demonstração do Robô uMaRT-INO no modo * robotracer (seguidor de linha) ***************************************************************** */ // Definição dos pinos no modo ROBOTRACER ------------------------ const int LINHA6 = A0; // Sensor de linha 6 (esquerda) const int LINHA5 = A1; // Sensor de linha 5 const int LINHA4 = A2; // Sensor de linha 4 const int LINHA3 = A3; // Sensor de linha 3 const int LINHA2 = A4; // Sensor de linha 2 const int LINHA1 = A5; // Sensor de linha 1 (direita) const int EMISSORES = 13; // LEDs dos sensores de linha const int LED1 = 0; // LED1 const int LED2 = 1; // LED2 const int B_ENC_E = 2; // Encoder do motor esquerdo (sinal B) const int A_ENC_D = 3; // Encoder do motor direito (sinal A) const int A_ENC_E = 4; // Encoder do motor esquerdo (sinal A) const int B_ENC_D = 5; // Encoder do motor direito (sinal B) const int PWM_E = 6; // PWM do motor esquerdo const int IN2_E = 7; // IN2 da ponte H do motor esquerdo const int IN1_E = 8; // IN1 da ponte H do motor esquerdo const int IN1_D = 9; // IN1 da ponte H do motor direito const int IN2_D = 10; // IN2 da ponte H do motor direito const int PWM_D = 11; // PWM do motor direito const int SW1 = 12; // Botão SW1 // Constantes do controlador ------------------------------------- const float KP = 3; const int PWM_MEDIO = 75; // Definição das constantes do programa -------------------------- #define LINHA HIGH // LOW: linha branca | HIGH: linha preta #define INFINITO 255 // Para indicar que nenhum sensor leu linha 27 // Protótipos das funções ---------------------------------------- int lerSensoresLinha(void); void setMotores(int pwm_esquerda, int pwm_direita); // Variáveis ----------------------------------------------------- int erro = 0, erro_anterior = 0; int MV = 0; // Inicialização dos pinos --------------------------------------- void setup() { pinMode(LINHA6, INPUT); pinMode(LINHA5, INPUT); pinMode(LINHA4, INPUT); pinMode(LINHA3, INPUT); pinMode(LINHA2, INPUT); pinMode(LINHA1, INPUT); pinMode(EMISSORES, OUTPUT); pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(PWM_E, OUTPUT); pinMode(IN1_E, OUTPUT); pinMode(IN2_E, OUTPUT); pinMode(PWM_D, OUTPUT); pinMode(IN1_D, OUTPUT); pinMode(IN2_D, OUTPUT); pinMode(SW1, INPUT); // Aguarda o botão SW1 ser pressionado para ligar o robô while(digitalRead(SW1) == LOW); delay(1000); } // LOOP principal do programa ------------------------------------ void loop() { unsigned long t0; // Registra o tempo inicial para garantir uma base de tempo fixa 28 t0 = micros(); // Verifica a leitura dos sensores erro = lerSensoresLinha(); if (erro == INFINITO) { erro = erro_anterior; } // Indica o estado dos sensores através dos LEDs digitalWrite(LED1, LOW); digitalWrite(LED2, LOW); if (erro > 0) { digitalWrite(LED1, HIGH); } else if (erro < 0) { digitalWrite(LED2, HIGH); } else if (erro == 0) { digitalWrite(LED1, HIGH); digitalWrite(LED2, HIGH); } // Controlador Proporcional MV = KP * erro; // Acionamento dos motores setMotores(PWM_MEDIO + MV, PWM_MEDIO - MV); // Aguarda 1 milisegundo (base de tempo do controlador) while((micros() - t0) < 1000); } /* Função para leitura dos sensores de linha --------------------- * Retorna valores entre -30 e 30 (valores negativos indicam que o robô precisa se deslocar para a esquerda) */ int lerSensoresLinha(void) 29 { int erro = 0, soma = 0, n = 0; unsigned long t0 = micros(); // Habilita os emissores por 100 us digitalWrite(EMISSORES, HIGH); while((micros() - t0) < 100); // Realiza a leitura de todos os sensores de linha. Os sensores // das extremidades possuem peso maior. No final é realizada // a média ponderada if(digitalRead(LINHA1) == LINHA) { soma += -30; n++; } if(digitalRead(LINHA2) == LINHA) { soma += -20; n++; } if(digitalRead(LINHA3) == LINHA) { soma += -10; n++; } if(digitalRead(LINHA4) == LINHA) { soma += 10; n++; } if(digitalRead(LINHA5) == LINHA) { soma += 20; n++; } if(digitalRead(LINHA6)== LINHA) { soma += 30; n++; 30 } // Desabilita os emissores digitalWrite(EMISSORES, LOW); // Retorna a média ou retorna a constante INFINITO indicando // que nenhum sensor leu linha if(n != 0) erro = soma / n; else erro = INFINITO; return erro; } /* Função para acionamento dos motores --------------------------- * pwm_esquerda e pwm_direita recebem valores entre -255 e 255 * (valores negativos giram o respectivo motor para trás) */ void setMotores(int pwm_esquerda, int pwm_direita) { if(pwm_esquerda < 0) { pwm_esquerda = -pwm_esquerda; digitalWrite(IN1_E, LOW); digitalWrite(IN2_E, HIGH); } else { digitalWrite(IN1_E, HIGH); digitalWrite(IN2_E, LOW); } if(pwm_direita < 0) { pwm_direita = -pwm_direita; digitalWrite(IN1_D, LOW); digitalWrite(IN2_D, HIGH); } else 31 { digitalWrite(IN1_D, HIGH); digitalWrite(IN2_D, LOW); } if(pwm_esquerda > 255) pwm_esquerda = 255; if(pwm_direita > 255) pwm_direita = 255; analogWrite(PWM_E, pwm_esquerda); analogWrite(PWM_D, pwm_direita); }