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
}
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?
Ui, ich wusste doch, dass ich das schon mal gelesen hatte.... @felixrein2012 Du solltest Dich mit dem zusammentun.
Ihr benutzt die selbe Hardwarebasis.