Contrôle d'un relais en fonction de températures

Bonsoir,

Je me permet de réaliser ce post car je suis un peu bloqué, et je penses que je trouverais mon bonheur ici.

Je m'explique sans tarder :

J'aimerais réaliser une sorte de thermostat avec un esp32. Je contrôle avec ce dernier, des relais SSR. Dont un particulièrement qui est relié à un chauffage électrique.
En gros j'aimerais que le relais soit non-alimenté lorsque la température passe au dessus d'une température max donnée, et qu'il soit alimenté lorsque la température passe en dessous d'une température min donnée. J'utilise une sonde SHT35 comme capteur de température.

J'ai donc naturellement procédé comme ceci dans la partie "loop" :

sht.read();
    if (sht.getTemperature() < temperatureMini) {
        digitalWrite(CHAUFFAGE_PIN, HIGH);
    }else{
      if (sht.getTemperature() > temperatureMaxi) {
        digitalWrite(CHAUFFAGE_PIN, LOW);
      }     
    }

Les variables temperatureMini et temperatureMaxi sont généré comme ceci :
Je prends en compte la "température voulue", ainsi qu'une valeur de "tolérence".
Ce qui donne temperatureMini = temperatureVoulue-valeurDeTolerance et temperatureMaxi = temperatureVoulue+valeurDeTolerance

Le problème c'est que ça ne vas pas... Là par exemple avec une température actuelle de 20 (degrés), un température voulue de 19, et une tolérance de 3; le programme essaie de chauffer alors qu'en fin de compte il es sensé ne pas essayer de chauffer..
Par contre lorsque la température est dépassée, il coupe bel et bien le chauffage...
Je penses que c'est juste une erreur de code qui obéit juste a ce que je lui ai dit, mais que je lui ai mal dis de toute évidence...

En attente d'une réponse,
je vous remercies d'avance de vous être arrêté sur mon post :slight_smile:

Cordialement.

Bonsoir

toujours donner ici un code complet !!

Bonjour,

Le problème n'est pas dans le bout de code que tu nous montres.
Pour debugger ajoute des Serial.print() pour afficher les valeurs de sht.getTemperature(), temperatureMini et temperatureMaxi.
Comme le dit @al1fch mets le code en entier.

Bonsoir,

Voici donc le code "entier", j'ai en réalité viré tout ce qui n'étais aucunement lié, pour plus de clarté.

#include "Wire.h"
#include "SHT31.h"

#define CHAUFFAGE_PIN 5

SHT31 sht; //C'est écrit sht31 mais ca fonctionne aussi pour sht35

int temperatureVoulue = 25;
int valeurDeTolerance = 2;
int temperatureMax;
int temperatureMin;

void setMINandMAXtemp(void){
    temperatureMax = temperatureVoulue+valeurDeTolerance;
    temperatureMin = temperatureVoulue-valeurDeTolerance;
}

void setup(void) {
  Wire.begin();
  sht.begin(0x44);
  Wire.setClock(100000);
  pinMode(CHAUFFAGE_PIN, OUTPUT);
  setMINandMAXtemp();
}

void loop(void) {   
    sht.read();
    if (sht.getTemperature() < temperatureMin) {
        digitalWrite(CHAUFFAGE_PIN, HIGH);
    }else{
    if (sht.getTemperature() > temperatureMax){
        digitalWrite(CHAUFFAGE_PIN, LOW);
    }     
    }

  delay(500);
}

Pour le debug, ça risque d'être compliqué étant donné que l'esp32 est dans un boitier et que mon câble est super court, mais je peux à la limite m'arranger pour trouver un câble plus long.

Merci,
Cordialement.

Si tu ne peux pas debugger en ayant un relever de tes variables, des cas pas très logique sont plus compliqués.
Du coup tu n'a pas testé la validité de ton programme avant de le mettre en production?

Est tu sûre que ta broche est à LOW lorsque tu rentre dans loop ?

Bonjour,

Et merci pour votre réponse :slight_smile:

Alors oui effectivement ça risque d'être compliqué mais je vais essayer de trouver un câble assez long dans les jours à venir, j'ai cependant pu m'assurer que la broche soit LOW lorsque je rentre dans loop en mettant ceci dans setup :

digitalWrite(CHAUFFAGE_PIN, LOW);

Là ça a l'air de fonctionner, mais je ferais plusieurs test prochainement pour m'assurer du bon fonctionnement.

En attendant je vous remercies, et vous tiens au courant dès que possible !

Cordialement.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.