Съдържание:

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

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

Видео: Arduino Nano - HTS221 Урок за сензор за относителна влажност и температура: 4 стъпки
Видео: Arduino Nano 33 BLE Sense — плата с голосовым управлением, IMU, датчиком цвета и метеосенсором. 2024, Юли
Anonim
Image
Image

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

Стъпка 1: Какво ви трябва..

От какво имаш нужда..!!
От какво имаш нужда..!!

1. Arduino Nano

2. HTS221

3. Кабел I²C

4. I²C щит за Arduino Nano

Стъпка 2: Връзки:

Връзки
Връзки
Връзки
Връзки
Връзки
Връзки
Връзки
Връзки

Вземете I2C щит за Arduino Nano и го натиснете леко върху щифтовете на Nano.

След това свържете единия край на I2C кабела към сензора HTS221, а другия край към I2C щита.

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

Стъпка 3: Код:

Код
Код

Кодът arduino за HTS221 може да бъде изтеглен от нашето хранилище на github- DCUBE общност.

Ето линк за същото:

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

Включваме библиотека Wire.h, за да улесним I2c комуникацията на сензора с платката Arduino.

Можете също да копирате кода от тук, той е даден, както следва:

// Разпространява се с лиценз за свободна воля.

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

// HTS221

// Този код е проектиран да работи с HTS221_I2CS I2C мини модул

#включва

// 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);

}

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

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

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