This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

  • 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);
      }

      } 
  Responder
#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);
}
  Responder
#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);
         }
  Responder


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
  CONSULTA tengo un problema con el codigo de programacion de mi arduino Gabo2801 2 1,630 15-07-2021, 04:14 PM
Último mensaje: AlejoMijares
  Fusionar dos sketch en uno (código arduino) jgarridc 22 10,986 31-12-2018, 07:37 PM
Último mensaje: Surbyte