Go Down

Topic: Hjelp til kode, stenge relè når maks temp er nådd (Read 618 times) previous topic - next topic

torehh

Hei,

Noen som kan hjelpe meg litt med koding her?

Skal lage en temp styring som skal holde en viss temp, 12v går gjennom et relè som jeg vil skal åpne å stenge alt etter hva tempen er, i dette tilfelle skal den slås på hvis den leser under 20grader i Serial Monitor og slå seg av hvis den er over 60grader.

Men dette fungerer ikke, jeg får slått på relè men det stopper ikke da det kommer opp til 60grader.

Sikker en helt enkel feil som noen med litt erfaring ser med en gang. Har prøvd frem og tilbake med commands men ingen hell.

Anyone?


Code: [Select]


#include <math.h>

int rele = 13;


double Thermistor(int RawADC) {
  double Temp;
  Temp = log(10000.0 * ((1024.0 / RawADC - 1)));
  //         =log(10000.0/(1024.0/RawADC-1)) // for pull-up configuration
  Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp )) * Temp );
  Temp = Temp - 273.15;            // Convert Kelvin to Celcius
  // Temp = (Temp * 9.0)/ 5.0 + 32.0; // Convert Celcius to Fahrenheit
  return Temp;
}

void setup() {
  Serial.begin(9600);
  pinMode(rele, OUTPUT);

}

void loop() {


  int analogValue = analogRead(A0);
  Serial.println(int(Thermistor(analogRead(0))));  // display Fahrenheit
  delay(100);

  if (analogValue <= 20)
  {
    digitalWrite(rele, HIGH);
  }

  else if  (analogValue >= 60)
  {
    digitalWrite(rele, LOW);
  }
}





mfalkvidd

#1
Jan 19, 2018, 08:49 pm Last Edit: Jan 19, 2018, 08:54 pm by mfalkvidd
Jag tror du vill jämföra med temperaturen istället för analog-värdet. Vad tror du om att ändra loop till det här?

Code: [Select]

void loop() {

  double thermistorResult = Thermistor(analogRead(0));
  Serial.println(thermistorResult);  // display Fahrenheit
  delay(100);

  if (thermistorResult <= 20)
  {
    digitalWrite(rele, HIGH);
  }

  else if  (thermistorResult >= 60)
  {
    digitalWrite(rele, LOW);
  }
}

torehh

Jag tror du vill jämföra med temperaturen istället för analog-värdet. Vad tror du om att ändra loop till det här?

Code: [Select]

void loop() {

  double thermistorResult = Thermistor(analogRead(0));
  Serial.println(thermistorResult);  // display Fahrenheit
  delay(100);

  if (thermistorResult <= 20)
  {
    digitalWrite(rele, HIGH);
  }

  else if  (thermistorResult >= 60)
  {
    digitalWrite(rele, LOW);
  }
}

Det funket, takker :D klarer å holde temp med +-1,5 grad

Det så umiddelbart mer innfløkt ut enn man skulle tro det behøver å være.
Måler du med en termistor? Område på den?
Får du riktige verdier på serial monitor da?
Hva driver du releet med?
Ja, mulig det er rotete program, er sammensatt av mye googling..
Det er til et 3D printer hode jeg skal montere på en hjemmelaga CNC, inne i dette hode er det en 100K termistor, når vaarmeelementet på hode ikke er på så leser den 24grader i romtemp å det virker så det stemmer.

12v går gjennom rele som power til varmeelement, styring av rele bruker jeg pin 13 på Arduinoen

Go Up