Thermostat 1

Le thermostat présenté ici permet de réguler la température ambiante dans une pièce de la maison ou dans une petite serre. Il est basé sur l'emploi d'un PIC de type 16F628A et d'un capteur de température numérique de type DS1820. 

thermostat_001_pcb_3d_a

La programmation de la température et de l'hystérésis désirés se fait au moyen de petits interrupteurs (micro-switches). J'aurais pu mettre un afficheur LCD (comme le fait Dany, voir un peu plus loin), mais j'ai plutôt misé sur un usage avec température de consigne constante ou tout du moins peu souvent modifiée. La consigne de température peut être ajustée par pas de 0,5 °C entre -20 °C et +100 °C (précision de 0,5 °C dans la plage -10 °C à +85 °C, moins bonne au-delà), avec un hystérésis ajustable entre 0,0 °C et 3,5 °C par pas de 0,5 °C. Trois LEDs indiquent en permanence si la valeur de température transmise par le capteur est inférieure, égale ou supérieure à la température de consigne. La partie puissance est composée d'un triac permettant de commuter une charge résistive dont la puissance ne devra pas excéder 1000 W ou 1200 W. Afin d'éviter toute production de parasite sur le réseau EDF lors des commutations On / Off de la charge, un optocoupleur avec détection de passage par zéro de l'onde secteur (modèle MOC3041) est inséré entre le circuit de commande et le circuit de puissance. Cet optocoupleur assure par la même occasion une bonne isolation entre les deux parties. Un thermostat sans composant programmable, basé sur le LM35, est proposé en page Thermostat 2.

Remerciements / Thanks

Un grand merci à Dany, qui a mis à disposition de tous un ensemble de routines pour le traitement des données du DS1820, via son site, routines que j'ai utilisées dans le présent projet (fichier DS1820.ppas). Dany a également réalisé un thermostat, mais un peu différent, avec afficheur LCD et modification de la température de consigne par boutons poussoir plus / moins.

A big thank to Dany, that made available on his site, some routines for DS1820 data handling (DS1820.ppas file), routines I used in my thermostat 001 project. Dany has already made a thermostat, but with a different concept : on its project, he use a LCD display and push-buttons (up / down) to specify desired temperature.

Schéma

Incluant les sections commande, commutation de puissance et alimentation secteur, il se présente comme suit.

thermostat_001

Fonctionnement général

Le principe de fonctionnement de ce montage est fort simple. Le PIC questionne le capteur de température DS1820 afin que ce dernier lui envoie la valeur de la température actuelle. Si la valeur reçue est conforme (un contrôle de CRC permet de s'affranchir des erreurs éventuelles de transmission entre capteur et PIC), alors le PIC compare la valeur lue (T) avec la valeur de consigne (C). La lecture de la température à lieu toutes les minutes, inutile en effet de faire plus rapide, bien que ce soit bien sûr tout à fait possible. Une fonction d'hystérésis (valeur H) permet de conserver un écart de déclanchement entre mise sous tension et mise hors tension de la charge. On pourrait considérer la présence de cet hystérésis comme superflu du fait de la grande valeur de temps qui sépare deux mesures, mais comme elle est désactivable (si spécifiée à la valeur 0 °C), vous pourrez en faire ce que vous voulez.

- Si la valeur lue est inférieure à la valeur de consigne moins la valeur d'hystérésis (T < C-H), alors la charge est mise sous tension pour monter le chauffage.

- Si la valeur lue est égale à la valeur de consigne (T = C), alors la charge est laissée hors tension, on ne fait rien.

- Si la valeur lue est supérieure à la valeur de consigne (T > C), alors la charge est mise hors tension.

Les trois LEDs D1 à D3 permettent de savoir à tout instant où la température actuelle en est par rapport à celle de la consigne.
Remarque : vous avez sans doute remarqué que le capteur de température DS1820 ne possède qu'un seul fil de données en plus de ses deux fils d'alimentation. Le fait de pouvoir questionner ce composant (lui envoyer des ordres) et de pouvoir lire ce qu'il envoie peut semble un peu curieux, à première vue. Il faut juste savoir que cet unique fil de données permet d'établir une communication bilatérale, mais pas en full duplex : côté DS1820, le fil de données peut être configuré en entrée ou en sortie, ce qui d'un point de vue électronique est assez aisé à réaliser (notez que c'est le cas de beaucoup de broches sur les microcontrôleurs). L'appellation officielle d'un tel "bus" de données est "One-Wire" (un seul fil).

Réglage de la consigne de température

Le réglage de la température désirée s'opère en plaçant dans la position adéquate les microswitches (interrupteurs miniatures) regroupés sous l'appellation SW1. J'aurais bien pu me contenter de suivre une configuration "logique et normale", de sorte que la valeur de la température de consigne soit directement égale à la valeur spécifiée par les switches. Mais non, il a encore fallu que je n'en fasse qu'à ma tête, je voulais absolument autoriser une température de consigne négative... et avec des switches codés en binaire, ce n'est pas évident, si ce n'est en sacrifiant un bit pour le signe, au détriment de la plage de réglage totale. Bref, je voulais pouvoir spécifier une température de consigne comprise entre -20 °C et +100 °C, et non entre 0 °C et +125 °C, avec un codage binaire qui ne peut mener plus loin que 128 (le bit de poids le plus faible RB0 donnant la précision à 0,5 °C, il ne reste que 7 bits pour le reste). J'ai donc du prendre une décision qui m'a demandé un mois et trente-sept migraines affreuses, pour finalement conclure à l'inévitable : je ne ferai pas comme tout le monde. Mais que l'on se rassure, la migraine ne vous guète pas pour autant, car j'ai également pris la sage décision de vous expliquer comment opérer, au moyen de quelques exemples pratiques. Mais commençons par le début. Nous souhaitons pouvoir ajuster la consigne de température à la valeur de -20 °C, mais la valeur minimale que l'on peut coder ici est la valeur 0 (tous switches fermés, et donc toutes les entrées du port B à la masse). Qu'à cela ne tienne, il suffit de décaler la valeur minimale programmée avec les switches, de façon à la faire correspondre à la valeur de consigne minimale. Ainsi, la valeur programmée 0 correspond à la valeur de température -20 °C. Et la valeur 20 correspond à la valeur de température 0 °C, et la valeur 42 correspond à la valeur de température 22 °C. Il y a toujours un décalage de 20 °C entre la valeur programmée et la consigne de température "réelle". Ainsi, si la température de consigne désirée est de 19 °C, il faut simplement coder la valeur des switches pour obtenir 39 (19 °C + 20). Avouez que j'aurais pû pousser le sadisme plus loin...

Réglage de l'hystérésis

Le réglage de l'hystérésis s'opère en plaçant dans la position adéquate les microswitches regroupés sous l'appellation SW2. Là, pas de diablerie mathématique, j'étais bien trop fatigué par l'exercice précédent. Il suffit d'additionner les valeurs correspondant aux switches qui sont ouverts (car ouverts, ils conduisent à avoir un niveau logique haut sur les entrées RA5..RA7 concernées, au travers des résistances R4 à R6). Sur le schéma, seul le switch de l'entrée RA5 du PIC est ouvert, nous avons donc un hystérésis de 0,5 °C.

Exemple concret

On veut établir une consigne de température C à 19 °C, avec un hystérésis H de 0,5 °C. La température ambiante T actuelle est de 15 °C, le comportement du thermostat sera donc le suivant :

- T (15,0 °C) < C (19,0 °C) : le système de chauffage est activé, et la température dans la pièce augmente, jusqu'à atteindre la valeur de la consigne de 19 °C.

- T (19,0 °C) = C (19,0 °C) : le système de chauffage est désactivé. La température dans la pièce va descendre petit à petit, jusqu'à atteindre 18,5 °C. Comme la résolution du capteur de température est de 0,5 °C, la valeur mesurable immédiatement inférieure à la consigne est précisément 18,5 °C. Le système de chauffage reste désactivé, à cause de l'hystérisis de 0,5 °C. En d'autres termes, il faut que la température descende à 18,0 °C pour que le système de chauffage se remette en route. Si l'hystérésis avait été de 0,0 °C, le système de chauffage se serait remis en route dès 18,5 °C. Et si l'hystérésis avait été de 1,5 °C, le système de chauffage se serait remis en route dès 17,5 °C. Maintenant, la température ambiante a encore chutée et vaut désormais 18,0 °C.

- T (18,0 °C) < C (19,0 °C) : le système de chauffage est réactivé, et la température dans la pièce remonte. A la température ambiante de 18,5 °C, le système de chauffage reste activé car la température ambiante augmente (le logiciel du PIC fait la différence entre 18,5 °C atteint sur diminution ou sur augmentation de température). Puis la température ambiante T repasse au-dessus de 19 °C. Comme un rayon de soleil caresse le capteur de température (pensez-y), la mesure suivante rapporte 19,5 °C.

- T (19,5 °C) > C (19,0 °C) : le système de chauffage est désactivé.
Etc.

Alimentation

Sa valeur est pour ainsi dire imposée par le PIC, qui réclame une tension comprise entre 3 V et 6 V. L'idéal est de se fixer une valeur de 5 V, bien connu des électroniciens "logiques" et facile à obtenir avec un régulateur de tension tripode classique style LM7805, ou même 78L05 auquel on ne peut demander que 100 mA, ce qui suffit bien ici. Une alim telle l'alimentation simple 1 configurée en 5 V conviendra donc parfaitement, c'est celle adoptée ici.

Logiciel du PIC

Le fichier binaire compilé ;.hex à flasher dans le PIC et les fichiers de code source sont compris dans l'archive zip ci-jointe.
Thermostat 001 - 16F628A

Circuit imprimé

Le circuit imprimé est réalisé en simple face, tous les composants, exceptée la résistance chauffante et le transformateur d'alimentation, sont positionnés dessus.

thermostat_001_pcb_composants

Typon aux formats PDF, EPS et Bitmap 600 dpi

Remarques :
- Deux straps assurent la continuité des lignes d'alimentation pour le microcontrôleur (broches 5 et 14). Pensez à les souder avant placement de tout autre composant !

- Le groupe d'interrupteurs SW2 peut être composé de plusieurs façons : soit un bloc tout fait de quatre microswitches dont on ignore un quart (il y a assez de place vers le bas pour ce type de pièce, il faut juste penser à couper ou replier les deux pattes inutilisées en dessous) ; soit trois microswitches individuels placés côte à côte. Soit encore un double et un simple. Je vous fais confiance pour le choix...

- La faible place réservée pour le triac n'autorise pas la pose d'un radiateur de grandes dimensions. La puissance dissipée par ce dernier sera donc limitée à quelques centaines de watts, à moins de le déporter à côté du circuit, sur un radiateur de plus grand volume.

Prototype

Le proto est identique au circuit dessiné ci-avant, à l'exception de la résistance R10 que j'avais omise dans l'implantation, et que j'ai du rajouter côté cuivre. Pour les tests, j'ai retiré l'optotriacs MOC3041 et ai mis une LED rouge entre les deux pattes 1 et 2 (optotriacs en place sur la première photo et retiré sur la deuxième), afin de vérifier le bon fonctionnement de la commande sans avoir à brancher le secteur sur le circuit.

 

Gros plan sur le capteur de température numérique DS1820 monté sur trois petits bouts de support en barrette sécable, et circuit en action :

  

Tout fonctionne comme prévu.

Température de fonctionnement

Si vous utilisez des composants traditionnels pour réaliser ce thermostat, vous ne pourrez pas le faire fonctionner dans une ambiance de -10 °C ou de +80 °C. Le capteur en lui-même est capable de travailler dans la plage de fonctionnement de la consigne (-20 à +100), mais le reste des composants non. Le capteur peut donc être placé là où il doit se trouver, mais le circuit thermostat quant à lui doit être positionné dans une pièce où règne une température "normale", c'est à dire comprise entre +10 °C et +35 °C.

 

 

 

Accuil








 

 

 

Recherche personnalisée