Temperatursteuerung mit einem NTC (Grillthermometer)

Hallo erstmal,

bin gerade an meinem ersten Richtigen Arduino Projekt und bräuchte dringend Hilfe...

Ich möchte eine Steuerung für meinen Wathersmoker bauen, bei der durch die überwachung der Garraumtemperatur ventilatoren für die Zuluft gesteuert werden. Außerdem sollen da noch 8 Fühler für die Kerntemperatur der Fleischstücke drann. Das ganze wird durch eine RGB LED und ein LCD angezeigt.

Das grobe Programm für die Steuerung steht auch schon soweit, jetzt bin ich nur bei der Temperaturmessung am stolpern!

Der verwendete Temperaturfühler ist von einem Grillthermometer und hat einen Breich von -30 bis 300°,
https://www.cw-mobile.de/igrill-2-pro-ambient-probe.html

Als bord wird ein Arduino Mega verwendet und es wird ein Relais zur ansteuerung der Lüfter verwendet.

Den Temperaturfühler (NTC) habe ich mit einem bein an 5V und das andere bein geht an A1, an A1 ist auch noch ein 4k7 (wegen einem gemessenen Wiederstand von 4k15 bei 110°, die normale arbeitstemperatur der NTC in zukunft) und ein 10µF gegen 0V. Ausgegeben bekomme ich eine Temperatur von -70°C bei 22°C Raumtemperatur.... Wo ist mein Fehler???

Zum NTC, der hat folgende Messwerte (nicht ganz genau)
bei 25°C 100K
bei 30°C 80K
bei 40°C 53K
bei 50°C 34K
bei 60°C 25K
bei 70°C 15K
bei 80°C 11K
bei 90°C 7K8
bei 100°C 5K6
bei 110°C 4k15
bei 120°C 3k2
bei 130°C 2k5
bei 140°C 1k9
bei 150°C 1k5

Danke an alle die sich die Mühe machen das durchzusehen!

#include <OneWire.h>
#include <LiquidCrystal_I2C.h>
#include <math.h>

double convertRawToTemperature(int raw, bool celsius) 
    {
     double temperatureInF;
     
     temperatureInF = log(100000.0*((1024.0/raw-1))); 
     temperatureInF = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * temperatureInF * temperatureInF ))* temperatureInF );
     temperatureInF = temperatureInF - 274.15;          // Soll 274.15
     
     if (celsius==false) temperatureInF = (temperatureInF * 9.0)/ 5.0 + 32.0; 
     
     return temperatureInF;
    }

float HighTemp1;       // Temperatur im Garraum zu Hoch
float NormTemp1;      // Temperatur im Garraum I.O.
float LowTemp1;       // Temperatur im Garraum zu niedrig (Lüfter an)

int FanPin = 8;         //Realis (Lüfter)
int LEDblau = 3;        // Farbe blau an Pin 3
int LEDrot = 5;         // Farbe rot an Pin 5
int LEDgruen=6;         // Farbe gruen an Pin 6
int p=1000;             // p ist eine Pause mit 1000ms also 1 Sekunde
int brightness1a = 0;   // Zahlenwert zwischen 0 und 255 – gibt die Leuchtstärke der einzelnen Farbe an
int brightness1b = 0;   // Zahlenwert zwischen 0 und 255 – gibt die Leuchtstärke der einzelnen Farbe an
int brightness1c = 0;   // Zahlenwert zwischen 0 und 255 – gibt die Leuchtstärke der einzelnen Farbe an
int dunkel = 255;       // Zahlenwert 0 bedeutet Spannung 0V – also LED aus.
int Temp1 = A1;         // Garraumtemperatur (zur bestimmung HighTemp, NormTemp und Low Temp
int Temp2 = A2;         // Anzeige von Kerntermperatur Gargut 1 usw...
int Temp3 = A3; 
int Temp4 = A4; 
int Temp5 = A5; 
int Temp6 = A6; 
int Temp7 = A7; 
int Temp8 = A8; 
int Temp9 = A9; 

LiquidCrystal_I2C lcd(0x27, 20, 4);



void setup(void)
{

 pinMode(FanPin, OUTPUT); // ansteuerung vom Relais an dem der Lüfter für die Zuluft zum Grill hängt
 Serial.begin(9600);
 Serial.println("Test");
  
  lcd.begin();
  lcd.backlight();

  pinMode(LEDblau, OUTPUT);
  pinMode(LEDgruen, OUTPUT);
  pinMode(LEDrot, OUTPUT);


}

void loop(void)
{

    lcd.setCursor(0, 0);
    lcd.print("Garraum = ");


 int rawTemperatur;
 double temperaturInC; 

 rawTemperatur = analogRead(Temp1);
 temperaturInC = convertRawToTemperature(rawTemperatur, true);

      Serial.print("Temperature: ");
      Serial.print(temperaturInC);   
      Serial.println("° C");
      
  float celsius;

  celsius = temperaturInC;
  Serial.print("  Temperature = ");
  Serial.print(celsius);
  Serial.print(" Celsius, ");

      lcd.setCursor(10, 0);
      lcd.print(celsius);
      lcd.setCursor(15, 0);
      lcd.print("'C");

// Einstellungen zum Temperaturbereich Aktuell zum Testen sehr nidrig...

LowTemp1 = celsius <=27;
HighTemp1 = celsius >=29,50;

if ((celsius >=27,50) && (celsius <=29)){
  NormTemp1 = true; 
}
if ((LowTemp1) || (HighTemp1)){
  NormTemp1 = false;
}

 if (LowTemp1){
  Serial.print("LowTemp");
  lcd.setCursor(0, 1);
  lcd.print("LowTemp");
  digitalWrite(FanPin, LOW);
  analogWrite(LEDblau, brightness1a);
 }
   else {
    digitalWrite(FanPin, HIGH);
    analogWrite(LEDblau, dunkel);
  }

 if (NormTemp1){
 Serial.print("NormTemp");
 lcd.setCursor(0, 1);
 lcd.print("NormTemp");
 analogWrite(LEDgruen, brightness1a);
}
  else{
    analogWrite(LEDgruen, dunkel);
  }
 if (HighTemp1){
  Serial.print("HighTemp");
  lcd.setCursor(0, 1);
  lcd.print("HighTemp");
  analogWrite(LEDrot, brightness1a);
 }
 else{
  analogWrite(LEDrot, dunkel);
 }
delay(5000);


}

Bis aufs Vorzeichen entspricht das ziemlich genau der Fahrenheit-Temperatur.
In Deinem Sketch steht auch überall "temperatureInF" das könnte auf Fahrenheit hindeuten.

Gruß Tommy

  int reading;
 
  reading = analogRead(thermistorPin);
  reading = ( reading / 10 )  – 1;
  reading = resistorValue / reading;
  Serial.print("Celsius :");
  Serial.println(reading);


Probier das mal aus

Bist Du sicher das der Fühler ein NTC ist?

Grüße Uwe

uwefed:
Bist Du sicher das der Fühler ein NTC ist?

Grüße Uwe

müsste ja denke ich bei dem wie sich der Wiederstand verhällt.
lasse mich aber gerne korrigieren wenn das nicht passt!

Gruß Jonathan

FlyingEagle:

  int reading;

reading = analogRead(thermistorPin);
  reading = ( reading / 10 )  – 1;
  reading = resistorValue / reading;
  Serial.print("Celsius :");
  Serial.println(reading);



[
Probier das mal aus](http://www.letsarduino.com/project-14-servo-motor-controlled-analog-thermometer-using-thermistor-ntc-arduino/)

Habs ausprobiert und bekomme 146 angezeigt...

habs jetzt auch mit nem 100K ausgetestet da das ja der Wiederstand bei Raumtemperatur ist, da bekomme ich 34°C ausgegeben...

vieleicht hilft die Info ja bei der Fehlersuche...

Danke an ALLE!

Ich habe den Fehler gefunden....

Auf der selbstgebauten Platine waren versehendlich nicht 100K sondern zwei 100K Paralel auf den Pin A1 am arduino...

Danke an alle die gesucht haben habe jetzt normale werte der Sketch passt also so wie er ist wird nur noch weiterendwikelt.

Gruß Jonathan

Gibt es Digitale Sensoren dafür? So wie DS18B20 nur eben bis 150° oder höher?

skorpi08:
Gibt es Digitale Sensoren dafür? So wie DS18B20 nur eben bis 150° oder höher?

Da hab ich lange nach gesucht aber nix gefunden...
Die funktionieren zwar viel einfacher wie ich finde aber leider habe ich nix Passendes für nen Grill-Thermometer gefunden.

wenn jemand einen kennt wäre ich dankbar für die Info.

Gruß Jonathan

Hallo,
Du kannst Deinen Sensor doch nutzen... Du benötigst nur eine Referenz.
Du kannst Dir EisWasser herstellen, das ziemlich genau °C 0 hat. (Wikipedia).
Dann kannst Du Dir kochendes Wasser herstellen, wenn der Luftdruck bekannst ist, dann ist auch diese
Temperatur ziemlich genau.
Dann hättest Du schon einmal zwei Messwerte zum rechnen und suchen.

Als erstes würde ich die Werte mal mit den Tabellen des PT100 oder PT 1000 vergleichen.

Sonst suchst Du Dir die üblichen Verdächtigen und schaust in deren Datenblätter.
Wenn die Werte für °C 0 und kochendes Wasser °C 98,6 übereinstimmen, kannst mal probieren.
Ansonsten bleibt Dir nur eine Kalibrierung durch Vergleich.
Gruß und Spaß
Andreas

Und gibt's für die anderen bastler ein Digitales oder müssen die auch NTC nehmen?

Hallo,
mir ist kein elektronisches Bauteil bekannt, das 300 Grad überlebt.
Gruß und Spaß
Andreas