Hallo,
ich habe ein Relais, dessen Zustand von einem Temperatursensor gesteuert wird. Das Relais (im sketch "Heater" genannt) wiederum kontrolliert die Stromversorgung einer 12V Heizfolie . Ausserdem wird die vom Sensor gemessene Temperatur auf einem LCD angezeigt.
Nun möchte ich, dass ein PWM fähiger, ebenfalls via externen 12 V versorgter CPU Fan (im sketch "HeaterFan" genannt), dem Zustand des Heaters folgt. Wenn der Heater an ist soll analogWrite=150 gelten; wenn der Heater aus ist soll analogWrite=0 gelten. Das Besondere dabei ist, dass der Heaterfan mit Verzögerung dem Heater folgen soll: 120s nachdem der Heater angeschaltet wurde soll der Heaterfan an gehen und 240s nachdem der Heater ausgeschaltet wurde, soll der heaterfan aus gehen.
Kann mir bitte jemand sagen wie ich das am einfachsten in meinen Code reinbekomme?
Was ich sicher weiss: Die beiden Einzelkomponenten funktionieren wunderbar - das Relais schaltet in Abhängigkeit der Zeit und der PWM fan lässt sich wunderbar via analogWrite steuern.
Danke
edit:
Es muss irgendwie mit einer zusätzlichen Variablen gehen mMn - die kann zwei Werte haben. Immer beim Anschalten oder Ausschalten des Heaters ändert sich der Wert auf das Gegenteil des Ist-Werts. Mit dieser Variablen und unter Einhaltung der oben beschriebenen assymetrischen Verzugszeiten muss der PWM Signalpin irgendwie mit einer if-condition in Abhängigkeit gesetzt werden. Aber wie genau? Ich habe schon viel rumprobiert aber das funktioniert alles nicht.
#include "DHT.h" // Library von Adafruit
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht1(8, DHT22); // Assign DHT22 (AM2302) Sensor to Pin 8
const int Heater = 4; // Assign Heater to Pin 4
const int HeaterFan = 9; // Assign HeaterFan to Pin 9
float T; // Temperature
const float maxT = 35; // The max temperature allowed
const float minT = 32; // The min temperature allowed
long DHTPreviousTime = 0; // Marker DHT22
const long DHTInterval = 2000; // DHT22 measuring interval
void setup() {
Serial.begin(9600); // Initiate Serial Monitor
lcd.begin(); // Initiate LCD
dht1.begin(); // Initiate DHT22 Sensor
pinMode(Heater, OUTPUT); // Initiate Heater Pin as output
digitalWrite(Heater, HIGH); // Set initial Heater state high (Relais is low triggered)
pinMode(HeaterFan, OUTPUT); // Initiate HeaterFan Pin as output
analogWrite(HeaterFan, 0); // Set initial HeaterFan state 0
void loop() {
unsigned long currentTime = millis(); // Update The Time
// Update T value
if (currentTime - DHTPreviousTime > DHTInterval) {
DHTPreviousTime = currentTime;
float T = dht1.readTemperature(); // Get temperature
// Display on LCD and Serial Monitor if DHT22 Sensor is not operational
if (isnan(RLF) || isnan(T)) {
Serial.println("Sensorfehler!");
lcd.clear();
lcd.print("Sensorfehler!");}
else {
// Display updated T values on LCD
lcd.clear();
lcd.print(String(" T: ") + String(T) + String(" \xDF") + String("C"));
}
// T depending Heating
if (T <= minT) {
digitalWrite(Heater, LOW); // am Relais verbunden ist COM-NO; Relais is low triggered
}
if (T >= maxT) {
digitalWrite(Heater, HIGH);
}
}
}