Archives octobre 2022

Thermostat intelligent (ESP32)

Les thermostats classiques permettent de programmer des plages horaires pendant lesquelles le chauffage est en route. Par exemple, on peut définir un démarrage à 6h pour que la pièce soit chaud à 7h. Malheureusement, en fonction de la température extérieure, parfois il fera chaud à 6h30, et parfois il fera chaud à 7h30.

Ce thermostat permet d'adapter l'heure de démarrage en fonction de la vitesse de chauffe. On définit ainsi des horaires de présence au lieux de définir des horaires de chauffe.

Courbe de chauffe chaudière.

Par exemple, si la vitesse de chauffe est de 2°C par heure et qu'il fait 18°C. Il suffira de chauffer à 6h30 pour qu'il fasse 19°C à 7h. J'appelle cette vitesse pente, elle est exprimée en °C / h et est mise à jour à chaque chauffe.

Matériel

Je n'ai pas fait grand chose de ce côté là. Vincent m'a prêté le matériel et a fait quelques soudures. Et pour l'instant, j'ai tout monté sur une platine de prototypage.

  • ESP32-PICO-KIT V4
  • Sonde de température TMP175 (I2C)
  • Un relais de type SRD-05VDC-SL-C
  • LEDs, boutons poussoirs, etc

La base : les entrées/sorties

Tout est programmée en C avec la toolchain IDF de l'ESP32. J'ai essayé les différents éléments tout seul : une première sonde de température analogique, puis la sonde I2C, puis le relay, etc. Je me suis aussi familiarisé avec le wifi sur ESP32 et le serveur web.

Fonctionnement du régulateur

La chaudière est pilotée en tout ou rien. Lorsque le relais est passant, la chaudière chauffe, sinon elle s'arrête.

Ce thermostat implémente une hystérésis. C'est-à-dire que pour atteindre une consigne à 19°C, il va chauffer jusqu'à dépasser un peu la température (19.3°C par exemple). A la descente, il va attendre de dépasser la consigne (18.7°C par exemple) pour chauffer.

Fonctionnement de la prédiction

La prédiction à deux entrées : le booléen qui indique la chauffe et la température. Grâce à ces deux données, elle actualise la pente (en °C/h).

La prédiction agit au début et à la fin de la chauffe. C'est-à-dire lorsque chauffe passe à vrai, puis lorsqu'il passe à faux. Elle enregistre alors 2 points X1 et X2. Si la différence de température entre ces deux points est d'au moins 1 degré, elle calcule la pente. La pente est la différence des températures entre X1 et X2 divisée par la durée entre X1 et X2.

Pendant un période d'absence, le logiciel calcule le temps qu'il faudra pour atteindre la consigne. Cette durée dépend de la température actuelle et de la pente. Lorsque la durée jusqu'à la période de présence est inférieure à ce temps de chauffe, la consigne du régulateur est mise à jour pour atteindre la température de présence.

L'Architecture

Modules du thermostat qui adapte le temps de chauffe.

Le module Régulateur (controller/hysteresis.h) implémente l'hystérésis. Il pend en entrée la température actuelle et renvoie le booléen chauffe. Il est paramétré par une consigne.

Le module Prédiction (controller/estimator.h) reçoit en entrée la température actuelle et le temps (jour de la semaine, heure et minute) et renvoie la pente.

Enfin le module Gestion (le main dans thermostat.c) reçoit la température actuelle et définie la consigne en fonction de la pente et des horaires de présence.

Tout ces modules reposent sur une couche d'abstraction donnant accès au matériel (température, relais, bouton poussoir) et au serveur web (définition des endpoints). Un module stock aussi la configuration et les horaires sous forme d'un jour (lundi-dimanche), heure et minute.

Interface web

Page web du thermostat connecté.

Tout est très léger et sans cosmétique. Un endpoint permet d'accéder aux statistiques sur 24h (température, pente et chauffe).

Deux boutons poussoirs permettent de passer en mode présence ou absence.

Améliorations

  • Ajouter un écran LCD. Il pourrait même permettre de remplacer l'interface web.
  • Économie d'énergie : mettre l'ESP32 en veille entre chaque mesure.