projeto de robô seguidor de linha com controlador pid
DESCRIPTION
Projeto de Robô Seguidor de Linha com Controlador PIDTRANSCRIPT
![Page 1: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/1.jpg)
Universidade Federal da Bahia
Escola Politecnica
Departamento de Engenharia Eletrica
Curso de Engenharia Eletrica
ENGC35 - Modelagem e Analise de Sistemas Dinamicos
Projeto de um Robo Seguidor de Linhacom Controlador PID
Ana Tereza BorbaFranklin LimaLucas Santana
Salvador - Bahia
Novembro de 2015
![Page 2: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/2.jpg)
Projeto de um Robo Seguidor de Linhacom Controlador PID
Ana Tereza Borba
Franklin Lima
Lucas Santana
Trabalho apresentado ao Professor Humberto
Xavier como requisito avaliativo da disciplina
Modelagem e Analise de Sistemas Dinamicos do
curso de Engenharia Eletrica.
Orientador: Prof. Humberto Xavier.
Salvador - Bahia
Novembro de 2015
![Page 3: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/3.jpg)
“A Matematica nao mente. Mente
quem faz mau uso dela”.
Albert Einstein
![Page 4: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/4.jpg)
Resumo
Este projeto tem como finalidade apresentar o estado da arte da criacao de um
prototipo de um robo seguidor de linha para aplicacao dos conceitos de elaboracao de
modelos e determinacao de parametros de controle estudados no curso Modelagem de Sis-
temas Dinamicos ministrada pelo professor Humberto Xavier. Inicialmente apresentam-se
as etapas do projeto, descricao dos modelos utilizados e sao apresentadas tambem as des-
cricoes dos projetos de modo conceitual e posteriormente detalhado.
![Page 5: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/5.jpg)
Sumario
Introducao 1
1 Projeto de Engenharia 3
1.1 Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Orcamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Work Breakdown Structure . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 RACI Chart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Modelo do Sistema 7
2.1 Modelo Cinematico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Modelo do Motor DC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.1 Identificacao dos Parametros . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Modelo dos Sensores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3 Projeto do Controlador 12
3.1 Projetos Conceitual e Basico . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.2 Projeto Detalhado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2.1 Parte Mecanica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2.2 Parte Eletrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4 Resultados e Conclusoes 18
Referencias Bibliograficas 20
APPENDICES 21
A Prototipo Desenvolvido 21
B Codigo PID do Arduino 23
![Page 6: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/6.jpg)
Introducao
O controle de sistemas tem sido um objeto de estudos cada vez maior da area de en-
genharia. O ser humano tem buscado revolucionar os equipamentos e maquinas de modo
a aperfeicoar o seu funcionamento, tornando-os mais estaveis e suavizando erros. E nesse
contexto que as definicoes de modelagem de sistemas e controle aparecem como protago-
nistas em diversos cursos: Engenharia Eletrica, Eletronica, Mecanica e, principalmente,
Engenharia de Automacao e Controle.
Estudar controladores significa estudar formas de como realizar um processo, en-
tende-lo, elencar ferramentas e parametros para obter o melhor resultado.
Problema proposto
A Figura 1 mostra um veıculo autonomo que deve percorrer uma trajetoria cur-
vilınea. O problema resume-se em manter o carrinho o mais estavel possıvel ao realizar
as curvas da trilha atraves de um sistema de controle que leia a entrada da posicao do
veıculo e retorne uma resposta de alteracao da velocidade dos motores para que o prototipo
retorne ao set point estabelecido.
Sensor de
luminosidade
Veículo
Figura 1: Vista superior do robo sobre a trajetoria
A organizacao do trabalho e a que segue: no Capıtulo 1 sao discutidas as etapas do
projeto, incluindo cronograma, orcamento e distribuicao de atividades entre os integrantes
1
![Page 7: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/7.jpg)
2
do grupo. Seguindo a sequencia, no Capıtulo 2, apresenta-se a modelagem do sistema,
com o detalhamento do modelo cinematico, do motor DC e dos sensores utilizados. O
projeto do controlador pode ser visto no Capıtulo 3 e, por fim, os resultados e conclusoes
sao apesentados no Capıtulo 4.
![Page 8: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/8.jpg)
Capıtulo 1
Projeto de Engenharia
Neste capıtulo serao descritos topicos relativos a engenharia do projeto. Na Secao
1.1 e apresentado o cronograma do projeto, que teve duracao total de 7 semanas, enquanto
na Secao 1.2 e apresentado o orcamento parcial do projeto, omitindo o trabalho laborial,
custo operacional e a utilizacao dos recursos da Universidade. No fim do capıtulo sao
apresentados o WBS e RACI Chart.
1.1 Cronograma
O desenvolvimento deste trabalho seguiu o cronograma que pode ser visto na Ta-
bela 1.1. O inıcio das atividades foi dado como 12/10/2015.
Tabela 1.1: Cronograma das atividades
SemanaEtapa
1 2 3 4 5 6 7
Revisao bibliografica • • •Elaboracao do projeto conceitual •Elaboracao do projeto basico • •Busca de facilitadores e recursos • •Aquisicao de materiais •Identificacao dos parametros do motor •Identificacao do modelo do sensor •Modelagem do sistema • •Testes e Correcoes •Escrita do relatorio •Apresentacao •
3
![Page 9: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/9.jpg)
4
1.2 Orcamento
A Tabela 1.2 mostra os custos na construcao do prototipo, desconsiderando os cus-
tos operacionais e a utilizacao dos recursos da Universidade. Os custos foram embolsados
pelos estudantes.
Tabela 1.2: Orcamento para o projeto
Item Descricao Qtde. Preco Unitario Preco Total
1 Arduino Leonardo 1 R$ 43,99 R$ 43,99
2 Shield L293d Driver Ponte H 1 R$ 22,90 R$ 22,90
3 Chassi + Motor com reducao 1 R$ 46,00 R$ 46,00
5 Sensor CNY70 2 R$ 4,00 R$ 8,00
6 Trimpot 10kΩ 2 R$ 2,50 R$ 5,00
7 Resistor 10kΩ 2 R$ 0,20 R$ 0,40
8 Resistor 100Ω 2 R$ 0,20 R$ 0,40
9 Barra de pinos 2 R$ 2,00 R$ 4,00
10 Jumper 3 R$ 0,30 R$ 0,90
11 Placa de Fenolite 10x10cm 1 R$ 7,75 R$ 7,75
12 Bateria 9V 2 R$ 3,35 R$ 6,70
Total R$ 146,04
![Page 10: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/10.jpg)
5
1.3 Work Breakdown Structure
O diagrama WBS do projeto pode ser visto na Figura 1.1
Robô Seguidor de Trilha com Controlador PID
Do
cu
me
nta
çã
o
Motor DC Sensores Trilha
Modelagem Código
µC - Arduino Chassi
Identificação dos
ParâmetrosPlaca de Interface
Figura 1.1: Diagrama WBS para o projeto
![Page 11: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/11.jpg)
6
1.4 RACI Chart
A matriz de atribuicao de responsabilidade e atividades e mostrada na Tabela 1.3.
Tabela 1.3: RACI Chart para o projeto
Ana
Ter
eza
Fra
nklin
Lim
a
Luca
sSan
tana
Hum
ber
to
Tarefas
1 Revisao bibliografica R R R
2 Elaboracao do projeto conceitual e basico R R R
3 Elaboracao do projeto detalhado R R, A R
4 Busca de facilitadores e recursos R R R C
5 Aquisicao de materiais R
6 Identificacao dos parametros do motor R, A R
7 Identificacao do modelo do sensor R R, A
8 Modelagem do sistema R R R C, I
9 Testes e Correcoes R R R
10 Escrita da documentacao R R, A R I
11 Apresentacao R R R I
Legenda
R Responsavel pela execucao da tarefa. Podem ser uma ou mais pes-
soas designadas a executar a tarefa.
A Prestador de contas. Havera somente uma pessoa designada para
esse papel.
C Consultor da tarefa. Sao pessoas com maior “know how” sobre
determinados assuntos, responsaveis por fornecerem informacoes
uteis para a conclusao da tarefa. A comunicacao com esse grupo
sera de duas vias.
I Pessoas informadas sobre o progresso e status da tarefa. A comu-
nicacao com esse grupo sera de mao unica
![Page 12: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/12.jpg)
Capıtulo 2
Modelo do Sistema
Neste capıtulo serao descritos os modelos do sistema. Na Secao 2.1 sera descrito o
modelo cinematico, mostrando a relacao entre as dimensoes fısicas da trilha e do prototipo
e o seu comportamento dinamico, enquanto na Secao 2.2 e mostrado o modelo do mo-
tor e o procedimento experimental para determinacao dos coeficientes de sua funcao de
transferencia. Por fim, na Secao 2.3, e apresentado o modelo para os sensores.
2.1 Modelo Cinematico
Tem-se um veıculo dotado de duas rodas com tracao obtida por dois motores de
corrente contınua e uma roda omnidirecional, que com auxılio de sensores opticos que
fazem leitura da diferenca de cor da trilha, deve manter-se na trajetoria especificada no
plano, como ilustra a Figura 2.1.
O vetor em vermelho indica o gradiente da curva no ponto especificado, o vetor
em azul indica a direcao e sentido do veıculo. Para manter o veıculo na curva e preciso
que ϕ→ 0. ϕ e, portanto, a variavel controlada.
O objetivo do controlador e, deste modo, e garantir, com bom desempenho, que
29°
ϕ
Motor Esquerdo
Motor Direito
ââL
âR
Figura 2.1: Vista superior do robo sobre a trajetoria
7
![Page 13: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/13.jpg)
8
ϕ = 0.
No entanto, nao ha o controle direto sobre o angulo ϕ, mas sim sobre a grandeza que
o determina no ponto considerado, levando em consideracao que o vetor a e a combinacao
dos vetores aL e aR (indicados na figura). Tais vetores sempre terao a mesma direcao de
a, porem, se aL e aR:
• tiverem mesmo sentido e mesmo modulo, o carro anda em linha reta;
• tiverem mesmo sentido mas modulos diferentes, o carro curva (aL ¿ aR: a direita,
aL ¡ aR: a esquerda) com deslocamento linear;
• tiverem sentidos diferentes, o carro curva sem deslocamento linear (curva em relacao
ao ponto central do eixo dos motores).
O sentido dos vetores aL e aR e analogo ao sentido de rotacao do motor e o modulo esta
associado a velocidade de rotacao.
O controle da velocidade e sentido de rotacao e feito baseado na tensao aplicada
no motor, entao nossa variavel manipulada e a tensao do motor.
De modo a compreender o comportamento dinamico do motor e preciso obter a
sua funcao de transferencia. O procedimento e descrito a seguir.
2.2 Modelo do Motor DC
A funcao de transferencia para um motor de corrente contınua controlado pela
corrente da armadura e dada pela Eq. 2.1
G(s) =Θ(s)
Va(s)=
Km
s[Ra(Js+ b) +KbKm]=Km/(Rab+KbKm)
s(τ1s+ 1)(2.1)
onde:
Θ(s) e a posicao angular em s;
Va(s) e a tensao aplicada no motor;
Kb, Km sao as constantes;
b e o coeficiente de friccao;
J e o torque aplicado ao eixo do motor.
![Page 14: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/14.jpg)
9
O diagrama em blocos pode ser visto na Figura 2.2.
Figura 2.2: Diagrama em blocos do motor de corrente contınua
Como nao foi possıvel encontrar as especificacoes junto ao fabricante e de modo
a obter os dados mais precisos foi necessaria realizar a identificacao dos parametros dos
motores. O processo e descrito na secao seguinte.
2.2.1 Identificacao dos Parametros
De modo a desempenhar a identificacao dos parametros do motor utilizado, foi ne-
cessario realizar experimento com auxılio de um sensor optico, com o objetivo e obter uma
resposta aproximada a resposta ao degrau do motor. O metodo utilizado esta disponıvel
em [1].
O grafico da Figura 2.3 mostra o resultado aproximado da resposta ao degrau do
motor.
Tempo (s)2 3 4 5 6 7 8 9 10
0
0.2
0.4
0.6
0.8
1
Resposta ao Degrau
Figura 2.3: Resposta ao degrau bastante ruidosa
![Page 15: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/15.jpg)
10
Como e possıvel observar, a resposta e bastante ruidosa por diversos motivos: a
velocidade do motor varia, ha perda de pulsos na contagem oriunda do enconder, alem
de que o tempo de medicao e o perıodo de amostragem nao coincidem precisamente [1].
Com auxılio de um filtro passa-baixas (Figura 2.4), consegue-se obter uma resposta
melhor.
Figura 2.4: Filtro utilizado no processo
O grafico da Figura 2.5 mostra a resposta filtrada.
Figura 2.5: Resposta ao degrau filtrada
O arranjo experimental desenvolvido pode ser visto na Figura A.3 disponıvel no
Apendice A.
Utilizando-se a ferramenta Parameter Estimation do Matlab foi possıvel a es-
timacao dos parametros, como mostra a Figura 2.6.
![Page 16: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/16.jpg)
11
Figura 2.6: Modelo aproximado (esq.) e parametros estimados
2.3 Modelo dos Sensores
O comportamento do sensor esta disponıvel na suas especificacoes fornecidas pelo
fabricante. A Figura 2.7 mostra a corrente eletrica que flui na malha do receptor de
acordo com o distancia do sensor para uma dada superfıcie.
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
0
s - Displacement (mm)96 11915
VCE = 5 VIF = 20 mA
I
- R
ela
tive
Co
llecto
r C
urr
en
tC
rel
d = 5 mm4 mm3 mm2 mm1 mm0
E D
D
E
1.5
d
s0
5 mm
10 mm
s0
5 mm
10 mm
1110987654321
Figura 2.7: Corrente eletrica relativa versus distancia
Embora o sensor responda continuamente a distancia, podemos definir limites de
modo que:
VOUT =
0, VOUT < 2V
1, cc.
Onde ‘1’ e ‘0’ representam nıveis logicos para famılia TTL.
![Page 17: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/17.jpg)
Capıtulo 3
Projeto do Controlador
O controlador escolhido para ser utilizado no projeto e o PID (Proporcional-
Integral-Derivativo), que e o algoritmo de controle mais usado na industria e tem sido
utilizado em todo o mundo para sistemas de controle industrial. A popularidade de con-
troladores PID pode ser atribuıda em parte ao seu desempenho robusto em uma ampla
gama de condicoes de funcionamento e em parte a sua simplicidade funcional, que permite
aos engenheiros opera-los de uma forma simples e direta.
O sinal de controle u(t) para este controlador e dado por:
u(t) = Kpe(t) +Ki
∫ t
0
e(τ)dτ +Kdd
dte(t) (3.1)
onde:
Kp e o ganho proporcional;
Ki e o ganho integral;
Kd e o ganho derivativo.
O processo de determinacao dos ganhos e conhecido com sintonia e foi feito com
auxılio do MATLAB. A Figura 3.1 mostra parte do processo. Basicamente, o MATLAB,
utilizando-se do modelo linearizado da planta, gera a saıda do controlador PID que pode
ser ajustada de acordo com os criterios de tempo de resposta (rapido versus lento) e
comportamento do transiente (agressivo versus robusto).
12
![Page 18: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/18.jpg)
13
Figura 3.1: Ferramenta para sintonia do PID
3.1 Projetos Conceitual e Basico
O projeto de um robo seguidor de linha com controlador PID consiste na construcao
de um prototipo de veıculo autonomo cujo objetivo e percorrer uma trajetoria curvilınea
com desempenho aceitavel.
De modo a controlar o movimento cinematico do robo, e preciso identificar a sua
posicao na trilha, processo no qual sao utilizados dois sensores de luminosidade na frente
do prototipo que irao diferenciar quando o carro estiver seguindo a linha preta ou quando
sair e estiver na regiao branca. O erro e, portanto, a diferenca entre o set point, relacionado
com a velocidade do motor, e por conseguinte a posicao do veıculo e a saıda do sensor,
que determina a atual posicao do veıculo na trilha. E funcao do controlador alterar a
velocidade dos motores de modo que o veıculo mantenha-se na trajetoria.
O diagrama em blocos do sistema de controle a ser projetado pode ser visto na
Figura 3.2.
Na proxima secao o projeto detalhado e apresentado.
![Page 19: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/19.jpg)
14
-
PID Interface Ponte H
MotorDireito
MotorEsquerdo
Se
nso
res
InterfaceSensor
+
Referência
Figura 3.2: Diagrama em blocos do sistema a ser projetado
3.2 Projeto Detalhado
Nesta secao serao descritos detalhadamente as etapas projeto, apresentado os es-
quematicos e codigos desenvolvidos, bem como os dispositivos utilizados.
3.2.1 Parte Mecanica
Na parte mecanica destaca-se o sistema de tracao e o suporte o mesmo (chassi).
A Figura 3.3 mostra as rodas e motores com a caixa de reducao utilizados no projeto.
Figura 3.3: Motores com caixa de reducao e as rodas utilizadas no projeto
![Page 20: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/20.jpg)
15
3.2.2 Parte Eletrica
Arduino e Interface com os Motores
Arduino e uma plataforma baseada no microcontrolador ATmega32u4, que permite
o desenvolvimento eficiente e rapido de diversas aplicacoes. O Arduino utilizado pode ser
visto na Figura 3.4.
Figura 3.4: Arduino Leornado (esq.) e Motor Shield utilizados no prototipo
Para o controle do sentido de rotacao dos motores, bem como o devido interfacea-
mento entre o Arduino e os motores, a placa Motor Shield usada pode ser vista na Figura
3.4 (dir.).
Sensores
O sensor escolhido para determinacao da posicao do veıculo na trilha foi o CNY70,
que pode ser visto na Figura 3.5
Figura 3.5: Sensor CNY70 utilizado no prototipo
Um esquema do circuito de interface dos sensores pode ser visto na Figura 3.6.
![Page 21: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/21.jpg)
16
R1
100
R2
4.7k
5V
10k
R3
5V
Sensor CNY70
VOUT
Figura 3.6: Circuito de interface para o sensor
Implementacao do PID no Arduino
O controlador PID discreto foi implementado para Arduino utilizando os valores
de ganhos (KP ,KI ,KD) determinados pelo MATLAB. Trecho do codigo implementado
para o Arduino pode ser visto abaixo. O codigo completo esta disponıvel no Apendice B.
Codigo 3.1: Trecho de codigo da implementacao do PID
1 int error = position - 2500;
2
3 int motorSpeed = Kp * error + Kd * (error - lastError);
4 lastError = error;
5
6 int rightMotorSpeed = rightBaseSpeed + motorSpeed;
7 int leftMotorSpeed = leftBaseSpeed - motorSpeed;
![Page 22: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/22.jpg)
17
Simulacao
As simulacoes do sistema foram realizadas no ambiente Simulink do MATLAB. A
Figura 3.7 mostra o diagrama montado na plataforma.
Figura 3.7: Diagrama em blocos do sistema projetado em Simulink
![Page 23: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/23.jpg)
Capıtulo 4
Resultados e Conclusoes
O grafico abaixo mostra em rosa a velocidade relativa, enquanto azul e amarelo
representam os motores. Os PIDs estao sintonizados diferentemente de maneira a mostrar
como o erro varia e portanto como o carro segue a curva.
Figura 4.1: Velocidade dos motores e velocidade relativa
Num teste mais realista, simulando o sinal emitido pelos sensores, obtem-se o
grafico da Figura 4.2
18
![Page 24: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/24.jpg)
19
Figura 4.2: Velocidade dos motores e velocidade relativa para sinal mais realista
O trabalho foi extremamente importante para colocar em pratica os conceitos dados
na sala de aula sobre modelagem de sistemas fısicos, controlador PID, realimentacao, erro
e modelagem por parametros de curva S. Antes de o controle PID ter sido o objeto de
estudo e realizacao, o robo funcionava de modo ON-OFF, em que os sensores apenas
sinalizavam para que os motores ligassem caso fosse detectada a superfıcie branca. Como
resultado a trajetoria do robo era muito instavel e com muitas variacoes, o que fazia o
erro ser muito alto. Com o controlador PID foi possıvel suavizar a trajetoria do robo
consideravelmente para que ele seguisse a trilha de forma aperfeicoada, diminuindo o erro
do sistema na trajetoria. O Arduıno foi uma plataforma excelente para o desenvolvimento
do codigo e monitoramento de todas as acoes. Sua velocidade, simplicidade e extensao de
bibliotecas tornaram o trabalho mais simples de ser executado. A utilizacao do MATLAB
para a determinacao dos parametros tambem foi um facilitador na elaboracao do projeto,
pois permitiu que o controlador fosse obtido atraves da observacao da melhor resposta ao
sistema. Como conclusao de todo o trabalho descrito neste relatorio obteve-se um sistema
de robo seguidor de trilha com controlador PID com bons resultados, minimizacao de erros
e desempenho melhor do que com outros controladores testados, como o ON-OFF descrito
anteriormente.
![Page 25: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/25.jpg)
Referencias Bibliograficas
[1] Activity 6 Part (a): Time-Response Analysis of a DC Motor. http://ctms.engin.
umich.edu/CTMS/index.php?aux=AboutTutorials.
[2] S.E.M. Bajestani and A. Vosoughinia. Technical report of building a line follower
robot. In Electronics and Information Engineering (ICEIE), 2010 International Con-
ference On, volume 1, pages V1–1–V1–5, Aug 2010.
[3] K.M. Hasan, A. Al-Nahid, and A. Al Mamun. Implementation of autonomous line
follower robot. In Informatics, Electronics Vision (ICIEV), 2012 International Con-
ference on, pages 865–869, May 2012.
[4] K. Ogata. Engenharia de controle moderno. Pearson Prentice Hall, 1982.
[5] M. Pakdaman and M.M. Sanaatiyan. Design and implementation of line follower ro-
bot. In Computer and Electrical Engineering, 2009. ICCEE ’09. Second International
Conference on, volume 2, pages 585–590, Dec 2009.
[6] M. Pakdaman, M.M. Sanaatiyan, and M.R. Ghahroudi. A line follower robot from de-
sign to implementation: Technical issues and problems. In Computer and Automation
Engineering (ICCAE), 2010 The 2nd International Conference on, volume 1, pages
5–9, Feb 2010.
[7] Wei Wu. Dc motor parameter identification using speed step responses. Model. Simul.
Eng., 2012:30:30–30:30, January 2012.
20
![Page 26: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/26.jpg)
Apendice A
Prototipo Desenvolvido
A Figura A.1 mostra o prototipo desenvolvido.
Figura A.1: Vista superior do prototipo
21
![Page 27: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/27.jpg)
22
Uma placa para os sensores foi montada e pode ser vista na Figura A.2:
Figura A.2: Placa sensorial
Um arranjo experimental foi montado para determinacao da resposta do motor e
pode ser visto na A.3.
Figura A.3: Medicao da velocidade do motor
![Page 28: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/28.jpg)
Apendice B
Codigo PID do Arduino
1 #include <PID_v1.h>
2
3 // Arduino pins for the shift register
4 #define MOTORLATCH 12
5 #define MOTORCLK 4
6 #define MOTORENABLE 7
7 #define MOTORDATA 8
8
9 // 8-bit bus after the 74HC595 shift register
10
11 // These are used to set the direction of the bridge driver.
12 #define MOTOR1_A 2
13 #define MOTOR1_B 3
14 #define MOTOR2_A 1
15 #define MOTOR2_B 4
16
17 // Arduino pins for the PWM signals.
18 #define MOTOR1_PWM 11
19 #define MOTOR2_PWM 3
20
21 // Codes for the motor function.
22 #define FORWARD 1
23 #define BACKWARD 2
24 #define BRAKE 3
25 #define RELEASE 4
26
27 // Tuning parameters
28 float Kp = 1; //Initial Proportional Gain
29 float Ki = 0.22; //Initial Integral Gain
30 float Kd = 0.4; //Initial Differential Gain
31
32
33 void setup()
34
35 //Serial.begin(9600); //Start a serial session
36
37
38
39 int lastError = 0;
23
![Page 29: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/29.jpg)
24
40 int rightBaseSpeed = 45;
41 int leftBaseSpeed = 45;
42 int position = 0;
43
44 void loop()
45
46 int LeftSensorValue = analogRead(A1);
47 int RightSensorValue = analogRead(A0);
48
49 float voltageLeft = LeftSensorValue * (5.0 / 1023.0);
50 float voltageRight = RightSensorValue * (5.0 / 1023.0);
51
52 //Serial.println(voltageLeft);
53 //Serial.println(voltageRight);
54
55 if (voltageRight > 1 && voltageLeft > 2) // nao bateu nenhum
56 position = 2500;
57 else
58 if (voltageLeft > 2) // bateu sensor esquerdo
59 position = 0;
60 else if (voltageRight > 1) // bateu sensor direito
61 position = 5000;
62
63
64
65 Serial.println(position);
66 int error = position - 2500;
67
68 //Serial.println(error);
69 error = map(error, -2500, 2500, -25, 25);
70 int motorSpeed = Kp * error + Kd * (error - lastError);
71 lastError = error;
72
73
74 int rightMotorSpeed = rightBaseSpeed + motorSpeed;
75 int leftMotorSpeed = leftBaseSpeed - motorSpeed;
76
77
78 //Serial.print(" SpeedR = ");
79 //Serial.println(rightMotorSpeed);
80 // Serial.print(" SpeedL = ");
81 //Serial.println(leftMotorSpeed);
82
83 motor(1, FORWARD, rightMotorSpeed);
84 motor(2, FORWARD, leftMotorSpeed);
85
86 //
87 // if(LeftSensorValue > RightSensorValue) //Se bateu do lado esquerdo, o controle e do motor direito
88 //
89 // SetPoint = SetPointR;
90 // Input = map(LeftSensorValue, 0, 1024, 0, 50); //Map it to the right scale
91 //
92 // myPID.Compute(); //Run the PID loop
93 // OutputR = SetPoint + Output;
94 // OutputL = SetPoint - Output;
95 // motor(1, FORWARD, OutputR);
![Page 30: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/30.jpg)
25
96 // motor(2, FORWARD, OutputL);
97 //
98 // else if(LeftSensorValue < RightSensorValue)
99 //
100 // SetPoint = SetPointL;
101 // Input = map(RightSensorValue, 0, 1024, 0, 50);
102 //
103 // myPID.Compute(); //Run the PID loop
104 // OutputR = SetPoint - Output;
105 // OutputL = SetPoint + Output;
106 // motor(1, FORWARD, OutputR);
107 // motor(2, FORWARD, OutputL);
108 //
109
110 //
111 //
112 ////analogWrite(led, OutputR); //Write out the output from the PID loop to our LED pin
113 //now = millis(); //Keep track of time
114 //
115 // if(now - lastMessage > serialPing)
116 // //If it has been long enough give us some info on serial
117 // // this should execute less frequently
118 // // send a message back to the mother ship
119 // Serial.print("SetPoint = ");
120 // Serial.print(SetPoint);
121 // Serial.print(" Input = ");
122 // Serial.print(Input);
123 // Serial.print(" InputR = ");
124 // Serial.print(RightSensorValue);
125 // Serial.print(" InputL = ");
126 // Serial.print(LeftSensorValue);
127 // Serial.print(" OutputR = ");
128 // Serial.print(OutputR);
129 // Serial.print(" OutputL = ");
130 // Serial.print(OutputL);
131 // Serial.print("\n");
132 //
133 // if (Serial.available() > 0)
134 // //If we sent the program a command deal with it
135 // for (int x = 0; x < 4; x++)
136 // switch (x)
137 // case 0: Kp = Serial.parseFloat(); break;
138 // case 1: Ki = Serial.parseFloat(); break;
139 // case 2: Kd = Serial.parseFloat(); break;
140 // case 3:
141 // for (int y = Serial.available(); y == 0; y--)
142 // Serial.read(); //Clear out any residual junk
143 // break;
144 //
145 //
146 // Serial.print(" Kp,Ki,Kd = ");
147 // Serial.print(Kp);
148 // Serial.print(",");
149 // Serial.print(Ki);
150 // Serial.print(",");
151 // Serial.println(Kd); //Let us know what we just received
![Page 31: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/31.jpg)
26
152 // //myPID_R.SetTunings(KpR, KiR, KdR); //Set the PID gain constants and start running
153 //
154 //
155 // lastMessage = now; //update the time stamp.
156 //
157 ////Serial.println(myPID_R.GetKp());
158
159
160
161
162
163
164
165 // motor
166 // Select the motor (1-4), the command,
167 // and the speed (0-255).
168 // The commands are: FORWARD, BACKWARD, BRAKE, RELEASE.
169 void motor(int nMotor, int command, int speed)
170
171 int motorA, motorB;
172
173 if (nMotor >= 1 && nMotor <= 4)
174 switch (nMotor)
175 case 1:
176 motorA = MOTOR1_A;
177 motorB = MOTOR1_B;
178 break;
179 case 2:
180 motorA = MOTOR2_A;
181 motorB = MOTOR2_B;
182 break;
183 default:
184 break;
185
186
187 switch (command)
188 case FORWARD:
189 motor_output (motorA, HIGH, speed);
190 motor_output (motorB, LOW, -1); // -1: no PWM set
191 break;
192 case BACKWARD:
193 motor_output (motorA, LOW, speed);
194 motor_output (motorB, HIGH, -1); // -1: no PWM set
195 break;
196 case BRAKE:
197 motor_output (motorA, LOW, 255); // 255: fully on.
198 motor_output (motorB, LOW, -1); // -1: no PWM set
199 break;
200 case RELEASE:
201 motor_output (motorA, LOW, 0); // 0: output floating.
202 motor_output (motorB, LOW, -1); // -1: no PWM set
203 break;
204 default:
205 break;
206
207
![Page 32: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/32.jpg)
27
208
209
210
211 void motor_output (int output, int high_low, int speed)
212
213 int motorPWM;
214
215 switch (output)
216
217 case MOTOR1_A:
218 case MOTOR1_B:
219 motorPWM = MOTOR1_PWM;
220 break;
221 case MOTOR2_A:
222 case MOTOR2_B:
223 motorPWM = MOTOR2_PWM;
224 break;
225 default:
226 // Use speed as error flag, -3333 = invalid output.
227 speed = -3333;
228 break;
229
230
231 if (speed != -3333)
232
233 // Set the direction with the shift register
234 // on the MotorShield, even if the speed = -1.
235 // In that case the direction will be set, but
236 // not the PWM.
237 shiftWrite(output, high_low);
238
239 // set PWM only if it is valid
240 if (speed >= 0 && speed <= 255)
241
242 analogWrite(motorPWM, speed);
243
244
245
246
247
248 // ---------------------------------
249 // shiftWrite
250 //
251 // The parameters are just like digitalWrite().
252 //
253 // The output is the pin 0...7 (the pin behind
254 // the shift register).
255 // The second parameter is HIGH or LOW.
256 //
257 // There is no initialization function.
258 // Initialization is automatically done at the first
259 // time it is used.
260 //
261 void shiftWrite(int output, int high_low)
262
263 static int latch_copy;
![Page 33: Projeto de Robô Seguidor de Linha com Controlador PID](https://reader034.vdocuments.net/reader034/viewer/2022050707/5695d0861a28ab9b0292cff3/html5/thumbnails/33.jpg)
28
264 static int shift_register_initialized = false;
265
266 // Do the initialization on the fly,
267 // at the first time it is used.
268 if (!shift_register_initialized)
269
270 // Set pins for shift register to output
271 pinMode(MOTORLATCH, OUTPUT);
272 pinMode(MOTORENABLE, OUTPUT);
273 pinMode(MOTORDATA, OUTPUT);
274 pinMode(MOTORCLK, OUTPUT);
275
276 // Set pins for shift register to default value (low);
277 digitalWrite(MOTORDATA, LOW);
278 digitalWrite(MOTORLATCH, LOW);
279 digitalWrite(MOTORCLK, LOW);
280 // Enable the shift register, set Enable pin Low.
281 digitalWrite(MOTORENABLE, LOW);
282
283 // start with all outputs (of the shift register) low
284 latch_copy = 0;
285
286 shift_register_initialized = true;
287
288
289 // The defines HIGH and LOW are 1 and 0.
290 // So this is valid.
291 bitWrite(latch_copy, output, high_low);
292
293 // Use the default Arduino ’shiftOut()’ function to
294 // shift the bits with the MOTORCLK as clock pulse.
295 // The 74HC595 shiftregister wants the MSB first.
296 // After that, generate a latch pulse with MOTORLATCH.
297 shiftOut(MOTORDATA, MOTORCLK, MSBFIRST, latch_copy);
298 delayMicroseconds(5); // For safety, not really needed.
299 digitalWrite(MOTORLATCH, HIGH);
300 delayMicroseconds(5); // For safety, not really needed.
301 digitalWrite(MOTORLATCH, LOW);
302