Controle de luminosidade com compensador discreto PI

Este projeto foi desenvolvido como prática para a matéria de Sistemas de controle realimentados da Universidade Federal de Uberlândia.

Materiais

Esquema eletrônico

O circuito a ser montado é o seguinte

Observação o LDR deve estar próximo e com a face receptora voltada para o led como nas imagens abaixo

Desta forma será possivel executar melhores açoes de controle sobre a luminosidade do led.

A montagem final ficou da seguinte forma:

Teoria

Um sistema de controle realimentado temos a planta ou processo a ser controlado , os sensores e atuadores e o controlador ou compensador. Esses elementos se relacionam em um sistema contínuo realimentado da seguinte forma:

Em um sistema com controlador discreto a única diferença está no fato de que a compensação ocorre dentro do microcontrolador da seguinte forma:

No caso deste projeto o potenciômetro fará o papel do ‘setpoint’ e, portanto, fará com que o brilho do led , que faz o papel de atuador , varie. Qualquer variação na luminosidade externa deverá ser corrigida pelo controlador PI de forma a manter o valor do ‘setpoint’.

Observações: O sensor ldr os jumpers e a protoboard não evitam que ruídos de alta frequência entrem no microcontrolador portanto é necessário que se faça a filtragem do sinal para aumentar a estabilidade do mesmo. para simplificar foi implementado um filtro de média móvel passa-baixas tanto para o potenciometro quanto para o ldr. O conversor A/D do arduino possui 10 bits porém o PWM, que irá controlar o nível de brilho do led, possui 8 bits portanto é necessário fazer uma conversão de 0,1023 para 0,255; esta conversão pode ser feita usando a função map do arduino eu optei por converter deslocando a os 8 bits mais significativos duas casas à esquerda o que faz o mesmo da função map.

Implementação do Controle

Primeiramente devemos ter o erro atuante em mãos, este erro é a diferença entre o que o sensor lê e o setpoint logo:

erro = pot - ldr;

A parcela proporcional é dada por:

P = erro * Kp;

E a parcela integral:

I = (I + erro * Ki)* delta;

onde delta é a diferença de tempo entre duas amostras medidas. Como a ação integral recebe ela mesma mais uma parte do erro caso em alguma situação o atuador chegue a saturar ou cortar ocorrerá o que chamamos de wind up , onde a parcela integral tenderá a +oo ou -oo. Por conta dessa possibilidade devemos tratar a resposta final para que caso ela ultrapasse o valor máximo ou o valor mínimo , ela receba respectivamente uma constante no valor máximo ou uma constante no valor mínimo. Este tratamento se dá em:

pi = pi < 0 ? 0 : pi;

pi = pi > 255 ? 255 : pi;

Conclusões

Utilizando a ferramenta Serial plotter do arduino IDE podemos verificar que o objetivo foi alcançado com êxitos. Nota-se ainda um pequeno ruído na leitura do ldr porém como o filtro digital implementado causa um atraso no sistema esse foi o melhor ponto entre filtragem e velocidade encontrado. Abaxio podemos ver a serial plotter com o sistema funcinando:

Todas as caracteristicas desritas e previstas são obsevadas neste gráfico.