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:
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")
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.