Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * TRABALHO DE CONTROLE II - UNIDADE 3
- * CONTROLE DINÂMICO DE NÍVEL UTILIZANDO PID CLÁSSICO
- *
- * ALUNOS:
- * AMANDA DE BRITO FREITAS - 201715343
- * GETULIO FALCOMER DE ALMEIDA - 201517480
- * SANDERSON LUIZ -
- * WILL DOUGLAS CAVALCANTI JUNIOR - 201526200
- *
- * ORIENTADOR: PROFESSOR JAN ERIK
- */
- // ajuste do PID
- float kp = 0;
- float ki = 0;
- float kd = 0;
- // portas do arduíno
- const unsigned int potenciometro = A1;
- const unsigned int sensor_lm35 = A2;
- const unsigned int chave = 2;
- const unsigned int pastilha_peltier = 3;
- // variáveis
- unsigned int estado_chave = LOW;
- float ts = 0.01; // período de amostragem
- unsigned int set_point = 0;
- float variavel_processo = 0;
- unsigned int u = 0;
- unsigned int u_antigo = 0;
- unsigned int u_minimo = 0;
- unsigned int u_maximo = 255;
- float erro = 0;
- float erro_antigo = 0;
- float erro_mais_antigo = 0;
- // escopo de funções
- void converte_sintonia_para_discreto();
- void controle_pid();
- void imprime_serial();
- void u_limite();
- void atualizar_variaveis();
- void setup(){
- Serial.begin(9600);
- pinMode(potenciometro, INPUT);
- pinMode(sensor_lm35, INPUT);
- pinMode(chave, INPUT);
- pinMode(pastilha_peltier, OUTPUT);
- converte_sintonia_para_discreto();
- }
- void loop(){
- estado_chave = digitalRead(chave);
- if(estado_chave == HIGH) {
- controle_pid();
- imprime_serial();
- delay(100);
- }
- else {
- analogWrite(pastilha_peltier, 0); // desliga a pastilha
- Serial.println("Esperando o sistema ser ligado...");
- delay(1000);
- }
- }
- void converte_sintonia_para_discreto(){
- ki = (kp / ki) * ts;
- kd = (kp * kd) * ts;
- }
- void controle_pid(){
- variavel_processo = (float(analogRead(sensor_lm35)) * 5 / 1024) / ts;
- set_point = map(analogRead(potenciometro), 0, 1024, 3, 20);
- erro = set_point - variavel_processo;
- u = u_antigo +
- kp * (erro - erro_antigo) + // parte proporcional
- ki * erro_antigo + // parte integral
- kd * (erro - 2 * erro_antigo + erro_mais_antigo); // parte derivativa
- u_limite();
- atualizar_variaveis();
- analogWrite(pastilha_peltier, u);
- }
- void imprime_serial(){
- Serial.print("Set Point: "); Serial.print(set_point);
- Serial.print(" ºC: "); Serial.print(variavel_processo);
- Serial.print(" Erro: "); Serial.print(erro);
- Serial.print(" Saída u (PWM): "); Serial.println(u);
- }
- void u_limite(){
- if (u > u_maximo)
- u = u_maximo;
- if (u < u_minimo)
- u = u_minimo;
- }
- void atualizar_variaveis(){
- erro_mais_antigo = erro_antigo;
- erro_antigo = erro;
- u_antigo = u;
- }
Add Comment
Please, Sign In to add comment