Comment j'ai amélioré ma chaudière

Rédigé par marmous Aucun commentaire
Aujourd'hui, je vais vous raconter comment j'ai hacké ma chaudière afin d'améliorer notre confort et de faire des économies. Ce projet est fonctionnel et en production depuis un peu plus de 6 mois. Le code source est disponible ici : http://git.marmous.net/marmous/ethion

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)
Il est relativement simple. C'est une boucle infinie qui pour chaque itération :
  • Récupère tous les paramètres
  • if (0 < desiredTemp-currentTemp <= tempDelta)|(nbHeat>=nbMaxHeat)
SI la différence de température entre la température désirée et la température courante est comprise entre 0 et le delta de température
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)
SI la différence de température entre la température désirée et la température courante est supérieure au delta de température
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))
Dans les autres cas, SI le relais n'a pas été démarré dans les 60 dernières minutes
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
Un fait intéressant qui m'a fait rajouté le maintient est que même si la température de la pièce est chaude, nous avons une sensation de froid si les radiateur le sont.
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

Des schémas et des notes






L'interface web


L'écran de paramétrage

Rasberry pi : Pense-bête opération sur carte SD

Rédigé par marmous Aucun commentaire
Classé dans : Informatique, DIY Mots clés : raspi, raspberry pi, carte sd, backup, correction
Lorsque qu'il arrive un problème sur une carte SD d'un Raspberry Pi, je recherche toujours les mêmes commandes.

Backup d'une carte
sudo dd if=/dev/DISK of=/home/YOURUSER/backup.img

Restauration d'un backup
sudo dd if=/home/YOURUSER/backup.img of=/dev/DISK

Vérification et correction des erreurs sur une carte
umount /dev/sdh0
fsck -v /dev/sdh0

Comment réaliser techniquement un film en stopmotion sous linux

Rédigé par marmous Aucun commentaire
Classé dans : En vrac, DIY Mots clés : linux, stopmotion, mogrify, mencoder
Cet été, j'ai été amené à travailler sur la partie technique d'un court métrage en stopmotion.

Il existe des solutions libres orientées animation tel que stopmotion ou luciole permettant de prendre les photos une à une en maitrisant  un décor.
Dans mon cas les images ont été prises sur le terrain et je n'y étais pas. Les sujets étaient des humains qu'il fallait prendre en situation de travail. Ce ne sont ni des modèles ni des comédiens. Il était donc hors de question de leur faire perdre leur temps à poser pendant des heures.
J'ai eu besoin d'un système simple car je travaillais dans l'urgence pour renommer, recadrer et assembler toutes les photos.

Pour renommer, j'ai utilisé PyRenamer (source) qui permet, entre autre, de renommer des fichiers par lot avec numérotation automatique, justement ce dont j'avais besoin.

Pour recadrer, j'ai utilisé Mogrify un outil de la suite ImageMagick pour manipuler des images en ligne de commande.
Voici un exemple pour redimentionner tous les fichiers jpeg du répertoire courant en format full HD (1920x1080)
mogrify -path . -resize 1920x1080 -quality 97 -format jpg *.jpg

Pour assembler les photos en une vidéo, j'ai utilisé MEncoder un outil de la suite MPlayer pour encoder des vidéos.
Voici un exemple pour générer une vidéo HD à 5 image par seconde en utilisant tous les fichiers jpeg du répertoire courant
mencoder mf://*.jpg -mf w=1620:h=1080:type=jpeg:fps=5 -ovc copy -oac copy -o output.avi

Enfin, j'ai utilisé KDEnLive pour ajouter de la musique et monter tout ça.


Fil RSS des articles de cette catégorie