این ماژول مجهز به سنسور دیجیتال BME280 می باشد که بهبود یافته BMP180 بوده و نویز کمی در ارتفاع 0.25 متر دارد و به رابطهای I2C و SPI مجهز است و می تواند دما و رطوبت و فشار اتمسفر را اندازه گیری کند.
ارتباط با این ماژول با رابط I2C و SPI انجام می شود و مقاومت های پول آپ و دو سوراخ 3.5 میلی متری برای نصب است.
رابط دیجیتال I2C (تا 3.4 مگاهرتز) و SPI (3 و 4 سیم ، تا 10 مگاهرتز)
جریان مصرفی سنسور در حالت 1 نمونه برداری فشار و دما و رطوبت در هر ثانیه برابر 3.6 میکرو آمپر می باشد و جریان مصرفی در حالت خواب 0.1 میکرو آمپر می باشد.
#include
#include "BlueDot_BME280.h"
BlueDot_BME280 bme280 = BlueDot_BME280();
void setup() {
Serial.begin(9600);
Serial.println(F("Basic Weather Station"));
bme280.parameter.communication = 0; //Choose communication protocol
//0x76: Alternative I2C Address (SDO pin connected to GND)
//0x77: Default I2C Address (SDO pin unconnected)
bme280.parameter.I2CAddress = 0x76; //Choose I2C Address
bme280.parameter.SPI_cs = 10; //Are you using either Software SPI or Hardware SPI? Then you need to define the Chip Select Pin.
bme280.parameter.SPI_mosi = 13; //If you are using Software SPI, then you need to define the MOSI line. For Hardware SPI you can leave this line commented.
bme280.parameter.SPI_miso = 11; //If you are using Software SPI, then you need to define the MISO line. Just comment this out for Hardware SPI.
bme280.parameter.SPI_sck = 12; //If you are using Software SPI, then you need to define the SCK line. Same as before. For Hardware SPI, just comment this out.
bme280.parameter.sensorMode = 0b11; //Choose sensor mode
bme280.parameter.IIRfilter = 0b100; //Setup for IIR Filter
bme280.parameter.humidOversampling = 0b101; //Setup Humidity Oversampling
bme280.parameter.tempOversampling = 0b101; //Setup Temperature Ovesampling
bme280.parameter.pressOversampling = 0b101; //Setup Pressure Oversampling
bme280.parameter.pressureSeaLevel = 1013.25; //default value of 1013.25 hPa
bme280.parameter.tempOutsideCelsius = 15; //default value of 15°C
if (bme280.init() != 0x60)
{
Serial.println(F("Ops! BME280 could not be found!"));
Serial.println(F("Please check your connections."));
Serial.println();
Serial.println(F("Troubleshooting Guide"));
Serial.println(F("*************************************************************"));
Serial.println(F("1. Let's check the basics: Are the VCC and GND pins connected correctly? If the BME280 is getting really hot, then the wires are crossed."));
Serial.println();
Serial.println(F("2. Are you using the I2C mode? Did you connect the SDI pin from your BME280 to the SDA line from the Arduino?"));
Serial.println();
Serial.println(F("3. And did you connect the SCK pin from the BME280 to the SCL line from your Arduino?"));
Serial.println();
Serial.println(F("4. Are you using the alternative I2C Address(0x76)? Did you remember to connect the SDO pin to GND?"));
Serial.println();
Serial.println(F("5. If you are using the default I2C Address (0x77), did you remember to leave the SDO pin unconnected?"));
Serial.println();
Serial.println(F("6. Are you using the SPI mode? Did you connect the Chip Select (CS) pin to the pin 10 of your Arduino (or to wherever pin you choosed)?"));
Serial.println();
Serial.println(F("7. Did you connect the SDI pin from the BME280 to the MOSI pin from your Arduino?"));
Serial.println();
Serial.println(F("8. Did you connect the SDO pin from the BME280 to the MISO pin from your Arduino?"));
Serial.println();
Serial.println(F("9. And finally, did you connect the SCK pin from the BME280 to the SCK pin from your Arduino?"));
Serial.println();
while(1);
}
else
{
Serial.println(F("BME280 detected!"));
}
Serial.println();
Serial.println();
}
void loop()
{
Serial.print(F("Duration in Seconds:\t\t"));
Serial.println(float(millis())/1000);
Serial.print(F("Temperature in Celsius:\t\t"));
Serial.println(bme280.readTempC());
Serial.print(F("Temperature in Fahrenheit:\t"));
Serial.println(bme280.readTempF());
Serial.print(F("Humidity in %:\t\t\t"));
Serial.println(bme280.readHumidity());
Serial.print(F("Pressure in hPa:\t\t"));
Serial.println(bme280.readPressure());
Serial.print(F("Altitude in Meters:\t\t"));
Serial.println(bme280.readAltitudeMeter());
Serial.print(F("Altitude in Feet:\t\t"));
Serial.println(bme280.readAltitudeFeet());
Serial.println();
Serial.println();
delay(1000);
}
این ماژول بسیار کوچک از سنسور BME280 استفاده می کند.
سنسور BME280 نسخه بهبود یافته BMP180 از کمپانی BOSCH می باشد که از دما و رطوبط و فشار هوا پشتیبانی می کند. همچنین دارای رابط I2C و SPI می باشد.
و مشکلات اندازه گیری فشار در ارتفاعات کم که در BMP180 وجود داشت نیز در این سنسور رفع شده اند
برای کار با این ماژول می توانید از رابط I2C استفاده کنید و مانند شکل زیر آن را به میکرو کنترولری مانند آردوینو متصل کنید.
در صورتی که در پروژه های پیجیده نسبت به تداخل آدرس آن با سایر ماژولهای متصل به I2C نگران هستید می توانید از رابط SPI آن استفاده کنید.
این ماژول با ولتاژ 3.3 ولت کار می کند و در صورت اتصال آن به تغذیه 5 ولت ماژول خواهد سوخت.
خوش بختانه در مورد سطح منطقی سنسور باید بگویم که این سنسور تحمل سطح منطقی 5 ولت را دارد و می توانید آن را به میکرو کنترولرهای 3.3 ولتی و 5 ولتی متصل کنید.
با کمک این ماژول یک ایستگاه هواشناسی کامل در اختیار دارید.
مانند شکل زیر اتصالات این ماژول را با آردوینو انجام دهید
این ماژول برای راحتی کار برنامه نویسی دارای چندین کتابخانه اختصاصی نیز می باشد که ما نیز از یکی از آنها استفاده می کنیم.
برای نصب کتابخانه آن کامپایلر آردوینو را باز کرده و به منوی Tools بروید و گزینه Manage libraries را باز کنید. سپس در قسمت جستجو 280 را تایپ کنید.
با این کار کتابخانه های متعددی را خواهید دید. گزینه BlueDot_BME280 را پیدا کرده و نصب کنید.
سپس برنامه نمونه را کپی و روی آردوینو بارگزاری نمایید.
بعد از اجرای برنامه بر روی میکرو کنترولر می توانید بر روی پنجره سریال دما و رطوبت و فشار و ارتفاع را ببینید