Root » Serveurs » Chauffage » Mon installation » 2020 » Arduino
L'évolution de mon installation de chauffage
Convecteur à gaz et arduino
Arduino
Contrairement à un ordinateur classique, l'arduino est prévu pour commander des processus. Il dispose d'entrées et de sorties analogiques et numériques.
-

-

Après quelques expériementations avec un arduino, Il m'est venu à l'idée de remplacer la commande par ordinateur par une commande par arduino. Tant que le chauffage central fonctionnait parfaitement, je n'ai pas fait la transformation. Mais quand je suis passé au chauffage par convecteur à gaz, j'en ai profité pour rendre le fonctionnement automatique.

Mon premier circuit avec un arduino était la commande d'une horloge avec des tubes nixie qui a été construit avec des composants de récupération. C'est un schéma totalement unique, basé sur les composants dont je disposais. Par après, j'ai même ajouté une fonction de mesure de la température.


Design du panneau de commande

Pourquoi utiliser un arduino?

L'arduino est nécessaire pour réduire la zone morte entre l'enclenchement et le déclenchement (à l'origine la zone faisait 4°). Mon but est d'arriver à une oscillation de moins de 1° (qui ne se remarque pas).

J'utilise un petit servo-moteur pour commander le thermostat. Tous ces petits moteurs qui sont utilisés dans les maquettes ont les mêmes paramètres de fonctionnement: une tension d'alimentation de 4.8 à 6V (la tension de 4 ou 5 accus NiCd) et un fonctionnement sur 180° (ce qui est suffisant pour commander le thermostat).

La commande du moteur est standardisée: il s'agit d'un signal à modulation de la largeur d'impulsion. L'impulsion fait 1 à 2ms pour un déplacement de 180°, avec une impulsion de 1.5ms le moteur se place à 90°. Sur le site d'arduino, on peut installer une routine qui produit l'impulsion correcte: il suffit d'indiquer le port de sortie qu'on veut utiliser.

Le système de régulation fonctionne avec trois températures de consigne, 19° (présent), 16° (nuit) et 12° (absent) avec possibilité d'ajouter ou de retrancher un degré. Quand une température est sélectionnée, le moteur se place dans une certaine position absolue qui dépend de la température choisie. A ce moment, la fonction du thermostat du convecteur est utilisé normalement. Petit à petit, la position du thermostat est corrigée: le thermostat est alors commandé comme s'il s'agissait d'un robinet classique. Le passage d'un mode de fonctionnement se fait graduellement en 20 minutes (c'est amplement suffisant pour obtenir la température voulue).

Lentement, le positionnement devient relatif: si la température de consigne n'est pas atteinte mais que le chauffage ne fonctionne pas, le thermostat est augmenté d'un cran (et inversément). La position absolue du thermostat ne joue plus, la position du thermostat est modifiée pour limiter l'hystérésis. Un décompte de 20 à 0 (en minutes) détermine la vitesse à laquelle la correction s'effectue.

Pour la mesure de la température, j'ai d'abord utilisé un Pt1000 (on voit que je travaille dans l'industrie) puis je suis passé à un capteur qui fournit une tension de 10mV/degré et qu'il est plus facile de corriger. L'ampli opérationnel a une fonction dérivée pour compenser l'inertie du capteur. La tension qui est envoyée à l'arduino correspond à la température de la pièce, pas à celle du capteur.

Quand le servo-moteur ne doit pas fonctionner, c'est que la température désirée est atteinte. En pratique il y aura toujours une légère oscillation, car le circuit compense la zone morte importante. La possibilité de stocker automatiquement la meilleure valeur (position du servo pour une température donnée) n'a pas été activée, il est par contre possible de la modifier manuellement.

Quand la demande en chaleur devient moindre, le bruleur se met a l'arrêt et la température de la pièce commence à diminuer. Le logiciel remarque cette condition et va augmenter le thermostat pour éviter une oscillation trop prononcée de la température. La condition inverse est également corrigée: mise en route du bruleur et augmentation de la température. Cette correction agit rapidement une fois que le temps de latence est passé (temps en fonctionnement sans boucle de contre-réaction quand une température est sélectionnée).

Commande

L'arduino n'a pas d'écran LCD ou OLED, il n'a pas de clavier, il n'a que des entrées et sorties. Il faut donc prévoir soi-même un moyen de communiquer avec la bête. La programmation est très proche du language-machine (c'est du C assez limité).

Nous avons un indicateur de fonction avec 8 leds (niveau haut actif) et 8 boutons poussoirs qui sont lus via les mêmes lignes. Les leds indiquent les conditions de fonctionnement (menu principal) ou le mode de programmation activé.

Fonction ou paramètre
Vers menu spécifique ou retour au menu principal
Modification d'un paramètre
Les boutons et leds ont les fonction suivantes dans le menu principal:
  1. Température normale (19°)
  2. Température basse (16°) la nuit
  3. Absent (12°)
  4. Temperature +1 (19 devient 20 et 16 devient 17)
  5. Temperatuur -1 (19 devient 18 et 16 devient 15)
  6. Modification des paramètres PID
  7. Modification des paramètres du servo-moteur
  8. Tboost (augmentation de la températuren pendant environ 15 minutes)
Pour l'année 2020-2021 je prévois une horloge à temps réel (real time clock). La programmation des paramètres PID sera éliminée (une fois que les réglages sont optimaux, il ne faut plus les modifier). Le menu sera utilisé pour une programmation de la journée: journée de travail, journée de repos, journée absence,...

Les boutons poussoirs ont des leds qui indiquent qu'une fonction est activée (menu principal). Il y a également un mode de fonctionneemnt manuel où le thermostat est mis dans une position et n'est plus modifié. La fonction Tboost est utilisée pour augmenter momentanément le chauffage pour couper le froid (sans modifier la température de consigne). Au bout de 10 à 15 minutes le servo moteur retourne à sa position normale (fonctionnement automatique normal).

Quand on appuie sur la fonction PID, on arrive à un second menu.

  1. Temp change slow/fast ratio: paramètre du régulateur PID: calcul de la dérive.
  2. Temp change multiplier: multiplicateur de la dérive
  3. Countdown timer: temps que le système n'influence pas sur la valeur du servo-motor après la sélection d'une température (pour permettre à la pièce de chauffer)
  4. Parameter value ++
  5. Parameter value --
  6. Retour au menu principal avec stockage des valeurs modifiées
  7. Offset parameter temperature, pour la transformation de la valeur mesurée (0..1023) en température
  8. Gain parameter temperature

Les leds des boutons 2, 3, 7 en 8 peuvent être allumés, ils indiquent que la fonction est sélectionnée et peut être modifiée par les boutons ++ et --. La led 6 clignote pour indiquer qu'on se trouve dans le menu pid.

Le second menu permet la modification des paramètres su servo-système:

  1. Servo-motor valeur de départ 19°, le moteur est positionné sur cette valeur quand on sélectionne 19°
  2. Servo-motor valeur de départ 16°,
  3. Servo-motor valeur de départ 12°
  4. Parameter value ++
  5. Parameter value --
  6. Positionnement manuel du servo-moteur (fonctionnement manuel)
  7. Retour au menu principal avec stockage en EEPROM des paramètres modifiés
Les trois premières leds et led 6 peuvent s'allumer, led 7 clignote (menu servo). Ici aussi on peut modifier les paramètres après les avoir sélectionnés. Quand on modifie la position du servo-moteur, le système passe en fonctionnement manuel jusqu'à ce qu'une température est à nouveau sélectionnée.

Les 8 lignes permettent à la fois de commander les leds et de lire l'état des boutons poussoirs. Une fois par seconde toutes les leds sont éteintes et allumées une par une. A ce moment, l'entrée analogique est lue. Si le bouton correspondant est enfoncé, on obtient une valeur positive.

L'utilisation d'une entrée analogique permet éventuellement de lire une seconde rangée de boutons (en utilisant une autre série de résistances, mais il n'est pas fait usage de cette possibilité.

Après la lecture des boutons, les lignes sont à nouveau utilisées pour commander les leds, l'interruption est à peine visible et forme une indication que le programme tourne normalement. En mode programmation, les touches ++ et -- sont scannées plus rapidement pour permettre une modification plus rapide des paramètres.

Display

Nous utilisons un écran LCD à commande sérielle à 9600 baud, 4 lignes de 20 caractères. Le contenu de l'écran ne change que peu selon le mode de fonctionnement: celui-ci est indiqué par les leds. Il s'agit d'un exemple d'affichage à droite.

00010203040506070809 10111213141516171819  
AAAA BB.BB CC.CC Temperature
DD EE WWWW w UUU Loop
QQ.QQ RR.R R SS.SS PID
XXX YYY ZZ Z VVV Servo

Température
AAAAanalogtempValeur analogique (0..1023)
BB.BBtempfastValeur transformée en degrés
CC.CCtempcTempérature avec dérive (valeur utilisée pour la commande)
 
Servo loop
DDcountdownCountdown 20 to 0 par minute
EEcounterCompteur secondes avant la modification éventuelle du servo
UUUservoposPosition actuelle du servo
WWWWwkacheltempEntrée analogique du capteur du brûleur
 
Paramètres PID
QQ.QQdiffgaindifferential multiplier
RR.RRoffsettempoffset analog input to temp
SS.SSgaintempmultiplier analog input to temp
 
Paramètres Servo
XXX YYY ZZZ sp[]Servo start position 19° 16° 12°
VVVservoreqrequested servo position

Electronique

L'electronique est décrite sur une page séparée

Ports Arduino

Utilisation des ports numériques:
  1. Out Key/led 0
  2. Out Key/led 1
  3. Out Key/led 2
  4. Out Key/led 3
  5. Out Key/led 4
  6. Out Key/led 5
  7. Out Key/led 6
  8. Out Key/led 7
  9. Out SoftwareSerial vers l'écran LCD
  10. Out PWM servo motor
Analoge ingangen
  1. Température living in
  2. Keyboard in
  3. Température bruleur in


L'installation complète avec l'arduino et son "shield" qui fait l'interface. En haut la mesure de la température et les amplis, en bas l'écran LCD.

Les cables vont aux indicateurs analogiques, à la résistance Pt-1000 et au servomoteur. Il y a également une alimentation à commutation dont les cables arrivent en haut du circuit de l'arduino.

Servo loop et température du bruleur

Pour corriger éventuellement la position du thermostat, je dois savoir si le brûleur est en fonctionnement ou non. Il n'y a pas de feed-back du thermostat à l'arduino: je dois utiliser un capteur supplémentaire. Le tuyau d'évacuation des gaz brûlés est assez fin et chauffe rapidement. En 5 à 10 secondes, le capteur peut déterminer une modification.

L'importance de ce réglage est expliquée par la situation suivante: nous avons une température t16 (nuit), mais il ne fait pas vraiment froid dehors et la température de la pièce ne descend pas à la valeur de consigne. Une régulation sans intelligence tenterait constamment de réduire la position du thermostat, ce qui n'est pas le but. Quand il y a alors une demande de chaleur, le thermostat se trouve à la position minimale et il faut deux minutes pour qu'il passe à une position moyenne (cette lenteur est prévue pour réduire les dépassements (overshoot)).

Un autre exemple: je rentre le soir, il fait très froid et la température de consigne met plus de 20 minutes à être atteinte: cela ne sert à rien de modifier la position du thermostat si le bruleur travaille déjà à haute puissance.

Il n'est pas nécessaire d'avoir une mesure précise de la température de la buse: ce qui est important, c'est de savoir si le bruleur est en fonctionnement ou non (et éventuellement en mode de fonctionnement à haute puissance).

Arduino et API

On voit bien que l'arduino est en fait un API miniature, il ne lui manque qu'un interface plus solide pour en faire un automate programmable industriel (sorties et entrées numériques avec des relais). La programmaton en boucle sans fin ressemble également à la programmation d'un Siemens Simatic (mais en plus simple).

Un point négatif de l'arduino c'est qu'il ne permet pas de détecter un flanc, il faut utiliser une seconde variable. Simatic permet un PTC (Positive Transition Sensing) et NTC (Negative Transition Sensing).

A droite les symboles LD (ladder diagram) les plus utilisés: on voit les contacts qui génèrent une seule impulsion positive lors d'un flanc positif ou négatif. On attend maintenant que quelqu'un produise un interface qui puisse transformer le LC en instructions pour l'arduino. Je crois que cela pourrait attirer plus d'amateurs vers l'arduino, qui hésitent à cause de la programmation en C.

Pour permettre aux utilisateurs de faire leurs premiers pas, les examples sur le site d'arduino sont extrèmement simples, mais dès qu'il faut écrire un programme un peu plus complexe, cela coince. C'est ici que la programmation en ladder pourrait aider, par exemple pour les électriciens qui sont habitués de travailler avec des relais et des contacts.

Le logiciel est décrit sur cette page. Il est encore en modification.

Links to relevant pages - Liens vers d'autres pages au contenu similaire - Links naar gelijkaardige pagina's

-