Мазмуну:

HTS221 жана Arduino Nano аркылуу нымдуулукту жана температураны өлчөө: 4 кадам
HTS221 жана Arduino Nano аркылуу нымдуулукту жана температураны өлчөө: 4 кадам

Video: HTS221 жана Arduino Nano аркылуу нымдуулукту жана температураны өлчөө: 4 кадам

Video: HTS221 жана Arduino Nano аркылуу нымдуулукту жана температураны өлчөө: 4 кадам
Video: STC-3028 Thermostat with Heat and Humidity Fully Explained and demonstrated 2024, Июль
Anonim
Image
Image

HTS221 салыштырмалуу нымдуулук жана температура үчүн өтө компакт сыйымдуу санарип сенсор. Бул санариптик сериялык интерфейстер аркылуу өлчөө маалыматын берүү үчүн сезгич элементти жана аралаш сигналга тиешелүү интегралдык микросхеманы (ASIC) камтыйт. Бул көптөгөн өзгөчөлүктөр менен интеграцияланган, бул нымдуулукту жана температураны өлчөө үчүн эң ылайыктуу сенсорлордун бири.

Бул окуу куралында HTS221 сенсор модулунун arduino нано менен интерфейси сүрөттөлгөн. Нымдуулук жана температура баалуулуктарын окуу үчүн, I2c adapter. This I2C адаптери менен arduino колдонгонбуз, сенсор модулуна туташууну жеңил жана ишенимдүү кылат.

1 -кадам: Аппараттык камсыздоо талап кылынат:

Аппараттык камсыздоо талап кылынат
Аппараттык камсыздоо талап кылынат
Аппараттык камсыздоо талап кылынат
Аппараттык камсыздоо талап кылынат
Аппараттык камсыздоо талап кылынат
Аппараттык камсыздоо талап кылынат

Максатыбызга жетүү үчүн бизге керектүү материалдар төмөнкү аппараттык компоненттерди камтыйт:

1. HTS221

2. Ардуино Нано

3. I2C кабели

4. Arduino Nano үчүн I2C Shield

2 -кадам: Аппараттык туташуу:

Аппараттык туташуу
Аппараттык туташуу
Аппараттык туташуу
Аппараттык туташуу

Аппараттык туташуу бөлүмү негизинен сенсор менен arduino нанонун ортосунда талап кылынган зым байланыштарын түшүндүрөт. Туура туташууларды камсыздоо каалаган өндүрүш үчүн кандайдыр бир системада иштеп жатканда негизги зарылчылык болуп саналат. Ошентип, керектүү байланыштар төмөнкүлөр:

HTS221 I2C үстүндө иштейт. Бул жерде сенсордун ар бир интерфейсин кантип зым менен жабуу керектигин көрсөтүүчү зымдардын схемасы келтирилген.

Кутудан тышкары, такта I2C интерфейси үчүн конфигурацияланган, андыктан эгер сиз агностиксиз болсоңуз, анда бул байланышты колдонууну сунуштайбыз.

Сизге болгону төрт зым керек! Vcc, Gnd, SCL жана SDA төөнөгүчтөрүнө төрт гана туташуу керек жана алар I2C кабелинин жардамы менен туташкан.

Бул байланыштар жогорудагы сүрөттөрдө көрсөтүлгөн.

3 -кадам: Нымдуулукту жана температураны өлчөө коду:

Нымдуулукту жана температураны өлчөө коду
Нымдуулукту жана температураны өлчөө коду

Эми Arduino коду менен баштайлы.

Arduino менен сенсор модулун колдонуп жатып, биз Wire.h китепканасын кошобуз. "Wire" китепканасы сенсор менен Arduino тактасынын ортосундагы i2c байланышын жеңилдетүүчү функцияларды камтыйт.

Колдонуучунун ыңгайлуулугу үчүн бүт Arduino коду төмөндө келтирилген:

#кошуу

// HTS221 I2C дареги 0x5F

#define Addr 0x5F

жараксыз орнотуу ()

{

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

// Power ON, Үзгүлтүксүз жаңыртуу, Маалымат чыгаруу ылдамдыгы = 1 Гц

Wire.write (0x85);

// I2C берүүнү токтотуу

Wire.endTransmission ();

кечигүү (300);

}

боштук цикл ()

{

кол коюлбаган int маалыматтары [2];

unsigned 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 ();

}

}

// Нымдуулук маалыматын Convert

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

}

}

// Нымдуулук маалыматын Convert

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

}

}

// Нымдуулук маалыматын Convert

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

}

// Маалыматты конвертациялоо

калкыма нымдуулук = (вал [1] * 256.0) + вал [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) * (темп - 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 абаны нымдагычтар жана муздаткычтар сыяктуу ар кандай керектөөчү продуктыларда колдонулушу мүмкүн. Бул сенсор ошондой эле акылдуу үйдү автоматташтыруу, өнөр жайлык автоматташтыруу, дем алуу жабдуулары, активдерди жана товарларды көзөмөлдөө сыяктуу кеңири аренада колдонулат.

Сунушталууда: