Sprache auswählen

© Borgmann Aquaponik & Hydroponik
Alle Rechte Vorbehalten
https://borgmann-aquaponik-hydroponik.ch

Viel Erfolg wünschen wir Ihnen!

Aus dem Artikel zu: Überwachung und Steuerung der Umgebung: Temperatur, Luftfeuchte und CO2



// Vereinfachtes Arduino/ESP32 Code-Beispiel für Temperatur/Feuchtigkeitsregler mit BME280
#include <wire.h>
#include <adafruit_sensor.h>
#include <adafruit_bme280.h> // Bibliothek für BME280 Sensor

#define SEALEVELPRESSURE_HPA (1013.25) // Standard Atmosphärendruck

Adafruit_BME280 bme; // I2C

const int exhaustFanRelayPin = 18; // Abluftventilator
const int heaterRelayPin = 19;     // Heizmatte

const float tempHighThreshold = 28.0; // °C, Ventilator AN
const float tempLowThreshold = 26.0;  // °C, Ventilator AUS
const float tempMinThreshold = 20.0;  // °C, Heizmatte AN
const float tempMaxThreshold = 22.0;  // °C, Heizmatte AUS

const float humidityHighThreshold = 75.0; // %RH, Ventilator AN
const float humidityLowThreshold = 70.0;  // %RH, Ventilator AUS

void setup() {
  Serial.begin(115200);
  Serial.println("Starte Umgebungskontrolle.");

  if (!bme.begin(0x76)) { // I2C-Adresse des BME280
    Serial.println("Konnte BME280 nicht finden, überprüfe Verkabelung oder Adresse!");
    while (1);
  }

  pinMode(exhaustFanRelayPin, OUTPUT);
  pinMode(heaterRelayPin, OUTPUT);
  digitalWrite(exhaustFanRelayPin, HIGH); // Ventilator AUS (Relais oft inverted)
  digitalWrite(heaterRelayPin, HIGH);     // Heizung AUS

  delay(100);
}

void loop() {
  float temperature = bme.readTemperature();
  float humidity = bme.readHumidity();

  Serial.printf("Temp: %.2f °C, Hum: %.2f %%\n", temperature, humidity);

  // Temperaturregelung
  if (temperature > tempHighThreshold) {
    if (digitalRead(exhaustFanRelayPin) == HIGH) {
      Serial.println("Temp zu hoch, Ventilator AN.");
      digitalWrite(exhaustFanRelayPin, LOW); // Ventilator AN
    }
    if (digitalRead(heaterRelayPin) == LOW) { // Heizung AUS, wenn Ventilator an ist
      Serial.println("Temp zu hoch, Heizung AUS.");
      digitalWrite(heaterRelayPin, HIGH); // Heizung AUS
    }
  } else if (temperature < tempLowThreshold && temperature > tempMinThreshold) {
    if (digitalRead(exhaustFanRelayPin) == LOW) {
      Serial.println("Temp OK, Ventilator AUS.");
      digitalWrite(exhaustFanRelayPin, HIGH); // Ventilator AUS
    }
  }
  
  if (temperature < tempMinThreshold) {
    if (digitalRead(heaterRelayPin) == HIGH) {
      Serial.println("Temp zu niedrig, Heizung AN.");
      digitalWrite(heaterRelayPin, LOW); // Heizung AN
    }
    if (digitalRead(exhaustFanRelayPin) == LOW) { // Ventilator AUS, wenn Heizung an ist
      Serial.println("Temp zu niedrig, Ventilator AUS.");
      digitalWrite(exhaustFanRelayPin, HIGH); // Ventilator AUS
    }
  } else if (temperature > tempMaxThreshold && temperature < tempHighThreshold) {
    if (digitalRead(heaterRelayPin) == LOW) {
      Serial.println("Temp OK, Heizung AUS.");
      digitalWrite(heaterRelayPin, HIGH); // Heizung AUS
    }
  }

  // Luftfeuchtigkeitsregelung (kann mit Temperaturregelung interagieren, hier vereinfacht)
  if (humidity > humidityHighThreshold) {
    if (digitalRead(exhaustFanRelayPin) == HIGH) {
      Serial.println("Feuchte zu hoch, Ventilator AN.");
      digitalWrite(exhaustFanRelayPin, LOW); // Ventilator AN
    }
  } else if (humidity < humidityLowThreshold) {
    // Hier könnte ein Luftbefeuchter gesteuert werden, wenn nötig.
    // Oder sicherstellen, dass der Ventilator AUS ist, wenn Feuchte OK.
    if (digitalRead(exhaustFanRelayPin) == LOW && temperature < tempHighThreshold) { // Nur ausschalten, wenn Temp es erlaubt
      Serial.println("Feuchte OK, Ventilator AUS (falls nicht wegen Temp an).");
      digitalWrite(exhaustFanRelayPin, HIGH);
    }
  }

  delay(5000); // Alle 5 Sekunden messen
}