Skip to main content

//Now it will work // Control Speed of DC FAN Using Arduino PID Library

#include <PID_v1.h> double Setpoint, Input, Output; //not there in original sketch //Define Variables we'll be connecting to double Setpoint, Input, Output; //Define the aggressive and conservative Tuning Parameters double aggKp = 4, aggKi = 0.2, aggKd = 1; double consKp = 1, consKi = 0.05, consKd = 0.25; //double consKp=2, consKi=5, consKd=1;

//Specify the links and initial tuning parameters PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, REVERSE); void setup() { Serial.begin(9600); //initialize the variables we're linked to // Input = map(analogRead(0), 0, 1023, 255, 0);

//int val = analogRead(0); //val = map(val, 0, 1023, 0, 255); // analogWrite(9, val);

Setpoint = 100; myPID.SetOutputLimits(0, 255); //MIN,MAX //turn the PID on myPID.SetMode(AUTOMATIC); // MANUAL myPID.SetControllerDirection(REVERSE); // DIRECT } void loop() { int sensorValue = analogRead(0); Input = map(sensorValue, 0, 1023, 0, 255);

double gap = abs(Setpoint - Input); //distance away from setpoint if (gap < 10) { //we're close to setpoint, use conservative tuning parameters myPID.SetTunings(consKp, consKi, consKd); } else { //we're far from setpoint, use aggressive tuning parameters myPID.SetTunings(aggKp, aggKi, aggKd); }

myPID.Compute(); analogWrite(3, Output); Serial.print(" PWM = "); Serial.print(Output,0); Serial.print(" sensor value = "); Serial.print(sensorValue); Serial.print(" Input ="); Serial.println(Input,0); }

//Now it will work
//  https://arduino.stackexchange.com/questions/9731/control-speed-of-dc-fan-using-arduino-pid-library

#include <PID_v1.h>
double Setpoint, Input, Output;  //not there in original sketch
//Define Variables we'll be connecting to double Setpoint, Input, Output;
//Define the aggressive and conservative Tuning Parameters
double aggKp = 4, aggKi = 0.2, aggKd = 1;
double consKp = 1, consKi = 0.05, consKd = 0.25;
//double consKp=2, consKi=5, consKd=1;

//Specify the links and initial tuning parameters
PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, REVERSE);
void setup()
{
  Serial.begin(9600);
  //initialize the variables we're linked to
  // Input = map(analogRead(0), 0, 1023, 255, 0);

  //int val = analogRead(0);
  //val = map(val, 0, 1023, 0, 255);
  // analogWrite(9, val);

  Setpoint = 100;
  myPID.SetOutputLimits(0, 255); //MIN,MAX
  //turn the PID on
  myPID.SetMode(AUTOMATIC);  // MANUAL
  myPID.SetControllerDirection(REVERSE);  // DIRECT
}
void loop()
{
  int sensorValue = analogRead(0);
  Input = map(sensorValue, 0, 1023, 0, 255);

  double gap = abs(Setpoint - Input); //distance away from setpoint
  if (gap < 10)
  { //we're close to setpoint, use conservative tuning parameters
    myPID.SetTunings(consKp, consKi, consKd);
  }
  else
  {
    //we're far from setpoint, use aggressive tuning parameters
    myPID.SetTunings(aggKp, aggKi, aggKd);
  }

  myPID.Compute();
  analogWrite(3, Output);
  Serial.print(" PWM = ");
  Serial.print(Output,0);
  Serial.print("       sensor value =  ");
  Serial.print(sensorValue);
  Serial.print("       Input =");
  Serial.println(Input,0);
}

//Now it will work // Control Speed of DC FAN Using Arduino PID Library

#include <PID_v1.h> double Setpoint, Input, Output; //not there in original sketch //Define Variables we'll be connecting to double Setpoint, Input, Output; //Define the aggressive and conservative Tuning Parameters double aggKp = 4, aggKi = 0.2, aggKd = 1; double consKp = 1, consKi = 0.05, consKd = 0.25; //double consKp=2, consKi=5, consKd=1;

//Specify the links and initial tuning parameters PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, REVERSE); void setup() { Serial.begin(9600); //initialize the variables we're linked to // Input = map(analogRead(0), 0, 1023, 255, 0);

//int val = analogRead(0); //val = map(val, 0, 1023, 0, 255); // analogWrite(9, val);

Setpoint = 100; myPID.SetOutputLimits(0, 255); //MIN,MAX //turn the PID on myPID.SetMode(AUTOMATIC); // MANUAL myPID.SetControllerDirection(REVERSE); // DIRECT } void loop() { int sensorValue = analogRead(0); Input = map(sensorValue, 0, 1023, 0, 255);

double gap = abs(Setpoint - Input); //distance away from setpoint if (gap < 10) { //we're close to setpoint, use conservative tuning parameters myPID.SetTunings(consKp, consKi, consKd); } else { //we're far from setpoint, use aggressive tuning parameters myPID.SetTunings(aggKp, aggKi, aggKd); }

myPID.Compute(); analogWrite(3, Output); Serial.print(" PWM = "); Serial.print(Output,0); Serial.print(" sensor value = "); Serial.print(sensorValue); Serial.print(" Input ="); Serial.println(Input,0); }

//Now it will work
//  https://arduino.stackexchange.com/questions/9731/control-speed-of-dc-fan-using-arduino-pid-library

#include <PID_v1.h>
double Setpoint, Input, Output;  //not there in original sketch
//Define Variables we'll be connecting to double Setpoint, Input, Output;
//Define the aggressive and conservative Tuning Parameters
double aggKp = 4, aggKi = 0.2, aggKd = 1;
double consKp = 1, consKi = 0.05, consKd = 0.25;
//double consKp=2, consKi=5, consKd=1;

//Specify the links and initial tuning parameters
PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, REVERSE);
void setup()
{
  Serial.begin(9600);
  //initialize the variables we're linked to
  // Input = map(analogRead(0), 0, 1023, 255, 0);

  //int val = analogRead(0);
  //val = map(val, 0, 1023, 0, 255);
  // analogWrite(9, val);

  Setpoint = 100;
  myPID.SetOutputLimits(0, 255); //MIN,MAX
  //turn the PID on
  myPID.SetMode(AUTOMATIC);  // MANUAL
  myPID.SetControllerDirection(REVERSE);  // DIRECT
}
void loop()
{
  int sensorValue = analogRead(0);
  Input = map(sensorValue, 0, 1023, 0, 255);

  double gap = abs(Setpoint - Input); //distance away from setpoint
  if (gap < 10)
  { //we're close to setpoint, use conservative tuning parameters
    myPID.SetTunings(consKp, consKi, consKd);
  }
  else
  {
    //we're far from setpoint, use aggressive tuning parameters
    myPID.SetTunings(aggKp, aggKi, aggKd);
  }

  myPID.Compute();
  analogWrite(3, Output);
  Serial.print(" PWM = ");
  Serial.print(Output,0);
  Serial.print("       sensor value =  ");
  Serial.print(sensorValue);
  Serial.print("       Input =");
  Serial.println(Input,0);
}
Source Link

//Now it will work // Control Speed of DC FAN Using Arduino PID Library

#include <PID_v1.h> double Setpoint, Input, Output; //not there in original sketch //Define Variables we'll be connecting to double Setpoint, Input, Output; //Define the aggressive and conservative Tuning Parameters double aggKp = 4, aggKi = 0.2, aggKd = 1; double consKp = 1, consKi = 0.05, consKd = 0.25; //double consKp=2, consKi=5, consKd=1;

//Specify the links and initial tuning parameters PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, REVERSE); void setup() { Serial.begin(9600); //initialize the variables we're linked to // Input = map(analogRead(0), 0, 1023, 255, 0);

//int val = analogRead(0); //val = map(val, 0, 1023, 0, 255); // analogWrite(9, val);

Setpoint = 100; myPID.SetOutputLimits(0, 255); //MIN,MAX //turn the PID on myPID.SetMode(AUTOMATIC); // MANUAL myPID.SetControllerDirection(REVERSE); // DIRECT } void loop() { int sensorValue = analogRead(0); Input = map(sensorValue, 0, 1023, 0, 255);

double gap = abs(Setpoint - Input); //distance away from setpoint if (gap < 10) { //we're close to setpoint, use conservative tuning parameters myPID.SetTunings(consKp, consKi, consKd); } else { //we're far from setpoint, use aggressive tuning parameters myPID.SetTunings(aggKp, aggKi, aggKd); }

myPID.Compute(); analogWrite(3, Output); Serial.print(" PWM = "); Serial.print(Output,0); Serial.print(" sensor value = "); Serial.print(sensorValue); Serial.print(" Input ="); Serial.println(Input,0); }