جدول المحتويات:

قياس الرطوبة ودرجة الحرارة باستخدام HTS221 و Arduino Nano: 4 خطوات
قياس الرطوبة ودرجة الحرارة باستخدام HTS221 و Arduino Nano: 4 خطوات

فيديو: قياس الرطوبة ودرجة الحرارة باستخدام HTS221 و Arduino Nano: 4 خطوات

فيديو: قياس الرطوبة ودرجة الحرارة باستخدام HTS221 و Arduino Nano: 4 خطوات
فيديو: أردوينو للمبتدئين - (27) مشروع جهاز استشعار درجة الحرارة والرطوبة 2024, يوليو
Anonim
Image
Image

HTS221 عبارة عن مستشعر رقمي سعوي مدمج للغاية للرطوبة النسبية ودرجة الحرارة. وهو يتضمن عنصر استشعار ودائرة متكاملة خاصة بتطبيق إشارة مختلطة (ASIC) لتوفير معلومات القياس من خلال السطوح البينية التسلسلية الرقمية. مدمج مع العديد من الميزات ، يعد هذا أحد أكثر أجهزة الاستشعار ملاءمةً لقياسات الرطوبة ودرجة الحرارة الحرجة.

في هذا البرنامج التعليمي ، تم توضيح واجهة وحدة المستشعر HTS221 مع اردوينو نانو. لقراءة قيم الرطوبة ودرجة الحرارة ، استخدمنا اردوينو مع محول I2c. يجعل هذا المحول I2C الاتصال بوحدة المستشعر أسهل وأكثر موثوقية.

الخطوة 1: الأجهزة المطلوبة:

الأجهزة المطلوبة
الأجهزة المطلوبة
الأجهزة المطلوبة
الأجهزة المطلوبة
الأجهزة المطلوبة
الأجهزة المطلوبة

تشمل المواد التي نحتاجها لتحقيق هدفنا مكونات الأجهزة التالية:

1. HTS221

2. اردوينو نانو

3. كابل I2C

4. I2C Shield لاردوينو نانو

الخطوة 2: ربط الأجهزة:

ربط الأجهزة
ربط الأجهزة
ربط الأجهزة
ربط الأجهزة

يشرح قسم توصيل الأجهزة بشكل أساسي اتصالات الأسلاك المطلوبة بين المستشعر واردوينو نانو. يعد التأكد من التوصيلات الصحيحة ضرورة أساسية أثناء العمل على أي نظام للإخراج المطلوب. إذن ، الاتصالات المطلوبة هي كما يلي:

سيعمل HTS221 على I2C. فيما يلي مثال على مخطط الأسلاك ، يوضح كيفية توصيل كل واجهة من أجهزة الاستشعار.

خارج الصندوق ، تم تكوين اللوحة لواجهة I2C ، لذلك نوصي باستخدام هذا التوصيل إذا كنت غير مدرك.

كل ما تحتاجه هو أربعة أسلاك! مطلوب أربعة اتصالات فقط دبابيس Vcc و Gnd و SCL و SDA ويتم توصيلها بمساعدة كابل I2C.

هذه الوصلات موضحة في الصور أعلاه.

الخطوة الثالثة: كود قياس الرطوبة ودرجة الحرارة:

كود قياس الرطوبة ودرجة الحرارة
كود قياس الرطوبة ودرجة الحرارة

لنبدأ برمز Arduino الآن.

أثناء استخدام وحدة الاستشعار مع Arduino ، نقوم بتضمين مكتبة Wire.h. تحتوي مكتبة "Wire" على الوظائف التي تسهل اتصال i2c بين المستشعر ولوحة Arduino.

يتم تقديم كود Arduino بالكامل أدناه لراحة المستخدم:

#يشمل

// HTS221 عنوان I2C هو 0x5F

#define Addr 0x5F

الإعداد باطل()

{

// تهيئة اتصال I2C باعتباره MASTER

Wire.begin () ؛

// تهيئة الاتصال التسلسلي ، اضبط معدل الباود = 9600

Serial.begin (9600) ؛

// بدء نقل I2C

Wire.beginTransmission (العنوان) ؛

// حدد متوسط سجل التكوين

Wire.write (0x10) ؛

// عينات متوسط درجة الحرارة = 256 عينة متوسط الرطوبة = 512

Wire.write (0x1B) ؛

// إيقاف ناقل الحركة I2C

Wire.endTransmission () ؛

// بدء نقل I2C

Wire.beginTransmission (العنوان) ؛

// حدد سجل التحكم 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 (العنوان) ؛

// إرسال سجل البيانات

Wire.write ((48 + i)) ؛

// إيقاف ناقل الحركة I2C

Wire.endTransmission () ؛

// طلب 1 بايت من البيانات

Wire.request From (Addr، 1) ؛

// قراءة 1 بايت من البيانات

إذا (Wire.available () == 1)

{

البيانات = Wire.read () ؛

}

}

// تحويل بيانات الرطوبة

H0 = البيانات [0] / 2 ،

H1 = البيانات [1] / 2 ؛

لـ (int i = 0 ؛ i <2 ؛ i ++)

{

// بدء نقل I2C

Wire.beginTransmission (العنوان) ؛

// إرسال سجل البيانات

Wire.write ((54 + i)) ؛

// إيقاف ناقل الحركة I2C

Wire.endTransmission () ؛

// طلب 1 بايت من البيانات

Wire.request From (Addr، 1) ؛

// قراءة 1 بايت من البيانات

إذا (Wire.available () == 1)

{

البيانات = Wire.read () ؛

}

}

// تحويل بيانات الرطوبة

H2 = (البيانات [1] * 256.0) + البيانات [0] ؛

لـ (int i = 0 ؛ i <2 ؛ i ++)

{

// بدء نقل I2C

Wire.beginTransmission (العنوان) ؛

// إرسال سجل البيانات

Wire.write ((58 + i)) ؛

// إيقاف ناقل الحركة I2C

Wire.endTransmission () ؛

// طلب 1 بايت من البيانات

Wire.request From (Addr، 1) ؛

// قراءة 1 بايت من البيانات

إذا (Wire.available () == 1)

{

البيانات = Wire.read () ؛

}

}

// تحويل بيانات الرطوبة

H3 = (البيانات [1] * 256.0) + البيانات [0] ؛

// قيم درجة الحرارة

// بدء نقل I2C

Wire.beginTransmission (العنوان) ؛

// إرسال سجل البيانات

Wire.write (0x32) ؛

// إيقاف ناقل الحركة I2C

Wire.endTransmission () ؛

// طلب 1 بايت من البيانات

Wire.request From (Addr، 1) ؛

// قراءة 1 بايت من البيانات

إذا (Wire.available () == 1)

{

T0 = Wire.read () ؛

}

// بدء نقل I2C

Wire.beginTransmission (العنوان) ؛

// إرسال سجل البيانات

Wire.write (0x33) ؛

// إيقاف ناقل الحركة I2C

Wire.endTransmission () ؛

// طلب 1 بايت من البيانات

Wire.request From (Addr، 1) ؛

// قراءة 1 بايت من البيانات

إذا (Wire.available () == 1)

{

T1 = Wire.read () ؛

}

// بدء نقل I2C

Wire.beginTransmission (العنوان) ؛

// إرسال سجل البيانات

Wire.write (0x35) ؛

// إيقاف ناقل الحركة I2C

Wire.endTransmission () ؛

// طلب 1 بايت من البيانات

Wire.request From (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 (العنوان) ؛

// إرسال سجل البيانات

Wire.write ((60 + i)) ؛

// إيقاف ناقل الحركة I2C

Wire.endTransmission () ؛

// طلب 1 بايت من البيانات

Wire.request From (Addr، 1) ؛

// قراءة 1 بايت من البيانات

إذا (Wire.available () == 1)

{

البيانات = Wire.read () ؛

}

}

// تحويل البيانات

T2 = (البيانات [1] * 256.0) + البيانات [0] ؛

لـ (int i = 0 ؛ i <2 ؛ i ++)

{

// بدء نقل I2C

Wire.beginTransmission (العنوان) ؛

// إرسال سجل البيانات

Wire.write ((62 + i)) ؛

// إيقاف ناقل الحركة I2C

Wire.endTransmission () ؛

// طلب 1 بايت من البيانات

Wire.request From (Addr، 1) ؛

// قراءة 1 بايت من البيانات

إذا (Wire.available () == 1)

{

البيانات = Wire.read () ؛

}

}

// تحويل البيانات

T3 = (البيانات [1] * 256.0) + البيانات [0] ؛

// بدء نقل I2C

Wire.beginTransmission (العنوان) ؛

// إرسال سجل البيانات

Wire.write (0x28 | 0x80) ؛

// إيقاف ناقل الحركة I2C

Wire.endTransmission () ؛

// طلب 4 بايت من البيانات

Wire.request From (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) ؛

int temp = (val [3] * 256) + val [2] ؛

تعويم cTemp = (((T1 - T0) / 8.0) * (temp - T2)) / (T3 - T2) + (T0 / 8.0) ؛

تعويم 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 في العديد من المنتجات الاستهلاكية مثل أجهزة ترطيب الهواء والثلاجات وما إلى ذلك. يجد هذا المستشعر أيضًا تطبيقه في مجال أوسع بما في ذلك أتمتة المنزل الذكي والأتمتة الصناعية ومعدات الجهاز التنفسي وتتبع الأصول والسلع.

موصى به: