Съдържание:

Измерване на влажност и температура с помощта на HTS221 и Arduino Nano: 4 стъпки
Измерване на влажност и температура с помощта на HTS221 и Arduino Nano: 4 стъпки

Видео: Измерване на влажност и температура с помощта на HTS221 и Arduino Nano: 4 стъпки

Видео: Измерване на влажност и температура с помощта на HTS221 и Arduino Nano: 4 стъпки
Видео: Измерение влажности воздуха в домашних условиях 2024, Юли
Anonim
Image
Image

HTS221 е ултра компактен капацитивен цифров сензор за относителна влажност и температура. Той включва сензорен елемент и специфична интегрална схема (ASIC) за прилагане на смесен сигнал за предоставяне на измервателната информация чрез цифрови серийни интерфейси. Интегриран с толкова много функции, това е един от най -подходящите сензори за измерване на критична влажност и температура.

В този урок е илюстрирано взаимодействието на сензорния модул HTS221 с arduino nano. За да прочетем стойностите на влажност и температура, използвахме arduino с адаптер I2c, който прави връзката с сензорния модул лесна и по -надеждна.

Стъпка 1: Изисква се хардуер:

Необходим хардуер
Необходим хардуер
Необходим хардуер
Необходим хардуер
Необходим хардуер
Необходим хардуер

Материалите, от които се нуждаем за постигане на целта ни, включват следните хардуерни компоненти:

1. HTS221

2. Arduino Nano

3. I2C кабел

4. I2C щит за Arduino Nano

Стъпка 2: Свързване на хардуера:

Хардуерно свързване
Хардуерно свързване
Хардуерно свързване
Хардуерно свързване

Разделът за свързване на хардуера основно обяснява необходимите кабелни връзки между сензора и arduino nano. Осигуряването на правилни връзки е основната необходимост, докато работите върху всяка система за желания изход. И така, необходимите връзки са както следва:

HTS221 ще работи през I2C. Ето примерната електрическа схема, демонстрираща как да свържете всеки интерфейс на сензора.

Извън кутията, дъската е конфигурирана за I2C интерфейс, като такава препоръчваме да използвате тази връзка, ако иначе не сте агностици.

Всичко, от което се нуждаете, са четири проводника! Изискват се само четири връзки Vcc, Gnd, SCL и SDA щифтове и те са свързани с помощта на I2C кабел.

Тези връзки са показани на снимките по -горе.

Стъпка 3: Код за измерване на влажност и температура:

Код за измерване на влажност и температура
Код за измерване на влажност и температура

Нека започнем с кода на Arduino сега.

Докато използваме сензорния модул с Arduino, ние включваме библиотеката Wire.h. Библиотеката "Wire" съдържа функциите, които улесняват i2c комуникацията между сензора и платката Arduino.

Целият код на Arduino е даден по -долу за удобство на потребителя:

#включва

// HTS221 I2C адресът е 0x5F

#define Addr 0x5F

void setup ()

{

// Инициализира I2C комуникацията като MASTER

Wire.begin ();

// Инициализира серийна комуникация, зададена скорост на предаване = 9600

Serial.begin (9600);

// Стартиране на I2C предаване

Wire.beginTransmission (Addr);

// Избор на регистър за средна конфигурация

Wire.write (0x10);

// Средни температурни проби = 256, Проби със средна влажност = 512

Wire.write (0x1B);

// Спиране на I2C предаването

Wire.endTransmission ();

// Стартиране на I2C предаване

Wire.beginTransmission (Addr);

// Изберете контролен регистър1

Wire.write (0x20);

// Захранване, непрекъснато актуализиране, Скорост на изход на данни = 1 Hz

Wire.write (0x85);

// Спиране на I2C предаването

Wire.endTransmission ();

забавяне (300);

}

void loop ()

{

беззнакови int данни [2];

беззнаков int val [4];

беззнаков int H0, H1, H2, H3, T0, T1, T2, T3, суров;

// Стойности за калибриране на влажността

за (int i = 0; i <2; i ++)

{

// Стартиране на I2C предаване

Wire.beginTransmission (Addr);

// Изпращане на регистър на данни

Wire.write ((48 + i));

// Спиране на I2C предаването

Wire.endTransmission ();

// Искане на 1 байт данни

Wire.requestFrom (Addr, 1);

// Прочетете 1 байт данни

ако (Wire.available () == 1)

{

данни = Wire.read ();

}

}

// Конвертиране на данни за влажността

H0 = данни [0] / 2;

H1 = данни [1] / 2;

за (int i = 0; i <2; i ++)

{

// Стартиране на I2C предаване

Wire.beginTransmission (Addr);

// Изпращане на регистър на данни

Wire.write ((54 + i));

// Спиране на I2C предаването

Wire.endTransmission ();

// Искане на 1 байт данни

Wire.requestFrom (Addr, 1);

// Прочетете 1 байт данни

ако (Wire.available () == 1)

{

данни = Wire.read ();

}

}

// Конвертиране на данни за влажността

H2 = (данни [1] * 256.0) + данни [0];

за (int i = 0; i <2; i ++)

{

// Стартиране на I2C предаване

Wire.beginTransmission (Addr);

// Изпращане на регистър на данни

Wire.write ((58 + i));

// Спиране на I2C предаването

Wire.endTransmission ();

// Искане на 1 байт данни

Wire.requestFrom (Addr, 1);

// Прочетете 1 байт данни

ако (Wire.available () == 1)

{

данни = Wire.read ();

}

}

// Конвертиране на данни за влажността

H3 = (данни [1] * 256,0) + данни [0];

// Стойности за калибриране на температурата

// Стартиране на I2C предаване

Wire.beginTransmission (Addr);

// Изпращане на регистър на данни

Wire.write (0x32);

// Спиране на I2C предаването

Wire.endTransmission ();

// Искане на 1 байт данни

Wire.requestFrom (Addr, 1);

// Прочетете 1 байт данни

ако (Wire.available () == 1)

{

T0 = Wire.read ();

}

// Стартиране на I2C предаване

Wire.beginTransmission (Addr);

// Изпращане на регистър на данни

Wire.write (0x33);

// Спиране на I2C предаването

Wire.endTransmission ();

// Искане на 1 байт данни

Wire.requestFrom (Addr, 1);

// Прочетете 1 байт данни

ако (Wire.available () == 1)

{

T1 = Wire.read ();

}

// Стартиране на I2C предаване

Wire.beginTransmission (Addr);

// Изпращане на регистър на данни

Wire.write (0x35);

// Спиране на I2C предаването

Wire.endTransmission ();

// Искане на 1 байт данни

Wire.requestFrom (Addr, 1);

// Прочетете 1 байт данни

ако (Wire.available () == 1)

{

raw = Wire.read ();

}

необработен = необработен & 0x0F;

// Преобразуваме стойностите на калибриране на температурата в 10-бита

T0 = ((необработен & 0x03) * 256) + T0;

T1 = ((необработен & 0x0C) * 64) + T1;

за (int i = 0; i <2; i ++)

{

// Стартиране на I2C предаване

Wire.beginTransmission (Addr);

// Изпращане на регистър на данни

Wire.write ((60 + i));

// Спиране на I2C предаването

Wire.endTransmission ();

// Искане на 1 байт данни

Wire.requestFrom (Addr, 1);

// Прочетете 1 байт данни

ако (Wire.available () == 1)

{

данни = Wire.read ();

}

}

// Конвертиране на данните

T2 = (данни [1] * 256,0) + данни [0];

за (int i = 0; i <2; i ++)

{

// Стартиране на I2C предаване

Wire.beginTransmission (Addr);

// Изпращане на регистър на данни

Wire.write ((62 + i));

// Спиране на I2C предаването

Wire.endTransmission ();

// Искане на 1 байт данни

Wire.requestFrom (Addr, 1);

// Прочетете 1 байт данни

ако (Wire.available () == 1)

{

данни = Wire.read ();

}

}

// Конвертиране на данните

T3 = (данни [1] * 256,0) + данни [0];

// Стартиране на I2C предаване

Wire.beginTransmission (Addr);

// Изпращане на регистър на данни

Wire.write (0x28 | 0x80);

// Спиране на I2C предаването

Wire.endTransmission ();

// Изискване на 4 байта данни

Wire.requestFrom (Addr, 4);

// Прочетете 4 байта данни

// влажност msb, влажност lsb, temp msb, temp lsb

ако (Wire.available () == 4)

{

val [0] = Wire.read ();

val [1] = Wire.read ();

val [2] = Wire.read ();

val [3] = Wire.read ();

}

// Конвертиране на данните

влажност на поплавъка = (val [1] * 256.0) + val [0];

влажност = ((1.0 * H1) - (1.0 * H0)) * (1.0 * влажност - 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;

// Извеждане на данни към сериен монитор

Serial.print ("Относителна влажност:");

Serial.print (влажност);

Serial.println (" % RH");

Serial.print ("Температура в Целзий:");

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

Serial.print ("Температура по Фаренхайт:");

Serial.print (fTemp);

Serial.println ("F");

забавяне (500);

}

В библиотеката с проводници Wire.write () и Wire.read () се използват за писане на командите и четене на изхода на сензора.

Serial.print () и Serial.println () се използват за показване на изхода на сензора на серийния монитор на Arduino IDE.

Изходът на сензора е показан на горната снимка.

Стъпка 4: Приложения:

Приложения
Приложения

HTS221 може да се използва в различни потребителски продукти като овлажнители на въздух и хладилници и др. Този сензор намира своето приложение и в по -широка област, включително автоматизация на интелигентен дом, промишлена автоматизация, дихателно оборудване, проследяване на активи и стоки.

Препоръчано: