Implementação de um controlador PI para o controle da luminosidade do ambiente. O valor da luminosidade desejada será ajustado pelo uso das teclas “+” e “-”, onde para “+” seu valor será incrementado em 50 e para “-” seu valor será decrementado em 50.
Um controlador PI ou controlador proporcional-integral é utilizado em sistemas de controle para controlar a estabilidade de um sistema. Funcionando da seguinte forma, o controlador utiliza um sensor para as leituras do sinal na saída no sistema, esse valor é então comparado com o sinal desejado (setpoint), resultando em um erro. O esse é utilizado para o controle do sinal, onde o sinal será proporcional à integral do erro. Dessa forma, o sinal do sistema será dado pela seguinte equação (lei de controle PI):
$Sinal(t)=KP \times Erro(t)+KI \times \int_{0}^{t}Erro(t)dt $
Onde:
$Erro(t)=setpoint-leitura$
$KP$ e $KI$ são constantes de ganho
A teoria de controle é um assunto bastante extenso, a intenção aqui é apenas dá uma pequena ideia do que é possível ser realizado. Faça as ligações como na imagem a seguir:
Figura 1. Controlador PI de luminosidade |
O sensor do sistema é um divisor de tensão formado por um LDR (Light Dependent Resistor) e um resistor de 4.7 kΩ, a resistência do LDR é proporcional à luminosidade que incide sobre ele, assim, quanto maior a luminosidade, menor será sua resistência. Dessa forma, temos um sensor de luminosidade simples.
O LED branco (de preferência de alto brilho) é o atuador do sistema, seu brilho será controlador por um sinal PWM, que será calculado de acordo com a lei de controle PI. Dessa forma, o LDR deve ser colocado próximo do LED, para que sua luz incida sobre o LDR (caso necessário, encurte os terminais do LDR).
Com o circuito montado, procure um ambiente com pouca luminosidade, conecte o Arduino ao computador e upload o seguinte código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | uint8_t pinLDR = 0; // LDR no pino analógico A0 uint8_t pinLed = 10; // LED no pino 10 char setSerial = 0; // Valor enviado pelo monitor uint16_t lum = 0; // Luminosidade lida uint16_t setLum = 550; // Luminosidade desejada int16_t erro = 0; // Erro entre as luminosidades int16_t somaErro = 0; // Soma os erros int16_t duty = 0; // Duty para luminosidade do LED float KP = 1.25; // Constante de ganho da lei de controle float KI = 0.75; // Constante de ganho da lei de controle void setup() { Serial.begin(9600); // Configura comunicação serial, baudrate = 9600 } void loop() { lum = analogRead(pinLDR); // Lê e armazena o valor do LDR (Luminosidade) erro = setLum - lum; // Calcula o erro somaErro+= erro; // Acumula o erro duty = KP*erro + KI*somaErro; // Calcula o duty ideal if(duty > 1023) // Limita o valor máximo de duty em 1023 { duty = 1023; } if(duty < 0) // Limita o valor mínimo de duty em 0 { duty = 0; } duty = map(duty, 0, 1023, 0, 255); // Muda a escala do duty analogWrite(pinLed, duty); // Ativa o PWM no LED if(Serial.available()) // Espera o recebimento de dados pelo monitor { setSerial = Serial.read(); // setSerial recebe o char enviado switch(setSerial) { case 43: // caso setSerial = "+" -> setLum = setLum + 50 setLum+=50; break; case 45: // caso setSerial = "-" -> setLum = setLum - 50 setLum-=50; break; } if(setLum > 1000) // Limita o valor máximo de setLum em 1000 { setLum = 1000; } if(setLum < 0) // Limita o valor mínimo de setLum em 0 { setLum = 0; } } Serial.print("lum = "); // Envia os dados para o monitor Serial.println(lum); Serial.print("setLum = "); Serial.println(setLum); Serial.print("Duty = "); Serial.println(duty); delay(1000); } |
Abra o Monitor Serial do IDE do Arduino para observar a atuação do controlador PI. O valor do setpoint (setLum) foi inicializado com um valor de 550, assim, o valor do sinal PWM será gradativamente ajustado para que o valor do sensor de luminosidade estabilize próximo de 550.
Caso ocorra um aumento na luminosidade (janela ou porta seja aberta, luz externa seja acessa) o sinal PWM se ajustará a nova luminosidade do ambiente. Então, bastante impressionante, concorda?
Fique à vontade para modificar o código, por exemplo, modifique os valores de KP e KI e observe como o sistema se comporta. Enfim, espero que tenha achado interessante esse assunto, pesquise mais sobre a teoria de controle.
<< Sumário
Nenhum comentário:
Postar um comentário