I want to make a circuit that control speed of DC fan Using Arduino PID Library to get thing at specific temperature.
The circuit looks like this but can be changed, The dc fan motor connected to PWM 3 and thermistor connected with pin A0.
The thermistor check the temperature of a device that heated by nearby heater so fan cools the device to get the specific temperature.
Case 1
When Heater not running, the thermistor value in Serial monitor 0-1023, When fan not running it gives 1023 and when fan runs at full speed it gives about 0.
Case 2
But when heater is running the values of thermistor has been changed and when fan not running it gives 1023 and when fan runs at full speed it gives about 500.
I want to set a point 650 from thermistor value(INPUT Value), and fan speed have to adjust using pid so temperature adjusted and the thermistor gives 650 value.
Sample PID code
#include <PID_v1.h>
//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;
//Specify the links and initial tuning parameters
PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT);
void setup()
{
Serial.begin(115200);
//initialize the variables we're linked to
Input = map(analogRead(0), 0, 1023, 255, 0);
Setpoint = 650;
myPID.SetOutputLimits(0, 255);
//turn the PID on
myPID.SetMode(AUTOMATIC);
}
void loop()
{
int sensorValue = analogRead(0);
Input = map(analogRead(0), 0, 1023, 255, 0);
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.println(sensorValue);
}
What changes have to done in code so we can set point from input values? And Please help me so this code works for me.