Note de ce sujet :
  • Moyenne : 5 (1 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
condition d'hystérésis sur la température
#1
Bonsoir André et Bonsoir à tous,

J'ai eu besoin d'une hystérésis sur la condition de température et je propose cette solution :

J'avais déjà rajouté une hystérésis sur des versions 6.xx mais voici la solution que je viens d'implanter sur la version 12.06

Le principe :
pour déclencher une hystérésis je programme par exemple une condition de température  >= 20° ET une condition de température <= 18° dans la page Actions.
Evidemment dans l'état actuel du code cela produit un résultat qui est toujours faux car la température ne pourra jamais être en même temps <= 18° ET >= 20°
Par contre après ajout des lignes de code suivantes, celui-ci détecte cette condition et bascule en mode hystérésis dont la valeur est dans cet exemple 20° - 18° = 2°

voici le code :

dans le fichier Actions.h
ajouter à la ligne 62 : 

int Tseuil = 2000; 

dans le fichier Actions.cpp
modifier le code comme suit à partir de la ligne 185

      /*

      if (Temperature > -100) {
        if (Tinf[i] <= 1000 && int(Temperature * 10.0) > Tinf[i]) { ConditionsOk = false; }
        if (Tsup[i] <= 1000 && int(Temperature * 10.0) < Tsup[i]) { ConditionsOk = false; }
      }
      */
     
      if (Temperature > -100) {     
              if (Tinf[i] <= 1000 && Tsup[i] <= 1000 && Tinf[i] < Tsup[i]) { // on applique une hystérésis dont les valeurs sont Tinf et Tsup
               
                if (Temperature * 10.0 > Tinf[i] && Temperature * 10.0 > Tsup[i]) Tseuil = Tinf[i];
               
                if (Temperature * 10.0 < Tinf[i] && Temperature  * 10.0 < Tsup[i]) Tseuil = Tsup[i];
                     
                if (Temperature * 10.0 > Tseuil) { ConditionsOk = false; }
              }
              else {
                if (Tinf[i] <= 1000 && int(Temperature * 10.0) > Tinf[i]) { ConditionsOk = false; }
                if (Tsup[i] <= 1000 && int(Temperature * 10.0) < Tsup[i]) { ConditionsOk = false; }
              }
      }

J'ai laissé en commentaire le code d'origine.

Voilà c'est tout ce qu'il y a à faire.

Si André pense que c'est utile il pourra peut-être rajouter cette hystérésis sur la température dans la version 13

Cdlt F6AAM Jean-Claude
Routeur Solaire V12.6 Modifié pour 2 modules JSY-194-MT (affichage puissances onduleurs)
Ballon 1800W commandé par Triac + relais fil pilote mode ECO radiateurs
1 ESP32 déporté pour mesure température extérieure.
1 onduleur SMA 1050Wc - 1 onduleur SOLAX Hybride 6200Wc - 2 Batteries de 5.8 kWh 
 

Répondre
#2
+1 , tu aurais dû mettre le sujet Amelioration en haut du site

Je suis assez d'accord, c'est intéressant
Répondre
#3
Bonne idée Jean-Claude. Je l'intègre dans la version 13.

Cdlt
André
Répondre
#4
(04-11-2024, 09:08 PM)F6AAM a écrit : Bonsoir André et Bonsoir à tous,

J'ai eu besoin d'une hystérésis sur la condition de température et je propose cette solution :

J'avais déjà rajouté une hystérésis sur des versions 6.xx mais voici la solution que je viens d'implanter sur la version 12.06

Le principe :
pour déclencher une hystérésis je programme par exemple une condition de température  >= 20° ET une condition de température <= 18° dans la page Actions.
Evidemment dans l'état actuel du code cela produit un résultat qui est toujours faux car la température ne pourra jamais être en même temps <= 18° ET >= 20°
Par contre après ajout des lignes de code suivantes, celui-ci détecte cette condition et bascule en mode hystérésis dont la valeur est dans cet exemple 20° - 18° = 2°

voici le code :

dans le fichier Actions.h
ajouter à la ligne 62 : 

int Tseuil = 2000; 

dans le fichier Actions.cpp
modifier le code comme suit à partir de la ligne 185

      /*

      if (Temperature > -100) {
        if (Tinf[i] <= 1000 && int(Temperature * 10.0) > Tinf[i]) { ConditionsOk = false; }
        if (Tsup[i] <= 1000 && int(Temperature * 10.0) < Tsup[i]) { ConditionsOk = false; }
      }
      */
     
      if (Temperature > -100) {     
              if (Tinf[i] <= 1000 && Tsup[i] <= 1000 && Tinf[i] < Tsup[i]) { // on applique une hystérésis dont les valeurs sont Tinf et Tsup
               
                if (Temperature * 10.0 > Tinf[i] && Temperature * 10.0 > Tsup[i]) Tseuil = Tinf[i];
               
                if (Temperature * 10.0 < Tinf[i] && Temperature  * 10.0 < Tsup[i]) Tseuil = Tsup[i];
                     
                if (Temperature * 10.0 > Tseuil) { ConditionsOk = false; }
              }
              else {
                if (Tinf[i] <= 1000 && int(Temperature * 10.0) > Tinf[i]) { ConditionsOk = false; }
                if (Tsup[i] <= 1000 && int(Temperature * 10.0) < Tsup[i]) { ConditionsOk = false; }
              }
      }

J'ai laissé en commentaire le code d'origine.

Voilà c'est tout ce qu'il y a à faire.

Si André pense que c'est utile il pourra peut-être rajouter cette hystérésis sur la température dans la version 13

Cdlt F6AAM Jean-Claude

Bonsoir JC. 
Est-ce que ce code fonctionne sur la version 8.07 ? Jusqu’à présent je ne fonctionnais qu’avec le triac direct vers le CE mais j’ai augmenté ma prod solaire et j’ai fait des modifs.  J’ai installé le triac en série avec 4 ssr dont un vers le CE et les autres vers des radiateurs. Mon idée c’est de stopper le ssr du CE lorsqu’il est dans une plage de T°. Lorsque le CE a atteint la T° maxi par exemple 59 (sans utiliser le thermostat mécanique qui est à 62°) j’envoie le triac vers un des radiateurs selon une programmation mais sans que le CE soit de nouveau alimenté (effet yoyo). J’ai essayé avec la page actions de programmer une tranche de T° afin que entre 50 et 59° le CE ne soit pas alimenté et que le triac envoie dans les radiateurs selon des créneaux horaires mais la page action ne semble pas faite pour ça ou bien Je n’ai pas réussi à trouver la bonne combinaison, merci d’avance.
Marcos
Répondre
#5
(19-11-2024, 10:16 PM)marcos83 a écrit :
(04-11-2024, 09:08 PM)F6AAM a écrit : Bonsoir André et Bonsoir à tous,

J'ai eu besoin d'une hystérésis sur la condition de température et je propose cette solution :

J'avais déjà rajouté une hystérésis sur des versions 6.xx mais voici la solution que je viens d'implanter sur la version 12.06

Le principe :
pour déclencher une hystérésis je programme par exemple une condition de température  >= 20° ET une condition de température <= 18° dans la page Actions.
Evidemment dans l'état actuel du code cela produit un résultat qui est toujours faux car la température ne pourra jamais être en même temps <= 18° ET >= 20°
Par contre après ajout des lignes de code suivantes, celui-ci détecte cette condition et bascule en mode hystérésis dont la valeur est dans cet exemple 20° - 18° = 2°

voici le code :

dans le fichier Actions.h
ajouter à la ligne 62 : 

int Tseuil = 2000; 

dans le fichier Actions.cpp
modifier le code comme suit à partir de la ligne 185

      /*

      if (Temperature > -100) {
        if (Tinf[i] <= 1000 && int(Temperature * 10.0) > Tinf[i]) { ConditionsOk = false; }
        if (Tsup[i] <= 1000 && int(Temperature * 10.0) < Tsup[i]) { ConditionsOk = false; }
      }
      */
     
      if (Temperature > -100) {     
              if (Tinf[i] <= 1000 && Tsup[i] <= 1000 && Tinf[i] < Tsup[i]) { // on applique une hystérésis dont les valeurs sont Tinf et Tsup
               
                if (Temperature * 10.0 > Tinf[i] && Temperature * 10.0 > Tsup[i]) Tseuil = Tinf[i];
               
                if (Temperature * 10.0 < Tinf[i] && Temperature  * 10.0 < Tsup[i]) Tseuil = Tsup[i];
                     
                if (Temperature * 10.0 > Tseuil) { ConditionsOk = false; }
              }
              else {
                if (Tinf[i] <= 1000 && int(Temperature * 10.0) > Tinf[i]) { ConditionsOk = false; }
                if (Tsup[i] <= 1000 && int(Temperature * 10.0) < Tsup[i]) { ConditionsOk = false; }
              }
      }

J'ai laissé en commentaire le code d'origine.

Voilà c'est tout ce qu'il y a à faire.

Si André pense que c'est utile il pourra peut-être rajouter cette hystérésis sur la température dans la version 13

Cdlt F6AAM Jean-Claude

Bonsoir JC. 
Est-ce que ce code fonctionne sur la version 8.07 ? Jusqu’à présent je ne fonctionnais qu’avec le triac direct vers le CE mais j’ai augmenté ma prod solaire et j’ai fait des modifs.  J’ai installé le triac en série avec 4 ssr dont un vers le CE et les autres vers des radiateurs. Mon idée c’est de stopper le ssr du CE lorsqu’il est dans une plage de T°. Lorsque le CE a atteint la T° maxi par exemple 59 (sans utiliser le thermostat mécanique qui est à 62°) j’envoie le triac vers un des radiateurs selon une programmation mais sans que le CE soit de nouveau alimenté (effet yoyo). J’ai essayé avec la page actions de programmer une tranche de T° afin que entre 50 et 59° le CE ne soit pas alimenté et que le triac envoie dans les radiateurs selon des créneaux horaires mais la page action ne semble pas faite pour ça ou bien Je n’ai pas réussi à trouver la bonne combinaison, merci d’avance.
Marcos

Bonjour Marcos, je vous réponds ce soir !
Routeur Solaire V12.6 Modifié pour 2 modules JSY-194-MT (affichage puissances onduleurs)
Ballon 1800W commandé par Triac + relais fil pilote mode ECO radiateurs
1 ESP32 déporté pour mesure température extérieure.
1 onduleur SMA 1050Wc - 1 onduleur SOLAX Hybride 6200Wc - 2 Batteries de 5.8 kWh 
 

Répondre
#6
réponse à Marcos29 :

Pour toutes les raisons qui suivent, je vous conseille de passer à la version 12.06.

1- La version 8.07 ne fonctionnera pas avec la modification du code source que je propose pour ajouter une hystérésis sur la température.

2- Je ne suis pas certain que la version 8.07 accepte de commander un relais avec une condition sur la température du CE.

3- Pour commander un Radiateur électrique ou un CE en mode de régulation il faut impérativement que le CE ou le radiateur soit constitué d'une simple résistance et d'un dispositif de sécurité (thermostat) qui coupe le circuit si la température atteint un maximum admissible.
j'entends par mode de régulation les modes découpe sinus pour le triac et les modes multi sinus ou train de sinus pour triac ou relais SSR.

Si le radiateur que vous voulez commander intègre une carte électronique, le seul mode possible sera le mode ON/OFF pour alimenter le radiateur ou envoyer le secteur sur le fil pilote pour réduire sa consigne de température de chauffage.

4- Exemple pour un CE commandé par le triac et un Radiateur électrique avec carte électronique :

Branchement électrique

Le CE doit être branché uniquement en série avec le triac comme vous le faisiez auparavant.

Le radiateur doit être branché uniquement en série avec un SSR refroidi lui-même par un dissipateur de chaleur (la commande du SSR étant branchée sur la sortie GPIO17 par exemple).

Programmation de la page Actions :

Routage via triac :  canal de Température : la sonde DS18B20 qui est collée sur la paroi interne du CE

mode découpe sinus ou multi sinus; PW=0100%T<= 59° pour reprendre votre exemple.

Routage via relais : canal de Température : la sonde DS18B20 qui est collée sur la paroi interne du CE

 mode ON/OFFT >= 59.2°

Note : l'hystérésis que je propose ne servira pas à grand chose dans ce cas car la température du CE ne variera pas rapidement dû à sa grande inertie. Elle continue à monter même quand le triac est coupé !
il n'y aura donc pas d'effet yoyo.

Bien cordialement

Jean-Claude F6AAM
Routeur Solaire V12.6 Modifié pour 2 modules JSY-194-MT (affichage puissances onduleurs)
Ballon 1800W commandé par Triac + relais fil pilote mode ECO radiateurs
1 ESP32 déporté pour mesure température extérieure.
1 onduleur SMA 1050Wc - 1 onduleur SOLAX Hybride 6200Wc - 2 Batteries de 5.8 kWh 
 

Répondre
#7
(20-11-2024, 06:21 PM)F6AAM a écrit : réponse à Marcos29 :

Pour toutes les raisons qui suivent, je vous conseille de passer à la version 12.06.

1- La version 8.07 ne fonctionnera pas avec la modification du code source que je propose pour ajouter une hystérésis sur la température.

2- Je ne suis pas certain que la version 8.07 accepte de commander un relais avec une condition sur la température du CE.

3- Pour commander un Radiateur électrique ou un CE en mode de régulation il faut impérativement que le CE ou le radiateur soit constitué d'une simple résistance et d'un dispositif de sécurité (thermostat) qui coupe le circuit si la température atteint un maximum admissible.
j'entends par mode de régulation les modes découpe sinus pour le triac et les modes multi sinus ou train de sinus pour triac ou relais SSR.

Si le radiateur que vous voulez commander intègre une carte électronique, le seul mode possible sera le mode ON/OFF pour alimenter le radiateur ou envoyer le secteur sur le fil pilote pour réduire sa consigne de température de chauffage.

4- Exemple pour un CE commandé par le triac et un Radiateur électrique avec carte électronique :

Branchement électrique

Le CE doit être branché uniquement en série avec le triac comme vous le faisiez auparavant.

Le radiateur doit être branché uniquement en série avec un SSR refroidi lui-même par un dissipateur de chaleur (la commande du SSR étant branchée sur la sortie GPIO17 par exemple).

Programmation de la page Actions :

Routage via triac :  canal de Température : la sonde DS18B20 qui est collée sur la paroi interne du CE

mode découpe sinus ou multi sinus; PW=0100%T<= 59° pour reprendre votre exemple.

Routage via relais : canal de Température : la sonde DS18B20 qui est collée sur la paroi interne du CE

 mode ON/OFFT >= 59.2°

Note : l'hystérésis que je propose ne servira pas à grand chose dans ce cas car la température du CE ne variera pas rapidement dû à sa grande inertie. Elle continue à monter même quand le triac est coupé !
il n'y aura donc pas d'effet yoyo.

Bien cordialement

Jean-Claude F6AAM

Bonsoir JC et merci pour toutes ces explications. J'avais déjà testé ces options mais ça ne me convenait pas. Je suis resté un peu nostalgique des anciennes versions "light" et faciles à modifier pour mon utilisation (j'ai commencé avec la V2... d'André) . Bon bah je vais passé à la dernière version et utiliser votre code. Encore merci.
Bien à vous,
Marcos.

Ah oui, j'ai oublié de préciser que je code l'ESP toujours sur la V2 de l'IDE et que je ne pourrais pas modifier le code pour le compiler ensuite. Je vais donc devoir attendre que André sorte la version avec cette modif. et faire la mise à jour depuis chrome.
Répondre
#8
(20-11-2024, 06:40 PM)marcos83 a écrit : Bonsoir JC et merci pour toutes ces explications. J'avais déjà testé ces options mais ça ne me convenait pas. Je suis resté un peu nostalgique des anciennes versions "light" et faciles à modifier pour mon utilisation (j'ai commencé avec la V2... d'André) . Bon bah je vais passé à la dernière version et utiliser votre code. Encore merci.
Bien à vous,
Marcos.

Ah oui, j'ai oublié de préciser que je code l'ESP toujours sur la V2 de l'IDE et que je ne pourrais pas modifier le code pour le compiler ensuite. Je vais donc devoir attendre que André sorte la version avec cette modif. et faire la mise à jour depuis chrome.

Vous n'avez absolument pas besoin de ma modif (hystérésis ) pour réaliser ce que j'ai décrit plus haut.
Donc pas nécessaire de recompiler avec l'IDE arduino, il vous suffit de suivre la procédure rapide de téléchargement de la version 12.06 décrite par André dans le lien suivant :
https://f1atb.fr/fr/routeur-photovoltaiq...-logiciel/
Cdlt,
Jean-Claude
Routeur Solaire V12.6 Modifié pour 2 modules JSY-194-MT (affichage puissances onduleurs)
Ballon 1800W commandé par Triac + relais fil pilote mode ECO radiateurs
1 ESP32 déporté pour mesure température extérieure.
1 onduleur SMA 1050Wc - 1 onduleur SOLAX Hybride 6200Wc - 2 Batteries de 5.8 kWh 
 

Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)