Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- float kp = 150; //valor da constante proporcional ---> esse valor pode ser alterado pelo usuario
- float ki = 0.4; //valor da constante integral ---> esse valor pode ser alterado pelo usuario
- float kd = 0.2; //valor da constante derivativa ---> esse valor pode ser alterado pelo usuario
- float p = 0; //controle proporcional
- float i = 0; //controle integral
- float d = 0; //controle derivativo
- float pid = 0; //controle proporcional, integral e derivativo (PID)
- float erro = 0; //variável de erro
- float tdecorrido = 0; //variável que irá receber o tempo decorrido para ocorrer o loop de controle, sendo 0 como inicio
- float setpoint = 9; //aqui é definida a temperatura alvo ---> esse valor pode ser alterado pelo usuário
- float PWM_PID = 0;
- float x;
- float y = A0; //variável que vai receber a medida pelo sensor.
- //------------------------------
- void setup()
- {
- Serial.begin(9600);
- pinMode(y, INPUT);
- pinMode(5, OUTPUT); //porta PWM onde será colocado o relé e definida como saída.
- //digitalWrite(5, LOW); //definindo a porta como desligada por defautl
- }
- //------------------------------
- void loop()
- {
- x = analogRead(y);
- erro = setpoint - x; //calcula a variação entre a temperatura medida e a temperatura alvo. Faz parte da realimentação do sistema e no cálculo de cada controlador.
- float delta = ((millis() - tdecorrido)) / 1000.0; //calcula a diferença em segundos entre um loop
- tdecorrido = millis(); //conta quanto tempo levou para dar um loop
- p = kp * erro; //controle proporcional
- i += (ki * erro) * delta; //controle integral
- d = erro * kd / delta; //controle derivativo
- pid = p + i + d; //PID
- PWM_PID = map (pid, -150000, 5000, 0, 100);
- analogWrite(5, PWM_PID);
- /* if (pid > 0) //aqui começam os controles de fato
- {
- digitalWrite(05, HIGH);
- }
- else
- {
- digitalWrite(05, LOW);
- }
- */
- Serial.print(pid);
- Serial.print(" ");
- Serial.print(PWM_PID);
- Serial.print(" ");
- Serial.println(x);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement