Eau chaude – Calcul de constante de temps

Préambule

Grâce au montage basé sur un Arduino Yun, je peux monitorer en quasi temps réel par un échantillonnage toute les 10 minutes, l’état du volume de l’eau chaude sanitaire (ECS). Ces données sont enregistrées : un fichier par mois, comprenant une ligne par mesure. On a, séparé par TAB pour un copier-coller facile dans Excel:

  • Date, année/mois/jour
  • Temps, heure : minute :seconde
  • Marche de la pompe des panneaux solaires, en pourcent
  • Température de retour des panneaux solaires
  • Température du volume d’eau solaire (ES)
  • Température du volume d’eau chaude sanitaire

Le système est décrit ici : https://microclub.ch/2014/10/11/yun-monitoring-de-leau-solaire/

Il fonctionne impeccablement ; le Yun est véritablement un excellent produit. Le résultat est visible ici : http://yvesmasur.ch/ecs/ ; il est possible également de visionner les données plus anciennes par le formulaire de la page WEB ; avec la case « Tout » cochée, les échantillons par 10 minutes sont affichés.

Fig.0 – DATA ECS

Analyse plus détaillée

LA question qu’on me pose souvent, c’est l’apport solaire ? Pour le trouver, c’est assez simple. Le temps d’utilisation de la pompe étant stocké – colonne ‘Pompe’, en pourcent de tranche de 10 minutes – il est facile d’en extraire son temps de fonctionnement ; et en plus, connaissant sa puissance, de calculer l’énergie électrique utilisée… Et oui, le solaire demande (un peu) de puissance au réseau !

Une autre question intéressante, c’est la durée de l’ECS utilisable : combien de jours tient le stockage ?

Avant tout, il s’agit de connaître le fonctionnement du système. Et de son usage. En gros, personne ne se douche après minuit ; ni ne se rase avant 6h le matin : il n’y a pas de soutirage d’eau chaude dans cette tranche de temps. De plus, la chaudière ne remonte la température qu’une demi-heure avant l’enclenchement du chauffage, et seulement si nécessaire. En principe, la consigne est de 45°C. En examinant les données, on voit qu’il faut que la température ECS doive passer en dessous de 43°C (ou même baissé à 38° si le circuit solaire a démarré) ; et que la chaudière s’arrête à environ 48°C. On peut donc, grosso-modo prendre la température à minuit ; puis à 6 heure pour calculer quelque chose.

Modèle de calcul

La température de l’eau chaude va diminuer pour atteindre, si l’on ne fait rien, la température ambiante. Une telle décroissance est assimilable à celle bien connue des électroniciens : un réseau RC, ou le condensateur se (dé)charge dans une résistance.

Fig. 1 – Exponentielle décroissante

On a là une exponentielle décroissante de la tension, caractérisée par sa constante de temps Tau. Dans la fig.1, la valeur de Tau simulée sur Excel est de 10. A t=10, on a 0.368 de la valeur à t=0.

Exemple : https://fr.wikipedia.org/wiki/D%C3%A9charge_d%27un_condensateur

Il suffit de considérer que la température est la tension ; et le tour est joué… ? Il y a toutefois un problème. A moins de m’attirer les foudres des occupants, je ne peux pas couper la chaudière pour plusieurs jours, et encore moins interdire l’utilisation d’eau chaude… D’où l’idée de travailler sur les données disponibles. A savoir, une petite portion de l’exponentielle située entre minuit et 6h du matin, enregistrée régulièrement par l’Arduino Yun.

Paramètres et équation

Théoriquement, il suffit de prendre des données précises sur la tranche de temps utilisable, et de lancer le calcul pour connaitre cette fameuse constante de temps. Qui devrait être valable pour toute autre jeu de données. Mais quel calcul ? On a trois points en ordonnée :

  • Température à 0h00 : V0
  • Température à 6h00 : V6
  • Température ambiante : Va

Et bien sûr en abscisse, le temps t de 6h entre les deux mesures V0 et V6. Par rapport au circuit électrique, la température peut être assimile à la tension. La capacité est le volume d’eau qui emmagasine de la chaleur, la résistance est la résistance thermique de l’isolation qui isole le volume d’eau de la température ambiante. On ne les connait pas, et cela ne fait rien : seul leur produit – la constante de temps Tau – est recherché.

Remarquons aussi que la valeur de Va à t = ∞ n’est pas de 0 ; mais la température ambiante reste autour des 20°C. Vous allez me dire que la sonde au retour des panneaux n’est pas une température ambiante ? En fait, si. La nuit le circuit est (normalement !) arrêté ; et la sonde est disposée entre l’isolation et le tube en cuivre dans la buanderie.

Les choses étant posées, la meilleure solution est de consulter le Dr Goulu (PhD, R&D engineer, Lean manager, Science blogger), qui saura nous dire comment faire. Je lui ai donc posé la question par email avec comme exemple: V0=61.9, V6=60.0 ; c’était l’été et il faisait chaud… Voici sa réponse (notez que Tau est indiqué ‘T’ dans le message) :

Hello,

Si j’ai bien compris, il te faut fitter une fonction a*(1-e^(-t/T))+b par tes points et l’asymptote pour obtenir  T …

  • A t=0 tu as b=61.9
  • à t infini tu as a+b = 22.3 donc a =22.3-61.9 = -39.6
  • à t = 6 heures tu as a*(1-e^(-6/T))+b = 60 à résoudre pour T

Comme il se fait tard : https://www.wolframalpha.com/input/?i=-39.6*(1-e%5E(-6%2FT))%2B61.9+%3D+60+for+T

donne T ~ 122 heures.

Merci Dr Goulu ! Wolfram Alpha est décidément un puissant outil. En prenant les valeurs de quelques jours avec des températures de départ différentes, je vois clairement que mon modèle est entaché d’erreur. La constante de temps… est très variable ! Il me faut un outil plus facile d’accès et automatique pour cerner Tau.

Equation de base

En consultant l’excellent livre « The art of electronics », 4ème édition, p. 22 je peux en tirer l’équation générale me permettant de calculer la constante de temps, sans passer par Wolfram Alpha. La voici :

Tau = dt / ln ((V0 – Va)/(V6 – Va))

Sensibilité aux erreurs

Les mesures ne sont pas parfaites ; les sondes enregistrent au 1/10 de degré. A noter que dans cette affaire la précision absolue compte moins que la résolution. Excel est mon ami ; je pose des valeurs représentatives et je modifie un paramètre à la fois, pour en observer l’influence sur le résultat.

Equation de Tau (en ligne 2, colonne A) est introduite:

=6/LN((C2-E2)/(D2-E2))

Tau Var V0 V6 Va Paramètre modifié
93.60 0.00 49.8 47.9 19.2 Aucun
93.28 0.32 49.8 47.9 19.3 temp. moyenne entre 0h et 6h
89.07 4.53 49.9 47.9 19.2 écart -0.1 de V0
98.64 -5.04 49.7 47.9 19.2 écart +0.1 de V0
88.77 4.83 49.8 47.8 19.2 écart -0.1 de V6
98.97 -5.37 49.8 48.0 19.2 écart +0.1 de V6
91.00 2.60 49.8 47.9 19.2 écart de 10 minutes

 

Où l’on voit qu’une erreur minime de mesure de 0.1 °C de V0 ou de V6 se traduit par un écart considérable de Tau d’environ 5%. C’est notamment dû au fait que l’on a à disposition une portion très limitée de l’exponentielle de décroissance : 6H pour un Tau d’environ 100H.

Allure des courbes

Avant de se lancer dans le logiciel permettant de calculer sur un grand nombre de cas, il est bon de voir l’évolution des températures avec des cas typiques. Puis, à partir des éléments constatés, de construire un modèle s’approchant au mieux de la réalité.

Fig. 2 – par temps froid

L’eau chaude sanitaire (ECS) décroit, et elle est en dessous de la valeur de consigne de la chaudière. Un peu avant 6H, le brûleur à gaz remonte rapidement la température ECS à 48°C, ainsi prête pour son utilisation matinale. Le point de décroissance minimal est donc avant 6H ; à 5H40 ou à 5H50. La durée de mesure sera également raccourcie d’autant.

On remarque aussi que la température ambiante varie : elle baisse de 19° à 16°. De plus, le volume d’eau solaire n’a non seulement reçu aucune énergie solaire, mais il est réchauffé par le volume d’eau sanitaire…

Fig. 3 – tempéré

Ici, il y a un apport d’énergie solaire stocké ; le gaz n’est pas utilisé, du moins pour l’ECS. On est en octobre ; probablement que le chauffage des radiateurs lui, fournit par la même installation, s’est mis en route. Ceci se déduit en voyant la valeur ambiante augmenter à partir de 6h40. Le volume d’eau solaire suit une pente parallèle à l’ECS.

Fig. 4 – temps chaud

L’apport solaire est conséquent et amplement suffisant, puis que la nuit l’ECS est à plus de 56°C. Les courbes autant de l’ECS que de l’ES sont parallèles ; tout au plus un léger fléchissement à partir de 8H par soutirage. L’eau froide du réseau commence par refroidir l’ES, alors que l’ECS reçoit de l’ES à peine moins chaude de 2°C. On voit ici l’intérêt d’avoir deux volumes séparés. La valeur de Va diminue d’environ 3°C pendant la nuit.

Modèle amélioré

Premier constat : la température du seul volume de l’ECS n’est pas suffisante pour déterminer Tau. En effet, une partie de son énergie passe dans le volume d’ES en le réchauffant ! les deux volumes étant identique (dans mon cas, chacun 200 litres), il faut utiliser une pondération de 0.5 des deux pour tenir compte du transfert d’énergie. Cela se voit dans l’exemple 1 : la forte décroissance de l’ECS (qui conduirait à un Tau faible) est atténuée par la pente positive de l’ES. On sera ainsi bien plus précis.

Second constat : la température ambiante Va varie. Laquelle (voire lesquelles) prendre ? La sensibilité de cette valeur dans le calcul est heureusement moindre. Celle qui semble le mieux convenir est celle à mi-parcours temporel : à 3h00 du matin.

Troisième constat : la valeur de V6 peut être fausse si la chaudière s’enclenche avant 6H. L’algorithme devra donc traquer le minimum et prendre l’échantillon adéquat, tout en corrigeant la durée qui devient alors inférieure à 6h00.

Programme et résultats

Afin d’avoir un suivi régulier de la valeur de Tau, j’ai élaboré un programme en Python. Il est disponible sur https://github.com/ymasur/ecs-calc

Il permet de créer un rapport par mois, mais accepte aussi des valeurs partielles : C’est utile pour monitorer les résultats au jour le jour.

Le programme est divisé en modules :

  • ecs-calc.py : le programme principal
  • esetup.py : constantes et traite les arguments de la ligne de commande
  • samples.py : lit et met les données en structure
  • energy.py : calcule le pourcentage solaire et l’énergie de la pompe de circulation
  • temperatures,py : calcul de Tau

Hostspot sur des fonctions clés

Fonction add_points() – extrait

La liste des points des échantillons ‘datas’ de 10 minutes est parcourue. Remarquez l’avantage du langage de haut niveau pour scanner la liste en ligne 91. Pour ne pas m’embêter avec des fonctions date et heure, le temps du jour est lu en minutes dans ‘s.mm’. Le point V0 déterminé à 0h00 (ligne 93), Va à 3h00 (ligne 97), V6 traqué au minimum dès 5h00. Une fois déterminé, le Tpoint est instancié à la ligne 109. Pour traiter des valeurs partielles, le nombre de Tpoints est maintenu à la ligne 113.

Classe Tpoint

Met en structure une mesure. Le Tau est calculé et mis en boite à la ligne 35.

Pour que le programme fonctionne non seulement sur PC mais aussi en automatique sur l’Arduino Yun, il a fallu encore :

  • convertir les fichiers Python au format UNIX, avec LF en fin de ligne ;
  • ajouter en 1ère ligne le commentaire #!/usr/bin/python ;
  • supprimer les accents dans les print() console ;
  • ajouter le path du programme au nom du fichier de donnée

Le dernier point est étonnant, car ils sont dans le même répertoire. Mais le CRON destiné à son lancement régulier n’en sait rien…

Conclusion

Collecter des (big) datas, c’est bien ; les analyser et en tirer des informations, c’est mieux !

L’isolation des volumes d’ES et d’ECS n’est pas extraordinaire, avec un Tau d’environ 100 heures ; donc utilisable pendant 48h à une température suffisante. Si le choix est possible – ça prend de la place -, on remarque qu’il serait bon d’avoir une capacité de stockage bien supérieure et un Tau de 240 heures, de manière à consommer de l’eau réchauffée gratis par le soleil même pendant 4-5 jours couverts, ceci sans augmenter la surface des panneaux solaires.

Prochaine étape : calculer l’économie de gaz. Vous avez vu comme moi la courbe 2 – par temps froid ; la pente est reconnaissable. Mais je dois trouver le bon modèle. A suivre !

Références

  • livre « The art of electronics », 3ème édition, Paul Horowitz et Winfield Hill
  • Article « https://microclub.ch/2014/10/11/yun-monitoring-de-leau-solaire/ »

Yves Masur (1/2018)

Deux livres Elektor sur le langage C et l’embarqué

Dans les publications d’Elektor, je me suis laissé tenter par la proposition de deux ouvrages:

  • C programming with Arduino, de  Warwick A. Smith, 343 pages
  • Embedded Linux Control Center, de Hans Henrik Skovgaard, 450 pages

Les deux sont dans la catégorie “learn” (il y a “design” et “share” ). Et vous l’aurez compris, ils sont en anglais. Petite revue et opinion.

1 – C programming with Arduino

Avec Arduino, vraiment?

C‘est la question qu’on peut se poser avec le premier livre; mais le préambule du titre est “AVR Microcontrollers and ATMEL Studio for…”; et c’est bien le cas. Juste pour voir si je vais apprendre des ficelles, des trucs et des astuces pour programmer en C des Arduino, je l’ouvre au milieu, et je tombe sur (p. 174) les spécification du format pour la fonction printf(), et la largeur des champs comme printf(“%5d\n”, 123); // padded with 0

Et a peine plus loin, les boucles imbriquées. En fait, non, c’est un livre pour :

  1. Apprendre le C
  2.  programmer des CPU AVR

L’auteur décrit bien qu’il utilise l’Atmel AVR Dragon ou l’AVRISP mkII, soit une sonde qui permet la cross-compilation et le chargement du programme sur la cible par un câble ICSP (voir: https://fr.wikipedia.org/wiki/Joint_Test_Action_Group).

L’environnement de développement n’est donc pas l’IDE Arduino classique (que l’on peut télécharger ici: https://www.arduino.cc/en/Main/Software ), mais l’environnement Atmel Studio. Donc bien plus général. Le début du livre montre bien comment connecter la cible et mettre en place cette méthode de développement. Les points forts sont que l’on a accès à une bonne connaissance des registres et de l’utilisation native de ceux-ci. Par contre, on peut se demander si c’est un moyen rapide et efficace d’apprendre le C?

Pour ma part, je préfère que mes apprentis se fassent les dents sur un IDE de PC. Une fois les bases du langage aquises plus rapidement et plus facilement, on passe à une cible plus… exotique comme un Arduino. Avec ses spécificités et ses limites. Et les difficultés propres à la cross-compilation, et la non-possibilité de debbuguer apparaissent et viennent charger le bateau de la connaissance.

Apprendre le C efficacement

En effet, a quoi bon apprendre au stade de débutant qu’un cross-compilateur va râler à l’étape de l’édition de liens (linker) si une fonction de la bibliothèque est mal orthographiée? Les mêmes expériences seront plus efficacement  traitées sur un IDE natif, prévu pour Windows 32 ou 64 par exemple, même s’il cache une (grande) partie du déroulement de la création de l’exécutable. le même étudiant va remarquer rapidement que printf() n’est pas vraiment disponible pour de l’embarqué et que l’interface est du texte en mode série.

Bref, on peut garder le livre pour apprendre le C, et obtenir des infos détaillées sur les registres des CPU ATMEGA 328 et 2560, ainsi que leurs connexions sur les ports I/O du print Arduino. Et bien sûr, comment programmer timers, AD et watchdog!

2 – Embedded Linux Control Center

Dont le titre complet est “Design our own Embedded Linux Control Centre on PC and RaspBery Pi”. Ce livre touche à de nombreux programmes et concepts, pourtant il reste accessible à un (relativement) débutant grâce aux explications claires dans un anglais simple – aussi certainement parce que l’auteur est Danois. Au cours des explications, il y a de fréquents renvois par des URL sur des sites spécifiques qui permettent d’approfondir un sujet, ou de télécharger des utilitaires et des compléments.

Le livre s’adresse à celui qui aimerait faire de la “home automation” (de la maison intelligente?)

Allez, une jolie image pour illustrer cet anglicisme:

piqué à Protex.me

Exhaustivité

L’auteur est exhaustif dans son développement et la mise en oeuvre, sans tartiner avec des banalités, ni se répéter. Par exemple, pour la sélection de l’OS à monter sur le RaspBerry, les avantages et inconvénients pour le but proposé sont discutés. Toutefois, il faut ensuite se rappeler au cours de la lecture que ELCC signifie Embedded Linux Controle Centre – c’est ce programme et sa mise en œuvre qui est l’objet du livre. Une table des abréviations facilite la recherche d’acronymes.

Où j’ai plus de peine à suivre l’auteur c’est lorsqu’il recommande de lire tout le livre avant d’attaquer un projet… Alors que je ne résiste pas à sauter directement au sujet qui m’intéresse, qui à revenir en arrière pour plus en détail ou un élément qui m’aurait échappé?

Vivre avec la modernité

L’auteur montre a plusieurs reprise la difficulté de vivre dans le soft avec des changements et des mises à jour incessantes… Par exemple pour lire une sonde de température USB, il faut installer une librairie LIBUSB … version 1.12 et pas plus récente. Comme dit l’auteur, d’habitude je recommande la dernière version, mais celle-ci n’est pas compatible avec la librairie LIBHID! (lib pour les périphériques tels claviers, souris, manettes).

WEB Config et connectivité d’accès

L’auteur précise comment monter un service XAMPP et le sécuriser de manière à ce qu’il fonctionne encore tout en rendant le système fermé pour un accès indésirable. Les autres moyens de connexion, tels que SSH (secure shell), VNC (Virtula Network Computing), le X-server Xming et même le remote desktop xrdp sur RaspBerry sont exposés de manière claire.

Et oui, via l’application de connexion de bureau à distance MSTSC de Windows, on peut se logguer sur le RaspBerry. Attention, le clavier reste QWERTY. Vous voyez ci-dessous les écrans de VNC et MSTSC sur le même RaspBerry.

VNC-MSTSC

Old fashioned et … Arduino

Par certains aspects, des détails sont quelque peu de style ancien. L’auteur a depuis longtemps travaillé sur son projet, et certains renseignements le montrent. Par exemple, sur un (vieux) PC, comment réaliser une entrée-sortie sur un port parallèle.. Heureusement, on trouve toujours dans le commerce de tels adaptateurs; mais il y a belle lurette que les imprimantes sont connectées en USB ou sur le LAN.

Cependant, l’auteur précise que si l’on ne possède pas de port parallèle, on peut utiliser… un Arduino. Et là, les indications pour trouver comment connecter le hardware : LED, résistance; puis programmer l’Arduino, connecter l’USB à son fameux ELCC – tout y est! Il est également précisé que de couper et replanter l’USB provoque le reset de l’Arduino et rend les I/O instables un instant; ainsi que le moyen d’y palier. Et de se méfier de la limitation de courant si le device est alimenté par l’USB.

L’amour des choses anciennes fait un peu souci quand l’auteur présente son Linux chouchou: le DamnSmallLinux, qui n’a pas été mis à jour depuis 2012. Bon, il fait 50 Mo, mais quand on sait que la sécurité dépend de la fraicheur de l’OS…

Ou sont les pins du RaspBerry? – WiringPi

Là aussi, fidèle à son habitude, l’auteur fait une photo et met à disposition un tableau pour se repérer sur le connecteur, que ce soit un Raspberry rev 1 ou 2, modèle B ou B+. Il met en garde à propos de la tension admissible en entrée… Oui, le RaspBerry est en 3,3 V, et non en 5V.

Les commandes de ELCC se font par l’utilisation de WiringPi, une bibliothèque générale pour les I/O d’un RaspBerry, écrite et maintenue par Henderson Gordon. C’est un code sur GIT, facile d’accès et d’utilisation. C’est une excellente chose que d’utiliser cette référence qui a une large audience plutôt que de ré-écrire une lib GPIO.

En bref, c’est un excellent livre qui peut rendre de grands services à ceux qui se lanceraient dans l’automatisation domestique.

Yves Masur (4/2016)