Bastelix-Lab
IoT Projekte
Alle Projekte
ESPHome / Home Assistant

Räucherofen Steuerung

ESP32-S3 mit PID-Regelung, adaptiver Leistungsbegrenzung und Klappensteuerung
ESP32-S3ESPHomeHome AssistantPID-ReglerDS18B20PT1000BME280PZEM-004TModbusServo
Räucherofen Steuerung
Hauptbild folgt

Beschreibung

Vollautomatische Räucherofen-Steuerung auf Basis eines ESP32-S3-N16R8 mit ESPHome. Ein PID-Regler steuert die Heizung über PWM auf ein SSR-Relais und hält die Garraum-Temperatur präzise auf dem Sollwert. Zwei DS18B20-Sensoren oben und unten im Garraum liefern die Ist-Werte, aus denen ein gewichteter Mittelwert für die PID-Regelung gebildet wird. Ein BME280 erfasst außerhalb des Schranks Umgebungstemperatur und Luftfeuchtigkeit als Input für das Wärmeverlust-Modell. Ein separater PT1000 über MAX31865 sitzt außen am Gehäuse eines Edelstahl-Kaltrauchgenerators im Bereich der Brennzone — über die dort gemessene Temperatur wird die Luftpumpe des Generators geregelt, damit die Späne sauber verglimmen ohne zu überhitzen. Eine adaptive Leistungsbegrenzung berechnet alle 30 Sekunden die maximal zulässige Heizleistung abhängig von Außentemperatur, Sollwert und berechnetem Wärmeverlust — so wird ein Überschwingen oberhalb des Sollwerts zuverlässig vermieden. Ein alle 5 Minuten laufender Stable-State-Detektor passt den Wärmeverlust-Koeffizienten adaptiv an, je nach erkanntem Betriebszustand werden zudem verschiedene PID-Parametersätze (heiß/kalt) umgeschaltet. Ein MS24-Servo (270°) steuert die Abluftklappe, ein PZEM-004T v4.0 über Modbus misst Spannung/Strom/Leistung/Energie. Die komplette Integration in Home Assistant erfolgt über native ESPHome-Entitäten: Climate, Sensor, Number, Switch, Button.

Sowas auch bauen lassen?
Genau in diese Richtung geht mein Paket „ESPHome Sensor-Konfiguration“ — ab 49€.
Ich liefere ausschließlich die Software (Firmware, Konfiguration, Code) — keine fertige Hardware. Die verwendeten Bauteile verlinke ich nur zur Orientierung, gekauft wird selbst. Gehäuse auf Anfrage.

Features

  • PID-Temperaturregelung mit Deadband
  • Adaptive Max-Power-Berechnung aus Wärmeverlust-Modell
  • Automatische Umschaltung zwischen "heiß"- und "kalt"-PID-Parametern
  • Mehrere Sensoren: 2x DS18B20 (Garraum), PT1000 via MAX31865 (Rauchgenerator), BME280 (Außenklima)
  • Servo-gesteuerte Abluftklappe (MS24, 270°)
  • Energiemessung per PZEM-004T v4.0 über Modbus
  • Home Assistant Climate Entity, vollständig nativ integriert
  • Sichere Boot-Sequenz: Regelung OFF, Lüfter 0%, Klappe zu

Techstack

Hardware
  • ESP32-S3-N16R8
  • DS18B20 (x2)
  • BME280
  • PT1000 + MAX31865
  • PZEM-004T v4.0
  • MS24 Servo 270°
  • SSR-40DA
  • Heizelement
Software
  • ESPHome
  • PID Climate
  • One-Wire / SPI / UART-Modbus
  • Lambda-Automationen
Integration
  • Home Assistant Native
  • ESPHome Dashboard
  • MQTT optional

Code-Snippets

PID-Regler mit Deadbandyaml
climate:
  - platform: pid
    id: pid_controller
    name: "PID Temperatur-Regelung"
    sensor: temp_garraum_mittel
    default_target_temperature: 25°C
    heat_output: heizung_pwm

    control_parameters:
      kp: 0.12
      ki: 0.0008
      kd: 1.0
      output_averaging_samples: 5
      derivative_averaging_samples: 5
      min_integral: -0.3
      max_integral: 0.3

    deadband_parameters:
      threshold_high: 0.3°C
      threshold_low: -0.3°C
      kp_multiplier: 0.0
      ki_multiplier: 0.0
      kd_multiplier: 0.0
      deadband_output_averaging_samples: 15

    visual:
      min_temperature: 15°C
      max_temperature: 120°C
      temperature_step: 0.5°C
Adaptive Max-Power-Begrenzungyaml
interval:
  - interval: 30s
    then:
      - lambda: |-
          if (!id(auto_start_enabled)) return;
          if (!id(temp_garraum_mittel).has_state()) return;
          if (!id(temp_aussen).has_state()) return;

          float temp_ist  = id(temp_garraum_mittel).state;
          float temp_soll = id(pid_controller).target_temperature;
          float temp_aus  = id(temp_aussen).state;

          float delta_T          = temp_soll - temp_aus;
          float heat_loss_watts  = id(heat_loss_coefficient) * delta_T;
          float error_abs        = abs(temp_ist - temp_soll);
          float max_power        = 0.15;

          if      (error_abs > 5.0) max_power = 1.00;
          else if (error_abs > 2.0) max_power = 0.50;
          else if (error_abs > 1.0) max_power = 0.30;
          else {
            float base_power = heat_loss_watts / 2000.0;
            max_power = clamp(base_power * 1.5f, 0.10f, 0.30f);
          }

          id(calculated_max_power) = max_power;
          id(max_heater_power)     = max_power;

Screenshots

Räucherofen Setup
Bild folgt
Räucherofen Setup
Home Assistant Dashboard
Bild folgt
Home Assistant Dashboard
Temperaturverlauf
Bild folgt
Temperaturverlauf
PID-Regelung Details
Bild folgt
PID-Regelung Details
Klappensteuerung
Bild folgt
Klappensteuerung
Lüfter & Heizung
Bild folgt
Lüfter & Heizung
Automatisierungen
Bild folgt
Automatisierungen

Mehr zum Projekt