Obsah:

Výukový program Arduino Nano - HTS221 Relativní vlhkost a teplota: 4 kroky
Výukový program Arduino Nano - HTS221 Relativní vlhkost a teplota: 4 kroky

Video: Výukový program Arduino Nano - HTS221 Relativní vlhkost a teplota: 4 kroky

Video: Výukový program Arduino Nano - HTS221 Relativní vlhkost a teplota: 4 kroky
Video: Arduino Nano 33 BLE Sense — плата с голосовым управлением, IMU, датчиком цвета и метеосенсором. 2024, Listopad
Anonim
Image
Image

HTS221 je ultra kompaktní kapacitní digitální senzor pro relativní vlhkost a teplotu. Obsahuje snímací prvek a integrovaný obvod specifický pro smíšený signál (ASIC), který poskytuje informace o měření prostřednictvím digitálních sériových rozhraní. Integrovaný s tolika funkcemi je jedním z nejvhodnějších senzorů pro kritická měření vlhkosti a teploty. Zde je ukázka s arduino nano.

Krok 1: Co potřebujete..

Co potřebuješ..!!
Co potřebuješ..!!

1. Arduino Nano

2. HTS221

3. I²C kabel

4. I²C štít pro Arduino Nano

Krok 2: Připojení:

Připojení
Připojení
Připojení
Připojení
Připojení
Připojení
Připojení
Připojení

Vezměte štít I2C pro Arduino Nano a jemně jej zatlačte přes kolíky Nano.

Poté připojte jeden konec kabelu I2C k senzoru HTS221 a druhý konec ke stínění I2C.

Připojení jsou znázorněna na obrázku výše.

Krok 3: Kód:

Kód
Kód

Arduino kód pro HTS221 lze stáhnout z našeho úložiště github- komunita DCUBE.

Zde je odkaz na totéž:

github.com/DcubeTechVentures/HTS221/blob/master/Arduino/HTS221.ino

Zahrnujeme knihovnu Wire.h pro usnadnění I2c komunikace senzoru s deskou Arduino.

Odtud můžete také zkopírovat kód, který je uveden následovně:

// Distribuováno s licencí svobodné vůle.

// Používejte jej jakýmkoli způsobem, ať už ziskem nebo zdarma, za předpokladu, že se vejde do licencí souvisejících děl.

// HTS221

// Tento kód je navržen tak, aby fungoval s mini modulem HTS221_I2CS I2C

#zahrnout

// Adresa I2C HTS221 je 0x5F

#define Addr 0x5F

neplatné nastavení ()

{

// Inicializujte komunikaci I2C jako MASTER

Wire.begin ();

// Inicializace sériové komunikace, nastavení přenosové rychlosti = 9600

Serial.begin (9600);

// Spusťte přenos I2C

Wire.beginTransmission (Addr);

// Vyberte průměrný konfigurační registr

Wire.write (0x10);

// Průměrné teplotní vzorky = 256, Vlhké průměrné vzorky = 512

Wire.write (0x1B);

// Zastavte přenos I2C

Wire.endTransmission ();

// Spusťte přenos I2C

Wire.beginTransmission (Addr);

// Vyberte řídicí registr1

Wire.write (0x20);

// ZAPNUTO, nepřetržitá aktualizace, výstupní rychlost dat = 1 Hz

Wire.write (0x85);

// Zastavte přenos I2C

Wire.endTransmission ();

zpoždění (300);

}

prázdná smyčka ()

{

nepodepsaná int data [2];

bez znaménka int val [4];

nepodepsané int H0, H1, H2, H3, T0, T1, T2, T3, raw;

// Hodnoty kalibrace vlhkosti

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

{

// Spusťte přenos I2C

Wire.beginTransmission (Addr);

// Odeslání datového registru

Wire.write ((48 + i));

// Zastavte přenos I2C

Wire.endTransmission ();

// Vyžádejte si 1 bajt dat

Wire.requestFrom (Addr, 1);

// Přečíst 1 bajt dat

pokud (Wire.available () == 1)

{

data = Wire.read ();

}

}

// Převod údajů o vlhkosti

H0 = data [0] / 2;

H1 = data [1] / 2;

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

{

// Spusťte přenos I2C

Wire.beginTransmission (Addr);

// Odeslání datového registru

Wire.write ((54 + i));

// Zastavte přenos I2C

Wire.endTransmission ();

// Vyžádejte si 1 bajt dat

Wire.requestFrom (Addr, 1);

// Přečíst 1 bajt dat

pokud (Wire.available () == 1)

{

data = Wire.read ();

}

}

// Převod údajů o vlhkosti

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

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

{

// Spusťte přenos I2C

Wire.beginTransmission (Addr);

// Odeslání datového registru

Wire.write ((58 + i));

// Zastavte přenos I2C

Wire.endTransmission ();

// Vyžádejte si 1 bajt dat

Wire.requestFrom (Addr, 1);

// Přečíst 1 bajt dat

pokud (Wire.available () == 1)

{

data = Wire.read ();

}

}

// Převod údajů o vlhkosti

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

// Hodnoty kalibrace teploty

// Spusťte přenos I2C

Wire.beginTransmission (Addr);

// Odeslání datového registru

Wire.write (0x32);

// Zastavte přenos I2C

Wire.endTransmission ();

// Vyžádejte si 1 bajt dat

Wire.requestFrom (Addr, 1);

// Přečíst 1 bajt dat

pokud (Wire.available () == 1)

{

T0 = Wire.read ();

}

// Spusťte přenos I2C

Wire.beginTransmission (Addr);

// Odeslání datového registru

Wire.write (0x33);

// Zastavte přenos I2C

Wire.endTransmission ();

// Vyžádejte si 1 bajt dat

Wire.requestFrom (Addr, 1);

// Přečíst 1 bajt dat

pokud (Wire.available () == 1)

{

T1 = Wire.read ();

}

// Spusťte přenos I2C

Wire.beginTransmission (Addr);

// Odeslání datového registru

Wire.write (0x35);

// Zastavte přenos I2C

Wire.endTransmission ();

// Vyžádejte si 1 bajt dat

Wire.requestFrom (Addr, 1);

// Přečíst 1 bajt dat

pokud (Wire.available () == 1)

{

raw = Wire.read ();

}

raw = raw & 0x0F;

// Převede hodnoty kalibrace teploty na 10 bitů

T0 = ((surový & 0x03) * 256) + T0;

T1 = ((surový & 0x0C) * 64) + T1;

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

{

// Spusťte přenos I2C

Wire.beginTransmission (Addr);

// Odeslání datového registru

Wire.write ((60 + i));

// Zastavte přenos I2C

Wire.endTransmission ();

// Vyžádejte si 1 bajt dat

Wire.requestFrom (Addr, 1);

// Přečíst 1 bajt dat

pokud (Wire.available () == 1)

{

data = Wire.read ();

}

}

// Převod dat

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

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

{

// Spusťte přenos I2C

Wire.beginTransmission (Addr);

// Odeslání datového registru

Wire.write ((62 + i));

// Zastavte přenos I2C

Wire.endTransmission ();

// Vyžádejte si 1 bajt dat

Wire.requestFrom (Addr, 1);

// Přečíst 1 bajt dat

pokud (Wire.available () == 1)

{

data = Wire.read ();

}

}

// Převod dat

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

// Spusťte přenos I2C

Wire.beginTransmission (Addr);

// Odeslání datového registru

Wire.write (0x28 | 0x80);

// Zastavte přenos I2C

Wire.endTransmission ();

// Vyžádejte si 4 bajty dat

Wire.requestFrom (Addr, 4);

// Přečíst 4 bajty dat

// vlhkost msb, vlhkost lsb, temp msb, temp lsb

pokud (Wire.available () == 4)

{

val [0] = Wire.read ();

val [1] = Wire.read ();

val [2] = Wire.read ();

val [3] = Wire.read ();

}

// Převod dat

plovoucí vlhkost = (val [1] * 256,0) + val [0];

vlhkost = ((1,0 * H1) - (1,0 * H0)) * (1,0 * vlhkost - 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) * (teplota - T2)) / (T3 - T2) + (T0 / 8,0);

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

// Výstup dat na sériový monitor

Serial.print ("Relativní vlhkost:");

Sériový tisk (vlhkost);

Serial.println (" % RH");

Serial.print ("Teplota ve stupních Celsia:");

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

Serial.print ("Teplota ve stupních Fahrenheita:");

Serial.print (fTemp);

Serial.println ("F");

zpoždění (500);

}

Krok 4: Aplikace:

HTS221 lze použít v různých spotřebních výrobcích, jako jsou zvlhčovače vzduchu a chladničky atd. Tento senzor také nachází své uplatnění v širších oblastech, včetně inteligentní domácí automatizace, průmyslové automatizace, respiračních zařízení, sledování majetku a zboží.

Doporučuje: