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);
}