Tartalomjegyzék:

Páratartalom és hőmérséklet mérés HTS221 és Arduino Nano használatával: 4 lépés
Páratartalom és hőmérséklet mérés HTS221 és Arduino Nano használatával: 4 lépés

Videó: Páratartalom és hőmérséklet mérés HTS221 és Arduino Nano használatával: 4 lépés

Videó: Páratartalom és hőmérséklet mérés HTS221 és Arduino Nano használatával: 4 lépés
Videó: STC-3028 Thermostat with Heat and Humidity Fully Explained and demonstrated 2024, Július
Anonim
Image
Image

A HTS221 egy ultrakompakt kapacitív digitális érzékelő a relatív páratartalomhoz és a hőmérséklethez. Tartalmaz egy érzékelő elemet és egy vegyes jelműspecifikus integrált áramkört (ASIC) a mérési információk digitális soros interfészeken keresztül történő biztosítására. Sok funkcióval integrálva ez az egyik legmegfelelőbb érzékelő a kritikus páratartalom és hőmérséklet mérésekhez.

Ebben az oktatóanyagban bemutattuk a HTS221 érzékelő modul és az arduino nano interfészét. A páratartalom és hőmérséklet értékek leolvasásához az arduino -t használtuk I2c adapterrel. Ez az I2C adapter megkönnyíti és megbízhatóbbá teszi a kapcsolatot az érzékelőmodullal.

1. lépés: Szükséges hardver:

Szükséges hardver
Szükséges hardver
Szükséges hardver
Szükséges hardver
Szükséges hardver
Szükséges hardver

A célunk eléréséhez szükséges anyagok a következő hardverkomponenseket tartalmazzák:

1. HTS221

2. Arduino Nano

3. I2C kábel

4. I2C pajzs az Arduino Nano számára

2. lépés: Hardver csatlakoztatása:

Hardver csatlakoztatása
Hardver csatlakoztatása
Hardver csatlakoztatása
Hardver csatlakoztatása

A hardvercsatlakozási szakasz alapvetően elmagyarázza az érzékelő és az arduino nano között szükséges vezetékeket. A megfelelő kapcsolatok biztosítása az alapvető szükséglet, amikor bármilyen rendszeren dolgozik a kívánt kimenet érdekében. Tehát a szükséges kapcsolatok a következők:

A HTS221 az I2C -n keresztül fog működni. Íme a példa kapcsolási rajz, amely bemutatja, hogyan kell bekötni az érzékelő egyes interfészeit.

A doboz készenlétben I2C interfészre van konfigurálva, ezért javasoljuk, hogy használja ezt a csatlakozást, ha egyébként agnosztikus.

Csak négy vezetékre van szüksége! Csak négy csatlakozóra van szükség Vcc, Gnd, SCL és SDA csapokra, és ezeket I2C kábel segítségével kell csatlakoztatni.

Ezeket az összefüggéseket a fenti képek mutatják be.

3. lépés: A páratartalom és a hőmérséklet mérésének kódja:

A páratartalom és a hőmérséklet mérésének kódja
A páratartalom és a hőmérséklet mérésének kódja

Kezdjük most az Arduino kóddal.

Miközben az érzékelő modult használja az Arduino -val, a Wire.h könyvtárat is tartalmazza. A "Wire" könyvtár azokat a funkciókat tartalmazza, amelyek megkönnyítik az i2c kommunikációt az érzékelő és az Arduino kártya között.

A teljes Arduino kódot az alábbiakban adjuk meg a felhasználó kényelme érdekében:

#befoglalni

// A HTS221 I2C címe 0x5F

#define Addr 0x5F

üres beállítás ()

{

// Inicializálja az I2C kommunikációt MASTER -ként

Wire.begin ();

// Inicializálja a soros kommunikációt, állítsa be az átviteli sebességet = 9600

Sorozat.kezdet (9600);

// Indítsa el az I2C átvitelt

Wire.beginTransmission (Addr);

// Válassza ki az átlagos konfigurációs regisztert

Wire.write (0x10);

// Hőmérsékleti átlagminták = 256, Páratartalom átlagos minták = 512

Wire.write (0x1B);

// Állítsa le az I2C átvitelt

Wire.endTransmission ();

// Indítsa el az I2C átvitelt

Wire.beginTransmission (Addr);

// Vezérlőregiszter kiválasztása1

Wire.write (0x20);

// Bekapcsolás, folyamatos frissítés, adatkimeneti sebesség = 1 Hz

Wire.write (0x85);

// Állítsa le az I2C átvitelt

Wire.endTransmission ();

késleltetés (300);

}

üres hurok ()

{

előjel nélküli int adatok [2];

unsigned int val [4];

előjel nélküli int H0, H1, H2, H3, T0, T1, T2, T3, nyers;

// Páratartalom hívásértékek

for (int i = 0; i <2; i ++)

{

// Indítsa el az I2C átvitelt

Wire.beginTransmission (Addr);

// Adatregiszter küldése

Wire.write ((48 + i));

// Állítsa le az I2C átvitelt

Wire.endTransmission ();

// 1 bájt adat kérése

Wire.requestFrom (Addr, 1);

// 1 bájt adat olvasása

ha (Wire.available () == 1)

{

adatok = Wire.read ();

}

}

// Nedvesség adatok konvertálása

H0 = adatok [0] / 2;

H1 = adatok [1] / 2;

for (int i = 0; i <2; i ++)

{

// Indítsa el az I2C átvitelt

Wire.beginTransmission (Addr);

// Adatregiszter küldése

Wire.write ((54 + i));

// Állítsa le az I2C átvitelt

Wire.endTransmission ();

// 1 bájt adat kérése

Wire.requestFrom (Addr, 1);

// 1 bájt adat olvasása

ha (Wire.available () == 1)

{

adatok = Wire.read ();

}

}

// Nedvesség adatok konvertálása

H2 = (adatok [1] * 256,0) + adatok [0];

for (int i = 0; i <2; i ++)

{

// Indítsa el az I2C átvitelt

Wire.beginTransmission (Addr);

// Adatregiszter küldése

Wire.write ((58 + i));

// Állítsa le az I2C átvitelt

Wire.endTransmission ();

// 1 bájt adat kérése

Wire.requestFrom (Addr, 1);

// 1 bájt adat olvasása

ha (Wire.available () == 1)

{

adatok = Wire.read ();

}

}

// Nedvesség adatok konvertálása

H3 = (adatok [1] * 256,0) + adatok [0];

// Hőmérséklet -mérési értékek

// Indítsa el az I2C átvitelt

Wire.beginTransmission (Addr);

// Adatregiszter küldése

Wire.write (0x32);

// Állítsa le az I2C átvitelt

Wire.endTransmission ();

// 1 bájt adat kérése

Wire.requestFrom (Addr, 1);

// 1 bájt adat olvasása

ha (Wire.available () == 1)

{

T0 = huzal.olvasás ();

}

// Indítsa el az I2C átvitelt

Wire.beginTransmission (Addr);

// Adatregiszter küldése

Wire.write (0x33);

// Állítsa le az I2C átvitelt

Wire.endTransmission ();

// 1 bájt adat kérése

Wire.requestFrom (Addr, 1);

// 1 bájt adat olvasása

ha (Wire.available () == 1)

{

T1 = huzal.olvasás ();

}

// Indítsa el az I2C átvitelt

Wire.beginTransmission (Addr);

// Adatregiszter küldése

Wire.write (0x35);

// Állítsa le az I2C átvitelt

Wire.endTransmission ();

// 1 bájt adat kérése

Wire.requestFrom (Addr, 1);

// 1 bájt adat olvasása

ha (Wire.available () == 1)

{

nyers = Wire.read ();

}

nyers = nyers & 0x0F;

// A hőmérséklet-hívásértékek konvertálása 10 bitre

T0 = ((nyers & 0x03) * 256) + T0;

T1 = ((nyers & 0x0C) * 64) + T1;

for (int i = 0; i <2; i ++)

{

// Indítsa el az I2C átvitelt

Wire.beginTransmission (Addr);

// Adatregiszter küldése

Wire.write ((60 + i));

// Állítsa le az I2C átvitelt

Wire.endTransmission ();

// 1 bájt adat kérése

Wire.requestFrom (Addr, 1);

// 1 bájt adat olvasása

ha (Wire.available () == 1)

{

adatok = Wire.read ();

}

}

// Konvertálja az adatokat

T2 = (adatok [1] * 256,0) + adatok [0];

for (int i = 0; i <2; i ++)

{

// Indítsa el az I2C átvitelt

Wire.beginTransmission (Addr);

// Adatregiszter küldése

Wire.write ((62 + i));

// Állítsa le az I2C átvitelt

Wire.endTransmission ();

// 1 bájt adat kérése

Wire.requestFrom (Addr, 1);

// 1 bájt adat olvasása

ha (Wire.available () == 1)

{

adatok = Wire.read ();

}

}

// Konvertálja az adatokat

T3 = (adatok [1] * 256,0) + adatok [0];

// Indítsa el az I2C átvitelt

Wire.beginTransmission (Addr);

// Adatregiszter küldése

Wire.write (0x28 | 0x80);

// Állítsa le az I2C átvitelt

Wire.endTransmission ();

// 4 bájt adat kérése

Wire.requestFrom (Addr, 4);

// 4 bájt adat olvasása

// páratartalom msb, páratartalom lsb, temp msb, temp lsb

ha (Wire.available () == 4)

{

val [0] = Huzal.olvasás ();

val [1] = Huzal.olvasás ();

val [2] = Huzal.olvasás ();

val [3] = Huzal.olvasás ();

}

// Konvertálja az adatokat

úszó páratartalom = (val [1] * 256,0) + val [0];

páratartalom = ((1,0 * H1) - (1,0 * H0)) * (1,0 * páratartalom - 1,0 * H2) / (1,0 * H3 - 1,0 * H2) + (1,0 * H0);

int temp = (val [3] * 256) + val [2];

úszó cTemp = ((((T1 - T0) / 8,0) * (hőmérséklet - T2)) / (T3 - T2) + (T0 / 8,0);

float fTemp = (cTemp * 1,8) + 32;

// Adatok kimenete soros monitorra

Serial.print ("Relatív páratartalom:");

Soros.nyomtatás (páratartalom);

Soros.println (" % RH");

Serial.print ("Hőmérséklet Celsius -ban:");

Serial.print (cTemp); Serial.println ("C");

Serial.print ("Hőmérséklet Fahrenheitben:");

Serial.print (fTemp);

Serial.println ("F");

késleltetés (500);

}

A vezetékes könyvtárban a Wire.write () és a Wire.read () parancsokat írják és olvassák le az érzékelő kimenetét.

A Serial.print () és a Serial.println () az érzékelő kimenetének megjelenítésére szolgál az Arduino IDE soros monitorán.

Az érzékelő kimenete a fenti képen látható.

4. lépés: Alkalmazások:

Alkalmazások
Alkalmazások

A HTS221 alkalmazható különféle fogyasztási cikkekben, például légnedvesítőkben és hűtőszekrényekben. Ez az érzékelő szélesebb körben is alkalmazható, beleértve az intelligens otthoni automatizálást, az ipari automatizálást, a légzőkészülékeket, az eszközök és áruk nyomon követését.

Ajánlott: