Comment j'ai amélioré ma chaudière
Rédigé par marmous
Aucun commentaire
Classé dans : DIY
Le situation initiale
La maison est équipée du chaudière à fioul Viessmann modèle Vitola Biferal. C'est une bonne chaudière, seulement voilà : elle est équipée uniquement d'une sonde extérieure. Son cycle de chauffe ne tient pas compte de la température intérieure de la maison. Cela pose des problèmes de confort et de consommation excessive.En effet, en hiver, lorsqu'il fait très froid elle a tendance à surchauffer et dès que l'atmosphère se réchauffe elle ne chauffe pas assez. Cela se traduit par des nuits à fort gel où on se retrouve à plus de 20°C et des périodes de mi saison où il fait une dizaine de degré à l'extérieur et 15 à l'intérieur.
Cette situation nous forçait à constamment baisser ou augmenter la chaudière, malgré son système de régulation (soleil/lune - mode complet/mode réduit). Il n'est possible que de programmer une plage soleil et une plage lune par jour. C'est très restrictif.
Le projet
Après avoir passé trop de nuit en sueur en plein hiver, j'ai décidé de trouver une solution viable. Pour cela il fallait que je puisse récupérer la température intérieure pour l'envoyer à la chaudière. J'ai commencé à regarder ce que Viessmann proposait : une commande à distance avec thermostat. Le hic, c'est filaire et donc il aurait fallut faire un trou dans le mur et le carrelage tous deux tout neuf, sans compter un coût de plusieurs centaines d'euros pour l'appareil et toujours la limite du nombre de plage horaire.J'ai opté pour une solution créée de toute pièce à base de Raspberry Pi.
Cela se compose d'un Raspberry Pi utilisé en tant que sonde de température et d'un second Raspberry Pi agissant en tant que régulation de la chaudière.
Voici un schéma basique du fonctionnement :
La sonde de température envoie la température relevée à la régulation toutes les minutes.
Le régulation démarre de la chaudière en fonction de la température souhaitée et de la température reçue. L'algorithme de déclenchement et de maintient de la chaleur est un peu plus complexe. Je le détaillerai plus loin.
La sonde de température
J'ai installé une Raspbian sur le Raspberry Pi téléchargée ici et installée en suivant ce tutoriel.J'ai choisi d'utiliser un composant ds18b20 pour sonde de température pour sa simplicité de mise en œuvre avec un Raspberry Pi.
J'ai suivi ce tutoriel.
Pour envoyer la température relevée à la régulation, j'ai écrit un script qui
- relève la température
- calibre la température relevée
- l'envoie à la régulation
La régulation
Là aussi je me suis basé sur une Raspbian. Mon Raspberry Pi est équipé d'une carte extension PiFace me permettant de déclencher un relais (ouvrir ou fermer un circuit à la demande).La régulation est composée d'une application web (framework python Pyramid) en guise d'interface utilisateur, d'un script python chargé de contrôler la chaudière et d'une base de donnée MongoDb.
Il est possible d'installer la base de données sur le Raspberry Pi en suivant ce tutoriel. Les performances n'étant pas au rendez-vous sur mon Raspberry Pi B, je l'ai installé ailleurs. Il faudrait tester avec un Raspberry Pi 2.
Un tutoriel d'installation complet existe ici.
Le branchement matériel
J'ai rencontré une grande difficulté à trouver un point d'entrée sur la chaudière pour démarrer/arrêter le brûleur. Je pensais naïvement qu'il devait y avoir un relais quelque part pour faire ça.Au final et surtout grâce à ce forum allemand, j'ai simulé une commande à distance via quelques résistances.
Voici le schéma de la réalisation :
L'algorithme de régulation
J'ai amélioré cet algorithme depuis la mise en production et je pense qu'il peut encore l'être.Je ne suis pas un expert en maths, ça doit se sentir un peu ;-)
La difficulté est que la température de l'eau chauffée est inconnue. Sur une régulation classique, il y a des réglages prédéfinis en fonction de la température de l'eau chauffée. J'ai donc dû faire autrement et je pense avoir trouvé le bon réglage pour ma maison.
Les paramètres de l'algorithme sont les suivants :
- la température courante de l'habitat (currentTemp)
- la température désirée (desiredTemp)
- un delta de température (tempDelta) utilisé pour savoir si il y a un gros écart de température à rattraper
- le temps de repos entre deux chauffes (restTime)
- le temps de déclenchement du brûleur pour un maintient de température (holdHeatTime)
- le temps de déclenchement du brûleur pour une petite chauffe (minHeatTime)
- le temps de déclenchement du brûleur pour une grosse chauffe (maxHeatTime)
- le nombre maximum de grosse chauffe (nbMaxHeat)
- Récupère tous les paramètres
- if (0 < desiredTemp-currentTemp <= tempDelta)|(nbHeat>=nbMaxHeat)
OU SI le nombre maximum de grosse chauffe est atteint
ALORS le brûleur est démarré pour une durée minHeatTime, on attend le temps de repos restTime et le nombre de grosse chauffe nbHeat est initialisé à 0.
- if (desiredTemp-currentTemp > tempDelta) & (nbHeat<nbMaxHeat)
ET SI le nombre maximum de grosse chauffe n'est pas atteint
ALORS le brûleur est démarré pour une durée maxHeatTime, on attend le temps de repos restTime et le nombre de grosse chauffe nbHeat est augmenté de 1.
- else if lastRelayStart <= (now + datetime.timedelta(minutes = -60))
ALORS le brûleur est démarré pour une une chauffe de maintient holdHeatTime et on attend le temps de repos restTime.
- Attente d'une minute
Donc la sensation de chaud ou de froid n'est pas directement liée (et l'est quand même un peu forcément) à la température de la pièce mais à la température des radiateurs. D'où la nécessité de rajouter une fonction de maintient de chaleur.
Conclusion
Ce projet a été un vrai challenge, surtout pour trouver le point d'entrée de la chaudière. Si vous voulez tenter l'expérience, vous trouverez tous les fichiers ici sous licence libre. Si vous voulez plus d'info ou de l'aide pour mettre en place un tel projet, écrivez moi : ycalamai (chez) gmail.com
Quelques Photos
La régulation
L'interface web
L'écran de paramétrage