Мазмұны:

HTS221 мен бөлшек фотонының көмегімен ылғалдылық пен температураны өлшеу: 4 қадам
HTS221 мен бөлшек фотонының көмегімен ылғалдылық пен температураны өлшеу: 4 қадам

Бейне: HTS221 мен бөлшек фотонының көмегімен ылғалдылық пен температураны өлшеу: 4 қадам

Бейне: HTS221 мен бөлшек фотонының көмегімен ылғалдылық пен температураны өлшеу: 4 қадам
Бейне: Программирование МК STM32. УРОК 55. Подключаем датчик влажности HTS221. Часть 1 2024, Маусым
Anonim
Image
Image

HTS221 - салыстырмалы ылғалдылық пен температураның ультра жинақы сыйымдылықты сандық сенсоры. Ол сандық сериялық интерфейстер арқылы өлшеу ақпаратын беру үшін сенсорлық элементті және аралас сигналдық арнайы интегралды схеманы (ASIC) қамтиды. Бұл көптеген мүмкіндіктермен біріктірілген, бұл ылғалдылық пен температураны өлшеуге арналған ең қолайлы сенсорлардың бірі.

Бұл оқулықта HTS221 сенсорлық модулінің фотонды бөлшектермен байланысы суреттелген. Ылғалдылық пен температураның мәндерін оқу үшін біз I2c адаптері бар бөлшектерді қолдандық, бұл I2C адаптері сенсорлық модульге қосылуды жеңіл әрі сенімді етеді.

1 -қадам: Қажетті жабдық:

Қажетті жабдық
Қажетті жабдық
Қажетті жабдық
Қажетті жабдық
Қажетті жабдық
Қажетті жабдық

Мақсатқа жету үшін бізге қажет материалдар келесі аппараттық компоненттерді қамтиды:

1. HTS221

2. Фотондық бөлшектер

3. I2C кабелі

4. Бөлшек фотонға арналған I2C қалқаны

2 -қадам: Жабдықты қосу:

Жабдықты қосу
Жабдықты қосу
Жабдықты қосу
Жабдықты қосу

Аппаратты қосу бөлімі негізінен сенсор мен фотон бөлшектері арасындағы сымдық қосылыстарды түсіндіреді. Қажетті шығыс үшін кез келген жүйеде жұмыс істеу кезінде дұрыс қосылуды қамтамасыз ету - бұл негізгі қажеттілік. Сонымен, қажетті байланыстар келесідей:

HTS221 I2C арқылы жұмыс істейді. Датчиктің әр интерфейсін қалай қосуға болатынын көрсететін электр схемасының мысалы.

Қаптамадан тыс тақта I2C интерфейсі үшін конфигурацияланған, сондықтан егер сіз агностикалық болмасаңыз, осы қосылымды пайдалануды ұсынамыз.

Сізге тек төрт сым қажет! Vcc, Gnd, SCL және SDA түйреуіштеріне тек төрт қосылым қажет және олар I2C кабелінің көмегімен қосылған.

Бұл байланыстар жоғарыдағы суреттерде көрсетілген.

3 -қадам: Ылғалдылық пен температураны өлшеу коды:

Ылғалдылық пен температураны өлшеу коды
Ылғалдылық пен температураны өлшеу коды

Енді бөлшектер кодынан бастайық.

Бөлшекпен сенсорлық модульді пайдалану кезінде біз application.h және spark_wiring_i2c.h кітапханасын қосамыз. «application.h» және spark_wiring_i2c.h кітапханасы сенсор мен бөлшек арасындағы i2c байланысын жеңілдететін функцияларды қамтиды.

Пайдаланушыға ыңғайлы болу үшін бөлшектердің толық коды төменде берілген:

#қосу

#қосу

// HTS221 I2C мекенжайы - 0x5F

#Addr 0x5F анықтаңыз

қос ылғалдылық = 0,0;

қос cTemp = 0,0;

қос fTemp = 0,0;

int temp = 0;

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

{

// Айнымалыны орнатыңыз

Particle.variable («i2cdevice», «HTS221»);

Бөлшек.өзгермелі («Ылғалдылық», ылғалдылық);

Particle.variable («cTemp», cTemp);

// 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 Гц

Wire.write (0x85);

// I2C берілуін тоқтату

Wire.endTransmission ();

кешіктіру (300);

}

бос цикл ()

{

қол қойылмаған 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)

{

шикі = 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);

temp = (val [3] * 256) + val [2]; cTemp = ((((T1 - T0) / 8.0) * (temp - T2)) / (T3 - T2) + (T0 / 8.0);

fTemp = (cTemp * 1.8) + 32;

// Деректерді бақылау тақтасына шығару

Particle.publish («Салыстырмалы ылғалдылық:», Жол (ылғалдылық));

кешіктіру (1000);

Particle.publish («Цельсий бойынша температура:», String (cTemp));

кешіктіру (1000);

Particle.publish («Фаренгейт температурасы:», String (fTemp));

кешіктіру (1000);

}

Particle.variable () функциясы сенсордың шығысын сақтау үшін айнымалылар жасайды және Particle.publish () функциясы сайттың бақылау тақтасында шығуды көрсетеді.

Сенсор шығысы жоғарыдағы суретте көрсетілген.

4 -қадам: Өтініштер:

Қолданбалар
Қолданбалар

HTS221 ауаны ылғалдандырғыштар мен тоңазытқыштар сияқты әр түрлі тұтыну өнімдерінде қолданыла алады. Бұл сенсор ақылды үйді автоматтандыру, өнеркәсіптік автоматтандыру, тыныс алу құралдары, активтер мен тауарларды бақылау сияқты кең ауқымда қолданылады.

Ұсынылған: