Thermomètre PC

Cette page ne seras jamais modifiée voyez la nouvelle version du document
Dans cette page nous verrons la mise en place d'un enregistreur de température à l'aide d'un PC sous linux ( le serveur Noiseless dans mon cas ).

Le schéma utilisé

Il existe plusieurs moyens de mesurer la température sous linux. ( Utilisation de composants comme le DS1621, DS18S20, ... ) mais j'ai malgré tout choisi d'utiliser une simple thermistance NTC pour ne pas avoir à commander des composants que je n'avais pas.
Circuit
Comme vous le voyez il y a la thermistance entre les broches 1 (+5V) et 3 (Valeur de de l'axe X ).
Je n'avais pas besoin de visualiser une deuxième température, j'ai mis une résistance entre les broches 1 et 6: elle est obligatoire sinon le module "analog" de votre noyau ne vas pas reconnaître votre montage. Vous pouvez bien sur mettre une thermistance NTC.

Attention à la valeur de la thermistance dans la gamme de température à visualiser. Votre de port jeux devrais pouvoir reconnaître des valeurs entre 1k ohm et 150k ohm même si celui de ma 'SoudBlaster AWE64 ISA/PNP' semble fonctionner jusqu'à 250k ohm ( mais attention au niveau de bruit sur le signal ).

Installation du logiciel

C'est sans doute la partie la plus compliqué car vous n'avez peut peut être pas les caractéristiques de votre NTC. Il faut que votre port jeux soit calibré et configuré.

Activation du port jeux

Un problème du circuit viens du fait qu'il faut une configuration correcte du noyau.
Il faut tout d'abord que votre port jeux soit reconnu, pour cela veuillez consulter la documentation à propos de votre carte son.

Quelques fois il faut charger le module "ns558", d'autre fois c'est avec la driver de la carte son.
Par exemple si vous avez une carte avec un chipset CM8738 vous allez activer le joystick dans la configuration du noyau et chargez le module avec "modprobe cmpci joystick=1"
Si votre port jeux est reconnu par la carte son vous devriez le noyau devrais produire un message du type
gameport: NS558 PnP at pnp01:01.01 io 0x200 size 8 speed 547 kHz

Il faut ensuite charger le module "analog", dans le noyau vous devriez voir quelque chose comme ceci
input: Analog 2-axis 4-button joystick at pnp01:01.01/gameport0 [TSC timer, 98 MHz clock, 1896 ns res]

Enfin chargez le module "evdev" et contrôlez que c'est bien reconnu.

$ cat /proc/bus/input/devices
I: Bus=0014 Vendor=0001 Product=000f Version=0100
N: Name="Analog 2-axis 4-button joystick"
P: Phys=pnp01:01.01/gameport0/input0
H: Handlers=event0
B: EV=b
B: KEY=1b 0 0 0 0 0 0 0 0 0
B: ABS=3


Dans mon cas j'accède au thermomètre via /dev/input/event0: aucun autre périphérique d'entrée n'est branché sur mon serveur. Mais si vous avez sur cette machine un clavier et une souris se seras probablement /dev/input/event2.

Attention, même sans changer de carte son, si vous changez la frequance CPU vous perdez la calibration.

Utilisation de temp.c

Évitez de me poser des questions trop techniques sur ce programme car je n'en suis pas l'auteur. Premièrement téléchargez le code original sur http://www.ainan.org/files/temp.c.

Comme dit dans le code source il faut compiler avec la commande

gcc temp.c -lm -O3 -Wall -W -ansi -o temp

Mais il faudras d'abord calibrer votre port jeux et votre NTC.

Calibration du port jeux

Commencez par decomenter l'option #define CALIBRATE puis préparez deux résistances de valeurs différentes que vous appellerez R_black et et R_red, mesurez leur valeurs à l'ohmmètre et modifiez la partie suivante du code source

/* these are the calibration resistors you use to measure the above values: */
#define R_black 26900.0
#define R_red 81600.0


Après avoir compilé le code vous allez mètre les resistances de calibration entre les broches du port jeux. Comme je n'avais pas besoin des deux mesures je n'est calibré que les broches 1 et 3 qui correspondent à l'axe X.

Lancez le code

# ./temp /dev/input/event0

x = 2081, R_a = 90504, T_a = -2.70
y = 2195, R_b = 5944, T_b = 63.15
La valeur "x" correspond à la valeur de calibration du sens X, càd les broches 1 et 3. La valeur "y" correspond aux broches 1 et 6 mais je ne les ais pas utilisés car je n'en avait pas besoin.
Ces valeurs de X ne veulent rien dire, je n'est pas repris mes resistances de calibration pour écrire cette documentation

Bref notez les valeurs de X ( voir y ) avec chacune des vos resistances de calibration dans chacun des ports à calibrer
Maintenant modifiez le code source avec les valeurs que vous avez mesurés avec chaque résistance
/* please measure and set these: */
#define x_black 3417.0 /* Valeur de x avec la résistance R_black entre les broches 1 et 3 */
#define x_red 174.0 /* Valeur de x avec la résistance R_red entre les broches 1 et 3 */
#define y_black 3381.0 /* Valeur de y avec la résistance R_black entre les broches 1 et 6 */
#define y_red 2192.0 /* Valeur de y avec la résistance R_red entre les broches 1 et 6 */


Une fois votre port jeux calibré vous allez pouvoir lire la valeur d'une resistance sur R_a et sur R_b si vous avez calibré les broches de Y ( 1,6 ). Si vous pouvez lire les bonnes valeurs ( essayez avec plusieurs resistances classique ) vous allez pouvoir commencer la calibration de votre NTC. Vous pouvez aussi recommenter l'option #define CALIBRATE

Calibration de votre NTC

Premièrement il vous faut connaître la valeur de votre NTC a 25.0°C. Comme je n'avais aucune documentation sur elle: j'ai approché une lampe électrique en collant la NTC à la sonde d'un autre thermomètre jusqu'à avoir 25°C, ensuite il faut mesurer la valeur à l'ohmmètre. J'ai mesuré 25.1kohm alors j'ai modifié la ligne suivante

#define R_s 25100.0

Maintenant c'est un peu plus compliqué. Il faut calculer la valeur du facteur B pour votre NTC.
Mettez votre NTC à deux températures si possible éloignés que nous appellerons T_a et T_b, les valeurs des resistances que vous allez mesurer serons R_a et R_b.
Il faut que T_a soit la température basse et T_b soit la température élevé, sachant qu'il s'agit de températures en °K, donc il faut ajouter 273.15 à la valeur en °C

Exemple 1


Pour comprendre voici un exemple:
T_a = 0°C ==> 273.15°K --> R_a = 77.5k
T_b = 20°C ==> 293.15°K --> R_b = 30.5k


Exemple 2


Modifiez le code source comme dans l'exemple suivant

/* fill in ntc thermistor specs here: */
#define B 3733.7


Maintenant votre thermomètre PC est sensé fonctionner, vous allez pouvoir lancer le programme en tache de fond pour éventuellement utiliser les scripts pour faire des graphiques ou autres.

Graphiques de température

J'ai fait un script pour tracer des graphiques de température en fonction de ce que est mesuré.
Il est composé en deux parties. "temperatured" qui doit être lancé en tache de fond, il devras probablement être modifié pour fonctionner chez vous.
La script plotemp sert a créer le graphiques de température pour les mettre dans une page HTML qui devrais être accessible depuis votre serveur http.

Problèmes connus

  • Attention à la longueur des cables utilisés. Je n'est pas d'oscilloscope pour le contrôler mais il me semble que le signal ce dégrade très vite la long du câble. Donc utilisez en un le plus court possible. Utilisez aussi si possible du fil plus épais. J'étais partie sur du câble de téléphone. J'ai de meilleurs résultats avec un câble électrique standard.
  • Attention à la valeur de votre NTC. J'étais à l'origine parti sur une NTC de 25Kohm mais le signal était perturbé pour les basses températures ( avec une valeur à mesurer supérieure a 60kohm. ), avec une NTC de 10k je n'est plus de problème de bruit mais la résolution d'affichage seras moindre pour les hautes températures. ( "+/- 0.5°C à 50°C" , "+/- 2°C à 100°C" )