temp sensor and heater loop

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");
}