Pwm, pid Steuerung Heizfolie

Hi zusammen,
Ich hab n Problem wo ich nicht weiterkomme.
Und zwar hab ich mir eine Heizung für einen Regenmengenmesser (Wippe) gebaut.
Heizfolie hängt an nem BUZ11 und soll mithilfe PWM vom arduino gesteuert werden. Und zwar wenn die Temperatur (ermittelt durch einen DS18b20) unter einen gewissen Wert (unter 5 Grad) fällt soll die Heizung langsam hochgeregelt werden und wenn die Temperatur wieder hochgeht wieder zurückgelegt werden. Und bei über 5 Grad dann Heizung aus.
Aber irgendwie klappt das nicht so.
Hier mal der Sketch

/*
Heizungssteuerung für Folienheizung Regenmengenmesser
- PWM gesteuert bei uber- bzw unterschreiten eingestellter Schwellwerte
*/

#include <OneWire.h>
#include <DallasTemperature.h>
#include <PID_v1.h>


unsigned const int HeizungTrichterPWMPin    = 12;
unsigned const int tempTrichterPin    = 15;
float tempTrichter;


double SetpointTrichter, InputTrichter, OutputPWMTrichter;
double aggKpTrichter=4, aggKiTrichter=0.2, aggKdTrichter=1;
double consKpTrichter=1, consKiTrichter=0.05, consKdTrichter=0.25;

PID myPIDTrichter(&InputTrichter, &OutputPWMTrichter, &SetpointTrichter, consKpTrichter, consKiTrichter, consKdTrichter, DIRECT);

OneWire oneWireTrichter(tempTrichterPin);
DallasTemperature sensorsTrichter(&oneWireTrichter);

/********************************************/
/*              Setup-Section               */
/********************************************/
void setup()
{
  sensorsTrichter.begin();

  SetpointTrichter = 4;

  myPIDTrichter.SetMode(AUTOMATIC);
}

/********************************************/
/*               Loop-Section               */
/********************************************/
void loop()
{ 
  sensorsTrichter.requestTemperatures();
  tempTrichter = sensorsTrichter.getTempCByIndex(0);
  InputTrichter = tempTrichter;
  if (InputTrichter < 5){
  double gapTrichter = abs(SetpointTrichter-InputTrichter); //distance away from setpoint
  if (gapTrichter < 4)
  {  //we're close to setpoint, use conservative tuning parameters
    myPIDTrichter.SetTunings(consKpTrichter, consKiTrichter, consKdTrichter);
  }
  else
  {
     //we're far from setpoint, use aggressive tuning parameters
     myPIDTrichter.SetTunings(aggKpTrichter, aggKiTrichter, aggKdTrichter);
  }
  myPIDTrichter.Compute();
PWMtrichter = OutputPWMTrichter;

  analogWrite(HeizungTrichterPWMPin, OutputPWMTrichter);
}
else
{
    analogWrite(HeizungTrichterPWMPin, 0);
  }
}

Kann mir vielleicht da jemand weiterhelfen?

Wäre echt klasse

Gruß Johnny

Aber irgendwie klappt das nicht so.

Woher weisst du das?
Was hast du denn bisher von der Regelung gemessen und aufgezeichnet?
Woher hast du die Reglerparameter?

Und ganz generell :
Warum nimmst du überhaupt einen PID Regler?
Und wo kriegst du jetzt Temperaturen unter 5 °C her?
Musst du früh aufstehen :wink:

Ich lasse mir die pwm und Temperaturwerte auf iobroker senden und hab ich gesehen das die Regelung zwar anläuft die Temperatur zu regeln aber dann dann pwm auf 255 setzt und bleiben dann auch wenn die Temperatur z.B. 15 Grad ist.
Die Parameter stammen aus nem Beispielsketch.
Gibt es ne bessere Möglichkeit für mein Vorhaben als wie mit einer PID Regelung?

Gruß Johnny

Die Parameter stammen aus nem Beispielsketch

Dann sind sie falsch.

Es gibt Tips, wie man sich an sinnvolle Parameterwerte annähern kann.
Braucht man sehr viel Geduld, gerade bei langsamen Prozessen wie deiner Heizung.

Bei welchem PWM-Wert erreichst du bei 4°C konstanter Umgebungstemeratur einen Anstieg des Istwerts um 1° / Stunde?
Welchen Endwert erreichst du wann, wenn du voll (oder bei 20%PWM) heizt, bei konstanter Umgebungstemperatur?
Solche Sachen rauszukriegen, scheitert schonmal daran, dass die Umgebungstemperatur nicht bei 4° konstant bleibt. Ein PID Regler erspart einem nicht, das dynamische Verhalten der Regelstrecke kennen zu lernen.

Gibt es ne bessere Möglichkeit für mein Vorhaben als wie mit einer PID Regelung?

Besser vielleicht nicht, aber deutlich einfacher:
Am einfachsten: Unter 3° einschalten, über 6° ausschalten. Dann schauen, wie selten man das machen kann. z.B.: Nur einmal pro Minute messen? Dann evtl. schauen, ob man (je nach Umgebungstemperatur)
das Ganze mit PWM etwas ruhiger kriegt.

255, auch wenn die Temperatur z.B. 15 Grad ist.

Fang mal ohne I - Anteil an ... oder hast du gar einen Vorzeichen-Fehler?