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