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)

Main robotique pouvant coder le LPC

Idée…

A l’heure actuelle, il n’y a à ma connaissance aucun robot qui code du LPC. Idée… pourquoi ne pas en faire un? Une recherche sur le WEB montre qu’il y a bien des mains préfabriquées. En bois, en PLA, en métal. Même certaines peuvent être imprimées en 3D, dans la même matière que les LEGOs (réf. 1, 2, 3). Aucune ne peut écarter l’index des autres doigts ; souvent le pouce est seulement opposable. En définitive, il me faut construire une main simple, mais suffisante pour coder.

Montage

Dans mon garage, j’essaie de réunir les éléments. Les doigts seront en tube électrique ; les articulations en époxy (matière des circuits imprimés électroniques). Cette mécanique doit être précise : les découpages et les perçages sont réalisés à la fraiseuse. Pour simplifier, les doigts n’auront que deux phalanges.

601 doigt planQuelques voyages à la quincaillerie de Vevey pour y acheter des vis, tarauds, tubes, axes, profil en aluminium, fil à ressort, fil de pêche me fourniront l’essentiel. Le plus difficile est de trouver le bon ressort. Assez souple, pas trop dur, assez fort pour relever les doigts. Un horloger de Vevey, Titzé, m’a donné du ressort de pendulette « qu’il n’utilisera plus ». Pour les dimensions, je me base sur… ma main. Le visage LPC est issu des documents que tout le monde du LPC connait bien, agrandi de façon à obtenir la dimension humaine. Ensuite, la main opérationnelle, je lui ai ajouté un bras avec deux motorisations : élévation et orientation.

La progression du montage est lente ; je ne vais au garage que les weekends s’il ne fait pas trop froid.

Les servomoteurs – c’est en fait la première chose que j’ai achetée – viennent du modélisme. Ils se commandent facilement avec un module Arduino, la plateforme très connue des électroniciens (réf. 4).

Présentation hard courte en PDF

Programmation

Il y a deux programmes. Celui qui gère les mouvements de la main par le module Arduino est écrit en C++ ; il reçoit des ordres simples. Un interpréteur lit les commandes comme : c1 p3, ce qui signifie faire la clef d-p-j et la présenter à la commissure des lèvres. Il gère l’ordre des déplacements des doigts, pour éviter les collisions entre pouce, index et majeur. La clef est posée. Après quelques secondes (programmable…) les moteurs marquent un léger mouvement et sont arrêtés. Il est possible, avec n’importe quel PC et un port USB d’envoyer des ordres pour que la main les exécute séquentiellement.

684 Leonardo alim Low

Les positions sont fixes. Elles sont ajustées pour que l’index tombe visuellement sur les points rouges du visage.

Présentation soft embarqué en PDF

Le second programme est d’une tout autre nature : il s’agit de repérer des phonèmes dans du texte entré par l’utilisateur. Il est écrit en PYTHON, un langage de haut niveau qui permet la programmation objet efficacement. Pour le mettre au point, je me suis basé sur un interpréteur que j’avais fait il y a … 28 ans en BASIC, heureusement assez bien documenté (réf. 5). Le programme prépare le texte en le transformant. Par exemple, « des idées » en « dézidéye ». Il supprime les doublons, la ponctuation, les terminaisons non prononcées comme les ‘s’ au pluriel. Il met tout en majuscule ; les sons ‘é’ et ‘ai’ sont remplacés par ‘@’ et ‘^’.

100 Python_runningVient l’encodage. Une recherche dans le texte transformé par groupe de 3 caractères, puis 2, puis 1 est conduite pour en retirer le son en clef et position. Avec un seul caractère, c’est forcément incomplet. Dans un tel cas, la position par défaut « main ouverte » et/ou « côté » est appliquée pour l’information manquante. Le couple clef-position défini est envoyé à la main robotique – donc au premier programme – par le câble USB pour exécution.

Conclusion

Cette main robotique ne peut pas vous serrer la main, ni vous servir le café. Elle ne peut pas non plus remplacer une codeuse-interprète. Son utilité est autre : démontrer la simplicité du LPC, et en faire une présentation ludique. Visiblement, l’intérêt montré par les apprentis codeurs/codeuses (enfants, parents, grands-parents) à Villars ce printemps l’a démontré.

Les améliorations ? Bien sûr, on peut en faire des tonnes. Premièrement, améliorer l’interpréteur de texte. Ceci demande un niveau de programmation important, au niveau linguistique. Une autre serait de faire un visage avec une bouche animée, qui suivrait aussi les phonèmes. Pour la bonne forme, on pourrait lui adjoindre un processeur vocal qui dirait le son, la clef, la position. Une autre option serait un redesign complet : plus grosse, moins fragile ; ce serait alors un outil de promotion utilisable par tout un chacun.

Yves Masur (5/2015)

Références :

  1. https://www.youtube.com/watch?v=Z70YWNuOB8E Flexy-Hand 3D printed prosthesis
  2. https://www.youtube.com/watch?v=zzMPr9aiaSU Wooden Mechanical Hand
  3. https://www.youtube.com/watch?v=dEHiAItVdiw Large Mechanical Hand
  4. https://microclub.ch/2012/02/19/arduino-un-succes-embarque/
  5. https://microclub.ch/2013/12/27/recuperation-dun-ancien-programme-basic/