Catégories
parts solar water heater

Régulateur solaire d’eau chaude utilisant ESP32

J’ai récemment aidé mon père à installer un nouveau système d’eau chaude solaire sur notre toit, en remplaçant les anciens collecteurs à plaques plates par des tuyaux d’évacuation plus modernes. Les hivers à Canberra ont été rudes pour les anciens collecteurs et ont eu tendance à geler pendant la nuit, endommageant la tuyauterie interne et provoquant des fuites. Les nouveaux capteurs sont beaucoup plus efficaces et occupent beaucoup moins d’espace sur le toit. Le système a très bien fonctionné pendant quelques mois, mais en été, nous avons constaté qu’il fonctionnait un peu bien.

Photographie du nouveau collecteur de toiture Photographie du nouveau collecteur de toiture

Après quelques jours d’été très chauds, nous avons découvert que l’eau stockée dans le réservoir avait atteint près du point d’ébullition. Pour éviter de faire bouillir le réservoir, le contrôleur a arrêté de pomper l’eau à travers le collecteur. Avec l’ancien système de capteurs à plaques plates, ce serait bien car ils peuvent irradier de la chaleur vers l’environnement, mais avec les tuyaux évacués, la température dans le capteur a augmenté rapidement. L’eau stagnante dans les collecteurs a bouilli et s’est transformée en vapeur chaude.

Bien sûr, le système a une soupape de surpression pour transformer le réservoir en bombe, mais le dommage a déjà été fait. La vapeur a fait fondre la roue de la pompe et toutes les vannes en plastique avec des noms de seulement 100 ℃.

De toute évidence, une meilleure solution était nécessaire pour que la même chose ne se reproduise plus. Le régulateur de pompe n’était pas conçu pour gérer un nouveau type de collecteur, et il n’y avait également aucun moyen de voir quelle était la température du réservoir en ce moment. Si nous l’avions su plus tôt, nous aurions pu laisser de l’eau chaude refroidir le réservoir. J’ai donc décidé de repenser le régulateur et de remplacer celui existant.

Le système d’eau chaude est relativement simple. L’eau chaude est stockée dans le réservoir, l’eau froide est acheminée vers le bas et l’eau chaude est aspirée par le haut. Le contrôleur surveille la température en haut et en bas du réservoir, ainsi que la température dans le collecteur. Si le soleil brille, le collecteur se réchauffe. Lorsque le contrôleur détecte que la température du collecteur est suffisamment élevée, il démarre une pompe qui pompe l’eau froide du réservoir à travers le collecteur. L’eau est chauffée puis remuée dans le réservoir.

image Schéma d’un système solaire d’eau chaude

Pour notre nouveau contrôleur, nous devons être capables de faire les choses suivantes

  • Lire la température avec 3 capteurs dans le système
  • Décidez quand allumer et éteindre la pompe
  • Allumer ou éteindre la pompe
  • Afficher la température actuelle et l’état du système
  • Avertissez quelqu’un lorsque la température est trop élevée

L’aspect le plus difficile de la conception a été de trouver un moyen de lire les capteurs de température. Après beaucoup de jaillissement, j’ai finalement découvert que les capteurs PT1000 sont des détecteurs de résistance à la température (RTD). Ces capteurs sont simplement des résistances dont la résistance dépend de leur température. Ils sont appelés capteurs PT1000 car ils sont en platine et ont une résistance de 1000 Ω à 0 ℃. Leur résistance augmente approximativement linéairement avec la température, mais il est plus précis d’utiliser des tables de résistance ou un placement carré.

Nous utiliserons ESP32 comme microcontrôleur, mais il ne peut pas mesurer directement la résistance. Cependant, il a un ADC que nous pouvons utiliser pour mesurer indirectement la résistance en mesurant la tension. Nous pouvons utiliser un ensemble diviseur de tension et mesurer la tension de sortie. Connaissant la tension d’entrée et une résistance, nous pouvons discerner la valeur de l’autre résistance (RTD que nous essayons de mesurer).

Nous utilisons une résistance de 10 kΩ et une tension d’entrée de 3,3 V, ce qui signifie qu’à 0 ℃ le RTD sera de 1000 Ω et la tension de sortie 0,30 V. À 100 ℃, le RTD monte à 1385 Ω, donnant 0,40 V à la sortie . Cependant, notre ADC peut lire des valeurs de 0 V à 3,3 V et n’a que 12 bits de précision. Si nous lisons directement le diviseur de tension, nous perdrions la précision de nos relevés de température. Pour résoudre ce problème, nous pouvons ajouter un amplificateur instrumental, soustraire la tension de référence et amplifier la différence.

Amplificateur d'instrument pour capteur RTD Circuit instrument pour capteur RTD. Le RTD est connecté aux bornes à gauche.

Étalonnage ADC

Malgré notre planification minutieuse et notre théorie de l’assemblage, le monde réel n’est jamais parfait. Des tolérances parfaites dans les valeurs de résistance et les caractéristiques non idéales des amplis-op et ADC signifient que nous devons calibrer notre circuit. Pour ce faire, au lieu d’un RTD, j’ai utilisé une résistance variable que je pouvais régler sur une certaine valeur de résistance à l’aide d’un multimètre. J’ai ensuite mesuré la valeur ADC pour un certain nombre de valeurs de résistance afin de déterminer le rapport.

Étalonnage ADC

À partir de cela, nous pouvons utiliser la ligne de tendance pour calculer la valeur de résistance à partir de n’importe quelle valeur ADC que nous lisons avec ESP32.

Conception schématique complète

Le reste du schéma est relativement simple. Nous fabriquons 3 copies d’un amplificateur instrumental pour mesurer chaque capteur de température individuellement. J’ai également ajouté un petit écran LCD OLED pour afficher la température actuelle. J’ai également ajouté une carte relais 240 V pour contrôler la pompe. L’écran LCD est alimenté via I2C, et le relais ne nécessite que vous tirez sur le fil de terre pour activer le relais.

J’ai également ajouté des condensateurs de réduction du bruit dans les capteurs RTD. Le RTD au sommet du collecteur est à environ 10 m et le fil agit essentiellement comme une grande antenne et introduit beaucoup de bruit dans le circuit. Un grand condensateur aide à atténuer le bruit et donne des lectures plus stables sur l’ADC.

Diagramme du diagramme final Le schéma de circuit final

Après avoir conçu le schéma, j’ai conçu la disposition de la planche. Je ne voulais pas faire une planche personnalisée, alors j’ai juste utilisé une planche à perfusion et soudé tout à la main.

Disposition des tuiles Aspect physique de l’assemblage

Dans l’ensemble, je suis assez satisfait de la façon dont cela s’est avéré. Tout rentre parfaitement et il y a même un petit espace libre.

Tout mettre ensemble

J’ai à nouveau utilisé la boîte contenant l’ancien contrôleur et j’ai pu insérer tous les composants nécessaires. J’ai collé un plastique de rechange pour placer l’écran LCD qui se trouve sur le dessus du boîtier de commande. Trois capteurs RTD sont connectés dans le coin inférieur gauche, l’alimentation 5 V est située dans la partie inférieure droite. Les deux câbles à droite sont alimentés en 240 V en bas et alimentés par la pompe en haut. Le réseau est connecté au bornier, via une carte relais, puis à la pompe.

Contrôleur enfin assemblé Contrôleur enfin assemblé

J’ai écrit un programme pour ESP32 en utilisant le framework Arduino et PlatformIO. La boucle de contrôle est essentiellement:

  1. Lisez les capteurs RTD et prenez la moyenne des 20 dernières lectures.
  2. Mettre à jour l’affichage pour afficher la température ou l’état actuel de la pompe
  3. Déterminez si la pompe doit être allumée ou éteinte
  4. Transférez la température et l’état actuels dans le cloud à l’aide de MQTT

La décision d’allumer la pompe a été modélisée comme une machine à états avec 4 états différents:

  • AUTO_OFF: mode par défaut
  • AUTO_ON: Si le collecteur est plus chaud que le fond du réservoir, la pompe est allumée et le collecteur chauffe l’eau.
  • AUTO_BOIL_PROTECT: Si la température du capteur devient trop élevée, la pompe fera circuler de l’eau pour empêcher le capteur de brûler. Une intervention humaine peut être nécessaire pour refroidir le réservoir.
  • AUTO_FREEZE_PROTECT: En hiver, si la température du collecteur chute près de zéro, la pompe se mettra en marche pour faire circuler de l’eau plus chaude à travers le collecteur pour empêcher le collecteur de geler.
    PumpMode get_next_mode(SystemStatus status){
      switch(current_mode){
        case PumpMode::AUTO_BOIL_PROTECT:
          if(status.temperature_solar < boil_protect_off){
            // Solar has cooled down below the threshold
            return PumpMode::AUTO_OFF;
          } else {
            // Solar is still above the boiling threshold
            return PumpMode::AUTO_BOIL_PROTECT;
          }
    
        case PumpMode::AUTO_FREEZE_PROTECT:
          if(status.temperature_solar > freeze_protect_off){
            // Solar has warmed up above the threshold
            return PumpMode::AUTO_OFF;
          } else {
            // Solar is below freezing threshold
            return PumpMode::AUTO_FREEZE_PROTECT;
          }
    
        case PumpMode::AUTO_ON:
          if(status.temperature_solar - status.temperature_bottom < solar_temp_difference_off){
            // Solar is no longer above the required threshold
            return PumpMode::AUTO_OFF;
          } else {
            return PumpMode::AUTO_ON;
          }
    
        case PumpMode::AUTO_OFF:
          if (status.temperature_solar - status.temperature_bottom > solar_temp_difference_on){
            // Normal Operation - Solar is hotter than the tank, turn pump on
            return PumpMode::AUTO_ON;
          } else if (status.temperature_solar > boil_protect_on){
            // Turn on pump so solar does not boil
            return PumpMode::AUTO_BOIL_PROTECT;
          } else if (status.temperature_solar < freeze_protect_on) {
            // Turn on pump so solar does not freeze over
            return PumpMode::AUTO_FREEZE_PROTECT;
          } else {
            // Nothing Changed
            return PumpMode::AUTO_OFF;
          }
        default:
          return PumpMode::AUTO_OFF;
      }
    }
    

Graphiques de données

Les données recueillies auprès du contrôleur sont transmises toutes les minutes à l’aide du protocole MQTT. J’ai utilisé à l’origine le service Cloud4Rpi, mais depuis, je suis passé au serveur libre-service InfluxDB et Grafana.

Tableau de bord Grafana Tableau de bord Grafana montrant l’état du système

Le panneau de commande affiche les températures actuelles, l’état actuel de la pompe et l’historique des températures au fil du temps. Vous pouvez voir la température du capteur (bleue) augmenter le matin jusqu’à ce que la pompe soit allumée et que le capteur soit rincé avec de l’eau plus froide. Peu de temps après l’arrêt de la pompe et le réchauffement du collecteur. Le graphique ci-dessus est un jour particulièrement nuageux où le collecteur ne chauffe pas trop.

Température du système un jour d'été Un exemple d’une journée d’été typique

Le graphique ci-dessus provient d’un ancien tableau de bord Cloud4Rpi, mais montre une journée d’été typique. Au milieu de la journée, la pompe fonctionne en continu et la température du réservoir commence à augmenter.

Protection contre le gel

Exemple de travail Freeze Protect Un exemple de fonctionnement de la protection antigel

Ce graphique montre un exemple de protection contre le gel. La température du capteur solaire est lentement refroidie pendant la nuit jusqu’à ce que la pompe soit allumée pour augmenter la température. Dans le même temps, vous pouvez remarquer une légère baisse de la température du fond du réservoir en raison de l’eau froide de l’eau froide dans laquelle il est pompé.

Dans l’ensemble, ce projet a été très réussi. Le nouveau contrôleur est bien meilleur, plus flexible et fournit plus d’informations sur le système. C’était aussi un projet d’ingénierie amusant et agréable qui m’a aidé à développer mes compétences et mon expérience en électronique.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.