Saunasteuerung mit Arduino Funktioniert nicht

Ich Bin noch relativ neu im Thema C++ und mein Father möchte gerne das ich für unsere Sauna eine Steuerung Programmiere aber die Relays Schalten nicht. Das ist mein aktueller Code

#include <Arduino.h>
#include <WiFi.h>
#include <DHT.h>
#include <iostream>

float solltemp = 25.0; // Standardwert für Solltemperatur
bool light = false;

// Wi-Fi-Anmeldedaten


// Relais Pins für Ofen und Licht
const int ofenPin1 = 7;  // Relais für Ofen 1
const int ofenPin2 = 6;  // Relais für Ofen 2
const int ofenPin3 = 0;  // Relais für Ofen 3
const int lichtPin = 1;  // Relais für Licht

// DHT-Sensor
#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

// Cloud-Variablen
bool ofen1 = false;
bool ofen2 = false;
bool ofen3 = false;

// Hysterese-Temperaturwerte
float T_ein = solltemp - 5;  // Temperatur, bei der der Ofen eingeschaltet wird
float T_aus = solltemp + 2;  // Temperatur, bei der der Ofen ausgeschaltet wird
float currentTemp = 0.0;  // Aktuelle Temperatur

void setup() {
  // Serielle Kommunikation starten
  Serial.begin(115200);

  // Wi-Fi-Verbindung herstellen
  Serial.println("\nVerbunden mit Wi-Fi!");

  // DHT-Sensor initialisieren
  dht.begin();

  // Relais-Pins konfigurieren
  pinMode(ofenPin1, OUTPUT);
  pinMode(ofenPin2, OUTPUT);
  pinMode(ofenPin3, OUTPUT);
  pinMode(lichtPin, OUTPUT);

  // Relais ausschalten (Relais sind normalerweise LOW aktiv)
  digitalWrite(ofenPin1, LOW);
  digitalWrite(ofenPin2, LOW);
  digitalWrite(ofenPin3, LOW);
  digitalWrite(lichtPin, LOW);

  Serial.println("Setup abgeschlossen!");
}

void loop() {
  // Temperaturmessung
  currentTemp = dht.readTemperature();
  if (isnan(currentTemp)) {
    Serial.println("Fehler beim Lesen des Sensors!");
    delay(2000);
    return;
  }

  // Ofensteuerung basierend auf Temperatur
  if (currentTemp < T_ein) {
    digitalWrite(ofenPin1, HIGH);  // Ofen einschalten
    digitalWrite(ofenPin2, HIGH);
    digitalWrite(ofenPin3, HIGH);
    ofen1 = true;
  } else if (currentTemp > T_aus) {
    digitalWrite(ofenPin1, LOW);  // Ofen ausschalten
    digitalWrite(ofenPin2, LOW);
    digitalWrite(ofenPin3, LOW);
    ofen1 = false;
  }

  // Lichtsteuerung
  if (light) {
    digitalWrite(lichtPin, HIGH);
  } else {
    digitalWrite(lichtPin, LOW);
  }

  // Debug-Ausgabe
  Serial.print("Temperatur: ");
  Serial.print(currentTemp);
  Serial.println(" °C");

  delay(1000);  // Wartezeit für nächste Schleife
}

void onSolltempChange() {
  T_ein = solltemp - 5;
  T_aus = solltemp + 2;
  Serial.println("Solltemperatur geändert!");
}

void onLightChange() {
  Serial.println("Lichtzustand geändert!");
}

void onTemperatureChange() {
  Serial.println("Temperatur geändert!");
}

void onOven1Change() {
  Serial.println("Ofen 1 Zustand geändert!");
  digitalWrite(ofenPin1, ofen1 ? HIGH : LOW);
}

void onOven2Change() {
  Serial.println("Ofen 2 Zustand geändert!");
  digitalWrite(ofenPin2, ofen2 ? HIGH : LOW);
}

void onOven3Change() {
  Serial.println("Ofen 3 Zustand geändert!");
  digitalWrite(ofenPin3, ofen3 ? HIGH : LOW);
}


/*
  Since CurrentTemp is READ_WRITE variable, onCurrentTempChange() is
  executed every time a new value is received from IoT Cloud.
*/
void onCurrentTempChange()  {
  // Add your code here to act upon CurrentTemp change
}

????

???
Wo hast Du den Code her?

Gruß Tommy

Weis ich nicht mehr ist schon länger her das ich dass mal angefangen habe

Auf was für einem controller soll das laufen?

Es soll am besten über einen Giga R1 laufen

Ok. Hast Du zum entwickeln einen anderen, oder entwickelst Du auf dem? - in jedem Fall würd ich erstmal den WiFi-Teil raus lassen.

Ich benutze den zum entwickeln

1 Like

Versuch mal den Code.
ACHTUNG! Es haben sich Pins für Relais und Licht geändert! (Letzteres ist noch ohne Funktion)

#include <Arduino.h>
//#include <WiFi.h>
#include <DHT.h>
//#include <iostream>

const float solltemp = 25.0; // Standardwert für Solltemperatur
bool light = false;

// Wi-Fi-Anmeldedaten


// Relais Pins für Ofen und Licht
constexpr byte ofenPin1 {7};  // Relais für Ofen 1
constexpr byte ofenPin2 {6};  // Relais für Ofen 2
constexpr byte ofenPin3 {5};  // Relais für Ofen 3
constexpr byte lichtPin {3};  // Relais für Licht

// DHT-Sensor
constexpr byte DHTPIN {4};
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

/*
  // Cloud-Variablen
  bool ofen1 = false;
  bool ofen2 = false;
  bool ofen3 = false;
*/

// Hysterese-Temperaturwerte
const float T_ein = solltemp - 5;  // Temperatur, bei der der Ofen eingeschaltet wird
const float T_aus = solltemp + 2;  // Temperatur, bei der der Ofen ausgeschaltet wird
float currentTemp = 0.0;  // Aktuelle Temperatur

void setup()
{
  // Serielle Kommunikation starten
  Serial.begin(115200);
  Serial.println(F("Start..."));
  // DHT-Sensor initialisieren
  dht.begin();
  // Relais-Pins konfigurieren
  pinMode(ofenPin1, OUTPUT);
  pinMode(ofenPin2, OUTPUT);
  pinMode(ofenPin3, OUTPUT);
  pinMode(lichtPin, OUTPUT);
  // Relais ausschalten (Relais sind normalerweise LOW aktiv)
  digitalWrite(ofenPin1, LOW);
  digitalWrite(ofenPin2, LOW);
  digitalWrite(ofenPin3, LOW);
  digitalWrite(lichtPin, LOW);
  Serial.println(F("Setup abgeschlossen!"));
}

void loop()
{
  // Temperaturmessung
  currentTemp = dht.readTemperature();
  if (isnan(currentTemp))
  {
    Serial.println("Fehler beim Lesen des Sensors!");
    delay(2000);
    return;
  }
  // Ofensteuerung basierend auf Temperatur
  if (currentTemp < T_ein)
  {
    digitalWrite(ofenPin1, HIGH);  // Ofen einschalten
    digitalWrite(ofenPin2, HIGH);
    digitalWrite(ofenPin3, HIGH);
  }
  else if (currentTemp > T_aus)
  {
    digitalWrite(ofenPin1, LOW);  // Ofen ausschalten
    digitalWrite(ofenPin2, LOW);
    digitalWrite(ofenPin3, LOW);
  }
  // Lichtsteuerung
  digitalWrite(lichtPin, light);
  // Debug-Ausgabe
  debugPrint(500);
}

void debugPrint(const uint32_t intervall)
{
  static uint32_t lastPrint = 0;
  if (millis() - lastPrint > intervall)
  {
    lastPrint = millis();
    Serial.print("Temperatur: ");
    Serial.print(currentTemp);
    Serial.println(" °C");
    Serial.print(F("Relais 1: "));
    Serial.println(digitalRead(ofenPin1) ? "an" : "aus");
  }
}

Auf dem Seriellen Monitor solltest Du aller paar Sekundendenhälften passende Ausgaben bekommen.

Ja das Stimmt

So dann kann das ab da weiter gehen.
Frage: Warum brauchst Du 3 Relais? Sind das 3 Heizungen oder soll da ein 400V-Netz geschalten werden?

Was hättest Du jetzt gerne als nächstes?

Da sind 3 Heitz Ringe

Aehm... Hängt da kein Sensor an PIN 4?

War gerade im Falschen code

Eine Frage wäre es möglich das mit einem anderen Temperatur sensor zu machen?

Ja natürlich.
Du musst Dir einen aussuchen, der a) evtl wasserdicht und b) die obere Grenztemparatur aushält.

Ok Danke

Solltest Du Dich evtl. für einen Platinsensor (PT100 / PT1000) entscheiden, brauchst Du noch eine Zusatzplatine.
Einen DS18x20 gibt es auch in wasserdicht und der braucht nix weiter. (Grenztemperatur 100°C)

Weil wir das Thema Saunasteuerung vor 2 Tagen schon mal hatten:
Welche Sicherheitsschaltungen gibt es in den vorhandenen Saunaheizungen?
Sonst zahlt keine Versicherung bei einer unabgenommenen Steuerung auch nur einen müden Cent, wenn die Bude abbrennt.
Habt Ihr darüber mal nachgedacht?

Gruß Tommy

Ui, ich wusste doch, dass ich das schon mal gelesen hatte....
@felixrein2012 Du solltest Dich mit dem zusammentun.
Ihr benutzt die selbe Hardwarebasis.

Und damit bin ich raus.