Terrariensteuerung mit 3 Sensoren (DHT 11)

Hallo leute,

tolles Forum, viele ideen hierdurch schon bekommen.

will mich kurz vorstellen,

bin Elektroniker in Betriebstechnik und besucher zurzeit die Technikerschule im 3 Jahr.
d.H. elektronik Kenntnisse sind relativ gut. Nur mit so IC’s (außer LM317,Transistoren) usw kenn ich mich nicht so aus.
und sehr Anfänglichen Programmierkenntnissen wobei ich das net so gerallt bekommm. deshalb nur sehr einfach geschriebenes Programm

Nun zum Thema

baue gerade eine Terrariensteuerung .

Hardware:
Netzteil (DC 12V/2A)
Selbstbau Festspannungsregler mit Ausgangsspannung (DC 5V/2A) (7805)
Arduino mega 2560 rev 3
Relaiskarte (DC5V/40mA)- (AC 230V/10A)
3 x Sensor DHT 11 für Feuchtigkeit und Temperatur (DC 5V)
2 einzel angeschlossene Steckdosen (einzel schaltbar)
1 Heizmatte mit 230V/35Watt
1 Pumpe 230V aus der Senseo Maschine (plus Wassereimer,Sprühköpfe usw)

so sieht mein Code aus:

#include "DHT.h"

DHT dht;
DHT dht1;
DHT dht2;

void setup()
{
  pinMode (14, OUTPUT);
  pinMode (20, OUTPUT);


  
  Serial.begin(9600);
  Serial.println();
  Serial.println("Luftfeuchte-links (%)\tTemperatur-links (C)\t""Luftfeuchte-mitte (%)\tTemperatur-mitte (C)\t""Luftfeuchte-rechts (%)\tTemperatur-rechts (C)\t");

 
  dht.setup(8); // daten Pin 8 mit 10Kohm Widerstand 
  dht1.setup(9); // daten Pin 9 mit 10Kohm Widerstand 
  dht2.setup(10);
}

void loop(){ 
  delay(dht.getMinimumSamplingPeriod());(dht1.getMinimumSamplingPeriod());(dht2.getMinimumSamplingPeriod());
  float humidity = dht.getHumidity();
  float temperature = dht.getTemperature();
  float humidity1 = dht1.getHumidity();
  float temperature1 = dht1.getTemperature();
  float humidity2 = dht2.getHumidity();
  float temperature2 = dht2.getTemperature();
  Serial.print("\t");

  Serial.print("\t");
  Serial.print(humidity, 1);
  Serial.print("\t\%\t"); 
  Serial.print(temperature, 1);
  Serial.print("\t\C\t\t\t");
  Serial.print(humidity1, 1);
  Serial.print("\t\%\t");
  Serial.print(temperature1, 1);
  Serial.print("\t\C\t\t\t");
  Serial.print(humidity2, 1);
  Serial.print("\t\%\t");
  Serial.print(temperature2, 1);
  Serial.println("\t\C\t");
 
 

  if (dht.getTemperature () <= 27) {      //wenn temperatur unter 28°
                  digitalWrite(14, LOW);  //heizmatte an
                  
  }
  else{                                   //wenn nicht dann
                  digitalWrite(14, HIGH); //heizmatte aus
                  
  
  }
  if (dht.getHumidity () <= 70) {         //wenn Luftfeuchte unter 70%
                  digitalWrite(20, LOW);   //Pumpe an
                  
  }
   else{                                  //wenn nicht dann
                  digitalWrite(20, HIGH);}// Pumpe aus 
                  
                  
                  
   if (dht1.getTemperature () <= 27) {    //wenn temperatur unter 27°
                  digitalWrite(14, LOW);  //heizmatte an
                  
  }
  else{                                   //wenn nicht dann
                  digitalWrite(14, HIGH); //heizmatte aus
                  
  
  }
  if (dht1.getHumidity () <=70) {         //wenn Luftfeuchte unter 70%
                  digitalWrite(20, LOW);  //Pumpe an
                  
  }
   else{                                  //wenn nicht dann
                  digitalWrite(20, HIGH);}// Pumpe aus 
                  
                  
   if (dht2.getTemperature () <=27) {     //wenn temperatur unter 26°
                  digitalWrite(14, LOW);  //heizmatte an
                  
  }
  else{                                   //wenn nicht dann
                  digitalWrite(14, HIGH); //heizmatte aus
                  
  
  }
  if (dht2.getHumidity () <=70) {         //wenn Luftfeuchte unter 70%
                  digitalWrite(20, LOW);  //Pumpe an
                  
  }
   else{                                   //wenn nicht dann
                  digitalWrite(20, HIGH);} // Pumpe aus 
                  
}

mein Problem ist, dass bei einer Temperatur von unter 28° bei dht2 geschalten wird, aber nur bei diesem
dht und dht1 sind quasi ohne schaltfunktion, und ich will verschiedene Temperaturzonen überwachen mit verschiedenen Temperaturen und verschiedener Luftfeuchte

Terrariensteuerung die 10.?

Wo ist nun genau dein Problem? Schau dir verschachtelte Bedingungen an, damit sollte das gelöst werden.

// Pseudo Code

if(dht2 < 28) {/* mache nur hier was und alles andere nicht*/}
else {
if(dht1) //....
if(dht3) //....

}

ist logisch.

if (dht.getTemperature () <= 27) {      //wenn temperatur unter 28°
                  digitalWrite(14, LOW);  //heizmatte an                  
  }
  else{                                   //wenn nicht dann
                  digitalWrite(14, HIGH); //heizmatte aus
 ...    
   if (dht1.getTemperature () <= 27) {    //wenn temperatur unter 27°
                  digitalWrite(14, LOW);  //heizmatte an                  
  }
  else{                                   //wenn nicht dann
                  digitalWrite(14, HIGH); //heizmatte aus   
   }
     
   if (dht2.getTemperature () <=27) {     //wenn temperatur unter 26°
                  digitalWrite(14, LOW);  //heizmatte an
  }
  else{                                   //wenn nicht dann
                  digitalWrite(14, HIGH); //heizmatte aus

Die letzte Kontrolle überschreibt die vorhergehenden

 if (dht.getTemperature () <=27 || dht1.getTemperature () <=27 || dht2.getTemperature () <=27) {     //wenn temperatur unter 26°
 digitalWrite(14, LOW);  //heizmatte an
  }
  else{                                   //wenn nicht dann
                  digitalWrite(14, HIGH); //heizmatte aus
}

funktioniert besser
Grüße Uwe