راه اندازی سنسور BME680 با آردوینو

راه اندازی سنسور BME680 با آردوینو

در این آموزش قصد داریم تا با راه اندازی سنسور BME680 توسط آردوینو تمامی جنبه‌های محیطی از جمله دما، رطوبت و فشار را کنترل نماییم. ماژول BME680، با آردوینو سازگاری کامل دارد و این امکان را فراهم‌ کرده تا به وسیله‌ی آن بتوانید پروژه های مربوط به اینترنت اشیاء در محیط زیست را انجام دهید.

اگر شما هم به دنبال ساخت یک دستگاه برای سنجش کیفیت هوای محیط اطراف خود هستید تا به وسیله‌ی آن بتوانید، از مناسب بودن تهویه‌ی اتاق خواب، کارگاه یا محل کار خود مطلع شوید و اطلاعی ندارید که چطور با راه اندازی سنسور BME680 کمیت های زیست محیطی را اندازه بگیرید، حتماً تا پایان این آموزش با ما همراه باشید.

آشنایی با سخت‌افزار ماژول سنسور BME680

طبق روند همیشگی آموزش های این آکادمی٬ پیش از شروع راه اندازی سنسور BME680 ابتدا با تجهیزات سخت افزاری این ماژول و تکنولوژی ساخت آن آشنا می شویم تا با درک بالاتری از این قطعه در پروژه های خود استفاده کنید. در قلب این ماژول سنسور دیجیتال محیط زیست، حسگر BME680، ساخت شرکت Bosch قرار دارد.

حسگر BME680 روی ماژول حسگر تشخیص دما٬ رطوبت و فشار

این سنسور کوچک دارای قابلیت سنجش دما، رطوبت، فشار هوا و گازهای VOC (ترکیبات آلی فرار) است و می‌تواند به عنوان یک حسگر محیطی کاملا مستقل عمل کند. در داخل چیپ BME680 یک سنسور از جنس اکسید فلز (MOx) قرار گرفته و مکانیزم عملکرد آن بدین صورت است که اکسید فلز به وسیله‌ی یک صفحه‌ی داغ، گرم می‌شود و پس از آن اکسید فلز گرم شده، به ازای وجود گازهای VOC موجود در هوای اطراف، مقدار مقاومتش تغییر می‌کند. بدین ترتیب برحسب مقدار تغییر مقاومت اکسید فلز، می‌توان میزان گازهایی مانند مونواکسید کربن و ترکیبات آلی فرار مانند اتانول را در فضای اطراف شناسایی و با استفاده از آن کیفیت هوا را بررسی نمود.

سنسور BME680 مانند بسیاری از سنسورهای گاز، به چندین نوع گاز و الکل حساس است، اما نمی‌تواند نوع دقیق گاز موجود در هوای اطراف را تشخیص دهد و در نهایت، فقط  یک مقدار مقاومت به ازای وجود محتوای کلی از گازهای VOC به شما می‌دهد. بنابراین، می‎‌توان از آن تنها برای اندازه‌گیری تغییرات چگالی گازهای VOC استفاده نمود، نه تشخیص این‌ که کدام‌یک از گازها درحال تغییراست.

این ماژول هم مانند سنسور BME280 قادر است تا دمای محیط را با دقت  ±1.0درجه‌ی سانتی‌گراد، رطوبت نسبی را با دقت 3 ± درصد و فشار بارومتریک (فشار مطلق) را با دقت  ±1هکتوپاسکال اندازه‌گیری نماید. سنجش میزان فشار توسط این سنسور بسیار دقیق و در مقایسه با فشار در سطح دریا صورت می‌گیرد و حتی می‌توانید از آن به عنوان ارتفاع سنج با دقت 1± متر استفاده کنید.

در جدول زیر مشخصات محدوده‌ی اندازه‌گیری پارامترهای مختلف توسط این ماژول به طور کامل ذکر شده‌است:

محدوده ی اندازه‌ گیری دما40- تا 85 درجه سانتی گراد با دقت ±1.0 درجه‌ی سانتی‌گراد
محدوده‌ی اندازه‌ گیری رطوبت نسبی0 تا 100 درصد رطوبت نسبی با دقت 3 ± درصد رطوبت نسبی
فشار بارومتریک (فشار مطلق)300 پاسکال تا 1100 هکتو پاسکال با دقت  ±1هکتوپاسکال
محدوده‌ی اندازه‌ گیری ارتفاع0 تا 30000 فوت (9.2 کیلومتر) با دقت 1± متر

برای اطلاعات بیشتر در رابطه با سنسور، می‌توانید دیتاشیت موجود در لینک زیر را بررسی نمایید:

نکتهترکیبات آلی فرار یا VOCs چیست؟ 

VOCs ترکیبات شیمیایی هستند، که دارای نقطه‌ی جوش پایین و فشار بخار بالایی در دمای محیط بوده، به طوری‌که تعداد قابل توجهی از مولکول‌های این مواد در دمای محیط، بر اثر فرآیند تبخیر یا تصعید، به حالت گاز درآمده و در هوای اطراف منتشر می‌شوند. ترکیبات آلی فرار در بسیاری از محصولاتی که در زندگی روزمره‌ استفاده می‌شوند مانند: مانند خوشبوکننده‌های هوا، محصولات تمیزکننده، لوازم آرایشی، روغن سوخت، بنزین، رنگ، لاک‌ها، فرش و کفپوش‌های وینیل و غیره موجود بوده و از جمله نمونه‌های متداول VOC ها عبارتند از: بنزن، اتیلن گلیکول، فرمالدئید، متیلن کلراید، تتراکلورواتیلن، تولوئن، زایلن و بوتادین، که برخی از آن‌ها ممکن است اثرات نامطلوب کوتاه‌مدت و بلندمدت سلامتی داشته باشند.


میزان تغذیه مورد نیاز سنسور دما٬ رطوبت و فشار BME680

این ماژول دارای رگولاتور دقیق 3.3 ولت XC6206 و یک مترجم سطح ولتاژ است، بنابراین می‌توانید بدون نگرانی آن را با میکروکنترلر 3.3 یا 5 ولت مورد نظر خود راه‌ اندازی نمایید.

تجهیزات مربوط به تامین انرژی ماژول حسگر BME680

ماژول حسگر BME680 به هنگام اندازه‌ گیری‌، جریانی کمتر از 1 میلی‌آمپر و در حالت‌ خواب، فقط 0.15 میکروآمپر مصرف می‌کند. مصرف انرژی پایین این ماژول، باعث می شود تا بتوانید از آن در دستگاه‌های باتری محور مانند گوشی‌ها و یا ساعت‌های هوشمند، استفاده کنید.

رابط های دیجیتال ماژول حسگر BME680

این سنسور از طریق هر دو رابط I2C و SPI با میکروکنترلر ارتباط برقرار می‌کند:

  • رابط I2C

این سنسور برای اتصال از طریق I2C به ماژول آردوینو ، از دو آدرس مجزا 0X76Hex و 0X77Hex پشتیبانی می‌کند. این قابلیت باعث می‌شود تا بتوان از دو ماژول در یک باس استفاده نمود و یا از تداخل آدرس با دستگاه دیگری که در باس I2C قرار دارد جلوگیری می‌کند.

پایه SDO، آدرس I2C ماژول را تعیین می کند. این پایه دارای یک مقاومت داخلی pull-up است. بنابراین، زمانی که این پایه بدون اتصال باشد، به صورت پیش فرض آدرس I2C معادل 0X77Hex  خواهد بود و زمانی که این پایه به GND متصل شود، وضعیت این پایه به LOW تغییر خواهد کرد و آدرس I2C معادل 0X76Hex خواهد بود.

  • رابط SPI

با استفاده از رابط SPI نیز می‌توانید با این ماژول ارتباط  برقرار کرده و آن را راه‌‌اندازی نمایید.

در صورتی که بخواهید بین این دو رابط یکی را انتخاب کنید، با توجه به کابرد مورد نظر خود اگر به سرعت انتقال بالاتری نیاز دارید (تا 10 مگاهرتز)، SPI گزینه‌ی بهتری است، از طرف دیگر اگر پایه‌های محدودی بر روی میکروکنترلر خود دارید، رابط I2C  گزینه‌ی بهتری است.


سنسور گاز BME680 MEMS چگونه کار می‌کند؟

 تشخیص کیفیت هوا با استفاده از سنسور گاز BME680 تجربه ای شگفت انگیزیست چراکه این حسگر برخلاف سنسورهای گاز MQ2 یا MQ3، با فناوری سیستم میکروالکترومکانیکی (MEMS) ساخته شده است. ساخت سنسور تشخیص گاز مبتنی بر فناوری MEMS، باعث شده تا کاهش چشمگیری در اندازه و مصرف انرژی سنسور حاصل شود و از طرف دیگر کارایی های بیشتر و کیفیت عملکرد بالاتری را فراهم نموده‌است.   

یک سنسور گاز MEMS معمولی از یک لایه نیمه هادی اکسید فلزی (ماده حسگر) تشکیل شده که برروی یک صفحه‌ی داغ بسیار کوچک قرار گرفته و به گازهای خاصی واکنش نشان می‌دهد، به طوری‌که به ازای وجود گازهای مورد نظر، جریان عبوری از آن و مقدار مقاومتش تغییر خواهد کرد. این تغییرات از طریق دو الکترود متصل به سنسور، به خروجی منتقل می‌شود.

ساختار سنسور تشخیص گاز BME680

هنگامی که لایه‌ی نیمه هادی اکسید فلزی در دمای بالا گرم می‌شود، اکسیژن روی سطح آن جذب خواهد شد. به این صورت که الکترون‌های نوار رسانای اکسید فلز، به سمت مولکول‌های اکسیژن جذب می‌شوند، بدین ترتیب مطابق شکل زیر، درهوای پاک که غلظت اکسیژن موجود در فضا زیاد است، الکترون‌های نوار رسانا به سمت مولکول‌های اکسیژن جذب شده و با ایجاد لایه‌ی تخلیه‌ی الکترونی زیر سطح اکسید فلز، یک مانع بالقوه در برابر عبور جریان الکتریکی در اکسید فلز ایجاد می‌کنند. در حضور گازهای VOCs، اکسیژن خالص محیط در اثر واکنش آن با گازهای VOCs کم شده و به این صورت چگالی سطحی اکسیژن جذب شده بر روی اکسید فلز کاهش می‌یابد. از این رو مطابق آن‌چه در شکل زیر نشان داده می‌شود، الکترون‌ها‌ی نوار رسانا، به حالت اولیه‌ی خود بازمی‌گردند و جریان الکتریکی آزادانه از حسگر عبور خواهد کرد.

نحوه تشخیص گاز توسط سنسور BME680

معرفی پایه های ماژول BME680

ماژول حسگر BME680 در مجموع دارای 6 پایه خروجی است که در ادامه شرح مختصری از کاربرد هریک از پایه‌های ماژول را برای شما بین کردیم:

پایه های تغذیه:

VCC : این پایه برای تامین تغذیه‌ی ماژول مورد استفاده قرار می‌گیرد و می‌توانید آن را به پایه‌ی 5 ولت آردوینو متصل نمایید.

GND : این پایه به عنوان زمین تغذیه و منطقی ماژول مورد استفاده قرار می‌گیرد.

پایه های رابط SPI :

SCL : پایه ی کلاک ارتباط SPI است.

SDA  : پایه‌ی داده‌ی سریال ورودی، برای داده‌هایی است که از پایه داده‌ی سریال (MOSI/SDI) میکروکنترلر به ماژول BME680  ارسال می‌شود.

SDO : پایه‌ی داده‌ی سریال خروجی، برای داده‌هایی است که از ماژول BME680 به پایه داده‌ی سریال (MISO/SDO) میکروکنترلر ارسال می‌شود.

CS : پایه‌ی انتخاب تراشه که به منظور فعال نمودن رابط SPI باید در حالت Active Low قرار داده شود. در صورتی که بخواهید چندین ماژول BME680 را به یک میکروکنترلر متصل و راه‌اندازی کنید، می‌توانید پایه‌های SDI، SDO، SCK  هر یک از ماژول‌ها را به صورت مشترک به یکدیگر متصل نموده و به هر کدام یک پایه‌ی  CS جداگانه اختصاص دهید.

پایه های رابط I2C:

SCL پایه‌ی کلاک رابط I2C است که به پایه‌ی کلاک I2C میکروکنترلر متصل می‌شود.

SDA پایه‌ی داده‌ی رابط I2C است و به پایه‌ی داده‌ی I2C میکروکنترلر متصل می‌شود.  

آماده سازی ماژول سنسور BME680 برای استفاده:

راه اندازی سنسور دما٬ رطوبت و فشار BME680

نکتهقبل از اولین استفاده از سنسور، توصیه می‌شود که آن را به مدت 48 ساعت، تست و بررسی نمایید، تا فرایند Burn-in را طی کند. (این فرآیند باعث می‌شود خرابی‌های خاصی تحت شرایط نظارت شده اتفاق بیفتد تا بتوان درکی از ظرفیت بار محصول به دست آورد) و سپس در هربار استفاده از سنسور به مدت 30 دقیقه، از آن در مد دلخواه خود استفاده نمایید. دلیل این کار این است که سطح حساسیت سنسور در طول استفاده اولیه تغییر می‌کند و مقاومت به تدریج افزایش می‌یابد، زیرا صفحه ی داغ متصل به سنسور با گذشت زمان به اندازه‌ی کافی گرم خواهد شد.  

آموزش راه اندازی سنسور BME680 با آردوینو: 

حال با دانستن کلیه‌ی موارد مربوط به ماژول، می‌توانیم آن را با دو روش از راه های ارتباطی I2C و SPI به آردوینو متصل کنیم.

نحوه‌ی سیم بندی BME680 در مد ارتباطی I2C

برای این کار ابتدا پایه VCC ماژول سنسور را به ولتاژ 3.3 یا 5 ولت متصل نمایید. همواره از ولتاژی استفاده نمایید که منطق میکروکنترلر شما بر اساس آن است. برای اکثرآردوینوها این ولتاژ 5 ولت خواهد بود. (اگر از میکروکنترلری با منطق 3.3 ولت استفاده می‌کنید، می‌بایست این پایه را به ولتاژ 3.3 ولت متصل نمایید.) حال پایه GND ماژول و آردوینو را به زمین تغذیه متصل نمایید.

پایه SCL را نیز به پایه کلاک I2C و پایه SDA را به پایه داده I2C در آردوینو متصل نمایید. (توجه داشته باشید که هر برد آردوینو دارای پایه های I2C متفاوتی است که باید اتصالات را به درستی بر روی آن‌ها انجام دهید. در بردهای آردوینو با طرحR3 ،SDA  و SCL با نام‌های A5 (SCL) و A4 (SDA) نیز شناخته می‌شوند.) در تصویر زیر نحوه‌ی اتصال ماژول به آردوینو برای ارتباط I2C نمایش داده شده‌است.

نحوه سیم بندی حسگر BME680 به ماژول آردوینو با ارتباط I2C

نحوه‌ی سیم بندی BME680 در مد ارتباطی SPI

همانطور که دانستید این سنسور از رابط SPI نیز پشتیبانی می‌کند، بنابراین می‌توانید از این رابط به صورت نرم‌افزاری یا سخت‌افزاری استفاده نمایید. توصیه می‌شود که از پایه‌های SPI سخت‌افزاری استفاده کنید، زیرا انتقال داده توسط آن‌ها نسبت به مجموعه دیگری از پایه‌ها سریع‌تر خواهد بود.

هر برد آردوینو دارای پایه‌های SPI متفاوتی است که باید بر اساس آن، اتصالات را برقرار نمایید. برای بردهای آردوینو مانندUNO/Nano V3.0 ، این پایه‌ها، پایه‌های دیجیتال ۱۳(SCK)، 12 (MISO) ،11 (MOSI) و 10 (SS) هستند.

اگر از برد آردوینو دیگری استفاده می‌کنید، حتما قبل از برقراری اتصالات، دیتاشیت مربوط به پایه‌های خروجی و مکان دقیق پایه‌های SPI را بررسی نمایید. در تصویر زیر نحوه‌ی اتصال ماژول و آردوینو در ارتباط SPI نمایش داده شده‌است:

نحوه سیم بندی حسگر BME680 به ماژول آردوینو با ارتباط SPI

نصب کتابخانه های ضروری برای راه اندازی سنسور BME680

برای خواندن داده‌های حسگر توسط آردوینو، می‌بایست ابتدا کتابخانه Adafruit_BME680 را نصب کنید.

برای نصب این کتاب‌خانه به مسیر Sketch > Include Library > Manage Libraries بروید و منتظر بمانید تا فهرست کتابخانه‌ها بارگیری و لیست کتاب‌خانه‌های نصب شده به‌روزرسانی شود.

باز نمودن پنجره مدیریت کتابخانه ها از منوی Sketch

می‌توانید جستجوی خود را با تایپ «adafruit bme680» فیلتر کنید. پس از نمایش کتابخانه بر روی آن کلیک کرده  و سپس گزینه‌ی Install را انتخاب نمایید.

نصب کتابخانه adafruit bme680 در IDE آردوینو

کتابخانه‌ی سنسور BME280 از Adafruit Sensor support backend استفاده می‌کند. بنابراین، عبارت Adafruit Unified Sensor را در قسمت Manage Library جستجو کرده و آن را نیز نصب نمایید.

نصب کتابخانه Adafruit Unified Sensor  در IDE آردوینو

اجرای نمونه برنامه‌ با ماژول BME680

کتابخانه Adafruit_BME680 شامل تعدادی برنامه‌ی نمونه می‌باشد، که  می توانید از این کدهای نمونه به عنوان مبنایی برای توسعه‌ی کد نهایی خود استفاده نمایید.

برای دسترسی به برنامه‌های نمونه، به مسیر File > Examples > Adafruit BME680 بروید و مجموعه‌ای از برنامه‌های نمونه را مشاهده نمایید.

مشاهده برنامه های نمونه حسگر BME680

کد آردوینو برای خواندن دما، رطوبت، فشار، ارتفاع و میزان غلظت گازهای VOC

برنامه‌ی bme680test را از مثال‌های نمونه انتخاب و در Arduino IDE بارگذاری نمایید و سپس بر روی آردوینو خود آپلود کنید. توجه داشته ‌باشید که این کد یک نمونه‌ی اولیه است و شما می‌بایست به وسیله‌ی آن دما، فشار، رطوبت، گاز و ارتفاع  را در سریال مانیتور آردوینو مشاهده کنید:

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"

// Uncomment if you want to use SPI
//#define BME_SCK 13
//#define BME_MISO 12
//#define BME_MOSI 11
//#define BME_CS 10

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME680 bme;
//Adafruit_BME680 bme(BME_CS); // Uncomment if you want to use SPI
//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO,  BME_SCK);

void setup() {
  Serial.begin(9600);
  while (!Serial);

  if (!bme.begin()) {
    Serial.println("Could not find a valid BME680 sensor, check wiring!");
    while (1);
  }

  // Set up oversampling and filter initialization
  bme.setTemperatureOversampling(BME680_OS_8X);
  bme.setHumidityOversampling(BME680_OS_2X);
  bme.setPressureOversampling(BME680_OS_4X);
  bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
  bme.setGasHeater(320, 150); // 320*C for 150 ms
}

void loop() {
  if (! bme.performReading()) {
    Serial.println("Failed to perform reading :(");
    return;
  }
  Serial.print("Temperature = ");
  Serial.print(bme.temperature);
  Serial.println(" *C");

  Serial.print("Pressure = ");
  Serial.print(bme.pressure / 100.0);
  Serial.println(" hPa");

  Serial.print("Humidity = ");
  Serial.print(bme.humidity);
  Serial.println(" %");

  Serial.print("Gas = ");
  Serial.print(bme.gas_resistance / 1000.0);
  Serial.println(" KOhms");

  Serial.print("Approx. Altitude = ");
  Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
  Serial.println(" m");

  Serial.println();
  delay(2000);
}

برای آزمایش این نمونه کد اولیه، می‌بایست میزان باودریت سریال مانیتور خود را بر روی 115200 بیت بر ثانیه تنظیم نمایید.

پس از اعمال تنظیمات و اجرای کد، تعداد بی‌شماری از داده ها را مشاهده خواهید کرد که دما، فشار، رطوبت، غلظت گاز و ارتفاع را نشان می‌دهد. در این وضعیت می‌توانید سنسور خود را به اطراف حرکت داده و به نحوه‌ی تغییرات هر کدام از داده‌ها توجه کنید:

مقادیر سنجیده شده با راه اندازی سنسور BME680 توسط آردوینو

آموزش مرتبط آشنایی با نحوه عملکرد برنامه:

برای اندازه گیری پارامترهای دما، فشار، رطوبت، ارتفاع و میزان غلظت گازهای VOC لازم داریم برنامه را با 4 کتابخانه‌ی ضروری شروع کنیم:

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"

و از پروتکل ارتباطی I2C برای برقراری ارتباط با سنسور استفاده می کند. با این حال، اگر می‌خواهید از پروتکل ارتباطی SPI استفاده کنید تنها لازم است اسلش های (//) قرار گرفته قبل از خطوط کد را که پایه‌هایSPI  را تعریف می‌کنند، پاک کنید و بدین وسیله این خطوط را از حالت کامنت خارج کرده و به برنامه‌ی اصلی اضافه نمایید:

//#define BME_SCK 13
//#define BME_MISO 12
//#define BME_MOSI 11
//#define BME_CS 10

در ادامه، متغیری به نام SEALEVELPRESSURE_HPA تعریف شده‌است. این متغیر فشار سطح دریا را بر حسب میلی بار ذخیره کرده و با مقایسه‌ی آن با سایر فشار‌های اندازه‌گیری شده، ارتفاع را برای آن فشار خاص، تخمین می‌زند.

این مثال، از یک مقدار پیش‌فرض برای این متغیر استفاده می‌کند، اما برای نتایج دقیق، مقدار آن را با فشار فعلی سطح دریا در محل خود جایگزین نمایید:

#define SEALEVELPRESSURE_HPA (1013.25)

اگر می‌خواهید از پروتکل ارتباطی  SPIاستفاده نمایید، می‌بایست خط قبلی را به کامنت تبدیل کرده و دو خط زیر را از حالت کامنت خارج نمایید

//Adafruit_BME680 bme(BME_CS);
//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO,  BME_SCK);

در تابع setup، برای راه‌اندازی ماژول، ارتباط سریال با کامپیوتر را مقداردهی اولیه و تابع ()begin را فراخوانی می کنیم. تابع ()begin رابط I2C را مقداردهی اولیه می‌نماید و بررسی می کند که آیا شناسه‌ی تراشه درست است یا خیر. سپس تراشه را با استفاده از Soft-Reset مجددا راه‌اندازی کرده و پس از حالت Wake Up منتظر کالیبراسیون دستگاه می‌ماند.

Serial.begin(9600);
while (!Serial);

if (!bme.begin()) {
	Serial.println("Could not find a valid BME680 sensor, check wiring!");
	while (1);
}

در مرحله‌ی بعد، برخی از پارامترهای مربوط به دما، فشار، رطوبت و … برای سنسور تنظیم می‌گردد.

bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150); // 320*C for 150 ms

در این قسمت می‌خواهیم توابع به کار رفته را یک به یک بررسی نماییم:

setTemperatureOversampling(uint8_t os)

setPressureOversampling(uint8_t os)

setHumidityOversampling(uint8_t os)

برای افزایش رزولوشون در اندازه‌گیری‌ها و کاهش خطا، ماژول BME680 دارای قابلیتی به نام OverSampling می‌باشد. در این روش بین چندین نمونه، میانگین‌ گرفته می‌شود.

سه تابع به نام های ()setTemperatureOversampling()، setHumidityOversampling و ()setPressureOversampling جهت تنظیم قابلیت ‌نمونه برداری برای اندازه گیری دقیق پارامتر های دما، رطوبت و فشار وجود دارد. این توابع یکی از مقادیر زیر را می‌پذیرند:

  •  BME680_OS_NONE (turns off reading)
  • BME680_OS_1X
  • BME680_OS_2X
  • BME680_OS_4X
  • BME680_OS_8X
  • BME680_OS_16X

تابع setIIRFilterSize(fs)

ماژول BME680 دارای یک فیلتر IIR داخلی برای کاهش تغییرات کوتاه مدت در مقادیر خروجی سنسور، ناشی از اختلالات خارجی (مانند کوبیدن درب یا دمیدن هوا به سنسور) می‌باشد. تابع ()setIIRFilterSize فیلتر IIR را تنظیم می‌کند. این فیلتر را می توان با انتخاب یکی از مقادیر زیر با ضرایب مختلفی پیکربندی کرد:

  • BME680_FILTER_SIZE_0 (no filtering)
  • BME680_FILTER_SIZE_1
  • BME680_FILTER_SIZE_3
  • BME680_FILTER_SIZE_7
  • BME680_FILTER_SIZE_15
  • BME680_FILTER_SIZE_31
  • BME680_FILTER_SIZE_63
  • BME680_FILTER_SIZE_127

تابع setGasHeater(heaterTemp, heaterTime) :

علاوه بر این، صفحه‌ی داغ سنسور گاز را نیز می توان طوری پیکربندی کرد که قبل از اندازه‌گیری‌ها گرم شود. این امر توسط تابع ()setGasHeater انجام می شود. این تابع دو آرگومان ورودی دارد:

heaterTemp – دمای هیتر (بر حسب درجه سانتیگراد)  

heaterTime – مدت زمانی که هیتر باید روشن بماند (بر حسب میلی ثانیه)

به عنوان مثال عبارت bme.setGasHeater(320,150)، بدین معنی است که صفحه‌ی داغ سنسور گاز در دمای 320 درجه به مدت 150 میلی ثانیه، گرم می‌شود.

در تابع ()Loop، تابع ()bme.performReading را برای خواندن داده در مد بلاک، فراخوانی می کنیم. پس از انجام این کار، می‌توانیم با استفاده از عملگر دات (.) به متغیرهای نمونه bme دسترسی پیدا کنیم.

bme.temperature  دمای خوانده‌شده را نشان می‌دهد.

bme.pressure فشار خوانده شده نشان می‌دهد.

bme.humidity رطوبت خوانده شده را نشان می‌دهد.

bme.gas_resistance غلظت گاز اندازه‌گیری شده را نشان می‌دهد. تابع bme.readAltitude(SEALEVELPRESSURE_HPA) ، ارتفاع را بر حسب متر با توجه به فشار اتمسفر اندازه‌گیری شده در مقایسه با فشار سطح دریا بر حسب هکتوپاسکالhPa  محاسبه می‌کند

if (! bme.performReading()) {
	Serial.println("Failed to perform reading :(");
	return;
}
Serial.print("Temperature = ");
Serial.print(bme.temperature);
Serial.println(" *C");

Serial.print("Pressure = ");
Serial.print(bme.pressure / 100.0);
Serial.println(" hPa");

Serial.print("Humidity = ");
Serial.print(bme.humidity);
Serial.println(" %");

Serial.print("Gas = ");
Serial.print(bme.gas_resistance / 1000.0);
Serial.println(" KOhms");

Serial.print("Approx. Altitude = ");
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(" m");

سخن آخر

امیدواریم با یادگیری این آموزش بتوانید به آسانی راه اندازی سنسور BME680 را انجام دهید و از قابلیت های آن همچون هوشمندسازی منازل، اینترنت اشیا، پیش بینی وضع آب و هوا و ناوبری داخل ساختمان (تشخیص تغییر طبقات، تشخیص آسانسور) بهره ببرید.

چنانچه در حین مطالعه و یادگیری این آموزش، سوالی ذهن شما را درگیر نموده است، می توانید با ارسال آن پرسش در بخش دیدگاه منتظر دریافت بهترین راه حل از کارشناسان فنی آکادمی باشید. اگر در این رابطه پیشنهاد و تجربه ای دارید، می توانید دیدگاه خود را برای ما ارسال نمایید.

مقالات مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Fill out this field
Fill out this field
لطفاً یک نشانی ایمیل معتبر بنویسید.
You need to agree with the terms to proceed

پر بازدید ترین مقالات