Sadržaj:

Arduino Nano - HTS221 Vodič za senzor relativne vlažnosti i temperature: 4 koraka
Arduino Nano - HTS221 Vodič za senzor relativne vlažnosti i temperature: 4 koraka

Video: Arduino Nano - HTS221 Vodič za senzor relativne vlažnosti i temperature: 4 koraka

Video: Arduino Nano - HTS221 Vodič za senzor relativne vlažnosti i temperature: 4 koraka
Video: STC-3028 Thermostat with Heat and Humidity Fully Explained and demonstrated 2024, Novembar
Anonim
Image
Image

HTS221 je ultra kompaktni kapacitivni digitalni senzor za relativnu vlažnost i temperaturu. Sadrži osjetljivi element i integrirano kolo za mješoviti signal (ASIC) za mješoviti signal za pružanje mjernih informacija putem digitalnih serijskih sučelja. Integriran s toliko funkcija, ovo je jedan od najprikladnijih senzora za mjerenje kritične vlažnosti i temperature. Evo demonstracije s arduino nano.

Korak 1: Šta vam treba..

Sta ti treba..!!
Sta ti treba..!!

1. Arduino Nano

2. HTS221

3. I²C kabel

4. I²C štit za Arduino Nano

Korak 2: Veze:

Veze
Veze
Veze
Veze
Veze
Veze
Veze
Veze

Uzmite I2C štit za Arduino Nano i lagano ga gurnite preko igala Nano -a.

Zatim spojite jedan kraj I2C kabela na HTS221 senzor, a drugi kraj na I2C štit.

Veze su prikazane na gornjoj slici.

Korak 3: Kod:

Šifra
Šifra

Arduino kôd za HTS221 možete preuzeti sa našeg github spremišta- DCUBE zajednice.

Evo linka za isto:

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

Uključujemo knjižnicu Wire.h kako bismo olakšali I2c komunikaciju senzora s Arduino pločom.

Kôd možete i kopirati odavde, dat je na sljedeći način:

// Distribuirano s licencom za slobodnu volju.

// Koristite ga kako god želite, profitno ili besplatno, pod uvjetom da se uklapa u licence povezanih djela.

// HTS221

// Ovaj kod je dizajniran za rad s HTS221_I2CS I2C mini modulom

#include

// HTS221 I2C adresa je 0x5F

#define Addr 0x5F

void setup ()

{

// Inicializirajte I2C komunikaciju kao MASTER

Wire.begin ();

// Pokrećemo serijsku komunikaciju, postavljena brzina prijenosa = 9600

Serial.begin (9600);

// Pokretanje I2C prijenosa

Wire.beginTransmission (Addr);

// Odabir prosječnog registra konfiguracije

Wire.write (0x10);

// Uzorci prosječne temperature = 256, Uzorci prosječne vlažnosti = 512

Wire.write (0x1B);

// Zaustavljanje I2C prijenosa

Wire.endTransmission ();

// Pokretanje I2C prijenosa

Wire.beginTransmission (Addr);

// Odaberite kontrolni registar1

Wire.write (0x20);

// Uključeno, kontinuirano ažuriranje, Brzina izlaznih podataka = 1 Hz

Wire.write (0x85);

// Zaustavljanje I2C prijenosa

Wire.endTransmission ();

kašnjenje (300);

}

void loop ()

{

nepotpisani int podaci [2];

nepotpisani int val [4];

nepotpisani int H0, H1, H2, H3, T0, T1, T2, T3, sirovi;

// Vrijednosti kalibracije vlažnosti

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

{

// Pokretanje I2C prijenosa

Wire.beginTransmission (Addr);

// Slanje registra podataka

Wire.write ((48 + i));

// Zaustavljanje I2C prijenosa

Wire.endTransmission ();

// Zatražite 1 bajt podataka

Wire.requestFrom (Addr, 1);

// Očitavanje 1 bajta podataka

if (Wire.available () == 1)

{

podaci = Wire.read ();

}

}

// Pretvorimo podatke o vlažnosti

H0 = podaci [0] / 2;

H1 = podaci [1] / 2;

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

{

// Pokretanje I2C prijenosa

Wire.beginTransmission (Addr);

// Slanje registra podataka

Wire.write ((54 + i));

// Zaustavljanje I2C prijenosa

Wire.endTransmission ();

// Zatražite 1 bajt podataka

Wire.requestFrom (Addr, 1);

// Očitavanje 1 bajta podataka

if (Wire.available () == 1)

{

podaci = Wire.read ();

}

}

// Pretvorimo podatke o vlažnosti

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

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

{

// Pokretanje I2C prijenosa

Wire.beginTransmission (Addr);

// Slanje registra podataka

Wire.write ((58 + i));

// Zaustavljanje I2C prijenosa

Wire.endTransmission ();

// Zatražite 1 bajt podataka

Wire.requestFrom (Addr, 1);

// Očitavanje 1 bajta podataka

if (Wire.available () == 1)

{

podaci = Wire.read ();

}

}

// Pretvorimo podatke o vlažnosti

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

// Vrijednosti kalibracije temperature

// Pokretanje I2C prijenosa

Wire.beginTransmission (Addr);

// Slanje registra podataka

Wire.write (0x32);

// Zaustavljanje I2C prijenosa

Wire.endTransmission ();

// Zatražite 1 bajt podataka

Wire.requestFrom (Addr, 1);

// Očitavanje 1 bajta podataka

if (Wire.available () == 1)

{

T0 = Wire.read ();

}

// Pokretanje I2C prijenosa

Wire.beginTransmission (Addr);

// Slanje registra podataka

Wire.write (0x33);

// Zaustavljanje I2C prijenosa

Wire.endTransmission ();

// Zatražite 1 bajt podataka

Wire.requestFrom (Addr, 1);

// Očitavanje 1 bajta podataka

if (Wire.available () == 1)

{

T1 = Wire.read ();

}

// Pokretanje I2C prijenosa

Wire.beginTransmission (Addr);

// Slanje registra podataka

Wire.write (0x35);

// Zaustavljanje I2C prijenosa

Wire.endTransmission ();

// Zatražite 1 bajt podataka

Wire.requestFrom (Addr, 1);

// Očitavanje 1 bajta podataka

if (Wire.available () == 1)

{

raw = Wire.read ();

}

neobrađeno = sirovo & 0x0F;

// Pretvorimo vrijednosti kalibracije temperature u 10-bita

T0 = ((neobrađeno & 0x03) * 256) + T0;

T1 = ((neobrađeno & 0x0C) * 64) + T1;

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

{

// Pokretanje I2C prijenosa

Wire.beginTransmission (Addr);

// Slanje registra podataka

Wire.write ((60 + i));

// Zaustavljanje I2C prijenosa

Wire.endTransmission ();

// Zatražite 1 bajt podataka

Wire.requestFrom (Addr, 1);

// Očitavanje 1 bajta podataka

if (Wire.available () == 1)

{

podaci = Wire.read ();

}

}

// Pretvorimo podatke

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

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

{

// Pokretanje I2C prijenosa

Wire.beginTransmission (Addr);

// Slanje registra podataka

Wire.write ((62 + i));

// Zaustavljanje I2C prijenosa

Wire.endTransmission ();

// Zatražite 1 bajt podataka

Wire.requestFrom (Addr, 1);

// Očitavanje 1 bajta podataka

if (Wire.available () == 1)

{

podaci = Wire.read ();

}

}

// Pretvorimo podatke

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

// Pokretanje I2C prijenosa

Wire.beginTransmission (Addr);

// Slanje registra podataka

Wire.write (0x28 | 0x80);

// Zaustavljanje I2C prijenosa

Wire.endTransmission ();

// Zatražite 4 bajta podataka

Wire.requestFrom (Addr, 4);

// Očitavanje 4 bajta podataka

// vlažnost msb, vlažnost lsb, temp msb, temp lsb

if (Wire.available () == 4)

{

val [0] = Wire.read ();

val [1] = Wire.read ();

val [2] = Wire.read ();

val [3] = Wire.read ();

}

// Pretvorimo podatke

vlažnost plovka = (val [1] * 256,0) + val [0];

vlažnost = ((1,0 * H1) - (1,0 * H0)) * (1,0 * vlažnost - 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;

// Izlaz podataka na serijski monitor

Serial.print ("Relativna vlažnost:");

Serial.print (vlažnost);

Serial.println (" % RH");

Serial.print ("Temperatura u Celzijusima:");

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

Serial.print ("Temperatura u Fahrenheitu:");

Serial.print (fTemp);

Serial.println ("F");

kašnjenje (500);

}

Korak 4: Aplikacije:

HTS221 se može koristiti u raznim proizvodima široke potrošnje poput ovlaživača zraka i hladnjaka itd. Ovaj senzor svoju primjenu nalazi i u široj areni uključujući automatizaciju pametnih kuća, industrijsku automatizaciju, respiratornu opremu, praćenje imovine i robe.

Preporučuje se: