Hi!
First project for me. I'm trying to regulate temperature in an old fridge(ambient) to between 25 and 30°C.
I've found a lot of resources to help, and this is what I've got so far. Am I heading in the right direction?
- using an old mega2560 and ramps 1.4
- silicon heater mat on pin 8.
- thermistors on pins a13 (ambient/fridge) and a15 (heater).
The code is meant to keep the heater at 40°C until the fridge is at 25°C, and warn if the fridge is above 30°C. From there I thought I could tune those numbers manually.
//Thermistor & resistor
float Vin = 5.0; // [V]
float Rt = 4700; // Resistor t [ohm]
float R0 = 100000; // value of rct in T0 [ohm]
float T0 = 298.15; // use T0 in Kelvin [K]
//thermistor datasheet
float T1 = 273.15; // [K] in datasheet 0º C
float T2 = 373.15; // [K] in datasheet 100° C
float RT1 = 35563; // [ohms] resistance in T1
float RT2 = 549; // [ohms] resistance in T2
//Temp variables:
float Vout1 = 0.0; // Vout on A13
float Rout1 = 0.0; // Rout on A13
float beta1 = 0.0; // initial parameters [K]
float Rinf1 = 0.0; // initial parameters [ohm]
float TempK1 = 0.0; // variable output
float Fridge = 0.0; // fridge temp
float Vout2 = 0.0; // Vout on A15
float Rout2 = 0.0; // Rout on A15
float beta2 = 0.0; // initial parameters [K]
float Rinf2 = 0.0; // initial parameters [ohm]
float TempK2 = 0.0; // variable output
float Heater = 0.0; // heater temp
int counter;
void setup()
{
pinMode(A15, INPUT);
pinMode(A13, INPUT);
pinMode(13, OUTPUT);
pinMode(8, OUTPUT);
Serial.begin(9600);
// calc
beta1=(log(RT1/RT2))/((1/T1)-(1/T2));
Rinf1=R0*exp(-beta1/T0);
beta2=(log(RT1/RT2))/((1/T1)-(1/T2));
Rinf2=R0*exp(-beta2/T0);
}
void loop()
{
Vout1 = Vin*((float)(analogRead(A13))/1024.0); // calc for ntc
Rout1 = (Rt*Vout1/(Vin-Vout1));
TempK1 = (beta1/log(Rout1/Rinf1)); // calc for temperature
Fridge = TempK1-273.15;
Vout2 = Vin*((float)(analogRead(A15))/1024.0);
Rout2 = (Rt*Vout2/(Vin-Vout2));
TempK2 = (beta2/log(Rout2/Rinf2));
Heater = TempK2-273.15;
if (Fridge > 30) {
digitalWrite(13, HIGH);
Serial.print("HIGH TEMP !! " );
Serial.print(Fridge);
Serial.println(" C !!");
delay(1000);
digitalWrite(13, LOW);
} else {
if (Fridge > 5 && Fridge < 25) {
if (Heater < 40) {
analogWrite(8, 255);
for (counter = 0; counter < 2; ++counter) {
digitalWrite(13, HIGH);
delay(250);
digitalWrite(13, LOW);
delay(250);
}
analogWrite(8, 0);
}
if (Heater >= 40) {
analogWrite(8, 0);
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}
}
if (Fridge >= 25 && Fridge <= 30) {
analogWrite(8, 0);
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}
}
Serial.print("Fridge: ");
Serial.print(Fridge);
Serial.println(" C");
Serial.print("Heater: ");
Serial.print(Heater);
Serial.println(" C");
}