环境传感器

简介

这是一个集成了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。

特性

  • 小体积贴片设计,可直接焊接到你PCB上
  • 高集成度模块,同时可测试多种数据(温度,湿度,大气压强,紫外线强度,环境光强度)
  • 支持I2C和UART两种数据输出方式
  • 布局合理,精度高

应用场景

  • 家庭室内外环境检测系统
  • 环境监测方面的课题制作

寄存器表

V1.0 版本

基本参数

  • 工作电压: 3.3V DC
  • 工作电流: 35mA
  • 输出信号: I2C、UART
  • 工作温度:-20~70℃
  • 电路板尺寸:30mm*20.5mm

大气压强传感器参数

气压单位关系: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

功能指示

尺寸图

引脚说明

SEN0500 多功能传感器引脚

标号 名称 功能描述
1 3V3 电源正极
2 GND 电源负极
3 RXD 串口接收端
4 TXD 串口发送端
5 SCL I2C时钟线SCL
6 SDA I2C数据线SDA
7 RST 复位引脚
8 NC 空引脚

Arduino使用教程

将程序下载到FireBeetle Board ESP32-E,打开串口监视器查看各环境参数。

软硬件准备

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

UART/I2C接线图

              UART接线方式                                                                            I2C接线方式  

使用步骤

关于 UART/I2C 模式:
1.默认代码为UART模式请将连接线参照上图连接到对应UART引脚上
2.如果需要使用I2C模式请将连接线参照上图连接到对应I2C引脚上,并将代码开头中的1替换为0,如图

步骤

注意:请使用3.3V的主控(不建议使用Arduino Uno),不同主板对应不同的接线引脚(参考上方更多接线图),同时在Arduino IDE中它们也同时对应不同主板选择,不同端口(COM),其它步骤同FireBeetle Board ESP32-E
  • 将模块与FireBeetle Board ESP32-E按照上图接线方式相连接。
  • 打开Arduino IDE,将下面的代码上传到FireBeetle Board ESP32-E。
  • 打开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 (http://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.3V~5V
  • 工作电流: 35mA
  • 输出信号: I2C、UART
  • 工作温度:-20~70℃
  • 电路板尺寸:30mm * 20.5mm

大气压强传感器参数

气压单位关系: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 VCC 电源正极(3.3V~5V)
2 GND 接地
3 R(RXD) 串口接收端
4 T(TXD) 串口发送端
5 C(SCL) I2C时钟线SCL
6 D(SDA) I2C数据线SDA
7 NC、NC、NC、NC 空引脚

Arduino使用教程

将程序下载到FireBeetle Board ESP32-E,打开串口监视器查看各环境参数。

软硬件准备

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

接线图

使用步骤

关于 UART/I2C 模式:
1.默认代码为UART模式请将连接线参照上图连接到对应UART引脚上
2.如果需要使用I2C模式请将连接线参照上图连接到对应I2C引脚上,并将代码开头中的1替换为0,如图

步骤

  • 将模块与FireBeetle Board ESP32-E按照上图任意一种接线方式相连接。
  • 打开Arduino IDE,将下面的代码上传到FireBeetle Board ESP32-E。
  • 打开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
  //Init MCU communication serial port
#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);
  while(environment.begin() != 0){
    Serial.println(" Sensor initialize failed!!");
    delay(1000);
  }
  Serial.println(" Sensor  initialize success!!");
}

void loop()
{
  //Print the data obtained from sensor
  Serial.println("-------------------------------");
  Serial.print("Temp: ");
  Serial.print(environment.getTemperature(TEMP_C));
  Serial.println("C");
  Serial.print("Temp: ");
  Serial.print(environment.getTemperature(TEMP_F));
  Serial.println("F");
  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("Altitude: ");
  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)

更多资料下载

SEN0500_V1.0_2D_DXF.rar

SEN0500_V1.0_2D_PDF.pdf

SEN0500_V1.0_3D_STP.rar

SEN0500_V1.0_KiCad.rar

SEN0500_V2.0_2D_DXF.rar

SEN0500_V2.0_2D_PDF.pdf

SEN0500_V2.0_3D_STP.rar

常见问题

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

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

DFshopping_car1.png DFRobot商城购买链接