风筝
发表于: 前天 18:34 | 显示全部楼层

欢迎来到环境传感的世界!如今,随着气候变化和污染问题的不断出现,了解和监测我们的周围环境变得非常重要。这就是我们要谈论BME680传感器的原因!BME680 传感器可以测量温度、湿度、压力,甚至VOC(挥发性有机化合物)。它为我们提供宝贵的数据来改善我们的生活质量。但知道如何有效地使用它可能会非常有帮助。在本文中,我们将充分介绍如何基于Arudino开发板使用BME680传感器。

BME680-Pin-Config.jpg


所需的组件

●    Arduino MEGA 2560开发板

●    BME680传感器模块

●    跳线


BME680传感器模块引脚分布

该传感器模块有六个引脚,如下所示:

BME680-Pin-Pins.jpg

●    VCC:模块电源 (5V)

●    GND:接地

●    SCL:时钟引脚(I2C 协议)

●    SDA:数据引脚(I2C 协议)

●    SDO:选择 I2C 地址

●    CS:芯片选择

您可以通过将SDO引脚分别连接到GND或Vcc,BME680模块的I2C地址可以是0x76和0x77。


BME680传感器模块与Arduino的硬件连接

该模块传感器可以在I2C和SPI模式下进行通信。要选择I2C或SPI模式,您需要分别将CS引脚连接到VCC或GND。默认通信协议是I2C,本文中将使用该接口。按如下所示连接组件:

BME680-circuit.jpg


代码

首先,在Arduino软件中安装Adafruit BME680库,然后将以下代码上传到您的Arduino开发板。

  1. #include <Wire.h>
  2. #include <SPI.h>
  3. #include <Adafruit_Sensor.h>
  4. #include "Adafruit_BME680.h"

  5. #define BME_SCK 13
  6. #define BME_MISO 12
  7. #define BME_MOSI 11
  8. #define BME_CS 10

  9. #define SEALEVELPRESSURE_HPA (1013.25)

  10. Adafruit_BME680 bme; // I2C
  11. //Adafruit_BME680 bme(BME_CS); // hardware SPI
  12. //Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);

  13. void setup() {
  14. Serial.begin(9600);
  15. while (!Serial);
  16. Serial.println(F("BME680 test"));

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

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

  28. void loop() {
  29. if (! bme.performReading()) {
  30. Serial.println("Failed to perform reading :(");
  31. return;
  32. }
  33. Serial.print("Temperature = ");
  34. Serial.print(bme.temperature);
  35. Serial.println(" *C");

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

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

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

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

  48. Serial.println();
  49. delay(2000);
  50. }
复制代码

代码说明

像往常一样,首先是包含必要的库。

  1. #include <Wire.h>
  2. #include <SPI.h>
  3. #include <Adafruit_Sensor.h>
  4. #include "Adafruit_BME680.h"
复制代码

接下来,我们定义海平面的气压,以便在高度计算中使用它。

  1. #define SEALEVELPRESSURE_HPA (1013.25)
复制代码

现在,我们创建BME680传感器的一个实例。

  1. Adafruit_BME680 bme; // I2C
复制代码

接下来是setup() 函数。在这里,我们与计算机建立串口连接,并与BME680传感器建立 I2C 连接。如果传感器连接失败,我们会在串口监视器中显示以下内容:Could not find a valid BME680 sensor, check wiring!


以下代码用于调整气体传感器加热器。您可以分别使用第一个和第二个参数调整加热器温度及其应保持的时间。

  1. bme.setGasHeater(320, 150); // 320*C for 150 ms
复制代码

在loop() 函数的开头,我们开始对所有传感器输出数据进行采样。

  1. bme.performReading()
复制代码

这样,我们就可以测量温度、湿度、压力和气体浓度。

您可以按如下方式访问每个测量数据:

– 温度 (°C):bme.temperature

– 湿度 (%):bme.hydrity

– 气体量 (Ω):bme.gas_resistance

– 高度 (Pascal):bme.readAltitude (SEALEVELPRESSURE_HPA)

在 loop() 函数中,我们每2秒测量一次参数并将其显示在串口监视器中。


代码测试结果

对Arduino开发板进行编程并打开串口监视器后,您将看到显示的数据,如下所示:

  1. BME680 test
  2. Temperature = 29.37 *C
  3. Pressure = 866.53 hPa
  4. Humidity = 28.59 %
  5. Gas = 80.58 KOhms
  6. Approx. Altitude = 1300.03 m

  7. Temperature = 29.83 *C
  8. Pressure = 866.55 hPa
  9. Humidity = 27.85 %
  10. Gas = 87.49 KOhms
  11. Approx. Altitude = 1299.65 m
复制代码

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 714 | 回复: 1501



手机版|

GMT+8, 2024-12-21 00:37 , Processed in 0.051078 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表