Você está na página 1de 17

Controle de Luminosidade com Arduino PID

Controle de luminosidade utilizando


controlador PID (proporcional Integral
Derivativo).

Controlador proporcional integral derivativo, controlador PID ou
simplesmente PID, uma tcnica de controle de processos que une
as aes derivativa, integral e proporcional, fazendo assim com que o
sinal de erro seja minimizado pela ao proporcional, zerado pela
ao integral e obtido com uma velocidade antecipativa pela ao
derivativa.
baseado na resposta da modelagem matemtica de uma malha de
processo a ser controlada.
Na prtica os PID so encontrados no interior de controladores
eletrnicos chamados "single-loop", muitas vezes
com microprocessadores, e tambm atravs
de software em Controladores programveis e outros equipamentos
de controle.

Neste projeto, vamos simular um controle de luminosidade com
Arduino, rodando a biblioteca PID que pode ser encontrada no site:

http://playground.arduino.cc/Code/PIDLibrary

Para isso necessitamos baixar alm da biblioteca PID para o Arduino,
tambm o PID Front-End para processing, que uma interface
grfica para podermos configurar os parmetros: P, I, D, Set Point,
modos de trabalho, etc...; fazendo a interface com o Arduino.
Voc pode baixar o Front-End no link acima.

Como vamos trabalhar com Arduino e Processing, necessitamos ter a
IDE 1.0.1 do arduino e o Processing 2.0b8 instalados no computador.
Para o Processing, precisamos da biblioteca ContorlP5 para
processing instalada. Baixe a biblioteca no site:

http://www.sojamo.de/libraries/controlP5/#installation

Para mairoes detalhes sobre controle PID de processos, aconselho a
visitarem o site do criador da Biblioteca PID_V1.

http://brettbeauregard.com/blog/2011/04/improving-the-beginners-
pid-introduction/

E o site do Control Guru para maiores detalhes sobre automao e
controle.

http://www.controlguru.com/pages/table.html

Detalhes sobre sistemas de controle em:

http://www.facstaff.bucknell.edu/mastascu/econtrolhtml/CourseInde
x.html




Vamos agora aos aspectos construtivos do
nosso projeto:

Faremos dois testes; um com o ambiente simulado por um tubo
escuro, que no admite interferncia externa, e o outro aonde
poderemos interferir externamente e verificar a resposta do sistema.

Teste - 1
O ambiente ser simulado por um tubo negro, com um LED Branco
brilhante em uma das pontas (para iluminar o "ambiente") e um LDR
na outra ponta (para podermos gerenciar a quantidade de
luminosidade no "ambiente").
A ligao com o arduino muito simples:
Pino D3 (como output) ligado ao LED que tem um resistor de R220
para controlar a corrente.
Pino A0 ligado ao LDR que tem um resistor de pull-down de 10K.

Abaixo o circuito desenhado com o fritzing e fotos reais do sistema.


Entre o LED e o LDR existe um tubo preto vedado, simulando ambiente totalmente
escuro



Detalhe do tubo preto (foi utilizado um carretel de linha, vedado por dois passadores de
fios de borracha


Detalhe do lado LED


Detalhe do lado LDR


Teste - 2

Agora o ambiente pode sofrer aes externas,chamados de distrbios
do nosso sistema, tais como: sombras e ou luz excessiva no
ambiente.
Os distrbios sero automaticamente controlados pelo Arduino PID.

Outro detalhe que o valor do Setpoint, controlado por um
potencimetro, no sendo mais necessrio usar o Setpoint do
PID_FrontEnd.

Abaixo o circuito desenho em fritizing e as fotos reais do sistema.


Controle do SetPoint feito pelo potencimetro



Controle via Software:

1 - Descarregar e descompactar as bibliotecas;
PID_V1 no diretrio de bibliotecas da IDE do Arduino
Front-End PID, em uma pasta no seu micro
ControlP5, no diretrio de bibliotecas do Processing

2 - Iniciar a IDE do Arduino e abrir o arquivo
"PID_FrontEnd_ArduinoSampleCode" da pasta PID_FrontEnd.
Enviar este scketch para o arduino.

3 - Iniciar o Processing e abrir o arquivo "PID_FrontEnd_v03" da
pasta PID_FrontEnd.
Executar a aplicao.

Abaixo algumas figuras:


Pastas pertencentes ao PID_FrontEnd.


O arquivo PID-FrontEnd_v03, deve ser aberto no Processing e executado


O arquivo PID_FrontEnd_ArduinoSampleCode, deve ser aberto na IDE do Arduino e
enviado


IDE Arduino e Processing, s enviar e executar.

Ao executar a aplicao no Processing, a janela PID_FrontEnd ir
abrir.


SetPoint = 950, Kp=0,01, Ki=0,28 e Kd=0


Nesta janela, podemos notar:
TOGGLE_AM - muda o modo para automtico PID ou manual;
SETPOINT - valor desejado de luminosidade no ambiente;
INPUT - valor real de luminosidade do ambiente (medido pelo LDR e
retornado como feedback medido no pino A0);
OUTPUT - valor de controle retornado pelo Arduino como controlador
PID (controle de luminosidade do LED no pino D3);
KP - constante de controle proporcional;
KI - constante de controle Integral;
KD - Constante de controle Derivativo;
TOOGLE_DR - muda a direo (se a sada cresce conforme cresce a
entrada ou o inverso);
SEND_TO_ARDUINO - enviar os dados para o arduino;

PID Input/Setpoint - Janela grfica das curvas setpoint (valor
desejado de luminosidade) e entrada (medida de luminosidade do
LDR)
PID Output - Janela grfica da curva de sada de controle do LED


Linha verde = Set Point SP; Linha Vermelha = Varivel Controlada PV; Linha Azul =
Varivel Manipulada MV

Nesta figura, podemos notar o setpoint configurado para 950 (linha
verde), a varivel de entrada (linha vermelha) sofrendo o controle
PID e a varivel de sada (linha azul) para controle da luminosidade.


Podemos entender tambm as informaes descritas acimas atravs
de um diagrama de blocos (figura abaixo).
Onde podemos notar o que o Error = SP - PV e o erro aplicado ao
controlador PID que gera a MV para o controle do processo.

Cada controlador P, I, e D pode ser utilizado independentemente, ou
de forma conjunta, tal como:
Controlador P (muito utilizado)
Controlador PI (muito utilizado)
Controlador PD (raramente utilizado)
Controlador PID (o mais usado)




Exemplo de Controlador PI com realimentao direta








Aqui nesta figura, observamos uma variao no valor do setpoint (de
950 para 700 e para 950) e a atuao do controle PID em cima da
varivel de entrada.
Vejam que houve um pouco de oscilao no controle (caracterstica
de cada sistema controlado, de primeira ou segunda ordem).



Para o segundo teste, vamos enviar para o Arduino, o sketch
abaixo:
(este ser usado em lugar do
arquivo "PID_FrontEnd_ArduinoSampleCode")

http://www.4shared.com/file/Y5BIbUdR/LED_PIDcontroller_2.html

Lembrando que o controle do Setpoint feito pelo potencimetro.
Como fonte de distrbio, podemos usar uma lanterna para incidir
mais luz ou um anteparo para fazer sombra no LDR.
Ao temos um distrbio no processo (por exemplo sombra), o
controlador ir aumentar/diminuir a luminosidade do LED para tentar
manter a sada sob controle e no nvel estabelecido pelo SetPoint (no
caso de fazer uma "sombra no LDR, o controlador ir aumentar a
intensidade de luz do LED), poderemos ver estas variaes no
PID_FrontEnd de forma grfica.

Abaixo algumas figuras relacionadas.


Kp=0, Ki=10, Kd=0 -- aplicao de disturbio e variaes no SP


Kp=0, Ki=10, Kd=0 -- aplicao de disturbio (com bloqueio e sem bloqueio)



A seta indica a mudana de parametros Kp=0,01; Ki=0,28; Kd=0 (notar que a atuao
ficou mais lenta e com menos overshoot)
Ao testar os parametros, foi verificado um comportamento
semelhante para os dois testes.

Você também pode gostar