La boucle de chauffage et la boucle d'humidification de mon enceinte d'essai se battent sans cesse
Traduit de English par IA ·
Projet de fin d’études, petite enceinte climatique (environ 0,5 m3). Deux boucles sur un même ESP32 : un PID sur la température de l’air qui pilote un chauffage de 150 W via un SSR, et un humidificateur tout ou rien (ultrasonique, brouillard dans l’enceinte) sur l’humidité relative. Consignes à 25 °C et 60 %HR.Chaque boucle se comporte correctement seule. Ensemble, elles oscillent avec une période d’environ 6 minutes : le chauffage fait monter la température, l’HR baisse, l’humidificateur se déclenche, le brouillard refroidit l’air, le PID force davantage, l’HR rechute… Mon encadrant dit que les boucles sont couplées et qu’il faut les « découpler », mais n’a pas expliqué comment, et je voudrais aussi comprendre pourquoi.Toutes les données sont envoyées à Hermetry (temp_c, rh, heater_pct, humid_on) toutes les 5 s. J’ai deux graphiques sur le tableau de bord, un pour la température et un pour l’HR, mais il est difficile de voir ce qui précède quoi lorsqu’ils sont sur des cartes séparées.
Final year project, small climate chamber (about 0.5 m3). Two loops on one ESP32: a PID on air temperature driving a 150 W heater through an SSR, and an on/off humidifier (ultrasonic, mist into the chamber) on relative humidity. Setpoints 25 C and 60 %RH.
Each loop on its own behaves. Together, they oscillate with a period of about 6 minutes: heater pushes temp up, RH drops, humidifier kicks in, the mist cools the air, the PID pushes harder, RH drops again… my supervisor says the loops are coupled and to « decouple them » but didn’t say how, and I’d also like to understand why.
Everything goes to Hermetry (temp_c, rh, heater_pct, humid_on) once every 5 s. I have two charts on the board, one for temperature and one for RH, but it’s hard to see what leads what when they’re on separate cards.
Traduit de English par IA ·
Pourriez-vous faire fonctionner l’humidificateur uniquement lorsque le chauffage est éteint ? En quelque sorte, un partage du temps entre les deux.
Could you run the humidifier only when the heater is off? Like time-slice them.
Traduit de English par IA ·
J’ai essayé cela, la température chute à chaque fois que le chauffage attend, et c’est pire.
I tried that, the temperature sags every time the heater waits and it’s worse.
Traduit de English par IA ·
Pour la partie visualisation : place les quatre clés sur un seul graphique en courbes, rh et les pourcentages sur l’axe de droite. La relation de phase saute aux yeux dès qu’elles partagent un axe temporel.
For the seeing part: put all four keys on one line chart, rh and the percentages on the right axis. The phase relationship jumps out once they share a time axis.
Traduit de English par IA ·
Activez aussi Values dans la légende (min/max) afin de pouvoir lire l’amplitude des oscillations pendant le réglage.
And turn on Values in the legend (min/max) so you can read the swing amplitude off it while you tune.
Traduit de English par IA ·
J’ai passé des années à analyser des données de chaîne du froid présentant exactement ce schéma. Une partie de votre couplage se trouve dans la grandeur mesurée elle-même, car l’HR dépend de la température. Chaque fois que le chauffage élève la température de l’air de 1 C, l’HR à teneur en humidité constante baisse d’environ 3 à 4 points ; votre boucle d’humidité réagit donc au chauffage, même si aucune eau n’a quitté l’air.Deux modifications qui règlent généralement le problème :1. Régulez une grandeur d’humidité qui ne varie pas avec la température : l’humidité absolue (g/m3) ou le point de rosée. Calculez-la sur l’ESP32 à partir de la température et de l’HR (formule de Magnus) et pilotez l’humidificateur sur cette valeur. À consigne de température fixe, 60 %HR à 25 C correspondent à environ 13,8 g/m3 : cela deviendra votre consigne.2. Séparez les vitesses. Gardez la boucle de température rapide et rendez la boucle d’humidité au moins 5 fois plus lente (un temps minimum de marche et d’arrêt pour l’humidificateur, par exemple 60 s chacun, et une bande morte d’environ 0,5 g/m3). Ainsi, la boucle de température absorbe le refroidissement dû à la brume avant que la boucle d’humidité ne prenne une décision.Pour la carte, le graphique de Megan est le bon. Dans les lignes Series du graphique en courbes, réglez rh et humid_on sur Value axis Right, ajoutez une ligne de seuil à vos consignes et envoyez abs_hum comme cinquième clé pour suivre la nouvelle boucle. Les réglages des graphiques se trouvent dans Chart cards.
I spent years staring at cold chain data with exactly this pattern. Part of your coupling sits in the measured variable itself, because RH depends on temperature. Every time the heater raises the air temperature by 1 C, RH at that moisture content drops by roughly 3 to 4 points, so your humidity loop reacts to the heater even when no water has left the air.
Two changes that usually settle it:
1. Control a humidity measure that doesn’t move with temperature: absolute humidity (g/m3) or dew point. Compute it on the ESP32 from temp and RH (Magnus formula) and run the humidifier on that. At a fixed temp setpoint, 60 %RH at 25 C is about 13.8 g/m3, so that becomes your setpoint.
2. Separate the speeds. Keep the temperature loop fast and make the humidity loop at least 5 times slower (a minimum on time and off time for the humidifier, say 60 s each, and a deadband of about 0.5 g/m3). Then the temperature loop absorbs the mist’s cooling before the humidity loop decides anything.
For the board, Megan’s chart is the right one. In the line chart’s Series rows set rh and humid_on to Value axis Right, add a threshold line at your setpoints, and send abs_hum as a fifth key so you can watch the new loop. Chart settings are on Chart cards.
Traduit de English par IA ·
J’ai passé l’humidificateur en humidité absolue avec une durée minimale de marche/arrêt de 60 s, et c’est stable depuis 3 heures : température à 0,3 C près, HR à 2 % près. Avec tout sur un même graphique, j’ai aussi pu voir la brume faire monter la température environ 20 s après le passage de humid_on à 1, ce qui est directement allé dans le rapport. Mon superviseur veut bien sûr la version point de rosée ensuite.
Switched the humidifier to absolute humidity with a 60 s minimum on/off and it’s been flat for 3 hours: temp within 0.3 C, RH within 2 %. With everything on one chart I could also see the mist hit the temperature about 20 s after humid_on went to 1, which went straight into the report. My supervisor wants the dew point version next, of course.
- Vous devez être connecté pour répondre à ce sujet.
Rejoignez la discussion
Connectez-vous pour poser et répondre à des questions, aimer les messages utiles et marquer la réponse qui a résolu votre problème. Chaque contribution rapporte des points et des niveaux.

