Electronique > Réalisations > Affichage / Mesures > Thermostat 003

Dernière mise à jour : 18/12/2011

Présentation

Le thermostat présenté ici permet de réguler la température ambiante d'une pièce de la maison ou d'un four haute température, et possède deux seuils de température : un seuil bas (température mini) et un seuil haut (température maxi).

thermostat_003_pcb_3d_a

Il est basé sur l'emploi d'un PIC de type 18F2420 (ou 18F2520) associé à un afficheur LCD de 2 x 20 caractères qui facilite la visualisation de la température actuelle et la programmation des seuils. L'emploi de plusieurs types de capteurs de température permet de travailler sur des plages de fonctionnement différentes :
- plage de 0 °C à +100 °C avec capteur analogique de type LM35
- plage de 0 °C à +100 °C avec capteur numérique de type DS1820
- plage de 0 °C à +1000 °C avec sonde type PT100 (sonde platine 100 ohms à 0 °C) ou thermocouple type K
La précision est de 0,5 °C pour la plage comprise entre 0 °C et +100 °C, et est de 1 °C pour la plage comprise entre +100 °C et +1000 °C. Trois leds permettent à tout instant de savoir si la température mesurée est inférieure à la température min, si elle est comprise entre la température min et la température max, ou si encore elle est supérieure à la température max. La sortie se fait sur relais, ce qui permet la commande d'élement de puissance sans grande difficulté.
Remarque : ce thermostat ne travaille que sur des températures positives.

Avertissement

Pour le moment, le thermostat est fonctionnel, mais uniquement avec les capteurs DS1820 et LM35, dans les deux cas pour une plage de température comprise entre 0 °C et +100 °C. Il est dors et déjà possible d'adopter le type de capteur PT100 au niveau du thermostat pour disposer d'une échelle de mesure comprise entre 0 °C et 1000 °C, mais je n'ai pas encore terminé l'étage d'entrée nécessaire pour la PT100. L'adaptation pour usage de sondes PT100 ou autres thermocouples (mesure température jusqu'à +1000 °C) sera vue plus tard.

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.mpas). Dany a également réalisé un thermostat 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 003" project. Dany has also made a thermostat using a LCD display and push-buttons (up / down) to specify desired temperature.
- Merci également à George I. qui m'a écrit pour me dire qu'il avait utilisé le code (légèrement modifié) pour un PIC 18F4620 et que cela fonctionnait parfaitement.
Thanks to George I. that wrote me to say he has adapted with success the Thermostat 003 code for a PIC 18F4620.

Schéma

Le schéma qui suit est presque complet. Il montre la partie microcontroleur (PIC) avec l'afficheur LCD et le capteur de température DS1820 (plage 0 à 100 °C). L'utilisation d'autres types de capteur de température est abordée plus loin.

thermostat_003

L'afficheur LCD marqué LM032L peut être un afficheur quelconque de 2x16 caractères, du moment que son contrôleur est un HD44780 .

Cadencement du logiciel
L'horloge interne 8 MHz du PIC est utilisée, ce qui permet de s'abstenir d'un quartz ou résonateur céramique externe. Nous n'avons en effet pas besoin d'une grande précision temporelle dans le cas présent, et que le circuit tourne à 7,99 MHz ou 8,01 MHz n'a aucune espèce d'importance. C'est toujours ça de gagné.

Mesure température
Le principe de fonctionnement de ce montage est fort simple. Le PIC effectue de manière continue une lecture de la température grâce au capteur choisi. D'un point de vue logiciel, cette lecture est effectuée de façon différente selon le type de capteur utilisé :
Dans tous les cas, c'est à dire quelque soit le capteur utilisé, l'affichage de la température se fait en clair, il en est de même pour les seuils min et max.

Comparaison température avec seuils
- Si la température mesurée est inférieure à la valeur de consigne Température Min (T < T Min), alors la sortie relais est activée pour alimenter la résistance chauffante (chauffage actif).
- Si la température mesurée est comprise entre les deux seuils Température Min et Température Max (T Min < T < T Max), et que la température allait en augmentant, alors la sortie relais est activée pour alimenter la résistance chauffante (chauffage actif).
- Si la température mesurée est comprise entre les deux seuils Température Min et Température Max (T Min < T < T Max), et que la température allait en diminuant, alors la sortie relais est désactivée et la résistance chauffante n'est plus alimentée (chauffage inactif).
- Si la température mesurée est supérieure à la valeur de consigne (T > T Max), alors la sortie relais est désactivée et la résistance chauffante n'est plus alimentée (chauffage inactif).
Les trois LED D1 à D3 permettent de savoir à tout instant où la température actuelle en est par rapport aux températures Min et Max de consigne.

Programmation du thermostat
Il est possible de spécifier le type de capteur utilisé et les consignes Min et Max de température, au moyen des trois bouttons poussoirs SW1, SW2 et SW3. SW1 permet de basculer entre mode normal (lecture et fonctionnement thermostat) et mode programmation. Quand l'équipement est mis sous tension, le thermostat est en mode normal et fonctionne comme demandé. Un premier appui sur SW1 permet de spécifier le type de capteur utilisé.

thermostat_003_lcd_001a

Un second appui sur SW1 permet de modifier la consigne de température Min, grâce aux deux bouttons SW2 et SW3 qui permettent respectivement d'incrémenter ou de décrémenter la valeur de consigne en cours.

thermostat_003_lcd_001b

Un troisième appui sur SW1 permet de modifier la consigne de température Max, là aussi grâce aux deux bouttons SW2 et SW3.

thermostat_003_lcd_001c

Un autre appui sur SW1 remet le thermostat en mode normal.

thermostat_003_lcd_001d

Type de capteur utilisé
- DS1820 : quand ce type de capteur est spécifié, le PIC va interroger le DS1820 connecté sur la ligne TD (broche RA4 du PIC).
- LM35 : quand ce type de capteur est spécifié, le PIC lit la tension analogique présente sur la ligne TA (broche RA0 du PIC), et la traduit en température, sachant que 0 V correspond à 0 °C et que 4,88 V correspond à 100 °C (détails plus loin).
- PT100 : quand ce type de capteur est spécifié, le PIC lit la tension analogique présente sur la ligne TA (broche RA0 du PIC), et la traduit en température, sachant que 0 V correspond à 0 °C et que 4,88 V correspond à 1000 °C (détails plus loin).
Remarque : la fonction d'autoreconnaissance du capteur qui était implémentée dans la version précédente, n'existe plus.

Sortie et commande de puissance

La sortie principale (appelée Cmd sur le schéma) se fait sur la broche RC7 du PIC, broche 18. Cette sortie du PIC n'est pas en mesure de piloter directement une grosse résistance de chauffage, aussi est-il nécessaire d'ajouter une interface de puissance. De ce côté de la force (qui a cessé d'être obscure depuis le 21 mars 2010), il existe plusieurs solutions :
- interface de puissance avec triac ou relais statique
- interface de puissance avec relais électromécanique

Solution à relais électromécanique
Les deux types d'interface présentent leurs avantages et inconvénients, mais on peut dire qu'il faut vraiment s'en soucier de près quand on veut commuter des courants très importants. Si votre résistance chauffante dissipe moins de 2 KW, les deux solutions conviennent parfaitement. A partir de quelques centaines de Watts, il faut tout de même prévoir un dissipateur thermique si vous optez pour un triac. Le schéma qui suit montre une adaptation de sortie avec relais, le pouvoir de coupure de ce dernier doit être choisi en fonction de la puissance de votre charge.

thermostat_003_cmd_001

Dans ce schéma, on dispose d'une alimentation secteur générale de +12 V, et il est fait usage d'un relais dont la tension nominale est de 12 V. Un régulateur de tension de type 7805 permet d'abaisser cette tension de 12 V en une tension de +5 V qui sera mieux appréciée du PIC. La diode D2 et le condensateur C1 situés à l'entrée du régulateur permettent de limiter les acoups de courant sur la ligne d'alimentation du PIC, quand le relais change d'état.

Solution à triac
Pour la solution à triac, je vous conseille vivement l'emploi d'un optotriac pour assurer l'isolation entre tension secteur et circuit de commande. Un exemple est donné à la page Interface de puissance 5V / 230V 001 :

interface_230V_001

Notez que dans ce cas, l'ensemble du circuit reste alimenté en +5 V.

Fonctionnement avec capteur LM35

Le LM35 (déjà utilisé dans mon thermostat 002 et dans mon thermomètre 003) est un capteur de température monté dans un boitier à 3 pattes en métal ou en plastique, qui s'alimente entre +4 V et +20 V. Sa sortie délivre une tension de valeur proportionnelle à la température, à raison de 10 mV par °C, avec pour base la valeur de 0 V à 0 °C. On dispose ainsi d'une tension de 50 mV pour une température de 5 °C, d'une tension de 150 mV pour une température de 15 °C et d'une tension de 1,0 V pour une température de 100 °C. Il existe plusieurs versions de LM35, comme indiqué ci-après :
- LM35AH : boitier métal TO46, plage -55 °C à +150 °C
- LM35CH : boitier métal TO46, plage -40 °C à +100 °C
- LM35CZ : boitier plastique TO92, plage -40 °C à +100 °C
- LM35DH : boitier métal TO46, plage 0 °C à +100 °C
- LM35DZ : boitier plastique TO92, plage 0 °C à +100 °C
Ceux en boitier métal coûtent plus cher, la palme revient au LM35AH. Pour la présente application, je vous conseille le modèle LM35CZ ou le modèle LM35DZ.

Montage de base
Pour bénéficier pleinement de la plage 0 °C à +100 °C avec le CAN inclus dans le PIC, ou plutôt pour conserver une assez bonne précision, il convient de multiplier la tension mesurée (fournie par le LM35) dans un rapport de 4,88. L'idée de départ est qu'une tension de 1,0 V corresponde à +20 °C, et qu'une tension de +5 V corresponde à une température de +100 °C. Comme la résolution du CAN (convertisseur analogique / numérique) du PIC est de 10 bits, on dispose de 1024 pas de quantification. Si on fait l'économie de 23 pas sur les 1024, on dispose d'une correspondance directe entre valeur du CAN et valeur de la température mesurée (rapport de 10 entre les deux).
Vmax pour 100 °C = 5 V / 1024 * 1000 = 4,88 V
Avec LM35 et électronique associée : une tension de 0 V (valeur CAN = 0) correspond à 0 °C et une tension de 4,88 V (valeur CAN = 1000) correspond à 100 °C
Le montage qui suit effectue l'adaptation requise, le gain de l'étage amplificateur est de 4,88 (4,86 en théorie).

thermostat_003_lm35_001

L'amplificateur opérationnel (AOP) U2 qui se charge de ce travail d'amplification est un modèle de type "rail-to-rail", modèle TS951IN. Cela est impératif si on veut pouvoir bénéficier d'un affichage correct sur les premiers et derniers degrés de la plage de valeur. Si on avait employé un AOP standard (style LM741), la plage de mesure aurait été limitée tant dans les valeurs basses que dans les valeurs élevées (ordre de grandeur de la plage qui aurait été réellement utilisable : de +10 °C à +90 °C). Notez que même avec un AOP rail-to-rail tel que celui utilisé ici, on ne peut pas vraiment descendre à 0 °C. Le fait que l'on n'ait besoin que de 4,88 V pour représenter la température de 100 °C nous arrange sacrément bien, pas besoin d'aller jusqu'à +5 V ! Disons en toute transparence que la mesure est fiable à partir de 2 °C. Il y a bien sûr moyen de faire mieux, mais le circuit présenté ici à l'avantage d'être vraiment simple pour une plage de valeur qui est tout de même plus que correcte. Les résistances R2, R3 et R3' doivent impérativement être des modèles de précision 1% ou mieux, de façon à garantir un taux d'amplification aussi proche que possible de celui recherché. Le TS951IN n'est pas forcement très facile à trouver, il peut être remplacé par un AD820AP, MCP6041, LMC7101 ou par tout autre AOP rail-to-rail de caractéristiques similaires.

Capteur LM35 déporté
Si la distance qui sépare le capteur LM35 du reste de l'électronique est grande, mieux vaut alors adopter le montage suivant :

thermostat_003_lm35_002

La liaison se fait dans ce cas en courant plutôt qu'en tension, avec une paire de câble torsadée, ce qui permet de limiter l'influence des parasites externes. J'ai vu plusieurs fois ce type de montage avec les deux résistances de 2k00 et de 200 ohms aux deux extrêmités du câble, et à chaque fois la tension disponible était anoncée comme étant de 10 mV / °C, comme si on utilisait directement la tension de sortie du capteur. Pourtant de mon côté, j'ai noté une tension de 0,43 V au lieu de 0,50 V pour une température de 50 °C. C'est pour cette raison que le gain de l'AOP est de valeur légèrement plus élevée avec ce montage, pour compenser la perte de tension constatée : gain de 5,68 au lieu de 4,88. Il est possible que je me sois trompé, mais avec mon exemplaire de capteur, c'est ce que j'obtiens. En cas de doute, n'hésitez pas à remplacer R3 + R3' par un potentiomètre ajustable (47 kO multitours) pour bénéficier d'un gain réglable et précis.

Brochage du LM35
Attention, brochage vu de dessous !

LM35 - Brochage Capteur Temp 001 - LM35

+Vs = alim positive (par raport à la masse)
Vout = tension de sortie proportionnelle à la température
GND = masse.

Fonctionnement avec sonde PT100

Là, cest un peu plus critique car la tension développée aux borne d'un tel capteur est faible et il faut l'amplifier suffisement sans lui ajouter trop de bruit qui fausserait trop la mesure. Le schéma qui suit montre un exemple d'un étage d'adaptation pour un tel capteur.

Schéma pas finalisé et donc non présenté

La courbe de variation de la résistance de la sonde par rapport à la température n'est pas tout à fait linéaire, elle a tendance à se tasser au fur et à mesure que la température augmente. Le circuit électronique proposé ici permet de compenser en partie cette absence de linéarité, et permet d'espérer une précision globale comprise entre 0,5% à 1%. Pour une précision supérieure, il faudrait utiliser un circuit bien plus complexe.

Fonctionnement avec thermocouple

Moyennant une électronique adaptée, il est aussi possible d'utiliser un thermocouple pour la mesure de hautes températures. Voici quelques exemples de capteurs qui pourraient être utilisés :
- Thermocouple de type B (Pt30Rh / Pt6Rh) - Plage de 0 °C à 1300 °C
- Thermocouple de type J (Fe / Cu / Ni) - Plage de -210 °C à 1200 °C
- Thermocouple de type K (NiChr / Ni) - Plage de -270 °C à 1330 °C
- Thermocouple de type N (NiCrSi / NiSi) - Plage de -270 °C à 1330 °C
- Thermocouple de type R (Pt13Rh / Pt) - Plage de -50 °C à 1330 °C
- Thermocouple de type S (Pt13Rh / Pt) - Plage de -50 °C à 1330 °C
Dans tous les cas, la tension délivrée par un thermocouple n'est pas élevée, de l'ordre de quelques uV ou dizaines de uV par °C, selon le type de capteur. Pour exploiter au mieux ces thermocouples, le circuit électronique qui les accompagne doit être très soigné, et parfois les réglages sont un peu délicats. Et comme avec la sonde de type PT100, l'étalonnage à des températures autres que 0 °C ou +100 °C  n'est pas forcement aisé en absence de thermomètre de référence. J'ai un ami qui possède un thermocouple et qui me le pretera le temps de faire quelques tests. Mais pour l'heure, ce n'est pas trop dans mon planning. En attendant, voici le schéma d'un amplificateur différentiel qui devrait pouvoir servir de base à un thermocouple de type K.

thermostat_003_tck_001

Le taux d'amplification de cet amplificateur différentiel est d'environ 120, de sorte que la tension obtenue après amplification soit à peine inférieure à +5 V pour une température de 1000 °C. Cela permet de faire tenir la plage 0 °C à 1000 °C entre 0 V et +5 V, ce qui est idéal pour l'entrée analogique du PIC. A noter toutefois que pour bénéficier d'une bonne précision dans les faibles valeurs, la tension d'alimentation doit être de type symétrique (au moins +7 V pour la branche positive et au moins -3 V pour la branche négative) pour pouvoir approcher de près les valeurs 0 V et +5 V. On peut aussi utiliser un AOP de type rail-to-rail, mais attention au choix de ce dernier, qui devra posséder une très faible dérive dans le temps, un offset négligeable et un niveau élevé de réjection en mode commun (caractéristiques auquel répond le OP07A). Au schéma proposé (et non testé à l'écriture de ces lignes), il faut ajouter en sortie une résistance de faible valeur (entre 150 et 470 ohms) avec une diode zener de 5V1 / 1,3 W pour limiter l'excursion de sortie de l'AOP entre -0,6 V et +5,1 V et éviter ainsi de griller le PIC qui fait suite.

Alimentation

La tension d'alimentation du PIC est fixée à +5 V, 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 001 configurée en 5 V conviendra donc parfaitement, c'est celle adoptée ici. La tension du relais est fixée ici à +12 V, car c'est la tension nominale de la bobine du relais. Ce dernier pourra cependant être remplacé par le modèle de votre choix, un modèle 5 V ou 24 V pouvant tout à fait convenir. L'important est de disposer d'un relais dont le pouvoir de coupure est adapté à la puissance de la charge à alimenter. 

Evolutions possibles

Le PIC utilisé a encore de la ressource libre et il n'est pas impossible que j'en fasse usage à l'avenir pour des fonctions additionnelles. Par exemple :
- transmission temps réel des valeurs de température sur port série (notez que la broche RC6/TX est déjà réservée) ou via une boucle de courant (exemple);
- moyennage des dernières valeurs lues pour absorber d'éventuelles variations "hors normes";
- spécification de l'intervalle de temps entre chaque mesure;
- enregistrement en EEProm des valeurs lues, pour récupération en bloc ultérieure (utilisation en autonome sur un site non habité).

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. MikroPascal V5.30 utilisé pour le code PIC 18F2520.
Thermostat 003 - 18F2420 / 18F2520 - (04/12/2011)
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

Prototype

Non réalisé en grandeur nature par mes soins, mais réalisé (et pleinement opérationnel) par Jean-Pierre G.

thermostat_003_proto_jpg_001a thermostat_003_proto_jpg_001b

Merci à Jean-Pierre pour ses retours positifs, ce dernier l'utilise avec sonde DS1820.

Circuit imprimé

Non réalisé, vue 3D uniquement là pour donner un aperçu général du circuit.

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, 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 un endroit où règne une température "normale", c'est à dire comprise entre +10 °C et +35 °C (grand max 45 °C).

Historique

12/12/2011
- Ajout photos prototype de Jean-Pierre G.
04/12/2011
- Adaptation du code pour 18F2520, les fichiers sont donc désormais disponibles pour les PIC 18F2420 et 18F2520.
- Proposition de modèles de remplacement possibles pour l'AOP "rail-to-rail" TS951IN, pas très facile à trouver.