جدول المحتويات:
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-13 06:56
HTS221 عبارة عن مستشعر رقمي سعوي مدمج للغاية للرطوبة النسبية ودرجة الحرارة. وهو يتضمن عنصر استشعار ودائرة متكاملة خاصة بتطبيق إشارة مختلطة (ASIC) لتوفير معلومات القياس من خلال السطوح البينية التسلسلية الرقمية. مدمج مع العديد من الميزات ، يعد هذا أحد أكثر أجهزة الاستشعار ملاءمةً لقياسات الرطوبة ودرجة الحرارة الحرجة. هذا هو العرض التوضيحي باستخدام اردوينو نانو.
الخطوة 1: ماذا تحتاج..
1. اردوينو نانو
2. HTS221
3. كابل I²C
4. I²C Shield لـ Arduino Nano
الخطوة الثانية: التوصيلات:
خذ درع I2C لـ Arduino Nano وادفعه برفق فوق دبابيس Nano.
ثم قم بتوصيل أحد طرفي كابل I2C بمستشعر HTS221 والطرف الآخر بغطاء I2C.
تظهر الاتصالات في الصورة أعلاه.
الخطوة الثالثة: الكود:
يمكن تنزيل كود اردوينو الخاص بـ HTS221 من مستودع جيثب- مجتمع DCUBE.
هنا هو الرابط لنفسه:
github.com/DcubeTechVentures/HTS221/blob/master/Arduino/HTS221.ino
نقوم بتضمين مكتبة Wire.h لتسهيل اتصال I2c للمستشعر بلوحة Arduino.
يمكنك أيضًا نسخ الكود من هنا ، ويُعطى على النحو التالي:
// موزعة بترخيص الإرادة الحرة.
// استخدمها بالطريقة التي تريدها ، سواء كانت ربحًا أو مجانًا ، شريطة أن تتناسب مع تراخيص الأعمال المرتبطة بها.
// HTS221
// تم تصميم هذا الرمز للعمل مع الوحدة المصغرة HTS221_I2CS I2C
#يشمل
// 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) ؛
}
الخطوة 4: التطبيقات:
يمكن استخدام HTS221 في العديد من المنتجات الاستهلاكية مثل أجهزة ترطيب الهواء والثلاجات وما إلى ذلك. يجد هذا المستشعر أيضًا تطبيقه في مجال أوسع بما في ذلك أتمتة المنزل الذكي والأتمتة الصناعية ومعدات الجهاز التنفسي وتتبع الأصول والسلع.