Control de calefacción central con radiadores. (Heating control NODEMCU)

Muchas gracias por tu tiempo :wink:

""Vamos por partes, primero tienes que saber que necesitas una temperatura de activar el rele y en esa misma otra que lo mantenga durante un tiempo, para que suba ciertos grados, sino estara siempre activandose y desactivandose todo el rato, al no lograr un margen.""

--Sí, para ello tengo programada la histéresis, de esas forma los relés no están siempre en ON/OFF.

HISTÉRESIS

if (tempDespacho + histeresis >= tempDeseadaDespacho && tempDespacho > 0 )

El problema no es hacer lecturas de los relés, eso lo tengo conseguido, el problema es conseguir que el relé de la caldera se encienda solamente cuando hay un radiador pidiendo calor, y que cuando no haya ningún radiador pidiendo calor, el relé de la caldera se desconecte.

Las temperaturas que he puesto antes son informativas, los rangos en cada uno de los sensores van entre los 21 y los 26 grados y los gestiono con "tempDeseadaDespacho", "tempDeseadaSalon", "tempDeseadaMatrimonio", "tempDeseadaInvitados".

Realmente son 4 zonas las que voy a usar, pero en la ayuda he puesto solamente 2 para que fuera más fácil el ejemplo.

He probado con algo así, sólo con la zona del despacho, pero si hago eso mismo con las 4 zonas al final no me funciona correctamente:

if (calderaHabilitada = 1){
          if (tempDespacho + histeresis >= tempDeseadaDespacho && tempDespacho > 0) { 
          digitalWrite(releCaldera, LOW);
          digitalWrite(releDespacho, LOW);
        } else  {
          (tempDespacho < tempDeseadaDespacho && tempDespacho > 0);
        }
        digitalWrite(releDespacho, HIGH);
        digitalWrite(releCaldera, HIGH);
          } else { digitalWrite(releDespacho, LOW);
      }

Lo que pretendo es lo siguiente, ejemplo:

  • Quiero despacho a, por ejemplo 23 grados, al estar a 21 se activa el relé del radiador y el de la caldera.
  • Quiero el Salon a, por ejemplo 24 grados, al estar a 20 se activa el relé del radiador y el de la caldera.
  • Quiero Matrimonio, por ejemplo a 21 grados, al estar a 22 grados no se activa el relé, y manda orden de desconectar el relé de la caldera.
  • Quiero Invitados a 22 grados, como está a 23 grados no hace nada.

El problema me viene para poder mover cada uno de los relés de los radiadores y que a su vez me active la caldera, siempre que haya un relé de un radiador activo. Cuando todos los radiadores estén desactivados, que el relé de la caldera se desconecte.

Te dejo un ejemplo que he estado usando para gestionar un sólo relé, cuando tenía la instalación mas sencilla en casa, solamente usando un sensor de temperatura y un relé:

if (millis() > anteriorRefreshDatos + 20000){
    anteriorRefreshDatos = millis();
    float temp = dht.readTemperature();
    float humi = dht.readHumidity();
      if (isnan(temp) || isnan(humi)){ 
      Serial.println("Fallo en lectura de temperatura y humedad");
      return;}
        if (calderaHabilitada = 1){
          if (temp + histeresis >= tempDeseada && temp > 0)  digitalWrite(releCaldera, LOW);
        else if (temp < tempDeseada && temp > 0) digitalWrite(releCaldera, HIGH);
      else digitalWrite(releCaldera, LOW); 
      }

Lo que pretendo es conseguir lo de arriba, pero con 4 DHT22 y 5 relés, uno por cada zona y el de la caldera. La parte lógica se me escapa.

Gracias por tu tiempo.