Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
2 DHT y 3 relés (ayuda con código)
#1
Saludos y gracias por vuestro tiempo. Estoy estancado con un problema y no sé como solucionarlo, estoy con un proyecto de control de zonas para la calefacción central. En el código de abajo quiero que 2 sensores DHT22 me hagan lecturas, y al seleccionar una temperatura, que se me activen los relés de los radiadores y el de la caldera, ejemplo:

Despacho, lo quiero a 23 grados, al estar a 21 se activa el relé del radiador y el relé de la caldera.
Salón, lo quiero a 22 grados, al estar a 22.5 el relé del radiador no se activa y el relé de la caldera se desactiva.
¿Cómo hago para que el relé de la caldera, mientres haya un radiador en marcha no se desactive?


void loop() {

  if (millis() > anteriorRefreshDatos + 2000){
    anteriorRefreshDatos = millis();
    float tempDespacho = dhtDespacho.readTemperature();
    float tempSalon = dhtSalon.readTemperature();
      if (isnan(tempDespacho) || isnan(tempSalon)){
      Serial.println("Fallo en lectura de temperatura");
      return;}
        if (calderaHabilitada = 1){
          if (tempDespacho + histeresis >= tempDeseadaDespacho && tempDespacho > 0 ) {
            digitalWrite(releDespacho, LOW);
            digitalWrite(releSalon, LOW);
            digitalWrite(releCaldera, LOW);
            }
            if (tempSalon + histeresis >= tempDeseadaSalon && tempSalon > 0 ) {
            digitalWrite(releDespacho, LOW);
            digitalWrite(releSalon, LOW);
            digitalWrite(releCaldera, LOW);
            }
        else if (tempDespacho < tempDeseadaDespacho && tempDespacho > 0 )
        {
        digitalWrite(releDespacho, HIGH);
        digitalWrite(releSalon, HIGH);
        digitalWrite(releCaldera, HIGH);}
        else if (tempSalon < tempDeseadaSalon && tempSalon > 0 )
        {
        digitalWrite(releDespacho, HIGH);
        digitalWrite(releSalon, HIGH);
        digitalWrite(releCaldera, HIGH);}
      else
      {
        digitalWrite(releDespacho, LOW);
        digitalWrite(releSalon, LOW);
        digitalWrite(releCaldera, LOW);
      }

      } 
Citar
#2
Buenas tardes. Estas repitiendo hilos, esto ya te lo he contestado en el otro post que pusiste. El problema, es que creo que no tienes los fundamentos de programación necesarios para que lo hubieses comprendido, puesto que viendo el código, a mi forma de ver, haces cosas que no tienen sentido.

Como ya te dije la vez anterior, ya lo tenias hecho...
Simplemente debes evaluar si alguna de tus valvulas está activa, en caso afirmativo encender caldera. eso se hace con un condicional OR dentro de un "if"

Código:
if (valvula1==encendida || valvula2==encendida)
    arrancar caldera.....
Por supuesto esto es pseudocodigo, tendrás que poner las instrucciones que necesites en tu codigo, pero no tiene ningun tipo de complicacion.... por ejemplo puedes hacerlo leyendo el estado de los pines de los reles, sabes que si el pin de algun relé está en high, significa que necesitas encender la caldera:
Código:
if(digitalRead(releDespacho)==HIGH || digitalRead(releSalon)== HIGH){
digitalWrite(releCaldera, HIGH);
}
else{
digitalWrite(releCaldera,LOW);
}
Citar
#3
Mil gracias por la ayuda, lo estaba haciendo más complicado de lo que realmente es. Funcionando al 100%..

Código:
//------------------------------------------------------------------------------------------------------------
           if (tempDespacho + histeresis >= tempDeseadaDespacho ){
           digitalWrite(releDespacho, LOW);
           digitalWrite(releCaldera, LOW);
           }
             if (tempDespacho < tempDeseadaDespacho ){
               digitalWrite(releDespacho, HIGH);
               digitalWrite(releCaldera, HIGH);
       }
    //--------------------------------------------------------------------------------------------------------------

          if (tempSalon + histeresis >= tempDeseadaSalon ){
           digitalWrite(releSalon, LOW);
           digitalWrite(releCaldera, LOW);
           }
             if (tempSalon < tempDeseadaSalon ){
               digitalWrite(releSalon, HIGH);
               digitalWrite(releCaldera, HIGH);
       }
    //--------------------------------------------------------------------------------------------------------------

          if (tempMatrimonio + histeresis >= tempDeseadaMatrimonio ){
           digitalWrite(releMatrimonio, LOW);
           digitalWrite(releCaldera, LOW);
           }
             if (tempMatrimonio < tempDeseadaMatrimonio ){
               digitalWrite(releMatrimonio, HIGH);
               digitalWrite(releCaldera, HIGH);
       }
    //--------------------------------------------------------------------------------------------------------------

          if (tempInvitados + histeresis >= tempDeseadaInvitados ){
           digitalWrite(releInvitados, LOW);
           digitalWrite(releCaldera, LOW);
           }
             if (tempInvitados < tempDeseadaInvitados ){
               digitalWrite(releInvitados, HIGH);
               digitalWrite(releCaldera, HIGH);
       }
  //------------------------------------------------------------------------------------------------------------------
       if(digitalRead(releDespacho)==HIGH || digitalRead(releSalon)== HIGH || digitalRead(releMatrimonio)== HIGH || digitalRead(releInvitados)== HIGH){
       digitalWrite(releCaldera, HIGH);
       }
       else{
         digitalWrite(releCaldera,LOW);
         }
Citar


Temas similares...
Tema Autor Respuestas Vistas Último mensaje
  Fusionar dos sketch en uno (código arduino) jgarridc 22 4,626 31-12-2018, 07:37 PM
Último mensaje: Surbyte