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

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.
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.

thermostat_004
Schéma du 24/10/2010

Principe 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 !

LM35 - Brochage Capteur Temp 001 - LM35

+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.

thermostat_004_lcd_001a

Un second appui sur SW1/Mode provoque l'affichage de la plage de fonctionnement, 0 à 100 °C ou 0 à 1000 °C.

thermostat_004_lcd_001b

L'appui sur SW2/Inc ou SW3/Dec permet de changer la plage.

thermostat_004_lcd_001c

Un nouvel appui sur SW1/Mode permet de modifier le seuil bas (Min) :

thermostat_004_lcd_001d

et un autre permet de modifier le seuil haut (Max) :

thermostat_004_lcd_001e

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.

thermostat_004_proto_001a thermostat_004_proto_001b thermostat_004_proto_001c

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) :

thermostat_004_proto_001d

et lecture température voie 1, dont les consignes Min et Max étaient respectivement fixées à 19 °C et 21 °C.

thermostat_004_proto_001e thermostat_004_proto_001f

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