简介
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(或其它主板)相连接。
准备
- 硬件
- DFRuino UNO R3 x1
- ENS160 空气质量传感器 x1
- 若干 杜邦线
- 软件
- Arduino IDE, 点击下载Arduino IDE
- ENS160库文件和示例程序
关于如何安装库文件,点击链接
接线图
- 其它主板连接至对应的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小时后以确保数据准确,之后每次使用先运行(预热)三分钟。同时还需环境温湿度对测量数据进行补偿。
准备
-
硬件
- 树莓派4代B型(或类似)主控板 x 1
- ENS160空气质量传感器 x 1
- 若干杜邦线 x 1
-
软件
接线图
- 将模块与树莓派按照连线图相连。I2C地址与拨动开关所在位置地址相同
安装驱动
-
启动树莓派的I2C接口。如已开启,可跳过该步骤。
打开终端(Terminal),键入如下指令,并回车:
pi@raspberrypi:~ $ sudo raspi-config
然后用上下键选择“Interfacing Options ”, 按回车进入,选择 “ P5 I2C ”, 按回车确认“ YES ”即可。重启树莓派主控板。 -
安装Python依赖库与git,树莓派需要联网。如已安装,可跳过该步骤。
在终端中,依次键入如下指令,并回车:
pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get install build-essential python-dev python-smbus git
-
下载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或者论坛联系我们!
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。