در این پست آموزشی سعی داریم، نحوه استفاده از ماژول سنسور BME280 با Arduino برای اندازه گیری فشار،دما،رطوبت و تخمین ارتفاع را برای شما به طور کامل توضیح دهیم.
از جمله سرفصل های کاربردی در این مقاله می توان به موارد زیر اشاره کرد :
- معرفی کامل سنسور
- نحوه اتصال و بستن کامل مدار
- نصب کتابخانه های مورد نیاز
- شرح کد سنسور
- اجرای یک پروژه ساده و کاربردی (در این قسمت نحوه نمایش پارامترها توسط سنسور را متوجه خواهید شد.)
معرفی ماژول سنسور BME280
این سنسور قابلیت اندازه گیری و خوانش فشار بارومتریک،دما و رطوبت را دارد.همانطور که می دانید فشار با تغییر ارتفاع تغییر می کند(رابطه عکس). بنابراین با استفاده از این سنسور می توان ارتفاع را هم تخمین زد.
چندین ورژن از این ماژول سنسور موجود می باشد. ماژول سنسور BME280 از I2C و SPI (پروتکل ارتباطی) برای تبادل داده با یک میکروکنترلر استفاده می شود.
اتصال Arduino-uno به سنسور BME280
برای اتصال این سنسور از پروتکل ارتباطی I2C استفاده می شود. بنابراین وصل کردن آن، به اصطلاح سیم کشی ماژول سنسور ما بسیار کار ساده ای بنظر می رسد!
طبق فرمت زیر اتصال سنسور BME280 به پایه های I2C آردوینو uno انجام می شود.
ورژن های هم وجود دارد که می توانند از پروتکل های ارتباطی I2C و SPI دیگری استفاده کنند.در شکل زیر یک ماژول BME280-SPI را مشاهده می کنید:
اگر شما یکی از این سنسورها را استفاده می کنید، برای اتصال پروتکل I2C پین ها را مطابق فرمت زیر وصل کنید :
اگر از پروتکل SPI استفاده می کنید. مطابق دستور زیر اتصال را انجام دهید :
قطعات مورد نیاز
برای تکمیل آموخته هایتان در این آموزش، ساخت یک پروژه را به عنوان نمونه شروع می کنیم و جهت اجرا نیاز به قطعات زیر دارید:
تمامی قطعات الکترونیکی خود را با هزینه ای به صرفه می توانید در اینجا پیدا کنید.
شماتیک مدار
اتصال سنسور BME280 در شکل زیر به صورت مداری شماتیک قرار دارد:
نصب کتابخانه BME280
برای دریافت پارامترهای ذکر شده در ابتدا این مقاله (دما،فشار،رطوبت و تخمین ارتفاع)، باید کتابخانه Adafruit_BME280 را نصب کنید.
مراحل زیر را به ترتیب در Arduino IDE انجام دهید:
نرم افزار Arduino IDE را باز کنید به منوی Sketch بروید پس از آن به زیر منوی Include Library سپس به Manage Libraries وارد شوید.
عبارت “adafruit bme280 ” را سرچ و کتابخانه را نصب کنید:
نصب کتابخانهAdafruit_Sensor
برای فعال سازی و استفاده از BME280 library، نصب کتابخانه Adafruit_Sensor library ضروری است. مراحل نصب آن را در نرم افزار آردوینو IDE به شما آموزش خواهیم داد:
به منوی Sketch بروید. پس از آن به زیر منوی Include Library، سپس به Manage Libraries وارد شوید و عبارت “Adafruit Unified Sensor” را سرچ کنید. بعد از اینکه تا انتهای صفحه آمدید،کتابخانه را پیدا و نصب کنید:
در آخر، Arduino IDE خود را ببندید و دوباره باز کنید:
خواندن پارامترهای فشار،دما و رطوبت
برای خواندن این سه پارامتر،(به اصطلاح reading کردن این 3 پارامتر توسط سنسور) ما از یک مدل طرح شده در کتابخانه استفاده می کنیم.
تا به اینجا آموزش، کتابخانه BME280 و Adafruit_Sensor نصب شده است.
نرم افزار Arduino IDE را باز کنید. به منوی file پس از آن به زیر منوی Examples بروید پس از آن به Adafruit BME280 library و سپس bme280 test را باز کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
/* * Complete Project Details https://ewink.ir/wiki */</p> <p style="text-align: center;">#include <Wire.h>; #include <SPI.h>; #include <Adafruit_Sensor.h>; #include <Adafruit_BME280.h>;</p> <p style="text-align: center;">#define BME_SCK 13 #define BME_MISO 12 #define BME_MOSI 11 #define BME_CS 10</p> <p style="text-align: center;">#define SEALEVELPRESSURE_HPA (1013.25)</p> <p style="text-align: center;">Adafruit_BME280 bme; // I2C //Adafruit_BME280 bme(BME_CS); // hardware SPI //Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI</p> <p style="text-align: center;">unsigned long delayTime;</p> <p style="text-align: center;">void setup() { Serial.begin(9600); Serial.println(F("BME280 test"));</p> <p style="text-align: center;">bool status;</p> <p style="text-align: center;">// default settings // (you can also pass in a Wire library object like &Wire2) status = bme.begin(); if (!status) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); }</p> <p style="text-align: center;">Serial.println("-- Default Test --"); delayTime = 1000;</p> <p style="text-align: center;">Serial.println(); }</p> <p style="text-align: center;">void loop() { printValues(); delay(delayTime); }</p> <p style="text-align: center;">void printValues() { Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" *C");</p> <p style="text-align: center;">// Convert temperature to Fahrenheit /*Serial.print("Temperature = "); Serial.print(1.8 * bme.readTemperature() + 32); Serial.println(" *F");*/</p> <p style="text-align: center;">Serial.print("Pressure = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa");</p> <p style="text-align: center;">Serial.print("Approx. Altitude = "); Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); Serial.println(" m");</p> <p style="text-align: center;">Serial.print("Humidity = "); Serial.print(bme.readHumidity()); Serial.println(" %");</p> <p style="text-align: center;">Serial.println(); } |
نحوه عملکرد کد
در این قسمت آموزش نحوه کارکرد کد را به شما آموزش می دهیم. اگر با این قسمت آشنایی لازمه را دارید، برای ادامه آموزش خود به انتهای مقاله بخش “نمایش” رجوع کنید.
کتابخانه ها
در قدم اول: کد به واسطه کتابخانه هایی که لازم دارد شروع به کار می کند
کتابخانه wire از پروتکل I2C و Adafruit_Sensor استفاده می کند تا کتابخانه های Adafruit_BME280 را به BME280 sensor متصل کند:
1 2 3 |
#include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> |
رابط SPI
طبق دستور زیر پین های SPI را تعریف می کنیم:
1 2 3 4 |
/*#define BME_SCK 13 #define BME_MISO 12 #define BME_MOSI 11 #define BME_CS 10*/ |
فشار سطح دریا
متغیری به نام SEALEVELPRESSURE_HPA با دستور زیر ایجاد می شود:
1 |
#define SEALEVELPRESSURE_HPA (1013.25) |
- این متغیر فشار سطح دریا را بر حسب هکتوپاسکال ( معادل میلی بار) محاسبه می کند.
- همچنین برای تخمین ارتفاع، با دادن مقادیر مختلف فشار؛ارتفاع را بدست می آوریم.
I2C
در این مثال از پروتکل رابط I2C، به عنوان پیش فرض استفاده می شود. که باید یک شی Adafruit_BME280 به نام bme ایجاد کنید.
1 |
Adafruit_BME280 bme; // I2C |
برای استفاده از SPI، باید دستور قبلی را comment و یکی از دستورهای زیر را uncomment کنید:
1 2 |
//Adafruit_BME280 bme(BME_CS); // hardware SPI //Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI |
()setup
در این قسمت، ارتباط سریال را شروع کنید :
1 |
Serial.begin(9600); |
با استفاده از کد زیر سنسور شروع به کار کرده و در صورت وجود خطا پیغام خطا می دهد.
1 2 3 4 5 |
status = bme.begin(); if (!status) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); } |
نمایش مقادیر
در ()loop، تابع ()printValues مقادیر را از BME280 می خواند و نتایج را در مانیتور سریال چاپ می کند.
1 2 3 4 |
void loop() { printValues(); delay(delayTime); } |
برای مشاهده پارامترهای:دما،رطوبت،فشار و تخمین ارتفاع یکی از متدهای زیر را در آبجکت bme وارد کنید :
- ()bme.readTemperature : برای نمایش دما بر حسب سلسیوس
- ()bme.readHumidity: برای نمایش رطوبت مطلق
- ()bme.readPressure: برای نمایش فضار مطلق (برحسب هکتوپاسکال hPa=میلی بار)
- (bme.readAltitude(SEALEVELPRESSURE_HPA: تخمین ارتفاع برحسب متر بر اساس فشار سطح دریا
نمایش
- کد را در برد آردوینو آپلود کنید.
- مانتیور سریال در ریت باد 9600 باز کنید.
پس از مراحل گفته شده اکنون باید پارامترها را در مانیتور سریال ببینید :
جمع بندی مطالب فوق
سنسور BME280 یک راه به صرفه و کارآمد برای محاسبه فشار، دما و رطوبت نسبی می باشد. رابط های این سنسور، پروتکل I2C است.باید سنسور را به آردوینو I2C pins وصل کنید. همانطور که می دانید، وصل شدن با این پروتکل به معنای اسانتر شدن راه شماست.
کد نویسی را شروع کنید و با نصب BME280_Adafruit library خیلی ساده شرح تمامی مقادیر پارامترهای لازمه را در مانیتور سریال خود دریافت کنید.
باید از متد های زیر استفاده کنید :
()readTemperature()، readHumidity()،readPressure()، readAltitude
برای آموزش های بیشتر و تکمیلی راجع به سنسورها، اینجا کلیک کنید.
امیدواریم که این آموزش برای شما مفید واقع شده باشد.
در قسمت نظرات ایده ها و مطالب پیشنهادی خود را با ما به اشتراک بگذارید.
با تشکر.