Mundarija:

HTS221 va Arduino Nano yordamida namlik va haroratni o'lchash: 4 qadam
HTS221 va Arduino Nano yordamida namlik va haroratni o'lchash: 4 qadam

Video: HTS221 va Arduino Nano yordamida namlik va haroratni o'lchash: 4 qadam

Video: HTS221 va Arduino Nano yordamida namlik va haroratni o'lchash: 4 qadam
Video: Estación meteorológica con Arduino nano 33 BLE Sense. Presión, temperatura y humedad con Arduino. 2024, Iyul
Anonim
Image
Image

HTS221 - nisbiy namlik va harorat uchun ultra ixcham sig'imli raqamli sensor. Raqamli ketma -ket interfeyslar orqali o'lchash ma'lumotlarini etkazib berish uchun sezuvchi element va aralash signalli maxsus o'rnatilgan elektron (ASIC) o'z ichiga oladi. Ko'p funktsiyalar bilan birlashtirilgan, bu namlik va haroratni o'lchash uchun eng mos sensorlardan biridir.

Ushbu qo'llanmada HTS221 sensor modulining arduino nano bilan o'zaro aloqasi tasvirlangan. Namlik va harorat qiymatlarini o'qish uchun biz I2c adapterli arduino -dan foydalanganmiz, bu I2C adapteri sensor moduliga ulanishni oson va ishonchli qiladi.

1 -qadam: Uskuna kerak:

Uskunalar talab qilinadi
Uskunalar talab qilinadi
Uskunalar talab qilinadi
Uskunalar talab qilinadi
Uskunalar talab qilinadi
Uskunalar talab qilinadi

Maqsadga erishish uchun bizga kerak bo'lgan materiallar quyidagi apparat komponentlarini o'z ichiga oladi:

1. HTS221

2. Arduino Nano

3. I2C kabeli

4. Arduino Nano uchun I2C qalqoni

2 -qadam: Uskuna ulanishi:

Uskuna ulanishi
Uskuna ulanishi
Uskuna ulanishi
Uskuna ulanishi

Uskuna ulanish bo'limi asosan sensor va arduino nano o'rtasida zarur bo'lgan simi ulanishlarini tushuntiradi. To'g'ri ulanishni ta'minlash har qanday tizimda kerakli chiqish uchun ishlashning asosiy zarurati hisoblanadi. Shunday qilib, kerakli ulanishlar quyidagilar:

HTS221 I2C orqali ishlaydi. Sensorning har bir interfeysini qanday ulash kerakligini ko'rsatadigan simlar sxemasi.

Qutidan tashqari, taxta I2C interfeysi uchun tuzilgan, shuning uchun agar siz agnostik bo'lsangiz, biz ushbu ulanishni ishlatishni maslahat beramiz.

Sizga faqat to'rtta sim kerak! Vcc, Gnd, SCL va SDA pinlari uchun faqat to'rtta ulanish kerak va ular I2C kabeli yordamida ulangan.

Bu ulanishlar yuqoridagi rasmlarda ko'rsatilgan.

3 -qadam: Namlik va haroratni o'lchash kodi:

Namlik va haroratni o'lchash kodi
Namlik va haroratni o'lchash kodi

Endi Arduino kodidan boshlaylik.

Sensor modulini Arduino bilan ishlatganda, biz Wire.h kutubxonasini o'z ichiga olamiz. "Wire" kutubxonasida sensorlar va Arduino kartalari o'rtasidagi i2c aloqasini osonlashtiradigan funktsiyalar mavjud.

Foydalanuvchining qulayligi uchun butun Arduino kodi quyida keltirilgan:

#qo'shing

// HTS221 I2C manzili - 0x5F

#aniqlang Addr 0x5F

bo'sh o'rnatish ()

{

// I2C aloqasini MASTER sifatida boshlang

Wire.begin ();

// Seriyali aloqani ishga tushiring, bod tezligi = 9600 ni o'rnating

Serial.begin (9600);

// I2C uzatishni boshlang

Wire.beginTransmission (Addr);

// O'rtacha konfiguratsiya registrini tanlang

Wire.write (0x10);

// O'rtacha harorat namunalari = 256, o'rtacha namlik namunalari = 512

Wire.write (0x1B);

// I2C uzatishni to'xtating

Wire.endTransmission ();

// I2C uzatishni boshlang

Wire.beginTransmission (Addr);

// Boshqarish registrini tanlang1

Wire.write (0x20);

// Quvvat yoqish, uzluksiz yangilanish, ma'lumotlar chiqarish tezligi = 1 Hz

Wire.write (0x85);

// I2C uzatishni to'xtating

Wire.endTransmission ();

kechikish (300);

}

bo'sh halqa ()

{

imzosiz int ma'lumotlari [2];

imzosiz int val [4];

imzosiz int H0, H1, H2, H3, T0, T1, T2, T3, xom;

// Namlikni kalibrlash qiymatlari

uchun (int i = 0; i <2; i ++)

{

// I2C uzatishni boshlang

Wire.beginTransmission (Addr);

// Ma'lumotlar reestrini yuborish

Wire.write ((48 + i));

// I2C uzatishni to'xtating

Wire.endTransmission ();

// 1 bayt ma'lumotni so'rang

Wire.requestFrom (Addr, 1);

// 1 bayt ma'lumotni o'qing

agar (Wire.available () == 1)

{

ma'lumotlar = Wire.read ();

}

}

// Namlik ma'lumotlarini aylantirish

H0 = ma'lumotlar [0] / 2;

H1 = ma'lumotlar [1] / 2;

uchun (int i = 0; i <2; i ++)

{

// I2C uzatishni boshlang

Wire.beginTransmission (Addr);

// Ma'lumotlar reestrini yuborish

Wire.write ((54 + i));

// I2C uzatishni to'xtating

Wire.endTransmission ();

// 1 bayt ma'lumotni so'rang

Wire.requestFrom (Addr, 1);

// 1 bayt ma'lumotni o'qing

agar (Wire.available () == 1)

{

ma'lumotlar = Wire.read ();

}

}

// Namlik ma'lumotlarini aylantirish

H2 = (ma'lumotlar [1] * 256.0) + ma'lumotlar [0];

uchun (int i = 0; i <2; i ++)

{

// I2C uzatishni boshlang

Wire.beginTransmission (Addr);

// Ma'lumotlar reestrini yuborish

Wire.write ((58 + i));

// I2C uzatishni to'xtating

Wire.endTransmission ();

// 1 bayt ma'lumotni so'rang

Wire.requestFrom (Addr, 1);

// 1 bayt ma'lumotni o'qing

agar (Wire.available () == 1)

{

ma'lumotlar = Wire.read ();

}

}

// Namlik ma'lumotlarini aylantirish

H3 = (ma'lumotlar [1] * 256.0) + ma'lumotlar [0];

// Haroratni kalibrlash qiymatlari

// I2C uzatishni boshlang

Wire.beginTransmission (Addr);

// Ma'lumotlar reestrini yuborish

Wire.write (0x32);

// I2C uzatishni to'xtating

Wire.endTransmission ();

// 1 bayt ma'lumotni so'rang

Wire.requestFrom (Addr, 1);

// 1 bayt ma'lumotni o'qing

agar (Wire.available () == 1)

{

T0 = Wire.read ();

}

// I2C uzatishni boshlang

Wire.beginTransmission (Addr);

// Ma'lumotlar reestrini yuborish

Wire.write (0x33);

// I2C uzatishni to'xtating

Wire.endTransmission ();

// 1 bayt ma'lumotni so'rang

Wire.requestFrom (Addr, 1);

// 1 bayt ma'lumotni o'qing

agar (Wire.available () == 1)

{

T1 = Wire.read ();

}

// I2C uzatishni boshlang

Wire.beginTransmission (Addr);

// Ma'lumotlar reestrini yuborish

Wire.write (0x35);

// I2C uzatishni to'xtating

Wire.endTransmission ();

// 1 bayt ma'lumotni so'rang

Wire.requestFrom (Addr, 1);

// 1 bayt ma'lumotni o'qing

agar (Wire.available () == 1)

{

xom = Wire.read ();

}

xom = xom & 0x0F;

// Haroratni kalibrlash qiymatlarini 10 bitga aylantiring

T0 = ((xom & 0x03) * 256) + T0;

T1 = ((xom & 0x0C) * 64) + T1;

uchun (int i = 0; i <2; i ++)

{

// I2C uzatishni boshlang

Wire.beginTransmission (Addr);

// Ma'lumotlar reestrini yuborish

Wire.write ((60 + i));

// I2C uzatishni to'xtating

Wire.endTransmission ();

// 1 bayt ma'lumotni so'rang

Wire.requestFrom (Addr, 1);

// 1 bayt ma'lumotni o'qing

agar (Wire.available () == 1)

{

ma'lumotlar = Wire.read ();

}

}

// Ma'lumotni aylantirish

T2 = (ma'lumotlar [1] * 256.0) + ma'lumotlar [0];

uchun (int i = 0; i <2; i ++)

{

// I2C uzatishni boshlang

Wire.beginTransmission (Addr);

// Ma'lumotlar reestrini yuborish

Wire.write ((62 + i));

// I2C uzatishni to'xtating

Wire.endTransmission ();

// 1 bayt ma'lumotni so'rang

Wire.requestFrom (Addr, 1);

// 1 bayt ma'lumotni o'qing

agar (Wire.available () == 1)

{

ma'lumotlar = Wire.read ();

}

}

// Ma'lumotni aylantirish

T3 = (ma'lumotlar [1] * 256.0) + ma'lumotlar [0];

// I2C uzatishni boshlang

Wire.beginTransmission (Addr);

// Ma'lumotlar reestrini yuborish

Wire.write (0x28 | 0x80);

// I2C uzatishni to'xtating

Wire.endTransmission ();

// 4 bayt ma'lumotni so'rang

Wire.requestFrom (Addr, 4);

// 4 bayt ma'lumotni o'qing

// namlik msb, namlik lsb, temp msb, temp lsb

agar (Wire.available () == 4)

{

val [0] = Wire.read ();

val [1] = Wire.read ();

val [2] = Wire.read ();

val [3] = Wire.read ();

}

// Ma'lumotni aylantirish

suzuvchi namlik = (val [1] * 256,0) + val [0];

namlik = ((1.0 * H1) - (1.0 * H0)) * (1.0 * namlik - 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;

// Ma'lumotlarni ketma -ket monitorga chiqarish

Serial.print ("Nisbiy namlik:");

Ketma -ket bosma (namlik);

Serial.println (" % RH");

Serial.print ("Selsiy bo'yicha harorat:");

Serial.print (cTemp); Serial.println ("C");

Serial.print ("Farengeytdagi harorat:");

Serial.print (fTemp);

Serial.println ("F");

kechikish (500);

}

Tel kutubxonasida Wire.write () va Wire.read () buyruqlarni yozish va sensor chiqishini o'qish uchun ishlatiladi.

Arduino IDE seriyali monitorida sensorning chiqishini ko'rsatish uchun Serial.print () va Serial.println () ishlatiladi.

Sensorning chiqishi yuqoridagi rasmda ko'rsatilgan.

4 -qadam: Ilovalar:

Ilovalar
Ilovalar

HTS221 har xil turdagi havo namlagichlari va muzlatgichlar kabi iste'molchi mahsulotlarida ishlatilishi mumkin. Bu sensor, shuningdek, aqlli uy avtomatizatsiyasi, sanoat avtomatizatsiyasi, nafas olish uskunalari, aktivlar va tovarlarni kuzatishni o'z ichiga oladi.

Tavsiya: