ENS160空气质量传感器

简介

Gravity: ENS160 空气质量传感器,搭载了ScioSense公司新推出ENS160空气质量传感器。该传感器专为室内空气质量检测而设计,能直接输出多种IAQ(TVOC、eCO2、AQI)数据。创新的TrueVOC技术结合金属氧化物(MOX)技术使得该传感器有优越准确性、快速响应、抗干扰等特性。
ENS160空气质量传感器内置算法,直接输出TVOC、eCO2、AQI数据,环境数据更丰富、容易理解。该传感器的预热时间小于3分钟,可以更快速的获得准确数据,内置基线自动校准算法,确保了传感器的长期稳定性。

空气质量参考指标

AQI等级参考


eCO2/CO2浓度参考


TVOC浓度参考


产品特性

  • 多种IAQ输出(TVOC、eCO2、AQI),环境数据丰富
  • 预热时间小于三分钟,更快获取数据
  • 内置算法,输出数据更准确
  • 自动校准基线,长期使用更稳定

应用场景

  • 空气净化/家庭自动化
  • 环境污染检测
  • 暖通空调/通风系统
  • 楼宇自动化/智能恒温器
  • 电器/抽油烟机

技术规格

  • 供电电压:3.3 V~5.5 V
  • 工作电流:29 mA
  • 预热时间:<3分钟
  • 接口方式:I2C
  • I2C地址:0x52、0x53
  • 工作温度范围:-40℃~85℃
  • 工作湿度范围:5 %RH~95 %RH
  • eCO2测量范围:400 ppm~65000 ppm
  • TVOC测量范围:0 ppb~65000 ppb
  • 产品尺寸:30*22 mm
  • 安装孔:孔间距:15 mm,孔径:3 mm

引脚说明


序号 丝印 功能描述
1 + 电源正极
2 - 电源负极
3 C I2C时钟线
4 D I2C数据线

Arduino使用教程

该产品使用的是Gravity标准I2C接口,使用起来比较简单,下面请按接线图所示将传感器与DFRuino Uno(或其它主板)相连接。

准备

关于如何安装库文件,点击链接

接线图


  • 其它主板连接至对应的SCL、SDA接口即可

样例代码 - 轮询获取数据

  • 通过Arduino IDE将程序烧录到DFRuino Uno,打开串口我们可以在串口监视器依次看到打印出的传感器状态、AQI等级以及TVOC、eCO2浓度。

  • 请将模块上I2C地址拨到0x53(示例默认地址))

传感器运行状态

状态 解释
0 正常运行
1 预热,上电后前3分钟(需传感器不再出现初次启动状态)
2 初次启动,上电后前1小时(传感器连续工作24小时后将不再出现该状态,如果中途出现断电,重新上电后传感器仍会进入初次启动状态)

更详细的解释请看芯片手册第10章

⚠**注意:**环境温湿度会影响数据准确度,请在setTempAndHum(/*temperature=*/temp, /*humidity=*/hum);函数中填入当前环境温湿度。

/*!
 * @file  getMeasureData.ino
 * @brief  通过轮询方式获取传感器数据(Fermion版本请使用3.3V主控)
 * @details  配置传感器电源模式, 测量参数(测量气体时用于补偿校准的温度和相对湿度)
 * @copyright  Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @license  The MIT License (MIT)
 * @author  [qsjhyy](yihuan.huang@dfrobot.com)
 * @version  V1.0
 * @date  2021-10-26
 * @url  https://github.com/DFRobot/DFRobot_ENS160
 */
#include <DFRobot_ENS160.h>

#define I2C_COMMUNICATION  //use I2C for communication, 屏蔽此行代码则使用SPI进行通信

#ifdef  I2C_COMMUNICATION
  /**
   *   Fermion版本I2C地址默认为0x53, 将SDO引脚连接到GND I2C地址为0x52
   */
  DFRobot_ENS160_I2C ENS160(&Wire, /*iicAddr*/ 0x53);
#else
  uint8_t csPin = D3;
  DFRobot_ENS160_SPI ENS160(&SPI, csPin);
#endif

void setup(void)
{
  Serial.begin(115200);

  // 初始化传感器
  while( NO_ERR != ENS160.begin() ){
    Serial.println("Communication with device failed, please check connection");
    delay(3000);
  }
  
  /**
   * 设置电源模式
   * mode 可配置的电源模式:
   *   ENS160_SLEEP_MODE: DEEP SLEEP mode (low power standby)
   *   ENS160_IDLE_MODE: IDLE mode (传感器不进行数据测量)
   *   ENS160_STANDARD_MODE: STANDARD Gas Sensing Modes
   */
  ENS160.setPWRMode(ENS160_STANDARD_MODE);

  /**
   * 设置温湿度环境参数,用于测量数据的校准补偿
   * temperature 当前环境温度, float类型, 单位: C
   * humidity    当前环境湿度, float类型, 单位: %rH
   */
  ENS160.setTempAndHum(/*temperature=*/25.0, /*humidity=*/50.0);

}

void loop()
{
  /**
   * 获取传感器运行状
   * 返回值:0-Normal operation, 
   *         1-Warm-Up phase, During first 3 minutes after power-on.
   *         2-Initial Start-Up phase, During first full hour of operation after initial power-on.Only once in the sensor’s lifetime.
   *           Note that the status will only be stored in the non-volatile memory after an initial 24h of continuous
   *           operation. If unpowered before conclusion of said period, the ENS160 will resume "Initial Start-up" mode
   *           after re-powering.
   */
  uint8_t Status = ENS160.getENS160Status();
  Serial.print("传感器运行状态 : ");
  Serial.println(Status);
  /**
   * 获取空气质量指数
   * 返回值: 1-Excellent, 2-Good, 3-Moderate, 4-Poor, 5-Unhealthy
   */
  uint8_t AQI = ENS160.getAQI();
  Serial.print("Air quality index : ");
  Serial.println(AQI);

  /**
   * 获取TVOC数据
   * 返回值范围为: 0–65000, 单位: ppb
   */
  uint16_t TVOC = ENS160.getTVOC();
  Serial.print("Concentration of total volatile organic compounds : ");
  Serial.print(TVOC);
  Serial.println(" ppb");

  /**
   * 获取eCO2数据
   * 返回值范围为: 400–65000, 单位: ppm
   */
  uint16_t ECO2 = ENS160.getECO2();
  Serial.print("Carbon dioxide equivalent concentration : ");
  Serial.print(ECO2);
  Serial.println(" ppm");

  Serial.println();
  delay(1000);
}

结果

实时的eCO2、TVOC浓度、AQI等级以及传感器运行状态已经打印在了串口监视器中


主要API接口函数列表

  /**
   * @fn setPWRMode
   * @brief 设置电源模式
   * @param mode 可配置的电源模式:
   * @n       ENS160_SLEEP_MODE: DEEP SLEEP mode (low power standby)
   * @n       ENS160_IDLE_MODE: IDLE mode (low-power)
   * @n       ENS160_STANDARD_MODE: STANDARD Gas Sensing Modes
   * @return None
   */
  void setPWRMode(uint8_t mode);

  /**
   * @fn setINTMode
   * @brief 中断配置(INT)
   * @param mode 需要设置的中断模式,下列模式相与为mode:
   * @n       在DATA_XXX寄存器中出现新数据(可获取新的测量数据)时产生中断: eINTModeDIS, 禁用中断; eINTModeEN, 启用中断
   * @n       中断引脚输出驱动模式: eINTPinOD, 开漏; eINTPinPP, 推挽
   * @n       中断引脚有效电平: eINTPinActiveLow, 低电平有效; eINTPinActiveHigh, 高电平有效
   * @return None
   */
  void setINTMode(uint8_t mode);

  /**
   * @fn setTempAndHum
   * @brief 用户将环境温度和相对湿度写入ENS160, 用于气体测量数据的校准补偿。
   * @param ambientTemp 用于补偿的当前环境温度, float类型, 单位: C
   * @param relativeHumidity 用于补偿的当前环境湿度, float类型, 单位: %rH
   * @return None
   */
  void setTempAndHum(float ambientTemp, float relativeHumidity);

  /**
   * @fn getENS160Status
   * @brief 这个API获取传感器的运行状态信息
   * @return 运行状态:
   * @n        eNormalOperation: Normal operation; 
   * @n        eWarmUpPhase: Warm-Up phase; 
   * @n        eInitialStartUpPhase: Initial Start-Up phase; 
   * @n        eInvalidOutput: Invalid output
   */
  uint8_t getENS160Status(void);

  /**
   * @fn getAQI
   * @brief 获取根据UBA计算出的空气质量指数
   * @return 返回值范围为: 1-5(对应Excellent, Good, Moderate, Poor, Unhealthy这五个等级)
   */
  uint8_t getAQI(void);

  /**
   * @fn getTVOC
   * @brief 获取总挥发性有机化合物(TVOC)的浓度
   * @return 返回值范围为: 0–65000, 单位: ppb
   */
  uint16_t getTVOC(void);

  /**
   * @fn getECO2
   * @brief 获取根据检测到的VOCs和氢报告计算出的二氧化碳当量浓度(eCO2 – Equivalent CO2)
   * @return 返回值范围为: 400–65000, 单位: ppm
   * @note 分为五个等级: Excellent(400 - 600), Good(600 - 800), Moderate(800 - 1000), 
   * @n                  Poor(1000 - 1500), Unhealthy(> 1500)
   */
  uint16_t getECO2(void);

树莓派使用教程

⚠**特别注意:**第一次使用请让传感器先运行1小时后以确保数据准确,之后每次使用先运行(预热)三分钟。同时还需环境温湿度对测量数据进行补偿。

准备

接线图

  • 将模块与树莓派按照连线图相连。I2C地址与拨动开关所在位置地址相同

安装驱动

  1. 启动树莓派的I2C接口。如已开启,可跳过该步骤。
    打开终端(Terminal),键入如下指令,并回车:
    pi@raspberrypi:~ $ sudo raspi-config
    然后用上下键选择“Interfacing Options ”, 按回车进入,选择 “ P5 I2C ”, 按回车确认“ YES ”即可。重启树莓派主控板。

  2. 安装Python依赖库与git,树莓派需要联网。如已安装,可跳过该步骤。
    在终端中,依次键入如下指令,并回车:
    pi@raspberrypi:~ $ sudo apt-get update
    pi@raspberrypi:~ $ sudo apt-get install build-essential python-dev python-smbus git

  3. 下载ENS160驱动库。在终端中,依次键入如下指令,并回车:
    pi@raspberrypi:~ $ cd Desktop/
    pi@raspberrypi:~/Desktop $ git clone https://github.com/DFRobot/DFRobot_ENS160

样例代码 - 轮询获取数据

  • 在终端中,键入如下指令并回车,运行样例代码:

pi@raspberrypi:~/Desktop $ cd DFRobot_ENS160/python/raspberrypi/examples/get_measure_data

pi@raspberrypi:~/Desktop/DFRobot_ENS160/python/raspberrypi/examples/get_measure_data $python get_measure_data.py

  • 结果

Mind+ Python模式编程(行空板)

Mind+Python模式为完整Python编程,因此需要能运行完整Python的主控板,此处以行空板为例说明

连接图

操作步骤

1、下载及安装官网最新软件。下载地址:https://www.mindplus.cc 详细教程:Mind+基础wiki教程-软件下载安装

2、切换到“Python模式”。“扩展”中选择“官方库”中的“行空板”和“pinpong库”中的”pinpong初始化“和“ENS160空气质量传感器”。切换模式和加载库的详细操作链接

3、进行编程

4、连接行空板,程序点击运行后,可在终端查看数据。行空板官方文档-行空板快速上手教程 (unihiker.com)

代码编程

以pinpong库为例,行空板官方文档-行空板快速上手教程 (unihiker.com)

#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from pinpong.libs.dfrobot_ens160 import Ens160
from pinpong.board import Board
import time


Board().begin()
p_ens160 = Ens160(0x52)
p_ens160.set_pwr_mode(p_ens160.ENS160_STANDARD_MODE)
p_ens160.set_temp_hum(26.4, 48.6)

while True:
    print((str("运行状态:") + str(p_ens160.get_status())))
    print((str("二氧化碳:") + str(p_ens160.get_eco2())))
    print((str("TVOC:") + str(p_ens160.get_tvoc())))
    print((str("空气质量指数") + str(p_ens160.get_aqi())))
    print("")
    time.sleep(1)

常见问题

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

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

更多

DFshopping_car1.png DFRobot商城购买链接