Բովանդակություն:

Խոնավության և ջերմաստիճանի չափում `օգտագործելով HTS221 և մասնիկի ֆոտոն` 4 քայլ
Խոնավության և ջերմաստիճանի չափում `օգտագործելով HTS221 և մասնիկի ֆոտոն` 4 քայլ

Video: Խոնավության և ջերմաստիճանի չափում `օգտագործելով HTS221 և մասնիկի ֆոտոն` 4 քայլ

Video: Խոնավության և ջերմաստիճանի չափում `օգտագործելով HTS221 և մասնիկի ֆոտոն` 4 քայլ
Video: Ինչպես ճիշտ չափել մարմնի ջերմաստիճանը. 3 հիմնական կանոն 2024, Հունիսի
Anonim
Image
Image

HTS221- ը ծայրահեղ կոմպակտ տարողունակ թվային սենսոր է հարաբերական խոնավության և ջերմաստիճանի համար: Այն ներառում է զգայուն տարր և խառը ազդանշանների կիրառման հատուկ ինտեգրալ միացում (ASIC) `թվային սերիական միջերեսների միջոցով չափման տեղեկատվությունը տրամադրելու համար: Ինտեգրված այսքան շատ հատկանիշներով սա խոնավության և ջերմաստիճանի կրիտիկական չափումների ամենահարմար սենսորներից է:

Այս ձեռնարկում պատկերված է HTS221 սենսորային մոդուլի և մասնիկի ֆոտոնի հետ փոխազդեցությունը: Խոնավության և ջերմաստիճանի արժեքները կարդալու համար մենք օգտագործել ենք մասնիկը I2c ադապտերով: Այս I2C ադապտերը դյուրին և հուսալի է դարձնում սենսորային մոդուլի հետ կապը:

Քայլ 1: Պահանջվում է սարքավորում

Պահանջվող սարքավորում
Պահանջվող սարքավորում
Պահանջվող սարքավորում
Պահանջվող սարքավորում
Պահանջվող սարքավորում
Պահանջվող սարքավորում

Նյութերը, որոնք մեզ անհրաժեշտ են մեր նպատակին հասնելու համար, ներառում են հետևյալ ապարատային բաղադրիչները.

1. HTS221

2. Ֆոտոն մասնիկ

3. I2C մալուխ

4. I2C վահան մասնիկի ֆոտոնի համար

Քայլ 2: Սարքավորման միացում

Սարքավորումների միացում
Սարքավորումների միացում
Սարքավորումների միացում
Սարքավորումների միացում

Սարքավորումների միացման բաժինը հիմնականում բացատրում է սենսորի և մասնիկ ֆոտոնի միջև պահանջվող լարերի միացումները: Connectionsանկալի ելքի համար ցանկացած համակարգի վրա աշխատելիս հիմնական անհրաժեշտությունն է հիմնական կապերի ապահովումը: Այսպիսով, անհրաժեշտ կապերը հետևյալն են.

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 ջերմաստիճան = 0;

դատարկ կարգավորում ()

{

// Սահմանել փոփոխական

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

Particle.variable («Խոնավություն», խոնավություն);

Particle.variable («cTemp», cTemp);

// Նախնականացնել I2C հաղորդակցությունը որպես ՎԱՐՊԵՏ

Wire.begin ();

// Նախնականացնել սերիական հաղորդակցությունը, սահմանել բաուդ արագություն = 9600

Serial.begin (9600);

// Սկսել I2C փոխանցումը

Wire.beginTransmission (Addr);

// Ընտրեք միջին կազմաձևման գրանցամատյան

Wire.write (0x10);

// averageերմաստիճանի միջին նմուշներ = 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 բայթ տվյալներ

Մետաղալար. Խնդրում ենք (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 բայթ տվյալներ

Մետաղալար. Խնդրում ենք (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 բայթ տվյալներ

Մետաղալար. Խնդրում ենք (Addr, 1);

// Կարդացեք տվյալների 1 բայթ

եթե (Wire.available () == 1)

{

տվյալներ = Wire.read ();

}

}

// Փոխարկել Խոնավության տվյալները

H3 = (տվյալներ [1] * 256.0) + տվյալներ [0];

// Temերմաստիճանի ազատման արժեքներ

// Սկսել I2C փոխանցումը

Wire.beginTransmission (Addr);

// Ուղարկեք տվյալների գրանցամատյան

Wire.write (0x32);

// Դադարեցնել I2C փոխանցումը

Wire.endTransmission ();

// Պահանջել 1 բայթ տվյալներ

Մետաղալար. Խնդրում ենք (Addr, 1);

// Կարդացեք տվյալների 1 բայթ

եթե (Wire.available () == 1)

{

T0 = Wire.read ();

}

// Սկսել I2C փոխանցումը

Wire.beginTransmission (Addr);

// Ուղարկեք տվյալների գրանցամատյան

Wire.write (0x33);

// Դադարեցնել I2C փոխանցումը

Wire.endTransmission ();

// Պահանջել 1 բայթ տվյալներ

Մետաղալար. Խնդրում ենք (Addr, 1);

// Կարդացեք տվյալների 1 բայթ

եթե (Wire.available () == 1)

{

T1 = Wire.read ();

}

// Սկսել I2C փոխանցումը

Wire.beginTransmission (Addr);

// Ուղարկեք տվյալների գրանցամատյան

Wire.write (0x35);

// Դադարեցնել I2C փոխանցումը

Wire.endTransmission ();

// Պահանջել 1 բայթ տվյալներ

Մետաղալար. Խնդրում ենք (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 բայթ տվյալներ

Մետաղալար. Խնդրում ենք (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 բայթ տվյալներ

Մետաղալար. Խնդրում ենք (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 բայթ տվյալներ

Մետաղալար. Խնդրում ենք (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);

ջերմաստիճան = (val [3] * 256) + val [2]; cTemp = (((T1 - T0) / 8.0) * (temp - T2)) / (T3 - T2) + (T0 / 8.0);

fTemp = (cTemp * 1.8) + 32;

// Տվյալների մուտքագրում վահանակ

Particle.publish ("Հարաբերական խոնավություն.", String (խոնավություն));

ուշացում (1000);

Particle.publish ("Cերմաստիճանը Celsius:", լարային (cTemp));

ուշացում (1000);

Particle.publish ("ahերմաստիճանը Ֆարենհայտում.", Լարային (fTemp));

ուշացում (1000);

}

Particle.variable () գործառույթը ստեղծում է սենսորի ելքը պահելու փոփոխականները, իսկ Particle.publish () գործառույթը ցուցադրում է ելքը կայքի վահանակի վրա:

Սենսորային ելքը ցուցադրվում է վերևի նկարում ՝ ձեր տեղեկանքի համար:

Քայլ 4: Դիմումներ

Դիմումներ
Դիմումներ

HTS221- ը կարող է օգտագործվել սպառողական տարբեր ապրանքների մեջ, ինչպիսիք են օդի խոնավացուցիչները և սառնարանները և այլն: Այս սենսորը նաև իր կիրառությունն է գտնում ավելի լայն ասպարեզում, ներառյալ Smart home automation, Industrial automation, շնչառական սարքավորումներ, ակտիվների և ապրանքների հետևում:

Խորհուրդ ենք տալիս: