Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Capteurs > Capteurs d’environnement > Capteur d’humidité résistif

Capteur d’humidité résistif

dimanche 25 janvier 2009, par Julien H.

Un capteur d’humidité résistif (ou humidistance) permet d’évaluer l’humidité dans l’air au travers d’un simple dipôle se comportant et se connectant comme une résistance.

Pour notre test il s’agit du H25K5A de Sencera :

Il coûte un peu moins de 4€ chez Gotronic et c’est un bon moyen de réviser l’acquisition d’une résistance, et comment on peut implémenter une table de correspondance dans un microcontrôleur (look-up table).

Circuit de connexion au µC

On utilise deux résistances : l’humidistance (nom générique du capteur) en pull-up connectée à l’alimentation 5 volts et une résistance en pull-down connectée à la masse.

Entre les deux résistances, on obtient une tension de sortie du montage qu’on connecte sur un convertisseur analogique/numérique (tout bon microcontrôleur en est pourvu, avec plus ou moins de précision, 8 bits chez Pic et 10 bits chez Atmel).

La formule de calcul de la tension est donnée dans le petit schéma ci-dessous :

Il s’agit du montage classique de diviseur résistif.

Calcul de résistance

Je ne résiste pas au plaisir de vous faire partager mon bonheur depuis que j’ai trouvé le petit logiciel "Calcul de résistances" qui permet à la fois d’identifier la vieille résistance qui traine dans votre tiroir et aussi de préparer les couleurs des anneaux qu’il va falloir repérer dans les 10 000 résistances de votre tout nouveau sac "lowcost" où toutes les résistances sont mélangées sans aucune indication !

Le montage

Voici le circuit installé sur une plaquette d’essai. Quelques fils permettent de relier chacun des points à l’alimentation et à l’entrée analogique d’une Arduino.

Les tests

Test 1 : courbe analogique

Comme le circuit est connecté à une entrée analogique, on peut déjà réutiliser l’oscilloscope minimal et visualiser la valeur, et voir les variations.

#define ANALOG_IN 0

void setup() {
  Serial.begin(38400); 
}

void loop() {
  int val = analogRead(ANALOG_IN);
  Serial.print( 0xff, BYTE);
  Serial.print( (val >> 8) & 0xff, BYTE);
  Serial.print( val & 0xff, BYTE);
}

Et ça fonctionne : on peut mouiller le capteur avec un tissu imbibé d’eau puis sécher le capteur avec une lampe de bureau à incandescence (celle qui brûle les doigts quand on l’oriente) pour observer des variations.

La valeur sur ces diagrammes est comprise entre 12 (capteur sec) et 360 (capteur mouillé), l’unité étant le millième de 5 volts, puisque l’entrée analogique converti une tension entre 0 volts et la tension de référence (ici, 5 volts mais le microcontrôleur possède une entrée "AREF" permettant de changer cette valeur) en une valeur numérique sur 10 bits, soit comprise entre 0 et 1024.

Test 2 : les calculs

Bien sûr, il est plus difficile d’étalonner un capteur d’humidité qu’un capteur de température, car on n’a pas forcément sous la main un appareil de mesure d’humidité et il est difficile de faire varier l’humidité ambiante (rappelez-vous que pour le test premier, j’ai humecté directement le capteur).

Donc on va recourir à la formule du diviseur résistif (rappelé ci-dessus et expliqué par Pierre Mayé dans son très utile et très clair "Aide-mémoire des composants électroniques" chez Dunod éditeur, un peu de pub ne fait pas de mal et si jamais l’auteur lit ces lignes, qu’il n’hésite pas à nous contacter pour qu’on parle de moteurs électriques, un autre de ses ouvrages).

Les calculs et les courbes sont rassemblés dans le fichier Excel ci-joint, que vous pourrez modifier à votre guise, notamment en prenant en compte les valeurs de résistance correspondant à votre température d’utilisation telles que vous les trouverez dans la datasheet fournie au début de cet article.

Le tableau est très simple : on reproduit la table de correspondance fournie par le constructeur, on applique la formule de calcul de la tension entre les deux résistances RT et RH pour une tension d’entrée et une valeur de RT connue, et on fait le calcul de conversion linéaire de la tension analogique en une valeur numérique telle que l’opère le microcontrôleur Atmel 10 bits (d’où le 1024 que vous trouverez dans le tableau).

Donc si tout à l’heure j’ai obtenu 360 dans la lecture du port analogique, c’est que ça correspondait à 47% d’humidité relative (%HR) à la surface du capteur (logique puisque je ne l’ai pas non plus immergé dans l’eau, car avec la plaque d’essai où il est fixé ce ne serait pas pratique).

Exploitation des résultats

Bon, avec Excel on peut facilement calculer l’humidité en fonction de la valeur lue. Mais comment l’implémenter dans un microcontrôleur, sans prendre trop de ressources de calcul ? Regardons la courbe :

On peut considérer que la courbe est suffisamment droite pour faire une interpolation linéaire (on prend la valeur min, la valeur max, on en déduit la pente et on obtient l’humidité relative RH = a*T + b où a et b sont deux coefficients fixes qu’on ajuste selon la courbe.

Si cela n’est pas suffisant, on peut à la rigueur découper la courbe en 2 tronçons linéaires. Bien sûr l’idéal est de le faire pour le plus de valeurs possibles, c’est une discrétisation de la courbe qui permet de s’adapter aux ressources disponibles (mémoire, temps de calcul) dans le microcontrôleur.

Commentaire

En fait, la courbe n’est pas linéaire par hasard, cela tient au choix de la valeur de 47 kOhms pour la résistance RT. On le constate si on trace la courbe pour des valeurs de 1 kOhms et 200 kOhms :

Voilà, à vous de jouer !

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.