Dernière mise à jour :
23/04/2015
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).
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.
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é :
- si capteur numérique DS1820, lecture
numérique directe via bus "un fil". 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 accèpte et traite la valeur. Le fait de
pouvoir travailler avec un seul fil (nommé TD sur le schéma) pour
questionner le capteur (lui
envoyer des ordres) et lire ses réponses peut sembler un
peu curieux à première vue. Il faut juste savoir que cet
unique fil de données permet d'établir une communication
bi-laté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).
- si capteur analogique LM35,
lecture via convertisseur A/N intégré
au PIC. Dans ce cas la pleine échelle du convertisseur (0 V à 5 V)
correspond à une plage de température de 0 à 100 °C, chaque pas de
mesure correspond à 0,1 °C environ. Dans la pratique, une telle
précision n'est pas mise à profit, puisque la précision du thermostat
est limitée à 0,5 °C.
-
si sonde PT100 ou thermocouple,
lecture via convertisseur A/N intégré au
PIC. Dans ce cas la pleine échelle du convertisseur (0 V
à 5 V)
correspond à une plage de température de 0 à 1000
°C, chaque pas de mesure correspond à 1 °C environ.
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é.
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.
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.
Un autre
appui
sur SW1 remet le thermostat en mode normal.
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.
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 :
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).
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.
Retour de Guillaume :
Retour
positif sur l'amplification de la tension du LM35. J'ai utilisé un
AD820AN et ai remplacé R3 et R3' par un potentiomètre multitours.
Fonctionnement très stable et sans parasite sur une longueur de câble
blindé de 10 mètres.Merci !
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 :
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 !
+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.
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 et par Michel.
Prototype de Jean-Pierre
Merci à Jean-Pierre pour ses retours positifs, ce dernier l'utilise avec une sonde DS1820.
Prototype de Michel
Merci également à Michel pour ses retours positifs, lui aussi a bien bossé !
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
20/04/2015
- Ajout photos prototype de Michel.
22/02/2015
- Ajout commentaire de Guillaume concernant le montage avec LM35 et AD820AN.
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.