Სარჩევი:

ტენიანობის და ტემპერატურის გაზომვა HTS221- ისა და არდუინო ნანოს გამოყენებით: 4 ნაბიჯი
ტენიანობის და ტემპერატურის გაზომვა HTS221- ისა და არდუინო ნანოს გამოყენებით: 4 ნაბიჯი

ვიდეო: ტენიანობის და ტემპერატურის გაზომვა HTS221- ისა და არდუინო ნანოს გამოყენებით: 4 ნაბიჯი

ვიდეო: ტენიანობის და ტემპერატურის გაზომვა HTS221- ისა და არდუინო ნანოს გამოყენებით: 4 ნაბიჯი
ვიდეო: 💥 isurve.ge 👉 ტემპერატურისა და ტენიანობის ციფრული თერმომეტრი HTC 1 2024, ნოემბერი
Anonim
Image
Image

HTS221 არის ულტრა კომპაქტური capacitive ციფრული სენსორი ფარდობითი ტენიანობისა და ტემპერატურისათვის. იგი მოიცავს სენსორულ ელემენტს და შერეული სიგნალის გამოყენების სპეციფიკურ ინტეგრირებულ წრეს (ASIC), რომელიც უზრუნველყოფს გაზომვის ინფორმაციას ციფრული სერიული ინტერფეისების საშუალებით. ამდენი მახასიათებლით ინტეგრირებული ეს არის ერთ -ერთი ყველაზე შესაფერისი სენსორი კრიტიკული ტენიანობისა და ტემპერატურის გაზომვისთვის.

ამ გაკვეთილში ილუსტრირებულია HTS221 სენსორული მოდულის ინტერფეისი არდუინო ნანოსთან. ტენიანობის და ტემპერატურის მნიშვნელობების წასაკითხად, ჩვენ გამოვიყენეთ arduino I2c ადაპტერით. ეს I2C ადაპტერი სენსორულ მოდულთან კავშირს იოლი და საიმედო ხდის.

ნაბიჯი 1: საჭირო აპარატურა:

საჭირო აპარატურა
საჭირო აპარატურა
საჭირო აპარატურა
საჭირო აპარატურა
საჭირო აპარატურა
საჭირო აპარატურა

მასალები, რომლებიც ჩვენ გვჭირდება ჩვენი მიზნის მისაღწევად, მოიცავს შემდეგ ტექნიკურ კომპონენტებს:

1. HTS221

2. არდუინო ნანო

3. I2C კაბელი

4. I2C ფარი არდუინო ნანოსთვის

ნაბიჯი 2: აპარატურის დაკავშირება:

აპარატურის დაკავშირება
აპარატურის დაკავშირება
აპარატურის დაკავშირება
აპარატურის დაკავშირება

აპარატურის დაკავშირების განყოფილება ძირითადად განმარტავს გაყვანილობის კავშირებს სენსორსა და არდუინო ნანოს შორის. სწორი კავშირების უზრუნველყოფა არის ძირითადი აუცილებლობა ნებისმიერ სისტემაზე მუშაობისას სასურველი გამომუშავებისთვის. ამრიგად, საჭირო კავშირები შემდეგია:

HTS221 იმუშავებს I2C– ზე. აქ არის გაყვანილობის დიაგრამა, რომელიც აჩვენებს, თუ როგორ უნდა დააკავშიროთ სენსორის თითოეული ინტერფეისი.

ყუთის გარეშე, დაფა კონფიგურირებულია I2C ინტერფეისისთვის, ამიტომ ჩვენ გირჩევთ გამოიყენოთ ეს კავშირი, თუ სხვაგვარად ხართ აგნოსტიკოსი.

ყველაფერი რაც თქვენ გჭირდებათ არის ოთხი მავთული! მხოლოდ ოთხი კავშირია საჭირო Vcc, Gnd, SCL და SDA ქინძისთავები და ეს დაკავშირებულია I2C კაბელის დახმარებით.

ეს კავშირები ნაჩვენებია ზემოთ მოცემულ სურათებში.

ნაბიჯი 3: ტენიანობის და ტემპერატურის გაზომვის კოდი:

ტენიანობისა და ტემპერატურის გაზომვის კოდი
ტენიანობისა და ტემპერატურის გაზომვის კოდი

დავიწყოთ არდუინოს კოდით ახლა.

Arduino– სთან ერთად სენსორული მოდულის გამოყენებისას, ჩვენ მოიცავს Wire.h ბიბლიოთეკას. "მავთულის" ბიბლიოთეკა შეიცავს ფუნქციებს, რომლებიც ხელს უწყობს სენსორსა და არდუინოს დაფას შორის i2c კომუნიკაციას.

მთელი Arduino კოდი მოცემულია მომხმარებლის კომფორტისთვის ქვემოთ:

#ჩართეთ

// HTS221 I2C მისამართი არის 0x5F

#განსაზღვრეთ Addr 0x5F

ბათილად დაყენება ()

{

// I2C კომუნიკაციის ინიციალიზაცია, როგორც MASTER

Wire.begin ();

// სერიული კომუნიკაციის ინიციალიზაცია, დაყენებული baud rate = 9600

სერიული.დაწყება (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, ნედლეული;

// ტენიანობის კალიბერაციის ღირებულებები

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

for (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];

for (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];

// ტემპერატურის გათავისუფლების ღირებულებები

// დაიწყეთ 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)

{

ნედლეული = Wire.read ();

}

ნედლეული = ნედლეული & 0x0F;

// გადააკეთეთ ტემპერატურის გამოძახილი მნიშვნელობები 10 ბიტზე

T0 = ((ნედლეული & 0x03) * 256) + T0;

T1 = ((ნედლეული & 0x0C) * 64) + T1;

for (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];

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

}

// მონაცემების კონვერტაცია

float ტენიანობა = (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.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 შეიძლება გამოყენებულ იქნას სხვადასხვა სამომხმარებლო პროდუქტში, როგორიცაა ჰაერის დამატენიანებლები და მაცივრები და ა.შ.

გირჩევთ: