Dernière mise à jour :
13/05/2012
Présentation
Le thermostat présenté ici permet de réguler la
température ambiante de plusieurs pièces dans une même maison (maximum
10), avec une température individuelle pour chacune. Il est basé sur
l'emploi d'un
PIC de type
18F4525 associé à un afficheur LCD de 2 x 20
caractères qui facilite la visualisation de la température actuelle et
la programmation des
seuils. Les dix broches du PIC configurées en entrée analogique
permettent une plage de mesure de 0 °C à 100 °C ou une plage de
mesure de 0 °C à 1000 °C pour une plage de
tension comprise entre 0 V et +5 V.
- Pour la plage de mesure 0 °C à 100
°C, on dispose pour chacune des entrées d'un affichage de type 20 °C /
Volt ou dit d'une autre manière de
1 °C / 50 mV. Une tension d'entrée de 1,0 V sera interprétée comme une
température de +20 °C et une tension d'entrée de 3,0 V sera interprétée
comme une température de +60 °C.
- Pour la plage de mesure 0 °C à 1000
°C, on dispose pour chacune des
entrées d'un affichage de type 200 °C / Volt ou dit d'une autre manière
de
10 °C / 50 mV. Une tension d'entrée de 1,0 V sera interprétée comme une
température de +200 °C et une tension d'entrée de 3,0 V sera
interprétée
comme une température de +600 °C.
La sélection de la plage de mesure
peut être modifiée à tout instant, de façon indépendante pour chaque entrée. Outre les dix entrées indépendantes
de mesure, une onzième mesure de température est effectuée en local
avec un capteur numérique de type DS1820. Cette mesure locale est juste
informative et ne permet pas l'activation d'une charge.
Avertissements
Le
schéma proposé ici se concentre sur le microcontrôleur qui attend qu'on
lui fournisse les tensions représentatives des températures mesurées.
Je ne propose pas de solution particulière pour la partie capteurs
analogiques. Le choix des capteurs de température est donc laissé à
votre discrétion, quelques pistes seront tout de même abordées pour
vous aider dans vos recherches. Voir page
Thermostat 003 pour quelques pistes.
Schéma
Le schéma ci-après montre uniquement le coeur du montage, on n'y voit pas les étages d'entrée avec leur capteur de température.
Schéma du 24/10/2010Principe général de fonctionnement
Guère
compliqué. Le logiciel du PIC lit de façon séquentielle (successive)
les dix lignes TA1 à TA10 configurées en entrée analogique et traduit
chaque tension lue en une température. Chaque température lue est
comparée à des limites supérieures et inférieures spécifiées par
l'utilisateur (vous) et en fonction du résultat de la comparaison, la
sortie correspondante Out1 à Out10 est activée ou désactivée. Si par
exemple la température lue sur l'entrée TA2 est de 24 °C et que les
limites inférieure et supérieure sont respectivement de 19 °C et 21 °C,
la sortie Out2 est désactivée. Autre exemple : si la température lue
sur l'entrée TA6 est de 160 °C et que les limites
inférieure et supérieure sont respectivement de 180 °C et 190 °C, la
sortie Out6 est activée. Si la température lue est comprise entre
les deux limites, on peut se trouver dans deux cas de figure :
- soit la température est en train de monter et dans ce cas la sortie
reste activée jusqu'à ce que le seuil supérieur soit atteint.
-
soit la température est en train de descendre et dans ce cas la sortie
reste désactivée jusqu'à ce que le seuil inférieur soit atteint.
Quel type de capteur de température utiliser ?
Quand
on désire mesurer une température localement, c'est à dire quand le
capteur et le circuit d'affichage sont proches l'un de l'autre, on ne
rencontre pas de difficulté particulière et on peut utiliser une
thermistance ou un capteur analogique fournissant une tension
dépendante de la température (exemple LM335 ou LM35). En revanche, les
choses se corsent quand le capteur est déporté du système de mesure /
affichage. Dans le cas présent on veut même pouvoir déporter jusqu'à 10
capteurs indépendants, sur des longueurs qui pourraient atteindre plus
de 10 mètres chacune !
Utilisation de capteurs LM35
Il
est possible d'utiliser des LM35 mais alors dans
une configuration en boucle de courant (par exemple 4-20 mA, mais
on peut travailler avec une autre plage de valeurs) pour minimiser
l'effet des parasites environnants. Un tel montage est
proposé dans le datasheet du fabricant (document constructeur) qui
permet de couvrir la plage 0-100 °C. L'inconvénient du schéma proposé
est que pour la plage couverte (4-20 mA pour 0-100 °C), la tension
récupérée côté "récepteur" va de 40 mV à 200 mV. Cela impose un
décallage en tension et une amplification pour pouvoir couvrir la plage
0 V à +5 V attendue et bénéficier ainsi de la pleine échelle du
convertisseur
A/N du microcontrôleur. Cela est donc possible mais requiert pas mal de
composants additionnels, d'une part côté capteur et d'autre part côté
microcontrôleur.
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.
Utilisation de capteurs AD592
Le
AD592 est aussi un capteur de température analogique, mais au lieu de
délivrer une tension proportionnelle à la température comme le LM35, il
délivre un courant proportionnel à la température. Cela lui permet
d'office d'être moins sensible aux parasites ambiants, même si bien sûr
il ne peut en être totalement protégé. Sa pente de variation
température / courant est de 1 uA/K (degré Kelvin), ce qui permet d'en
déduire qu'il délivre un courant de 273 uA pour une température de 0 °C
et un courant de 373 uA pour une température de 100 °C. On part
simplement de 273 uA à 0 °C et on ajoute 1 uA par °C. Par exemple à 70
°C, on obtient 273 + 70 = 343 uA. Un courant inférieur à 273 uA
correspond à une température négative (par exemple 253 uA pour -20 °C).
Il existe au moins trois références différentes pour le AD592, qui
offrent des performances différentes :
- AD592AN : erreur max de calibrage à +25 °C = 2,5 °C - Erreur max sur plage -25°C à +105 °C = 3,5 °C
- AD592BN : erreur max de calibrage à +25 °C = 1,0 °C - Erreur max sur plage -25°C à +105 °C = 2,0 °C
- AD592CN : erreur max de calibrage à +25 °C = 0,5 °C - Erreur max sur plage -25°C à +105 °C = 1,0 °C
Comme
on peut le constater à la vue de ces chiffres, la version AD592CN est
la plus précise mais coûte aussi (évidement) plus cher.
Pour
mettre en pratique le AD592, il faut tout d'abord ajouter une
résistance en série avec lui pour transformer le courant en une tension
proportionnelle à la température. Si par exemple on utilise une
résistance de 1 MO, cela produira une plage de tension de sortie allant
de 2,73 V (pour 0 °C) à 3,73 V (pour 100 °C). Le premier constat que
l'on peut faire est que cette plage est limitée à 1 V, ce qui ne permet
pas d'utiliser les pleines capacités du convertisseur A/N du
microcontroleur (il faudrait pour ce dernier redéfinir les tensions de
référence haute et basse). Pour adapter ce type de capteur à ce
thermostat, il faut faire en sorte que
la tension de 2,73 V "devienne" 0 V et que la tension de 3,73 V
"devienne" +5 V. Cela peut être obtenu avec un AOP que l'on montera
pour lui faire jouer à la fois les fonctions de décalage
(offset) et
d'amplification.
Utilisation de capteurs DS1620 ou DS1820
Les
DS1620 et DS1820 sont des circuits intégrés incluant dans un même
boitier un capteur de température analogique et un convertisseur
analogique / numérique, ce qui permet de les considérer comme des
capteurs
de température numériques. Ces capteurs délivrent sous forme numérique
la valeur de la température mais ils doivent être "pilotés" par le
microcontrôleur, ce qui n'est pas si évident que ça quand on veut en
piloter plusieurs en même temps. Cela est bien sûr possible mais
demande une gymnastique assez particulière côté logiciel, que la
version actuelle ne permet pas. Une solution
assez élégante peut consister à utiliser un multiplexeur comme système
de routage vers le microcontrôleur, qui ne doit alors gérer qu'une
seule ligne et non plus dix. Le DS1820 visible sur le schéma se voit
confier la tâche de la mesure de la température locale. Je rappelle que
le
thermostat 004 décrit ici est prévu pour recevoir 10 tensions
analogiques et non des données numériques, mais une modification
pourrait être envisagée. En attendant et pour ceux que ce
type de capteur intéresse, merci de vous reporter aux circuits
Thermostat 001 et
Thermostat 003 qui en font usage, avec code source à l'appui.
Capteurs pour hautes températures
Bien
que n'ayant pas ici de schéma particulier à proposer, il est possible
d'utiliser un thermocouple ou une sonde PT100 (avec électronique
adaptée) pour travailler avec des température de plusieurs centaines de
degrés Celcius. Voir page
Thermostat 003 pour quelques pistes.
Configuration des entrées de mesure
Pour
chacune des entrées de mesure, il est possible de spécifier la plage de
température désirée et les seuils Min et Max. Il est ainsi possible de
définir la plage de
mesure 0 °C à 1000 °C pour les entrées 1 et 5, et de définir la
plage de mesure 0 °C à 100 °C pour toutes les autres entrées. Pour
accéder aux divers réglage, il faut appuyer sur le bouton SW1/Mode,
autant de fois que requis pour aboutir au paramètre désiré. Puis
d'utiliser les boutons SW2/Inc ou SW3/Dec pour modifier la valeur en
cours d'affichage. Par exemple après la mise sous tension, un premier
appui sur SW1/Mode provoque l'affichage de la température en cours
mesurée sur l'entrée N°1.
Un second appui sur SW1/Mode provoque l'affichage de la plage de fonctionnement, 0 à 100 °C ou 0 à 1000 °C.
L'appui sur SW2/Inc ou SW3/Dec permet de changer la plage.
Un nouvel appui sur SW1/Mode permet de modifier le seuil bas (Min) :
et un autre permet de modifier le seuil haut (Max) :
Et ainsi de suite pour les autres entrées.
Evolutions possibles
-
Comme dit auparavant, ce thermostat pourrait travailler avec des
capteurs de températures numériques uniquement (de type DS1820 par
exemple). Pour l'instant cela n'est pas permis.
-
Le contrôle de tensions analogiques permet de
surveiller autre chose que des températures. Dès l'instant où vous
disposez de sources de tension travaillant sur la plage 0 V à +5 V,
vous pouvez imaginier bien d'autres applications, tel que par exemple
surveillance de tensions ou de courants. Pour l'instant l'affichage
montre l'unité "deg.C" mais cela est très facilement modifiable. On
pourrait par exemple fort bien utiliser la broche RB0/AN12 (configurée
en entrée analogique) pour définir quel type d'affichage adopter :
degrés Celcius, tension, courant, pression, etc. Tiens, je viens de me
rendre compte que c'est ce que j'avais prévu au départ, via potentiomètre RV2 /
DispMode. Le code logiciel comporte quelques lignes montrant comment
exploiter cette entrée de mode d'affichage, à vous de vous y pencher si
cela vous intéresse.
Prototype
Réalisé et testé avec ma platine EasyPic7.
Lecture
et affichage de la température locale avec le capteur numérique DS18S20
(caché sur la petite platine d'expérimentation blanche, à droite sur la
première photo) :
et lecture température voie 1, dont les consignes Min et Max étaient respectivement fixées à 19 °C et 21 °C.
En plus de l'affichage de la température actuelle, affichage de l'état de la sortie correspondante :
- (ON) à 18 °C puisque consigne Min = 19 °C
- (OFF) à 23 °C puisque consigne Max = 21 °C
Même chose bien sûr pour les neuf autres voies.
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
004 - 18F4525 - (13/05/2012)
Si vous souhaitez recevoir par la poste un PIC
préprogrammé et prêt à utiliser, merci de
consulter la page
PIC
- Sources.
Circuit imprimé
Non réalisé.
Historique
13/05/2012-
Correction bug mineur oscillateur. Le projet était configuré en mode
oscillateur externe (quartz 8 MHz) au lieu de l'être en oscillateur
interne 8 MHz.
- Correction bug mineur affichage caractère non désiré à côté des valeurs de température.
-
L'état de la sortie logique est désormais affiché "(ON)" ou "(OFF)" et
non plus "(Out ON)" ou "(Out OFF)" pour compatibilité avec un afficheur
16 caractères (comme celui utilisé pour les tests).
01/01/2012-
Mise à jour logiciel PIC. Désormais, il est possible de travailler sur
des plages de température 0° C à 100 °C et 0 °C à 1000 °C, et ce de
façon individuelle pour chaque entrée de mesure. Les valeurs de
température Min et Max sont désormais codées sur un type Word et non
plus sur un type Byte qui limitait l'étendue de la mesure à 255 °C (la
sauvegarde en EEProm des presets utilisateur a bien sûr été adpatée en
conséquence).
24/10/2010- Première mise à disposition