Où sommes nous ?

Retour

Mesure d'humidité par un SHT31

Après avoir eu pas mal de déconvenues avec le classique DHT22 (dont le protocole aux timings très serré le rend difficilement exploitable sur un Arduino "lent"), je tente ma chance avec le plus récent SHT31 dont voici les caractéristiques :

La cerise sur le gâteau étant qu'il communique par un très classique I2C et comme ce protocole est généralement pris en charge par le matériel des micro-contrôleur, plus de problèmes avec ceux qui ont une horloge lente comme les Tiny.

Connexion

On peut (suivant le fournisseur) disposé des broches suivantes :

Plus d'informations sur le Datasheet.


Warning: filesize(): stat failed for /web/destroyedlolo/ESP/Humidite_SHT31/W5j8SVD0pmhIUDnW9-uvSwAAAAY in /web/php5/Albumine/lienimg.inc on line 21

Warning: filesize(): stat failed for /web/destroyedlolo/ESP/Humidite_SHT31/W5j8ZlD0pmhIUDnW9-uvTwAAAAY in /web/php5/Albumine/texte.inc on line 25

Programmons (Arduino)

Mes sources

Je me suis basé sur l'excellent tuto d'Ada fruit.

Pour la programmation, je suis parti sur la classique Adafruit_SHT31 qui est incluse dans le gestionnaire de bibliothèque de l'IDE Arduino : on clique, c'est installé.

On commence par inclure les librairies :

#include <Wire.h>

Nous allons utiliser l'I2C

#include <Adafruit_SHT31.h>

et le SHT. Enfin, nous définissons l'objet SHT

Adafruit_SHT31 sht31;

setup()

Dans la fonction setup(), la seule chose que nous avons à faire est de déclarer l'adresse sur laquelle répond notre sonde : 0x44 ou 0x45 suivant que la broche AD est connectée ou non.

sht31.begin(0x44);

A noter

Contrairement à ce qu'indique la doc d'AdaFruit, la fonction sht31.begin() ne teste absolument pas la présence de la sonde : elle renvoie toujours VRAI. Si l'on souhaite faire un test, il faut demander le status de la sonde (méthode readStatus() ) : si la réponse est 0xffff, la sonde n'est pas présente à l'adresse indiquée.

loop() : lecture des valeurs

Les valeurs sont accessibles par les simples fonctions :

float temperature = sht31.readTemperature();

et

float humidite = sht31.readHumidity();

La librairie ne permet qu'une mesure de la température en haute précision qui peut prendre jusqu'à 15 millisecondes. De même en interne, les 2 mesures sont lues à chaque fois ... ce qui implique 4 lectures si on enchaine les 2 fonctions (température et humidité). Hormis si le bus I2C est vraiment occupé, cela n'aura strictement aucune importance ... même si on fait mieux niveau optimisation.


Visitez :
La liste de nos voyages
Nos sorties Ski et rando
Copyright Laurent Faillie 2001-2018
N'oubliez pas d'entrer le mot de passe pour voir aussi les photos perso.
Contactez moi si vous souhaitez réutiliser ces photos et pour les obtenir avec une plus grande résolution.
Visites durant les 7 derniers jours Nombre de visites au total.

Vous pouvez laissez un commentaire sur cette page.