Table des matières:
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-13 06:57
HTS221 est un capteur numérique capacitif ultra compact pour l'humidité relative et la température. Il comprend un élément de détection et un circuit intégré spécifique à l'application de signaux mixtes (ASIC) pour fournir les informations de mesure via des interfaces série numériques. Intégré avec tant de fonctionnalités, c'est l'un des capteurs les plus appropriés pour les mesures critiques d'humidité et de température. Voici la démonstration avec arduino nano.
Étape 1: Ce dont vous avez besoin.
1. Arduino Nano
2. HTS221
3. Câble I²C
4. Bouclier I²C pour Arduino Nano
Étape 2: Connexions:
Prenez un shield I2C pour Arduino Nano et poussez-le doucement sur les broches de Nano.
Connectez ensuite l'une des extrémités du câble I2C au capteur HTS221 et l'autre extrémité au blindage I2C.
Les connexions sont montrées dans l'image ci-dessus.
Étape 3: Coder:
Le code arduino pour HTS221 peut être téléchargé à partir de notre référentiel github - Communauté DCUBE.
Voici le lien pour le même:
github.com/DcubeTechVentures/HTS221/blob/master/Arduino/HTS221.ino
Nous incluons la bibliothèque Wire.h pour faciliter la communication I2c du capteur avec la carte Arduino.
Vous pouvez également copier le code d'ici, il est donné comme suit:
// Distribué avec une licence libre-arbitre.
// Utilisez-le comme vous le souhaitez, à profit ou gratuitement, à condition qu'il rentre dans les licences de ses œuvres associées.
// HTS221
// Ce code est conçu pour fonctionner avec le mini module HTS221_I2CS I2C
#comprendre
// L'adresse HTS221 I2C est 0x5F
#define Adr 0x5F
void setup()
{
// Initialiser la communication I2C en tant que MASTER
Fil.begin();
// Initialiser la communication série, définir le débit en bauds = 9600
Serial.begin(9600);
// Démarrer la transmission I2C
Wire.beginTransmission(Adr);
// Sélection du registre de configuration moyenne
Wire.write(0x10);
// Échantillons moyens de température = 256, Échantillons moyens d'humidité = 512
Wire.write(0x1B);
// Arrêter la transmission I2C
Wire.endTransmission();
// Démarrer la transmission I2C
Wire.beginTransmission(Adr);
// Sélection du registre de contrôle1
Wire.write(0x20);
// Mise sous tension, mise à jour continue, taux de sortie des données = 1 Hz
Wire.write(0x85);
// Arrêter la transmission I2C
Wire.endTransmission();
retard (300);
}
boucle vide()
{
données int non signées[2];
val int non signé[4];
entier non signé H0, H1, H2, H3, T0, T1, T2, T3, brut;
// Valeurs de calibrage d'humidité
for(int i = 0; i < 2; i++)
{
// Démarrer la transmission I2C
Wire.beginTransmission(Adr);
// Envoi du registre de données
Wire.write((48 + i));
// Arrêter la transmission I2C
Wire.endTransmission();
// Demande 1 octet de données
Wire.requestFrom(Adr, 1);
// Lit 1 octet de données
if(Fil.disponible() == 1)
{
data = Wire.read();
}
}
// Convertir les données d'humidité
H0 = données[0] / 2;
H1 = données[1] / 2;
for(int i = 0; i < 2; i++)
{
// Démarrer la transmission I2C
Wire.beginTransmission(Adr);
// Envoi du registre de données
Wire.write((54 + i));
// Arrêter la transmission I2C
Wire.endTransmission();
// Demande 1 octet de données
Wire.requestFrom(Adr, 1);
// Lit 1 octet de données
if(Fil.disponible() == 1)
{
data = Wire.read();
}
}
// Convertir les données d'humidité
H2 = (données[1] * 256,0) + données[0];
for(int i = 0; i < 2; i++)
{
// Démarrer la transmission I2C
Wire.beginTransmission(Adr);
// Envoi du registre de données
Wire.write((58 + i));
// Arrêter la transmission I2C
Wire.endTransmission();
// Demande 1 octet de données
Wire.requestFrom(Adr, 1);
// Lit 1 octet de données
if(Fil.disponible() == 1)
{
data = Wire.read();
}
}
// Convertir les données d'humidité
H3 = (données[1] * 256,0) + données[0];
// Valeurs d'étalonnage de la température
// Démarrer la transmission I2C
Wire.beginTransmission(Adr);
// Envoi du registre de données
Wire.write(0x32);
// Arrêter la transmission I2C
Wire.endTransmission();
// Demande 1 octet de données
Wire.requestFrom(Adr, 1);
// Lit 1 octet de données
if(Fil.disponible() == 1)
{
T0 = Wire.read();
}
// Démarrer la transmission I2C
Wire.beginTransmission(Adr);
// Envoi du registre de données
Wire.write(0x33);
// Arrêter la transmission I2C
Wire.endTransmission();
// Demande 1 octet de données
Wire.requestFrom(Adr, 1);
// Lit 1 octet de données
if(Fil.disponible() == 1)
{
T1 = Wire.read();
}
// Démarrer la transmission I2C
Wire.beginTransmission(Adr);
// Envoi du registre de données
Wire.write(0x35);
// Arrêter la transmission I2C
Wire.endTransmission();
// Demande 1 octet de données
Wire.requestFrom(Adr, 1);
// Lit 1 octet de données
if(Fil.disponible() == 1)
{
raw = Wire.read();
}
brut = brut & 0x0F;
// Convertir les valeurs d'étalonnage de température en 10 bits
T0 = ((brut & 0x03) * 256) + T0;
T1 = ((brut & 0x0C) * 64) + T1;
for(int i = 0; i < 2; i++)
{
// Démarrer la transmission I2C
Wire.beginTransmission(Adr);
// Envoi du registre de données
Wire.write((60 + i));
// Arrêter la transmission I2C
Wire.endTransmission();
// Demande 1 octet de données
Wire.requestFrom(Adr, 1);
// Lit 1 octet de données
if(Fil.disponible() == 1)
{
data = Wire.read();
}
}
// Convertir les données
T2 = (données[1] * 256,0) + données[0];
for(int i = 0; i < 2; i++)
{
// Démarrer la transmission I2C
Wire.beginTransmission(Adr);
// Envoi du registre de données
Wire.write((62 + i));
// Arrêter la transmission I2C
Wire.endTransmission();
// Demande 1 octet de données
Wire.requestFrom(Adr, 1);
// Lit 1 octet de données
if(Fil.disponible() == 1)
{
data = Wire.read();
}
}
// Convertir les données
T3 = (données[1] * 256.0) + données[0];
// Démarrer la transmission I2C
Wire.beginTransmission(Adr);
// Envoi du registre de données
Wire.write(0x28 | 0x80);
// Arrêter la transmission I2C
Wire.endTransmission();
// Demande 4 octets de données
Wire.requestFrom(Adr, 4);
// Lecture de 4 octets de données
// humidité msb, humidité lsb, temp msb, temp lsb
if(Fil.disponible() == 4)
{
val[0] = Wire.read();
val[1] = Wire.read();
val[2] = Wire.read();
val[3] = Wire.read();
}
// Convertir les données
humidité flottante = (val[1] * 256.0) + val[0];
humidité = ((1,0 * H1) - (1,0 * H0)) * (1,0 * humidité - 1,0 * H2) / (1,0 * H3 - 1,0 * H2) + (1,0 * H0);
int temp = (val[3] * 256) + val[2];
float cTemp = (((T1 - T0) / 8,0) * (temp - T2)) / (T3 - T2) + (T0 / 8,0);
float fTemp = (cTemp * 1,8) + 32;
// Sortie des données vers le moniteur série
Serial.print ("Humidité relative:");
Serial.print(humidité);
Serial.println ("% RH");
Serial.print("Température en Celsius: ");
Serial.print(cTemp); Serial.println("C");
Serial.print("Température en Fahrenheit: ");
Serial.print(fTemp);
Serial.println(" F");
retard (500);
}
Étape 4: Candidatures:
HTS221 peut être utilisé dans divers produits de consommation tels que les humidificateurs d'air et les réfrigérateurs, etc. Ce capteur trouve également son application dans un domaine plus large, notamment la domotique intelligente, l'automatisation industrielle, les équipements respiratoires, le suivi des actifs et des marchandises.