راه اندازی سنسور BME680 با آردوینو (گاز، رطوبت، دما، فشار)
محتویات
BME680 یک سنسور دیجیتال است که گاز، فشار، رطوبت و دما را اندازه گیری می کند. در این راهنما نحوه استفاده از ماژول حسگر BME680 با برد آردوینو را یاد خواهید گرفت. این سنسور با استفاده از پروتکل های ارتباطی I2C یا SPI با میکروکنترلر ارتباط برقرار می کند.
در این مقاله شما یاد خواهید گرفت که چگونه سنسور را به برد آردوینو متصل کنید، کتابخانه های مورد نیاز را نصب کنید و از یک کد ساده برای نمایش قرائت سنسور در مانیتور سریال استفاده کنید.
معرفی ماژول سنسور محیطی BME680
BME680 یک حسگر محیطی است که حسگرهای گاز، فشار، رطوبت و دما را ترکیب می کند. حسگر گاز می تواند طیف وسیعی از گازها مانند ترکیبات آلی فرار (VOC) را شناسایی کند. به همین دلیل می توان از BME680 در کنترل کیفیت هوای داخل ساختمان استفاده کرد.
BME680 یک سنسور دیجیتال 4 در 1 است که موارد زیر را اندازه گیری می کند:
- دما
- رطوبت
- فشار بارومتریک
- گاز: ترکیبات آلی فرار (VOC) مانند اتانول و مونوکسید کربن
سنسور گاز BME680
BME680 حاوی یک سنسور MOX (اکسید فلز) است که VOC ها را در هوا تشخیص می دهد. این حسگر به شما یک ایده کیفی از مجموع VOCs / آلاینده ها در هوای اطراف می دهد. این سنسور برای یک مولکول گاز خاص نیست.
سنسورهای MOX از یک سطح اکسید فلز، یک تراشه حسگر برای اندازهگیری تغییرات رسانایی و یک بخاری تشکیل شدهاند. VOC ها را با جذب مولکول های اکسیژن در لایه حساس خود شناسایی می کند. BME680 به اکثر VOC های آلوده کننده هوای داخل ساختمان (به جز CO2) واکنش نشان می دهد.
هنگامی که حسگر با گازهای کاهنده تماس پیدا می کند، مولکول های اکسیژن واکنش نشان می دهند و رسانایی را در سراسر سطح افزایش می دهند. به عنوان یک سیگنال خام، BME680 مقادیر مقاومت را خارج می کند. این مقادیر به دلیل تغییرات در غلظت VOC تغییر می کند:
- غلظت بالاتر VOCs » مقاومت کمتر
- غلظت کمتر VOCs » مقاومت بالاتر
واکنشهایی که روی سطح حسگر رخ میدهند تحت تأثیر پارامترهایی غیر از غلظت VOC مانند دما و رطوبت هستند.
شما میتوانید نتایج خود را مقایسه کنید و ببینید که آیا کیفیت هوا در حال افزایش یا کاهش است. برای اندازه گیری دقیق، باید سنسور را بر اساس منابع شناخته شده کالیبره کنید و یک منحنی کالیبراسیون بسازید.
دقت BME680
در اینجا دقت سنسورهای دما، رطوبت و فشار BME680 آمده است:
سنسور | دقت |
دما | +/- 1.0 ºC |
رطوبت | +/- 3 % |
فشار | +/- 1 hPa |
لیست زیر محدوده عملکرد سنسورهای دما، رطوبت و فشار BME680 را نشان می دهد.
- دما -40 تا 85 درجه سانتیگراد
- رطوبت 0 تا 100 درصد
- فشار 300 تا 1100 hPa
توضیحات پین های BME680
VCC | تغذیه ماژول |
GND | GND |
SCL | پین SCL برای ارتباطات I2C پین SCK برای ارتباط SPI |
SDA | پین SDA برای ارتباطات I2C پین MOSI برای ارتباطات SPI |
SDO | پین MISO برای ارتباطات SPI |
CS | پین CS برای ارتباط SPI |
BME680 از رابط های I2C و SPI پشتیبانی می کند.
برای استفاده از پروتکل ارتباطی I2C، از پین های زیر استفاده کنید:
BME680 | آردوینو |
SCL | A5 |
SDA | A4 |
برای استفاده از پروتکل ارتباطی SPI، از پین های زیر استفاده کنید:
BME680 | آردوینو |
SCL (SCK SPI Clock) | D13 |
SDA (SDI MOSI) | D11 |
SDO (MISO) | D12 |
CS (Chip Select) | D10 |
اتصال برد آردوینو به سنسور BME680
BME680 می تواند با استفاده از پروتکل های ارتباطی I2C یا SPI ارتباط برقرار کند.
تصویر شماتیک زیر را دنبال کنید تا با استفاده از پین های I2C، BME680 را به آردوینو متصل کنید.
از طرف دیگر، ممکن است بخواهید به جای آن از پروتکل ارتباطی SPI استفاده کنید. در این صورت، شماتیک بعدی را دنبال کنید تا با استفاده از پایه های SPI، ماژول سنسور BME680 را به آردوینو متصل کنید.
قطعات مورد نیاز
برای تکمیل این آموزش به قطعات زیر نیاز دارید:
- ماژول سنسور BME680
- Arduino Uno
- برد بورد
- سیم های جامپر
کد َArduino راه اندازی سنسور BME680
برای دریافت اطلاعات از ماژول حسگر BME680، از کتابخانه Adafruit_BME680 استفاده می کنیم. مراحل بعدی را برای نصب کتابخانه در Arduino IDE خود دنبال کنید:
آردوینو خود را باز کنید و به Sketch > Include Library > Manage Libraries بروید.
عبارت adafruit bme680 را در کادر جستجو جستجو کنید و کتابخانه را نصب کنید.
برای استفاده از کتابخانه BME680، باید کتابخانه Adafruit_Sensor را نیز نصب کنید. به Sketch > Include Library > Manage Libraries بروید و «Adafruit Unified Sensor» را در کادر جستجو تایپ کنید. ب
پس از نصب کتابخانه ها، آردوینو IDE خود را مجددا راه اندازی کنید.
کد کامل در انتهای صفحه برای دانلود قرار داده شده است. در اینجا قسمت های مختلف کد را توضیح میدهیم.
کد با گنجاندن کتابخانه های مورد نیاز شروع می شود: کتابخانه Wire برای استفاده از I2C، کتابخانه SPI (اگر می خواهید از SPI به جای I2C استفاده کنید)، کتابخانه های Adafruit_Sensor و Adafruit_BME680 برای ارتباط با حسگر BME680.
#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)
این متغیر فشار را در سطح دریا بر حسب هکتوپاسکال (معادل میلی بار) ذخیره می کند. از این متغیر برای تخمین فشار استفاده میشود. این کد از مقدار پیش فرض استفاده می کند، اما برای نتایج دقیق، مقدار را با فشار فعلی سطح دریا در محل خود جایگزین کنید.
این مثال به طور پیش فرض از پروتکل ارتباطی I2C استفاده می کند. خط زیر یک آبجکت Adafruit_BME680 به نام bme را روی پین های Arduino I2C ایجاد می کند: D5 (SCL)، D4 (SDA).
Adafruit_BME680 bme; // I2C
برای استفاده از SPI، باید کد بالا را کامنت کنید و کد زیر را از حالت کامنت خارج کنید.
//Adafruit_BME680 bme(BME_CS، BME_MOSI، BME_MISO، BME_SCK)؛ // SPI
در setup() یک ارتباط سریال را شروع کنید.
Serial.begin(115200);
با خطوط زیر سنسور BME680 را راه اندازی کنید:
if (!bme.begin()) { Serial.println(F("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);
برای افزایش وضوح داده های خام این حسگر از نمونه برداری بیش از حد پشتیبانی می کند. ما از پارامترهای نمونه برداری پیش فرض استفاده خواهیم کرد، اما شما می توانید آنها را تغییر دهید.
- setTemperatureOversampling(): تنظیم بیش از حد نمونه برداری دما.
- setHumidityOversampling(): تنظیم رطوبت بیش از حد نمونه.
- setPressureOversampling(): نمونه برداری بیش از حد فشار را تنظیم کنید.
این متود ها می توانند یکی از پارامترهای زیر را بپذیرند:
- BME680_OS_NONE: turn off reading;
- BME680_OS_1X
- BME680_OS_2X
- BME680_OS_4X
- BME680_OS_8X
- BME680_OS_16X
سنسور 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
در loop()، اندازه گیری ها را از حسگر BME680 دریافت خواهیم کرد.
ابتدا به سنسور بگویید که خواندن را با bme.beginReading() شروع کند. این ox زمان آماده شدن خواندن را برمی گرداند.
unsigned long endTime = bme.beginReading(); if (endTime == 0) { Serial.println(F("Failed to begin reading :(")); return; } Serial.print(F("Reading started at ")); Serial.print(millis()); Serial.print(F(" and will finish at ")); Serial.println(endTime);
سپس می توانیم مقدار ها را به صورت زیر بدست آوریم:
- bme.temperature: دما را بر میگرداند
- bme.pressure: فشار را بر میگرداند
- bme.humidity: رطوبت را بر میگرداند
- bme.gas_resistance: گاز را بر میگرداند
Serial.print(F("Temp= ")); Serial.print(bme.temperature); Serial.println(F(" *C")); Serial.print(F("Pressure = ")); Serial.print(bme.pressure / 100.0); Serial.println(F("hPa")); Serial.print(F("Humidity= ")); Serial.print(bme.humidity); Serial.println(F(" %")); Serial.print(F("Gas=")); Serial.print(bme.gas_resistance / 1000.0); Serial.println(F("KOhms")); Serial.print(F("Approx. Altitude = ")); Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); Serial.println(F("m"));
نتیجه پروژه
کد را روی برد آردوینو خود آپلود کنید. به Tools > Board بروید و برد آردوینو مورد استفاده خود را انتخاب کنید. به Tools > Port بروید و پورتی که بردتان به آن متصل است را انتخاب کنید. سپس، روی دکمه آپلود کلیک کنید.
مانیتور سریال را با نرخ باود 115200 باز کنید، دکمه RST روی برد را فشار دهید. اندازه گیری سنسور نمایش داده خواهد شد.
ماژول سنسور BME680 یک سنسور دیجیتال 4 در 1 است که سنسورهای گاز، فشار، دما و رطوبت را ترکیب می کند. BME680 دارای یک سنسور MOX است که حضور بیشتر گازهای VOC را حس می کند. این سنسور یک ایده کیفی از مجموع VOCs / آلاینده ها در هوای اطراف به شما می دهد. به همین دلیل می توان از BME680 برای نظارت بر کیفیت هوای داخل خانه استفاده کرد.
موارد موجود در فایل : سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود