Escolar Documentos
Profissional Documentos
Cultura Documentos
cnica
Escola Polite
trica
Departamento de Engenharia Ele
trica
Curso de Engenharia Ele
lise de Sistemas Dina
micos
ENGC35 - Modelagem e Ana
Seguidor de Linha
Projeto de um Robo
com Controlador PID
Salvador - Bahia
Novembro de 2015
Seguidor de Linha
Projeto de um Robo
com Controlador PID
Salvador - Bahia
Novembro de 2015
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 Sistemas Dinamicos ministrada pelo professor Humberto Xavier. Inicialmente apresentam-se
as etapas do projeto, descricao dos modelos utilizados e sao apresentadas tambem as descricoes dos projetos de modo conceitual e posteriormente detalhado.
Sum
ario
Introduc
ao
1 Projeto de Engenharia
1.1
Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2
Orcamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3
1.4
RACI Chart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Modelo do Sistema
2.1
Modelo Cinematico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2
Modelo do Motor DC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1
2.3
3 Projeto do Controlador
12
3.1
3.2
Projeto Detalhado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2.1
Parte Mecanica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2.2
Parte Eletrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4 Resultados e Conclus
oes
18
Refer
encias Bibliogr
aficas
20
APPENDICES
21
A Prot
otipo Desenvolvido
21
B C
odigo PID do Arduino
23
Introdu
c
ao
O controle de sistemas tem sido um objeto de estudos cada vez maior da area de engenharia. O ser humano tem buscado revolucionar os equipamentos e maquinas de modo
nesse
a aperfeicoar o seu funcionamento, tornando-os mais estaveis e suavizando erros. E
contexto que as definicoes de modelagem de sistemas e controle aparecem como protagonistas em diversos cursos: Engenharia Eletrica, Eletronica, Mecanica e, principalmente,
Engenharia de Automacao e Controle.
Estudar controladores significa estudar formas de como realizar um processo, entende-lo, elencar ferramentas e parametros para obter o melhor resultado.
Problema proposto
A Figura 1 mostra um veculo autonomo que deve percorrer uma trajetoria curvilnea. O problema resume-se em manter o carrinho o mais estavel possvel ao realizar
as curvas da trilha atraves de um sistema de controle que leia a entrada da posicao do
veculo e retorne uma resposta de alteracao da velocidade dos motores para que o prototipo
retorne ao set point estabelecido.
Veculo
Sensor de
luminosidade
2
do grupo. Seguindo a sequencia, no Captulo 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 Captulo 3 e, por fim, os resultados e conclusoes
sao apesentados no Captulo 4.
Captulo 1
Projeto de Engenharia
Neste captulo 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 captulo sao
apresentados o WBS e RACI Chart.
1.1
Cronograma
O desenvolvimento deste trabalho seguiu o cronograma que pode ser visto na Ta-
Revis
ao bibliogr
afica
Elaborac
ao do projeto conceitual
Elaborac
ao do projeto basico
Aquisic
ao de materiais
Identificac
ao dos par
ametros do motor
Identificac
ao do modelo do sensor
Modelagem do sistema
Testes e Correc
oes
Escrita do relat
orio
Apresentac
ao
1.2
Orcamento
A Tabela 1.2 mostra os custos na construcao do prototipo, desconsiderando os cus-
Descric
ao
Qtde.
Preco Unit
ario
Preco Total
Arduino Leonardo
R$ 43,99
R$ 43,99
R$ 22,90
R$ 22,90
R$ 46,00
R$ 46,00
Sensor CNY70
R$ 4,00
R$ 8,00
Trimpot 10k
R$ 2,50
R$ 5,00
Resistor 10k
R$ 0,20
R$ 0,40
Resistor 100
R$ 0,20
R$ 0,40
Barra de pinos
R$ 2,00
R$ 4,00
10
Jumper
R$ 0,30
R$ 0,90
11
R$ 7,75
R$ 7,75
12
Bateria 9V
R$ 3,35
R$ 6,70
Total
R$ 146,04
1.3
Sensores
Modelagem
Identificao dos
Parmetros
C - Arduino
Trilha
Chassi
Cdigo
Placa de Interface
Documentao
Motor DC
RACI Chart
A matriz de atribuicao de responsabilidade e atividades e mostrada na Tabela 1.3.
Lucas Santana
Revisao bibliografica
R, A
Aquisicao de materiais
Modelagem do sistema
Tarefas
Humberto
Franklin Lima
1.4
R
R, A
R
R
R, A
Testes e Correcoes
10
Escrita da documentacao
R, A
11
Apresentacao
C, I
Legenda
R
Responsavel pela execucao da tarefa. Podem ser uma ou mais pessoas designadas a executar a tarefa.
Pessoas informadas sobre o progresso e status da tarefa. A comunicacao com esse grupo sera de mao u
nica
Captulo 2
Modelo do Sistema
Neste captulo serao descritos os modelos do sistema. Na Secao 2.1 sera descrito o
modelo cinematico, mostrando a relacao entre as dimensoes fsicas da trilha e do prototipo
e o seu comportamento dinamico, enquanto na Secao 2.2 e mostrado o modelo do motor 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 Cinem
atico
Tem-se um veculo dotado de duas rodas com tracao obtida por dois motores de
corrente contnua e uma roda omnidirecional, que com auxlio 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 veculo. Para manter o veculo na curva e preciso
que 0. e, portanto, a variavel controlada.
O objetivo do controlador e, deste modo, e garantir, com bom desempenho, que
Motor Esquerdo
29
Motor Direito
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 contnua controlado pela
(s)
Km
Km/(Ra b + Kb Km )
=
=
Va (s)
s[Ra (Js + b) + Kb Km ]
s(1 s + 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.
(2.1)
9
O diagrama em blocos pode ser visto na Figura 2.2.
2.2.1
Identifica
c
ao dos Par
ametros
De modo a desempenhar a identificacao dos parametros do motor utilizado, foi ne-
cessario realizar experimento com auxlio de um sensor optico, com o objetivo e obter uma
resposta aproximada a` resposta ao degrau do motor. O metodo utilizado esta disponvel
em [1].
O grafico da Figura 2.3 mostra o resultado aproximado da resposta ao degrau do
motor.
Resposta ao Degrau
1
0.8
0.6
0.4
0.2
10
Tempo (s)
10
Como e possvel 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 perodo de amostragem nao coincidem precisamente [1].
Com auxlio de um filtro passa-baixas (Figura 2.4), consegue-se obter uma resposta
melhor.
11
2.3
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 superfcie.
I Crel - Relative Collector Current
1.0
0.9
1.5
0.8
d = 5 mm
4 mm
3 mm
2 mm
1 mm
0
0.7
0.6
0.5
0.4
10 mm
10 mm
VCE = 5 V
I F = 20 mA
0.2
0.1
1
0
5 mm
0
5 mm
0.3
0.0
10
11
s - Displacement (mm)
96 11915
0, VOU T < 2V
1, cc.
Captulo 3
Projeto do Controlador
O controlador escolhido para ser utilizado no projeto e o PID (ProporcionalIntegral-Derivativo), que e o algoritmo de controle mais usado na ind
ustria e tem sido
utilizado em todo o mundo para sistemas de controle industrial. A popularidade de controladores PID pode ser atribuda 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:
Z
u(t) = Kp e(t) + Ki
e( )d + Kd
0
d
e(t)
dt
(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
auxlio do MATLAB. A Figura 3.1 mostra parte do processo. Basicamente, o MATLAB,
utilizando-se do modelo linearizado da planta, gera a sada 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
13
3.1
Projetos Conceitual e B
asico
O projeto de um robo seguidor de linha com controlador PID consiste na construcao
14
Referncia
PID
Interface
Ponte H
Sensores
Motor
Direito
Motor
Esquerdo
Interface
Sensor
3.2
Projeto Detalhado
Nesta secao serao descritos detalhadamente as etapas projeto, apresentado os es-
3.2.1
Parte Mec
anica
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.
15
3.2.2
Parte El
etrica
16
R1
Sensor CNY70
R2
100
4.7k
5V
5V
VOUT
10k
R3
17
Simulac
ao
As simulacoes do sistema foram realizadas no ambiente Simulink do MATLAB. A
Figura 3.7 mostra o diagrama montado na plataforma.
Captulo 4
Resultados e Conclus
oes
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.
18
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 fsicos, 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 superfcie 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 possvel suavizar a trajetoria do robo
consideravelmente para que ele seguisse a trilha de forma aperfeicoada, diminuindo o erro
do sistema na trajetoria. O Arduno 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.
Refer
encias Bibliogr
aficas
[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 Conference On, volume 1, pages V11V15, 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 Conference on, pages 865869, 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 robot. In Computer and Electrical Engineering, 2009. ICCEE 09. Second International
Conference on, volume 2, pages 585590, Dec 2009.
[6] M. Pakdaman, M.M. Sanaatiyan, and M.R. Ghahroudi. A line follower robot from design to implementation: Technical issues and problems. In Computer and Automation
Engineering (ICCAE), 2010 The 2nd International Conference on, volume 1, pages
59, Feb 2010.
[7] Wei Wu. Dc motor parameter identification using speed step responses. Model. Simul.
Eng., 2012:30:3030:30, January 2012.
20
Ap
endice A
Prot
otipo Desenvolvido
A Figura A.1 mostra o prototipo desenvolvido.
21
22
Uma placa para os sensores foi montada e pode ser vista na Figura A.2:
Ap
endice B
C
odigo 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
36
37 }
38
39 int lastError = 0;
23
24
40 int rightBaseSpeed = 45;
41 int leftBaseSpeed = 45;
42 int position = 0;
43
44 void loop() {
45
46
47
48
49
50
51
52
//Serial.println(voltageLeft);
53
//Serial.println(voltageRight);
54
55
56
57
position = 2500;
} else {
58
59
position = 0;
60
61
62
position = 5000;
}
63
64
65
Serial.println(position);
66
67
68
//Serial.println(error);
69
70
71
lastError = error;
72
73
74
75
76
77
78
79
//Serial.println(rightMotorSpeed);
80
81
//Serial.println(leftMotorSpeed);
82
83
84
85
86
//
87
// if(LeftSensorValue > RightSensorValue){ //Se bateu do lado esquerdo, o controle e do motor direito
88
//
89
//
SetPoint = SetPointR;
90
//
91
//
92
//
93
//
94
//
95
//
25
96
//
97
//
98
99
//
100
//
SetPoint = SetPointL;
101
//
102
//
103
//
104
//
105
//
106
//
107
//
108
// }
109
110
//
111
//
112
////analogWrite(led, OutputR); //Write out the output from the PID loop to our LED pin
113
114
//
115
116
//
117
//
118
//
119
//
Serial.print("SetPoint = ");
120
//
Serial.print(SetPoint);
121
//
122
//
Serial.print(Input);
123
//
124
//
Serial.print(RightSensorValue);
125
//
126
//
Serial.print(LeftSensorValue);
127
//
128
//
Serial.print(OutputR);
129
//
130
//
Serial.print(OutputL);
131
//
Serial.print("\n");
132
//
133
//
134
//
135
//
136
//
137
//
138
//
139
//
140
//
case 3:
141
//
142
//
143
//
144
//
145
//
146
//
147
//
Serial.print(Kp);
148
//
Serial.print(",");
149
//
Serial.print(Ki);
150
//
Serial.print(",");
151
//
if (Serial.available() > 0) {
switch (x) {
} break;
}
26
152
//
153
//
154
//
155
//
156
//
157
////Serial.println(myPID_R.GetKp());
//myPID_R.SetTunings(KpR, KiR, KdR); //Set the PID gain constants and start running
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
172
173
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
190
191
break;
192
case BACKWARD:
193
194
195
break;
196
case BRAKE:
197
198
199
break;
200
case RELEASE:
201
202
203
break;
204
default:
205
break;
206
207
}
}
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
227
speed = -3333;
228
229
break;
}
230
231
if (speed != -3333)
232
233
234
235
236
237
shiftWrite(output, high_low);
238
239
240
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
28
264
265
266
267
268
if (!shift_register_initialized)
269
270
271
pinMode(MOTORLATCH, OUTPUT);
272
pinMode(MOTORENABLE, OUTPUT);
273
pinMode(MOTORDATA, OUTPUT);
274
pinMode(MOTORCLK, OUTPUT);
275
276
277
digitalWrite(MOTORDATA, LOW);
278
digitalWrite(MOTORLATCH, LOW);
279
digitalWrite(MOTORCLK, LOW);
280
281
digitalWrite(MOTORENABLE, LOW);
282
283
284
latch_copy = 0;
285
286
287
shift_register_initialized = true;
}
288
289
290
// So this is valid.
291
292
293
294
295
296
297
298
299
digitalWrite(MOTORLATCH, HIGH);
300
301
digitalWrite(MOTORLATCH, LOW);
302 }