Gravity: 环境传感器

简介

这是一个集成了SHTC3温湿度传感器、BMP280大气压强传感器、VEML7700光照传感器、紫外线传感器(V1.0 : ML8511,V2.0 : LTR390-UV-01)共五种环境参数的五合一传感器。每一种环境参数我们都使用了专业传感器芯片,电路设计上也精心考虑了核芯片的合理布局和热传导,有效的保证了数据的准确性。

产品板载了MCU处理芯片,将传感器的原始数据经过换算,你得到的值就是标准单位值,例如温度是℃和F,湿度是百分比,大气压强是Kpa,光照是lx,紫外线是mw/cm²。

DF环境传感器支持UART和I2C两种通讯方式。提供Gravity和Breakout两种产品形态,提供了完善的Arduino库、Python库。

产品体积精致小巧,你可以用它来制作家庭室内外环境监测系统,或者用于你的环境监测方面的课题,使用DF的环境传感器能大幅度的简化项目的连接线和复杂的程序代码。

说明:
V2.0与V1.0相比更改了紫外线传感器型号,V1.0版本的紫外线传感器型号为ML8511,V2.0版本的紫外线传感器型号为LTR390-UV-01。

特性

  • Gravity接口,无需焊接,即插即用
  • 可切换I2C和UART两种输出方式
  • 高集成度模块,同时可测试多种数据(温度,湿度,大气压强,海拔高度,紫外线强度,环境光强度)
  • 布局合理,精度高

应用场景

  • 家庭环境检测
  • 大棚环境检测
  • 仓库环境检测
  • 商城环境检测
  • 泳池环境检测

寄存器表

V1.0 版本

产品参数

基本参数

  • 工作电压: 3.3~5V DC
  • 工作电流: 45mA
  • 输出信号: I2C、UART
  • 工作温度:-20~70℃
  • 产品尺寸:32mm*32mm
  • 安装孔尺寸:M3(直径3mm),安装孔圆心间距25mm

大气压强传感器

气压单位关系:1000pa = 10hpa = 1kpa

  • 传感器芯片型号:BMP280
  • 大气压测量范围:3000~1100 hPa
  • 气压相对精度:±0.12 hPa
  • 气压绝对精度:±1 hPa

温湿度传感器

  • 传感器芯片型号:SHT-C3
  • 相对湿度精度:±2%RH
  • 相对湿度分辨率:0.01%RH
  • 相对湿度测量范围:0~100
  • 温度精度:±0.2℃
  • 温度分辨率:0.01℃
  • 温度测量范围:-40~125℃

紫外线传感器

  • 传感器芯片型号:ML8511
  • 紫外线敏感波长 UV-A(320-400nm),UV-B(280-320nm)
  • 紫外线输出单位:mW/c㎡

环境光传感器

  • 传感器芯片型号:VEML7700
  • 环境光精度:0.0036 lx/ct
  • 环境光量程:0~120 klx

功能指示

尺寸图

引脚说明

标号 名称 功能描述
1 D/T I2C数据线SDA/UART数据传输-TX
2 C/R I2C时钟线SCL/UART数据接收-RX
3 - GND电源负极
4 + 电源正极

Arduino使用教程

将程序下载到DFRuino UNO,打开串口监视器查看各环境参数。

软硬件准备

使用UART/I2C读取传感器数据

UART/I2C接线图

             UART接线方式                                                                    I2C接线方式  

使用步骤

关于 UART/I2C 模式切换:
1.默认代码为UART模式请将开关拨到UART一侧
2.如果需要使用I2C模式请将开关拨到I2C一侧,并将代码开头中的1替换为0,如图

步骤

注意:不同主板对应不同的接线引脚(参考上方更多接线图),在Arduino IDE中它们也同时对应不同主板选择,不同端口(COM),其它步骤同DFRuino UNO
  • 将模块与DFRuino UNO按照上图接线方式相连接。
  • 打开Arduino IDE,将下面的代码上传到DFRuino UNO。
  • 打开Arduino IDE的串口监控视器,把波特率调至115200,观察串口打印结果。

样例代码

代码:打印模块获取的所有数据
 /*!
 *@file  read_data.ino
 *@brief 这个demo演示获取SEN050X传感器上的数据,通过IIC或串口连接传感器
 *@n 将SEN050X返回的数据打印在串口监视器上
 *
 * @n connected table
 * ---------------------------------------------------------------------------------------------------------------
 *    board   |             MCU                | Leonardo/Mega2560/M0 |    UNO    | ESP8266 | ESP32 |  microbit  |
 *     VCC    |            3.3V/5V             |        VCC           |    VCC    |   VCC   |  VCC  |     X      |
 *     GND    |              GND               |        GND           |    GND    |   GND   |  GND  |     X      |
 *     RX     |              TX                |     Serial1 TX1      |     5     |   5/D6  |  D2   |     X      |
 *     TX     |              RX                |     Serial1 RX1      |     4     |   4/D7  |  D3   |     X      |
 * ---------------------------------------------------------------------------------------------------------------
 * 
 * @copyright   Copyright (c) 2010 DFRobot Co.Ltd (https://www.dfrobot.com)
 * @licence     The MIT License (MIT)
 * @author      [TangJie](jie.tang@dfrobot.com)
 * @version     V1.0
 * @date        2021-08-31
 * @get         from https://www.dfrobot.com
 * @url         https://github.com/cdjq/DFRobot_EnvironmentalSensor
 */
#include "DFRobot_EnvironmentalSensor.h"
#if defined(ARDUINO_AVR_UNO)||defined(ESP8266)
#include <SoftwareSerial.h>
#endif

#define MODESWITCH        /*UART:*/1 /*I2C: 0*/

#if MODESWITCH
#if defined(ARDUINO_AVR_UNO)||defined(ESP8266)
  SoftwareSerial mySerial(/*rx =*/4, /*tx =*/5);
  DFRobot_EnvironmentalSensor environment(/*addr =*/SEN050X_DEFAULT_DEVICE_ADDRESS, /*s =*/&mySerial);//创建一个广播地址的对象,可批量配置总线上的所有设备
#else
  DFRobot_EnvironmentalSensor environment(/*addr =*/SEN050X_DEFAULT_DEVICE_ADDRESS, /*s =*/&Serial1); //创建一个广播地址的对象,可批量配置总线上的所有设备
#endif
#else
DFRobot_EnvironmentalSensor environment(/*addr = */SEN050X_DEFAULT_DEVICE_ADDRESS, /*pWire = */&Wire);
#endif
void setup()
{
#if MODESWITCH
  //初始化MCU通信串口
#if defined(ARDUINO_AVR_UNO)||defined(ESP8266)
  mySerial.begin(9600);
#elif defined(ESP32)
  Serial1.begin(9600, SERIAL_8N1, /*rx =*/D3, /*tx =*/D2);
#else
  Serial1.begin(9600);
#endif
#endif
  Serial.begin(115200);
 /**
  * @brief 初始化SEN050X传感器
  * 
  * @return 返回值;
  * @n      0:成功
  * @n      -1:失败
  */
  while(environment.begin() != 0){
    Serial.println(" Sensor initialize failed!!");
    delay(1000);
  }
  Serial.println(" Sensor  initialize success!!");
}

void loop()
{
  //打印从传感器后获取的数据
  Serial.println("-------------------------------");
  Serial.print("Temp: ");
  Serial.print(environment.getTemperature(TEMP_C));
  Serial.println(" ℃");
  Serial.print("Temp: ");
  Serial.print(environment.getTemperature(TEMP_F));
  Serial.println(" ℉");
  Serial.print("Humidity: ");
  Serial.print(environment.getHumidity());
  Serial.println(" %");
  Serial.print("Ultraviolet intensity: ");
  Serial.print(environment.getUltravioletIntensity());
  Serial.println(" mw/cm2");
  Serial.print("LuminousIntensity: ");
  Serial.print(environment.getLuminousIntensity());
  Serial.println(" lx");
  Serial.print("Atmospheric pressure: ");
  Serial.print(environment.getAtmospherePressure(HPA));
  Serial.println(" hpa");
  Serial.print("Elevation: ");
  Serial.print(environment.getElevation());
  Serial.println(" m");
  Serial.println("-------------------------------");
  delay(500);
}

结果

您将在串口监视器看到如下格式的打印显示,它包含了该模块所有读取到的数据。

函数库名称定义

/**
 * @brief 初始化SEN050X传感器
 * 
 * @return 返回值;
 * @n      0:成功
 * @n      -1:失败
 */
int8_t begin(void);
/**
 * @brief 获取SEN050X温度数据
 * 
 * @param units 返回数据单位选择
 * @n     TEMP_C:摄氏度
 * @n     TEMP_F:华氏度
 * 
 * @return 返回获取的温度数据
 */
float getTemperature(uint8_t unist);
/**
 * @brief 获取SEN050X湿度数据
 * 
 * @return 返回获取的湿度数据
 */
uint16_t getHumidity(void);
/**
 * @brief 获取SEN050X紫外线强度指数数据
 * 
 * @return 返回获取的紫外线强度指数数据
 */
float getUltravioletIntensity(void);
/**
 * @brief 获取SEN050X光线强度数据
 * 
 * @return 返回获取的光线强度数据
 */
float getLuminousIntensity(void);
/**
 * @brief 获取SEN050X大气压强数据
 * 
 * @param units 返回数据单位选择
 * @n            HPA:百帕
 * @n            KPA:千帕
 * @return 返回获取的大气压强数据
 */
uint16_t getAtmospherePressure(uint8_t units);
/**
 * @brief 获取SEN050X海拔数据
 * 
 * @return 返回获取的海拔数据
 */
float getElevation(void);

V2.0 版本

基本参数

  • 工作电压: 3.3~5V DC
  • 工作电流: 约4mA
  • 输出信号: I2C、UART
  • 工作温度:-20~70℃
  • 产品尺寸:32mm*32mm
  • 安装孔尺寸:M3(直径3mm),安装孔圆心间距25mm

大气压强传感器参数

气压单位关系:1000pa = 10hpa = 1kpa

  • 传感器芯片型号:BMP280
  • 大气压测量范围: 3000~1100 hPa
  • 气压相对精度:±0.12 hPa
  • 气压绝对精度:±1 hPa

温湿度传感器参数

  • 传感器芯片型号:SHT-C3
  • 相对湿度精度:±2%RH
  • 相对湿度分辨率:0.01%RH
  • 相对湿度测量范围:0~100
  • 温度精度:±0.2℃
  • 温度分辨率:0.01℃
  • 温度测量范围:-40~125℃

紫外线传感器参数

  • 传感器芯片型号:LTR390-UV-01
  • 紫外线敏感波长:280-430nm
  • 测量数据范围:13 Bit、16 Bit 、17 Bit、18 Bit、19 Bit、20 Bit
  • 测量速率:25ms、50ms、100ms、200ms、500ms、1000ms
  • 可调增益倍数:1、3、6、9、18

环境光传感器参数

  • 传感器芯片型号:VEML7700
  • 环境光精度:0.0036 lx/ct
  • 环境光量程:0~120 klx

尺寸图

功能指示

引脚说明

标号 名称 功能描述
1 D/T I2C数据线SDA/UART数据传输-TX
2 C/R I2C时钟线SCL/UART数据接收-RX
3 - GND电源负极
4 + 电源正极

Arduino使用教程

将程序下载到DFRuino UNO,打开串口监视器查看各环境参数。

软硬件准备

使用UART/I2C读取传感器数据

接线图

使用步骤

关于 UART/I2C 模式切换:
1.默认代码为UART模式请将开关拨到UART一侧
2.如果需要使用I2C模式请将开关拨到I2C一侧,并将代码开头中的1替换为0,如图

步骤

注意:不同主板对应不同的接线引脚(参考上方更多接线图),在Arduino IDE中它们也同时对应不同主板选择,不同端口(COM),其它步骤同DFRuino UNO

  • 将模块与DFRuino UNO按照上图接线方式相连接。
  • 打开Arduino IDE,将下面的代码上传到DFRuino UNO。
  • 打开Arduino IDE的串口监控视器,把波特率调至115200,观察串口打印结果。

样例代码

代码:打印模块获取的所有数据
#include "DFRobot_EnvironmentalSensor.h"
#if defined(ARDUINO_AVR_UNO)||defined(ESP8266)
#include <SoftwareSerial.h>
#endif

#define MODESWITCH        /*UART:*/1 /*I2C: 0*/

#if MODESWITCH
#if defined(ARDUINO_AVR_UNO)||defined(ESP8266)
  SoftwareSerial mySerial(/*rx =*/4, /*tx =*/5);
  DFRobot_EnvironmentalSensor environment(/*addr =*/SEN050X_DEFAULT_DEVICE_ADDRESS, /*s =*/&mySerial);//创建一个广播地址的对象,可批量配置总线上的所有设备
#else
  DFRobot_EnvironmentalSensor environment(/*addr =*/SEN050X_DEFAULT_DEVICE_ADDRESS, /*s =*/&Serial1); //创建一个广播地址的对象,可批量配置总线上的所有设备
#endif
#else
DFRobot_EnvironmentalSensor environment(/*addr = */SEN050X_DEFAULT_DEVICE_ADDRESS, /*pWire = */&Wire);
#endif
void setup()
{
#if MODESWITCH
  //初始化MCU通信串口
#if defined(ARDUINO_AVR_UNO)||defined(ESP8266)
  mySerial.begin(9600);
#elif defined(ESP32)
  Serial1.begin(9600, SERIAL_8N1, /*rx =*/D3, /*tx =*/D2);
#else
  Serial1.begin(9600);
#endif
#endif
  Serial.begin(115200);
 /**
  * @brief 初始化SEN050X传感器
  * 
  * @return 返回值;
  * @n      0:成功
  * @n      -1:失败
  */
  while(environment.begin() != 0){
    Serial.println(" Sensor initialize failed!!");
    delay(1000);
  }
  Serial.println(" Sensor  initialize success!!");
}

void loop()
{
  //打印从传感器后获取的数据
  Serial.println("-------------------------------");
  Serial.print("Temp: ");
  Serial.print(environment.getTemperature(TEMP_C));
  Serial.println(" ℃");
  Serial.print("Temp: ");
  Serial.print(environment.getTemperature(TEMP_F));
  Serial.println(" ℉");
  Serial.print("Humidity: ");
  Serial.print(environment.getHumidity());
  Serial.println(" %");
  Serial.print("Ultraviolet intensity: ");
  Serial.print(environment.getUltravioletIntensity());
  Serial.println(" mw/cm2");
  Serial.print("LuminousIntensity: ");
  Serial.print(environment.getLuminousIntensity());
  Serial.println(" lx");
  Serial.print("Atmospheric pressure: ");
  Serial.print(environment.getAtmospherePressure(HPA));
  Serial.println(" hpa");
  Serial.print("Elevation: ");
  Serial.print(environment.getElevation());
  Serial.println(" m");
  Serial.println("-------------------------------");
  delay(500);
}

结果

您将在串口监视器看到如下格式的打印显示,它包含了该模块所有读取到的数据。

函数库名称定义

/**
   * @fn begin
   * @brief 初始化SEN0500/SEN0501传感器
   * @return 返回值初始化状态
   * @retval 0  成功
   * @retval -1 失败
   */
  int8_t begin(void);

  /**
   * @fn getTemperature
   * @brief 获取SEN0500/SEN0501温度数据
   * @param units 温度数据单位选择
   * @n     TEMP_C 摄氏度
   * @n     TEMP_F 华氏度 
   * @return 返回获取的温度数据
   */
  float getTemperature(uint8_t unist);

  /**
   * @fn getHumidity
   * @brief 获取SEN0500/SEN0501湿度数据 
   * @return 返回获取的湿度数据
   */
  float getHumidity(void);

  /**
   * @fn getUltravioletIntensity
   * @brief 获取SEN0500/SEN0501紫外线强度指数数据 
   * @return 返回获取的紫外线强度指数数据
   */
  float getUltravioletIntensity(void);

  /**
   * @fn getLuminousIntensity
   * @brief 获取SEN0500/SEN0501光线强度数据 
   * @return 返回获取的光线强度数据
   */
  float getLuminousIntensity(void);

  /**
   * @fn getAtmospherePressure
   * @brief 获取SEN0500/SEN0501大气压强数据 
   * @param units 大气压强数据单位选择
   * @n            HPA:百帕
   * @n            KPA:千帕
   * @return 返回获取的大气压强数据
   */
  uint16_t getAtmospherePressure(uint8_t units);

  /**
   * @fn getElevation
   * @brief 获取SEN0500/SEN0501海拔数据 
   * @return 返回获取的海拔数据
   */
  float getElevation(void);

更多资料下载

SEN0501_V1.0_SCH_原理图.PDF

SEN0501_V1.0_2D_PDF.pdf

SEN0501_V1.0_2D_DXF.rar

SEN0501_V1.0_3D_STP.rar

SEN0501_V2.0_SCH_原理图.PDF

SEN0501_V2.0_2D_PDF.pdf

SEN0501_V2.0_2D_DXF.rar

SEN0501_V2.0_3D_STP.rar

常见问题

还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。

DFshopping_car1.png DFRobot商城购买链接