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

حساب الرطوبة والضغط ودرجة الحرارة باستخدام BME280 وربط الفوتون: 6 خطوات
حساب الرطوبة والضغط ودرجة الحرارة باستخدام BME280 وربط الفوتون: 6 خطوات

فيديو: حساب الرطوبة والضغط ودرجة الحرارة باستخدام BME280 وربط الفوتون: 6 خطوات

فيديو: حساب الرطوبة والضغط ودرجة الحرارة باستخدام BME280 وربط الفوتون: 6 خطوات
فيديو: Lesson 37: Using BME280 Humidity, Barometric Pressure and Temperature Sensor 2024, يوليو
Anonim
حساب الرطوبة والضغط ودرجة الحرارة باستخدام BME280 ووصلة الفوتون
حساب الرطوبة والضغط ودرجة الحرارة باستخدام BME280 ووصلة الفوتون

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

هذا هو السبب في أننا نقدم تعليميًا كاملاً حول هذا المستشعر ، في هذا البرنامج التعليمي سنشرح عمل مستشعر الرطوبة والضغط ودرجة الحرارة BME280 بفوتون الجسيمات.

الخطوة 1: استكشاف BME280

استكشاف BME280
استكشاف BME280

صعد القطاع الإلكتروني من لعبته باستخدام مستشعر BME280 ، وهو مستشعر بيئي بدرجة حرارة وضغط جوي ورطوبة! هذا المستشعر رائع لجميع أنواع استشعار الطقس / البيئة ويمكن استخدامه حتى في I2C.

هذا المستشعر الدقيق BME280 هو أفضل حل استشعار لقياس الرطوبة بدقة ± 3٪ والضغط الجوي بدقة مطلقة ± 1 hPa ودرجة الحرارة بدقة ± 1.0 درجة مئوية. نظرًا لأن الضغط يتغير مع الارتفاع ، وقياسات الضغط جيدة جدًا ، يمكنك أيضًا استخدامه كمقياس ارتفاع يبلغ ± 1 متر أو دقة أفضل! تم تحسين مستشعر درجة الحرارة للحصول على أقل ضوضاء وأعلى دقة ويستخدم لتعويض درجة الحرارة بمقدار مستشعر الضغط ويمكن استخدامه أيضًا لتقدير درجة الحرارة المحيطة. يمكن للمستخدم إجراء القياسات باستخدام BME280 أو إجراؤها على فترات منتظمة.

ورقة البيانات: انقر لمعاينة أو تنزيل ورقة بيانات مستشعر BME280.

الخطوة 2: قائمة متطلبات الأجهزة

قائمة متطلبات الأجهزة
قائمة متطلبات الأجهزة

لقد استخدمنا أجزاء Dcube Store بالكامل لأنها سهلة الاستخدام ، وشيء عن كل شيء مناسب بشكل جيد على شبكة السنتيمتر يدفعنا حقًا إلى المضي قدمًا. يمكنك استخدام ما تريد ، ولكن مخطط الأسلاك يفترض أنك تستخدم هذه الأجزاء.

  • وحدة استشعار BME280 I²C Mini
  • I²C Shield for Particle Photon
  • جسيم الفوتون
  • كابل I²C
  • محول الطاقة

الخطوة 3: التواصل

التواصل
التواصل

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

سيعمل BME280 فوق I2C. فيما يلي مثال على مخطط الأسلاك ، يوضح كيفية توصيل كل واجهة من أجهزة الاستشعار. خارج الصندوق ، تم تكوين اللوحة لواجهة I2C ، لذلك نوصي باستخدام هذه الواجهة إذا كنت غير مدرك. كل ما تحتاجه هو أربعة أسلاك! مطلوب أربعة اتصالات فقط دبابيس Vcc و Gnd و SCL و SDA ويتم توصيلها بمساعدة كابل I2C. هذه الوصلات موضحة في الصور أعلاه.

الخطوة 4: كود مراقبة درجة الحرارة والضغط والرطوبة

كود مراقبة درجة الحرارة والضغط والرطوبة
كود مراقبة درجة الحرارة والضغط والرطوبة
كود مراقبة درجة الحرارة والضغط والرطوبة
كود مراقبة درجة الحرارة والضغط والرطوبة

الإصدار النظيف من الكود الذي سنستخدمه لتشغيل هذا متاح هنا.

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

انقر هنا لفتح صفحة الويب لمراقبة الجهاز

قم بتحميل الكود على منتداك وسيبدأ العمل! يمكن الحصول على جميع البيانات على صفحة الويب كما هو موضح في الصورة.

يتم توفير الرمز أدناه:

// موزعة بترخيص إرادة حرة. // استخدمها بالطريقة التي تريدها ، سواء كانت ربحًا أم مجانيًا ، شريطة أن تتناسب مع تراخيص الأعمال المرتبطة بها. // BME280 // تم تصميم هذا الرمز للعمل مع الوحدة النمطية البسيطة BME280_I2CS I2C المتاحة من ControlEverything.com. # تضمين # تضمين // عنوان BME280 I2C هو 0x76 (108) # تعريف العنوان 0x76 double cTemp = 0 ، fTemp = 0 ، الضغط = 0 ، الرطوبة = 0 ؛ إعداد باطل () {// Set variable Particle.variable ("i2cdevice"، "BME280") ؛ article.variable ("cTemp" ، cTemp) ؛ Particle.variable ("fTemp" ، fTemp) ؛ Particle.variable ("الضغط" ، الضغط) ؛ متغير الجسيمات ("الرطوبة" ، الرطوبة) ؛ // تهيئة اتصال I2C كـ MASTER Wire.begin () ؛ // تهيئة الاتصال التسلسلي ، تعيين معدل الباود = 9600 Serial.begin (9600) ؛ تأخير (300) ؛ } حلقة فارغة () {unsigned int b1 [24]؛ بيانات int غير الموقعة [8] ؛ int dig_H1 = 0 ؛ لـ (int i = 0؛ i <24؛ i ++) {// Start I2C Transmission Wire.beginTransmission (Addr) ؛ // حدد سجل البيانات Wire.write ((136 + i)) ؛ // Stop I2C Transmission Wire.endTransmission () ؛ // طلب 1 بايت من البيانات Wire.requestFrom (العنوان ، 1) ؛ // قراءة 24 بايت من البيانات إذا (Wire.available () == 1) {b1 = Wire.read ()؛ }} // تحويل البيانات // معاملات درجة الحرارة int dig_T1 = (b1 [0] & 0xff) + ((b1 [1] & 0xff) * 256) ؛ int dig_T2 = b1 [2] + (b1 [3] * 256) ؛ int dig_T3 = b1 [4] + (b1 [5] * 256) ؛ // معاملات الضغط int dig_P1 = (b1 [6] & 0xff) + ((b1 [7] & 0xff) * 256) ؛ int dig_P2 = b1 [8] + (b1 [9] * 256) ؛ int dig_P3 = b1 [10] + (b1 [11] * 256) ؛ int dig_P4 = b1 [12] + (b1 [13] * 256) ؛ int dig_P5 = b1 [14] + (b1 [15] * 256) ؛ int dig_P6 = b1 [16] + (b1 [17] * 256) ؛ int dig_P7 = b1 [18] + (b1 [19] * 256) ؛ int dig_P8 = b1 [20] + (b1 [21] * 256) ؛ int dig_P9 = b1 [22] + (b1 [23] * 256) ؛ لـ (int i = 0؛ i <7؛ i ++) {// Start I2C Transmission Wire.beginTransmission (Addr) ؛ // حدد سجل البيانات Wire.write ((225 + i)) ؛ // Stop I2C Transmission Wire.endTransmission () ؛ // طلب 1 بايت من البيانات Wire.requestFrom (العنوان ، 1) ؛ // قراءة 7 بايت من البيانات إذا (Wire.available () == 1) {b1 = Wire.read ()؛ }} // تحويل البيانات // معاملات الرطوبة int dig_H2 = b1 [0] + (b1 [1] * 256) ؛ int dig_H3 = b1 [2] & 0xFF؛ int dig_H4 = (b1 [3] * 16) + (b1 [4] & 0xF) ؛ int dig_H5 = (b1 [4] / 16) + (b1 [5] * 16) ؛ int dig_H6 = b1 [6] ؛ // ابدأ I2C Transmission Wire.beginTransmission (Addr) ؛ // حدد سجل البيانات Wire.write (161) ؛ // Stop I2C Transmission Wire.endTransmission () ؛ // طلب 1 بايت من البيانات Wire.requestFrom (العنوان ، 1) ؛ // قراءة 1 بايت من البيانات إذا (Wire.available () == 1) {dig_H1 = Wire.read () ؛ } // Start I2C Transmission Wire.beginTransmission (Addr) ؛ // حدد سجل التحكم في الرطوبة Wire.write (0xF2) ؛ // الرطوبة على معدل أخذ العينات = 1 Wire.write (0x01) ؛ // Stop I2C Transmission Wire.endTransmission () ؛ // ابدأ I2C Transmission Wire.beginTransmission (Addr) ؛ // حدد سجل قياس التحكم Wire.write (0xF4) ؛ // الوضع العادي ودرجة الحرارة والضغط على معدل أخذ العينات = 1 Wire.write (0x27) ؛ // Stop I2C Transmission Wire.endTransmission () ؛ // ابدأ I2C Transmission Wire.beginTransmission (Addr) ؛ // حدد سجل التكوين Wire.write (0xF5) ؛ // وقت الاستعداد = 1000 مللي ثانية Wire.write (0xA0) ؛ // Stop I2C Transmission Wire.endTransmission () ؛ لـ (int i = 0؛ i <8؛ i ++) {// Start I2C Transmission Wire.beginTransmission (Addr) ؛ // حدد سجل البيانات Wire.write ((247 + i)) ؛ // Stop I2C Transmission Wire.endTransmission () ؛ // طلب 1 بايت من البيانات Wire.requestFrom (العنوان ، 1) ؛ // قراءة 8 بايت من البيانات إذا (Wire.available () == 1) {data = Wire.read ()؛ }} // تحويل بيانات الضغط ودرجة الحرارة إلى 19 بت طويل adc_p = ((طويلة) (البيانات [0] & 0xFF) * 65536) + ((طويلة) (البيانات [1] & 0xFF) * 256) + (long) (data [2] & 0xF0)) / 16 ؛ long adc_t = ((طويلة) (البيانات [3] & 0xFF) * 65536) + ((طويلة) (البيانات [4] & 0xFF) * 256) + (طويلة) (البيانات [5] & 0xF0)) / 16 ؛ // تحويل بيانات الرطوبة طويلة adc_h = ((طويلة) (البيانات [6] & 0xFF) * 256 + (طويلة) (البيانات [7] & 0xFF)) ؛ // حسابات إزاحة درجة الحرارة مزدوجة var1 = (((مزدوج) adc_t) / 16384.0 - ((مزدوج) dig_T1) / 1024.0) * ((مزدوج) dig_T2) ؛ مزدوج var2 = (((double) adc_t) / 131072.0 - ((double) dig_T1) / 8192.0) * ((double) adc_t) /131072.0 - ((double) dig_T1) /8192.0)) * (double) dig_T3) ؛ مزدوج t_fine = (طويل) (var1 + var2) ؛ cTemp مزدوج = (var1 + var2) / 5120.0 ؛ مزدوج fTemp = cTemp * 1.8 + 32 ؛ // حسابات تعويض الضغط var1 = ((مزدوج) t_fine / 2.0) - 64000.0 ؛ var2 = var1 * var1 * ((مزدوج) dig_P6) / 32768.0 ؛ var2 = var2 + var1 * ((مزدوج) dig_P5) * 2.0 ؛ var2 = (var2 / 4.0) + (((مزدوج) dig_P4) * 65536.0) ؛ var1 = ((مزدوج) dig_P3) * var1 * var1 / 524288.0 + ((مزدوج) dig_P2) * var1) / 524288.0 ؛ var1 = (1.0 + var1 / 32768.0) * ((مزدوج) dig_P1) ؛ مزدوج p = 1048576.0 - (مزدوج) adc_p ؛ p = (p - (var2 / 4096.0)) * 6250.0 / var1 ؛ var1 = ((مزدوج) dig_P9) * p * p / 2147483648.0 ؛ var2 = p * ((مزدوج) dig_P8) / 32768.0 ؛ ضغط مزدوج = (p + (var1 + var2 + ((double) dig_P7)) / 16.0) / 100 ؛ // حسابات تعويض الرطوبة مزدوجة var_H = (((مزدوج) t_fine) - 76800.0) ؛ var_H = (adc_h - (dig_H4 * 64.0 + dig_H5 / 16384.0 * var_H)) * (dig_H2 / 65536.0 * (1.0 + dig_H6 / 67108864.0 * var_H * (1.0 + dig_H3 / 67108864.0 * var_H))) ؛ رطوبة مزدوجة = var_H * (1.0 - dig_H1 * var_H / 524288.0) ؛ إذا كانت (الرطوبة> 100.0) {الرطوبة = 100.0 ؛ } وإلا إذا (الرطوبة <0.0) {الرطوبة = 0.0؛ } // إخراج البيانات إلى لوحة أجهزة القياس Particle.publish ("درجة الحرارة بالدرجة المئوية:" ، سلسلة (cTemp)) ؛ Particle.publish ("درجة الحرارة بالفهرنهايت:" ، سلسلة (fTemp)) ؛ Particle.publish ("الضغط:" ، السلسلة (الضغط)) ؛ Particle.publish ("الرطوبة النسبية:" ، السلسلة (الرطوبة)) ؛ تأخير (1000) ؛ }

الخطوة 5: التطبيقات:

التطبيقات
التطبيقات

يحتوي مستشعر درجة الحرارة والضغط والرطوبة النسبية BME280 على العديد من التطبيقات الصناعية مثل مراقبة درجة الحرارة ، والحماية الحرارية الطرفية للكمبيوتر ، ومراقبة الضغط في الصناعة. لقد قمنا أيضًا بتوظيف هذا المستشعر في تطبيقات محطات الطقس وكذلك في نظام مراقبة الدفيئة.

قد تتضمن التطبيقات الأخرى:

  1. الوعي بالسياق ، على سبيل المثال كشف الجلد ، كشف تغيير الغرفة.
  2. مراقبة اللياقة البدنية / الرفاهية - تحذير بشأن الجفاف أو درجات الحرارة المرتفعة.
  3. قياس الحجم وتدفق الهواء.
  4. التحكم في أتمتة المنزل.
  5. التحكم في التدفئة والتهوية وتكييف الهواء (HVAC).
  6. انترنت الأشياء.
  7. تحسين نظام تحديد المواقع العالمي (على سبيل المثال ، تحسين الوقت إلى الإصلاح الأول ، الحساب الميت ، اكتشاف المنحدرات).
  8. الملاحة الداخلية (تغيير كشف الأرضية ، كشف المصعد).
  9. الملاحة الخارجية والتطبيقات الترفيهية والرياضية.
  10. النشرة الجوية.
  11. مؤشر السرعة العمودية (ارتفاع / سرعة الغطس)..

الخطوة 6: فيديو تعليمي

شاهد الفيديو التعليمي الخاص بنا لتصفح جميع الخطوات في التواصل وإكمال المشروع.

ابق على اتصال مع أجهزة الاستشعار الأخرى ومدونات العمل.

موصى به: