samedi 29 septembre 2012

Mesurer une température avec un Arduino

Le projet est simple:  construire un thermomètre au moyen d'un Arduino, d'un capteur de température et d'un afficheur à cristaux liquides.

Option 1:  le capteur numérique DS18B20

Je me suis procuré sur eBay une sonde constituée d'un capteur DS18B20 enfermé dans une capsule métallique hermétique et muni d'un câble d'environ 1 mètre de long (cherchez "Digital Temperature Sensor Probe DS18B20").

Les branchements du capteur à l'Arduino sont extrêmement simples:
  • fil rouge du capteur:  5 V de l'Arduino
  • fil noir du capteur: GND de l'Arduino
  • fil bleu du capteur:  entrée numérique 8 de l'Arduino
  • résistance de 4,7 K placée entre le fil rouge et le fil bleu
La sonde est précalibrée, les résultats sont extrêmement stables, et vous pouvez en principe mesurer n'importe quelle température entre -55°C et +125°C avec une résolution d'un demi degré.  En plus, puisque chaque DS18B20 dispose de sa propre adresse encodée en usine, vous pouvez relier plusieurs dizaines de capteurs de température à votre Arduino en n'utilisant qu'une seule entrée numérique!

Le seul inconvénient que je pourrais y voir, c'est que le décodage du message numérique reçu en provenance du DS18B20 est à mon avis un peu plus compliqué qu'un traditionnel signal analogique, mais la librairie "OneWire" fait le gros du travail.  Pour dire la vérité, je me suis contenté de modifier légèrement un sketch trouvé sur le site Hacktronics, sans me poser trop de questions sur la signification profonde du code.   Pour bien comprendre ce qui se passe, je vous conseille plutôt cet excellent tutoriel en français.


En ce qui concerne les branchements de l'afficheur à cristaux liquides (LCD), vous pouvez vous référer au schéma publié ici.



Option 2:  le capteur analogique LM35DZ

J'ai aussi essayé le LM35, qui est un capteur de température analogique:  il émet une tension proportionnelle à la température en degrés Celsius (10,0 mV par degré).   Il permet de mesurer des températures similaires au DS18B20:  de -55°C à 150°C, avec une résolution de 0,5°C.  Toutefois, la mesure d'une température négative avec un Arduino entraîne quelques complications, car on ne veut pas acheminer une tension négative à une entrée analogique...

J'ai fabriqué ma propre sonde hermétique en enfermant un LM35DZ dans une gaine thermorétractable et en ajoutant un peu de silicone.

En principe, les branchements à l'Arduino sont ridiculement simples:
  • broche GND du LM35 : GND de l'Arduino
  • broche Vout du LM35:  Entrée analogique 0 de l'Arduino
  • broche Vs du LM35:  Sortie 5 V de l'Arduino
Mais avec environ 1 mètre de câblage entre l'Arduino et le capteur, les résultats étaient un brin décevants:  la température affichée oscillait constamment sur une gamme d'environ 3 degrés.  L'ajout d'une résistance de 68 Ω et d'un condensateur de 1 µF en série entre l'entrée analogique 0 et le GND a permis de stabiliser l'affichage de façon spectaculaire:  il est maintenant très stable et parfaitement en accord avec la mesure obtenue au moyen du DS18B20.

Autre précaution utile:  puisque la tension qui provient à l'entrée analogique de l'Arduino ne dépassera guère 1 V, aussi bien utiliser une valeur de référence de 1,1 V plutôt que la valeur habituelle de 5 V (auquel cas l'appareil n'utiliserait que 20% de la plage disponible).  C'est fait dans le sketch au moyen de l'instruction "analogReference(INTERNAL);".


En ce qui concerne les branchements de l'afficheur à cristaux liquides (LCD), vous pouvez vous référer au schéma publié ici.


D'autres options?

Le LM335 est un autre capteur analogique qui peut être utilisée à la place du LM35 (il s'agit d'une diode Zener dont la tension de rupture est proportionnelle à la température.

Un thermocouple pourrait aussi être utilisé si vous désirez mesurer des températures très élevées (dans un four, par exemple).  Et il y a la bonne vieille thermistance, dont la résistance varie avec la température.  Dans ces cas, le calcul d'une température exacte en degrés Celsius à partir du signal mesuré peut par contre se révéler assez complexe.

Yves Pelletier (Twitter: @ElectroAmateur)

3 commentaires:

  1. Bonjour,
    pouvez-vous me dire à quoi correspond l'affichage sur le LCD 296K ???
    Je suis un débutant. Merci

    RépondreSupprimer
  2. bin, en fait, il s'agit de la température en Kelvin, qui est une unité de température absolue.

    RépondreSupprimer
  3. Bonjour, l'afficheur LCD résiste t-il aux rayons uv ? merci d'avance.

    RépondreSupprimer