简介
这是一款能够检测气体浓度的气体传感器,具有CO、O2、H2S、SO2等十余种型号,所有探头均经过出厂标定,可以快速、准确的测量环境中对应气体的浓度,支持模拟量、I2C和UART三种输出方式,广泛适用于工厂、矿井、废气处理系统等需要进行有害气体浓度检测的场景。
探头采用电化学原理,具有抗干扰能力强、稳定性高、灵敏度高等特点,使用寿命长达两年。对Arduino、ESP32、树莓派等主流的主控设备具有良好的兼容性。简单易用的Gravity接口,配上我们的样例代码,可迅速搭建出各种气体浓度检测仪。
注:早期的V1.0转接板有固件问题可能导致读数超出量程或不准确。如使用V1.0转接板的用户请及时联系售后。
使用注意
- 模组上传感器的白色防水透气膜严禁揭开,否则视为人为损坏。
- 禁止带电插拔探头。
- 禁止直接焊接探头的插针,可对插针的管座进行焊接。
- 模组避免接触有机溶剂(包括硅胶及其它胶粘剂)、涂料、药剂、油类及高浓度气体。
- 模组不可经受过度的撞击或震动。
- 模组初次上电需预热 5 分钟以上,长时间未使用建议预热 24 小时以上。
- 请勿将该模组应用于涉及人身安全的系统中。
- 请勿将模组安装在强空气对流环境下使用。
- 请勿将模组长时间放置于高浓度有机气体中。
- 判断模组通信是否正常,建议采用 USB 转 TTL 工具(通信电平 3V),通过串口调试助手软件,按照通信协议进行观察判断。
产品特性
- 出厂标定,数据精确
- 高灵敏度、低功耗
- 优异的稳定性、抗干扰
- I2C、UART和模拟量三种输出方式
- 使用寿命长
- 兼容3.3~5.5V主控器
- 32个可修改I2C地址
- 反接保护
- 温度补偿
- 阈值报警
产品参数
- 检测气体: CO、O2、NH3、H2S、NO2、HCL、H2、PH3、SO2、O3、CL2、HF(需更换不同探头)
- 工作电压: 3.3~5.5V DC
- 工作电流:<5mA
- 输出信号: I2C、UART输出(0~3V)、模拟电压(见各探头的特性参数)
- 检测误差: 输出值±10% 或 满量程±5% (取大)
- 工作温度: -20~50℃
- 工作湿度: 15~90%RH (无凝结)
- 存储温度: -20~50℃
- 存储湿度: 15~90%RH (无凝结)
- 寿 命: >2 年(空气中)
- 转接板尺寸:37*32mm
特性参数
SKU | SEN0465 | SEN0466 | SEN0467 | SEN0468 | SEN0469 | SEN0470 |
---|---|---|---|---|---|---|
气体类型 | O2 | CO | H2S | Cl2 | NH3 | SO2 |
探测范围 | (0-25)%Vol | (0-1000)ppm | (0-100)ppm | (0-20)ppm | (0-100)ppm | (0-20)ppm |
分辨率 | 0.1%Vol | 1ppm | 1ppm | 0.1ppm | 1ppm | 0.1ppm |
V0电压输出范围 | (1.5-0)V | (0.6-3)V | (0.6-3)V | (2-0)V | (0.6-3)V | (0.6-2.4)V |
Vout1 | 1.0V@10%vol | 0.9V@200ppm | 1.5V@50ppm | 1.3V@10ppm | 1.4V@50ppm | 1.5V@10ppm |
响应时间(T90) | ≤15S | ≤30S | ≤30S | ≤60S | ≤150S | ≤30S |
SKU | SEN0471 | SEN0472 | SEN0473 | SEN0474 | SEN0475 | SEN0476 |
---|---|---|---|---|---|---|
气体类型 | NO2 | O3 | H2 | HCL | HF | PH3 |
探测范围 | (0-20)ppm | (0-10)ppm | (0-1000)ppm | (0-10)ppm | (0-10)ppm | (0-1000)ppm |
分辨率 | 0.1ppm | 0.1ppm | 1ppm | 0.1ppm | 0.1ppm | 0.1ppm |
V0电压输出范围 | (2-0)V | (2-0.7)V | (0.6-3)V | (2-0.7)V | (2-0.5)V | (0.6-3)V |
Vout1 | 1.2V@10ppm | 1.3V@5ppm | 1.3V@500ppm | 1.4V@5ppm | 1.3V@5ppm | 0.7V@50ppm |
响应时间(T90) | ≤30S | ≤120S | ≤120S | ≤60S | ≤60S | ≤30S |
VO使用说明:
VO:传感器经过放大电路后的原始电压(线性),并非当前环境被测气体的浓度值
计算方法:当前环境中浓度 N= 200/(Vout1-Vout0)*(Voutx-Vout0)
其中,Vout1对应表格中的Vout1,Vout0对应表格中气体在0ppm时对应的电压值。以 CO 为例:零点电压 Vout0 = 0.6V,Vout1 = 0.9V,当前 VO 的电压 Voutx=1.2V,则当前环境中浓度N=400ppm
注:模拟量输出为探头未经校准的原始电压,UART/I2C数据是经过出厂校准的,如无特殊要求,推荐使用校准后的UART/I2C数据。
引脚说明
标号 | 名称 | 功能描述 |
---|---|---|
1 | D/T | I2C数据线SDA / UART数据传输-TX |
2 | C/R | I2C时钟线SCL / UART数据接收-RX |
3 | - | GND电源负极 |
4 | + | 电源正极(3.3-5V兼容) |
标号 | 名称 | 功能描述 |
---|---|---|
1 | VCC | 电源正极(3.3-5V兼容) |
2 | GND | GND电源负极 |
3 | V0 | 气体探头的原始电压输出。可根据原始输出自行开发转换算法。 |
4 | ALA | 阈值报警功能,可通过API设置阈值,超过该值时,该引脚输出电平会变化。 |
5 | NA | 预留自定义引脚,如有需要可联系我们定制功能。 |
Arduino使用教程
注意:
- 为保证数据精准,初次上电需要预热5分钟以上,长时间未使用建议预热24小时以上。
- 切换通信方式和改变I2C地址后系统需要全部断电重新上电。
软硬件准备
- 硬件
- DFRuino UNO R3 x1
- 气体传感器 x1
- 杜邦线 若干
- 软件
- Arduino IDE 点击下载Arduino IDE
- 下载并安装DFRobot_GasSensor库。如何安装库?
问答模式获取数据
接线图
样例代码
- 将模块与Arduino按照上方的连线图相连,当然你也可以配合Gravity I/O扩展板使用,更方便、更快速的完成项目原型搭建。
- 传感器上的拨码开关默认为000的状态,默认使用I2C通信。
- I2C地址默认为0x74。如果需要修改I2C地址,可通过模块上的拨码开关配置硬件I2C地址,或运行修改地址分组的代码来修改地址。拨码开关与I2C地址参数对应关系如下:
- ADDRESS_0:0x74, A0=0, A1=0
- ADDRESS_1:0x75, A0=0, A1=1
- ADDRESS_2:0x76, A0=1, A1=0
- ADDRESS_3:0x77, A0=1, A1=1
- 下载并安装DFRobot_GasSensor库。如何安装库?
- 打开Arduino IDE,将下面的代码上传到Arduino UNO。
- 打开Arduino IDE的串口监控视器,把波特率调至115200,观察串口打印结果。
说明
- 在这个例程中,控制器每次都需要向传感器请求数据,然后传感器返回数据。
- 默认使用I2C通信,屏蔽代码中
#define I2C_COMMUNICATION
并将拨码开关SEL拨到1,传感器连接到控制器定义的对应端口,若使用UNO则蓝线连接D3绿线连接D2,若使用ESP32则蓝线连接IO17绿线连接IO16。重新上传代码后整个系统重新上电,将切换为UART通信。 - 默认关闭温度补偿,修改代码为
gas.setTempCompensation(gas.ON);
,重新上传代码后开启温补 - 为保证数据精准,初次上电需要预热5分钟以上,长时间未使用建议预热24小时以上。
- 切换通信方式和改变I2C地址后系统需要全部断电重新上电。
/*!
* @file readGasConcentration.ino
* @brief 获取当前环境气体浓度以浓度值输出
* @n 实验方式: 将传感器通信引脚与主控连接,烧录
* @n 通信方式选择,拨码开关SEL:0:IIC,1:UART
* @n i2c address select
* @n | A0 | A1 |
* @n | 0 | 0 | 0x74 default i2c address
* @n | 0 | 1 | 0x75
* @n | 1 | 0 | 0x76
* @n | 1 | 1 | 0x77
*/
#include "DFRobot_MultiGasSensor.h"
#define I2C_COMMUNICATION//默认打开,此时使用IIC通信,屏蔽之后使用串口通信
#ifdef I2C_COMMUNICATION
#define I2C_ADDRESS 0x74
DFRobot_GAS_I2C gas(&Wire ,I2C_ADDRESS);
#else
#if (!defined ARDUINO_ESP32_DEV) && (!defined __SAMD21G18A__)
/**
UNO:pin_2-----RX
pin_3-----TX
*/
SoftwareSerial mySerial(2,3);
DFRobot_GAS_SoftWareUart gas(&mySerial);
#else
/**
ESP32:IO16-----RX
IO17-----TX
*/
DFRobot_GAS_HardWareUart gas(&Serial2); //ESP32HardwareSerial
#endif
#endif
void setup() {
Serial.begin(115200);
/**
传感器初始化,用作初始化串口或者初始化IIC,由此时使用的通信方式来决定
*/
while(!gas.begin())
{
Serial.println("NO Deivces !");
delay(1000);
}
Serial.println("The device is connected successfully!");
/**
获取数据模式为:主控需要向传感器请求
*/
gas.changeAcquireMode(gas.PASSIVITY);
delay(1000);
/**
开启温度补偿:gas.ON : 开启
gas.OFF:关闭
*/
gas.setTempCompensation(gas.OFF);
}
void loop() {
Serial.print("Ambient ");
Serial.print(gas.queryGasType());
Serial.print(" concentration is: ");
Serial.print(gas.readGasConcentrationPPM());
Serial.println(" %vol");
//The measurement unit will only be %vol when the sensor is SEN0465
//Otherwise the unit will be PPM
Serial.print("The board temperature is: ");
Serial.print(gas.readTempC());
Serial.println(" ℃");
Serial.println();
delay(1000);
}
结果
打开串口监视器,得到气体类型、浓度和温度。
主动模式获取数据
接线图
样例代码
- 将模块与Arduino按照上方的连线图相连,当然你也可以配合Gravity I/O扩展板使用,更方便、更快速的完成项目原型搭建。
- 默认使用I2C通信,屏蔽代码中
#define I2C_COMMUNICATION
并将拨码开关SEL拨到1,传感器连接到控制器定义的对应端口,若使用UNO则蓝线连接D3绿线连接D2,若使用ESP32则蓝线连接IO17绿线连接IO16。重新上传代码后整个系统重新上电,将切换为UART通信。 - I2C地址默认为0x74。如果需要修改I2C地址,可通过模块上的拨码开关配置硬件I2C地址,或运行修改地址分组的代码来修改地址。拨码开关与I2C地址参数对应关系如下:
- ADDRESS_0:0x74, A0=0, A1=0
- ADDRESS_1:0x75, A0=0, A1=1
- ADDRESS_2:0x76, A0=1, A1=0
- ADDRESS_3:0x77, A0=1, A1=1
- 下载并安装DFRobot_GasSensor库。如何安装库?
- 打开Arduino IDE,将下面的代码上传到Arduino UNO。
- 打开Arduino IDE的串口监控视器,把波特率调至115200,观察串口打印结果。
说明
- 在这个例程中,传感器会1秒1次主动返回数据,控制器接收并解析数据。
- 传感器上的拨码开关默认为000的状态,默认使用I2C通信。
- 默认关闭温度补偿,修改代码为
gas.setTempCompensation(gas.ON);
,重新上传代码后开启温补 - 为保证数据精准,初次上电需要预热5分钟以上,长时间未使用建议预热24小时以上。
- 切换通信方式和改变I2C地址后系统需要全部断电重新上电。
/*!
* @file initiativeReport.ino
* @brief 传感器主动上报全部数据
* @n 实验方式: 将传感器通信引脚与主控连接,烧录
* @n 通信方式选择,拨码开关SEL:0:IIC,1:UART
* @n i2c address select
* @n | A0 | A1 |
* @n | 0 | 0 | 0x74 default i2c address
* @n | 0 | 1 | 0x75
* @n | 1 | 0 | 0x76
* @n | 1 | 1 | 0x77
*/
#include "DFRobot_MultiGasSensor.h"
//默认打开,此时使用IIC通信,屏蔽之后使用串口通信
#define I2C_COMMUNICATION
#ifdef I2C_COMMUNICATION
#define I2C_ADDRESS 0x74
DFRobot_GAS_I2C gas(&Wire, I2C_ADDRESS);
#else
#if (!defined ARDUINO_ESP32_DEV) && (!defined __SAMD21G18A__)
/**
UNO:pin_2-----RX
pin_3-----TX
*/
SoftwareSerial mySerial(2, 3);
DFRobot_GAS_SoftWareUart gas(&mySerial);
#else
/**
ESP32:IO16-----RX
IO17-----TX
*/
DFRobot_GAS_HardWareUart gas(&Serial2); //ESP32HardwareSerial
#endif
#endif
void setup() {
Serial.begin(115200);
/**
传感器初始化,用作初始化串口或者初始化IIC,由此时使用的通信方式来决定
*/
while(!gas.begin())
{
Serial.println("NO Deivces !");
delay(1000);
}
/**
开启温度补偿:gas.ON : 开启
gas.OFF:关闭
*/
gas.setTempCompensation(gas.OFF);
/**
获取数据模式为:传感器主动上报数据
*/
gas.changeAcquireMode(gas.INITIATIVE);
delay(1000);
}
void loop() {
if(true==gas.dataIsAvailable())
{
Serial.println("========================");
Serial.print("gastype:");
Serial.println(AllDataAnalysis.gastype);
Serial.println("------------------------");
Serial.print("gasconcentration:");
Serial.print(AllDataAnalysis.gasconcentration);
if (AllDataAnalysis.gastype.equals("O2"))
Serial.println(" %VOL");
else
Serial.println(" PPM");
Serial.println("------------------------");
Serial.print("temp:");
Serial.print(AllDataAnalysis.temp);
Serial.println(" ℃");
Serial.println("========================");
}
delay(1000);
}
结果
打开串口监视器,得到对应气体浓度和温度。
阈值报警
接线图
样例代码
- 将模块与Arduino按照上方的连线图相连,当然你也可以配合Gravity I/O扩展板使用,更方便、更快速的完成项目原型搭建。
- 将传感器上的拨码开关SEL拨到0,默认使用I2C通信。
- I2C地址默认为0x74。如果需要修改I2C地址,可通过模块上的拨码开关配置硬件I2C地址,或运行修改地址分组的代码来修改地址。拨码开关与I2C地址参数对应关系如下:
- ADDRESS_0:0x74, A0=0, A1=0
- ADDRESS_1:0x75, A0=0, A1=1
- ADDRESS_2:0x76, A0=1, A1=0
- ADDRESS_3:0x77, A0=1, A1=1
- 下载并安装DFRobot_GasSensor库。如何安装库?
- 打开Arduino IDE,将下面的代码上传到Arduino UNO。
- 打开Arduino IDE的串口监控视器,把波特率调至115200,观察串口打印结果。
/*!
* @file setThresholdAlarm.ino
* @brief 设置传感器的阈值报警
* @n 实验方式: 将传感器通信引脚与主控连接,烧录
* @n 通信方式选择,拨码开关SEL:0:IIC,1:UART
* @n i2c address select
* @n | A0 | A1 |
* @n | 0 | 0 | 0x74 default i2c address
* @n | 0 | 1 | 0x75
* @n | 1 | 0 | 0x76
* @n | 1 | 1 | 0x77
*/
#include "DFRobot_MultiGasSensor.h"
//默认打开,此时使用IIC通信,屏蔽之后使用软串口通信
#define I2C_COMMUNICATION
#ifdef I2C_COMMUNICATION
#define I2C_ADDRESS 0x74
DFRobot_GAS_I2C gas(&Wire ,I2C_ADDRESS);
#else
#if (!defined ARDUINO_ESP32_DEV) && (!defined __SAMD21G18A__)
/**
UNO:pin_2-----RX
pin_3-----TX
*/
SoftwareSerial mySerial(2, 3);
DFRobot_GAS_SoftWareUart gas(&mySerial);
#else
/**
ESP32:IO16-----RX
IO17-----TX
*/
DFRobot_GAS_HardWareUart gas(&Serial2); //ESP32HardwareSerial
#endif
#endif
/**
设置与报警引脚连接的主控引脚
*/
#define ALA_pin 4
void setup() {
/**
串口初始化,用作查看打印输出
*/
Serial.begin(115200);
/**
传感器初始化,用作初始化串口或者初始化IIC,由此时使用的通信方式来决定
*/
while(!gas.begin())
{
Serial.println("NO Deivces !");
delay(1000);
}
/**
获取数据模式为:主控需要向传感器请求
*/
while (!gas.changeAcquireMode(gas.PASSIVITY))
{
delay(1000);
}
Serial.println("change acquire mode success!");
/**
设置传感器报警的阈值
*/
while (!gas.setThresholdAlarm(gas.ON, 2, gas.HIGH_THRESHOLD_ALA ,gas.queryGasType()))
{
Serial.println("Failed to open alarm!");
delay(1000);
}
pinMode(ALA_pin,INPUT);
}
void loop() {
/**
循环获取环境气体浓度,到阈值则报警
*/
Serial.print(gas.queryGasType());
Serial.print(":");
Serial.println(gas.readGasConcentrationPPM());
if (digitalRead(ALA_pin) == 1)
{
Serial.println("warning!!!");
}
else
{
Serial.println("nolmal!!!");
}
delay(200);
}
结果
- 上传代码成功后打开串口监视器,可观察到报警信息。
- 在未触发报警时ALA默认输出低电平,将
gas.setThresholdAlarm
函数中的HIGH_THRESHOLD_ALA
参数修改为LOW_THRESHOLD_ALA
,则未触发报警时ALA输出高电平
API说明
模式选择函数changeAcquireMode()
传感器有主动上传和被动应答两种数据读取模式,用户可以根据需求自行调整。
通过“changeAcquireMode()”函数,修改括号中的参数,调整数据的发送模式。
**“INITIATIVE”**为主动上传模式,在主动上传模式下,传感器会每1秒自动上传1次参数;
**”PASSIVITY“**为被动应答模式,在被动应答模式下,只有在每次调用数据读取函数时,传感器才会反馈一次参数。
gas.changeAcquireMode(gas.INITIATIVE)
/*
gas.INITIATIVE // 主动上传模式
gas.PASSIVITY // 被动应答模式
*/
读取探头类型函数queryGasType()
通过“queryGasType()”函数,可以获取当前气体探头的类型
gas.queryGasType();
探头兼容类型及对应参数,可参考下表。
气体类型 | CO | O2 | NH3 | H2S | NO2 | HCL |
---|---|---|---|---|---|---|
探测范围 | (0-1000)ppm | (0-25)%VOL | (0-100)ppm | (0-100)ppm | (0-20)ppm | (0-10)ppm |
分辨率 | 1ppm | 0.1%VOL | 1ppm | 1ppm | 0.1ppm | 0.1ppm |
V0电压输出范围 | (0.6-3)V | (1.5-0)V | (0.6-3)V | (0.6-3)V | (2-0)V | (2-0)V |
响应时间(T90) | ≤30S | ≤15S | ≤150S | ≤30S | ≤30S | ≤60S |
气体类型 | H2 | PH3 | SO2 | O3 | CL2 | HF |
---|---|---|---|---|---|---|
探测范围 | (0-1000)ppm | (0-1000)ppm | (0-20)ppm | (0-10)ppm | (0-20)ppm | (0-10)ppm |
分辨率 | 1ppm | 0.1ppm | 0.1ppm | 0.1ppm | 0.1ppm | 0.1ppm |
V0电压输出范围 | (0.6-3)V | (0.6-3)V | (0.6-3)V | (2-0)V | (2-0)V | (2-0)V |
响应时间(T90) | ≤120S | ≤30S | ≤30S | ≤120S | ≤60S | ≤60S |
读取气体浓度函数readGasConcentrationPPM()
通过“readGasConcentrationPPM()”函数,可以读取到气体传感器的反馈气体浓度数值。
gas.readGasConcentrationPPM();
温度读取函数readTempC()
通过“readTempC()”函数,可以读取板载温度传感器数据。
gas.readTempC();
电压读取函数getSensorVoltage()
通过“getSensorVoltage()”函数,可以读取气体探头原始电压输出V0。
gas.getSensorVoltage();
配置温度补偿函数setTempCompensation()
通过“setTempCompensation()”函数,可以配置温度补偿功能,选择开启或关闭。
gas.setTempCompensation();
/*
gas.ON 开启
gas.OFF 关闭
*/
阈值报警函数setThresholdAlarm()
通过“setThresholdAlarm()”函数,可以配置阈值报警信息。
gas.setThresholdAlarm(gas.ON, 200, gas.LOW_THRESHOLD_ALA ,gas.queryGasType());
/*
gas.ON 开启
gas.OFF 关闭
200 设置阈值
gas.LOW_THRESHOLD_ALA 报警时跳转低电平
gas.HIGH_THRESHOLD_ALA 报警时跳转高电平
gas.queryGasType() 设置报警气体类型
*/
I2C地址组配置函数changeI2cAddrGroup()
通过"changeI2cAddrGroup()"函数,可以配置I2C地址组编码,切换不同的地址组。
为了防止多探头使用时的地址冲突情况,我们准备了8组共23个地址,如有需求可以使用库文件中的样example "changeSensorI2CAddr.ino"进行切换。修改"changeI2cAddrGroup()"的组序号配置即可。串口信息显示"IIC addr change success!"后,重新上电即可。
gas.changeI2cAddrGroup(i);
/*
i 组序号
//组序号及拨码开关配置表格
A0 A1拨码电平 00 01 10 11
1 0x60 0x61 0x62 0x63
2 0x64 0x65 0x66 0x67
3 0x68 0x69 0x6A 0x6B
4 0x6C 0x6D 0x6E 0x6F
5 0x70 0x71 0x72 0x73
6(默认地址组) 0x74 0x75 0x76 0x77(默认地址)
7 0x78 0x79 0x7A 0x7B
8 0x7C 0x7D 0x7E 0x7F
*/
串口协议使用教程
通过UART串口通讯协议,可以将传感器连接到任何带有UART的控制器上,进行数据的读取和传感器的配置。
注意,此时传感器上的拨码开关SEL端必须置于“1”的位置
串口参数设置
波特率 | 9600(固定) |
---|---|
数据位 | 8位 |
校验位 | 1位 |
通讯协议说明
① 0x78——修改终端通讯模式
终端有主动上传式和问答式两种通讯模式,出厂默认为主动上传模式,每间隔1s发送一次数据。
发送
Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | Byte8 |
---|---|---|---|---|---|---|---|---|
起始位 | 地址 | 命令 | 通讯模式 | -- | -- | -- | -- | 校验值 |
0xFF | 0x01 | 0x78 | 主动上传模式:0x03 问答模式:0x04 |
0x00 | 0x00 | 0x00 | 0x00 | 0x84 0x83 |
EXP. FF 01 78 04 00 00 00 00 83 (切换为问答模式)
EXP. FF 01 78 03 00 00 00 00 84(切换为主动模式)
返回
Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | Byte8 |
---|---|---|---|---|---|---|---|---|
起始位 | 命令 | 返回标定 | -- | -- | -- | -- | -- | 校验值 |
0xFF | 0x78 | 成功:0x01 失败:0x00 |
0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x87 0x88 |
EXP. FF 78 01 00 00 00 00 00 87 (设置成功)
EXP. FF 78 00 00 00 00 00 00 88 (设置失败)
② 主动上传模式,数据格式
在主动上传模式下,终端会每1s返回一次数据,数据格式如下。
返回
Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | Byte8 |
---|---|---|---|---|---|---|---|---|
起始位 | 命令 | 气体浓度值 高位 |
气体浓度值 低位 |
气体类型 |
小数位数 |
温度数值 高位 |
温度数值 低位 |
校验值 |
0xFF | 0x88 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | -- |
注意:
-
气体浓度值 = (气体浓度高位 x 256 + 气体浓度低位) x 分辨率
-
小数位为 0,分辨率为 1;小数位为 1,分辨率为 0.1;小数位为 2,分辨率为 0.01
-
温度值的计算方法见下方示例代码:“温度值计算”
气体类型列表
气体类型 | 指令码 | 气体类型 | 指令码 |
---|---|---|---|
NH3 | 0x02 | SO2 | 0x2B |
H2S | 0x03 | NO2 | 0x2C |
CO | 0x04 | HCL | 0x2E |
O2 | 0x05 | CL2 | 0X31 |
H2 | 0x06 | HF | 0x33 |
O3 | 0x2A | PH3 | 0x45 |
③ 0x86——问答模式,读取气体浓度和类型
在问答模式中,需要通过发送命令读取终端的各类参数,读取气体浓度和类型的方式如下。
发送
Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | Byte8 |
---|---|---|---|---|---|---|---|---|
起始位 | 地址 | 命令 | -- | -- | -- | -- | -- | 校验值 |
0xFF | 0x01 | 0x86 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x79 |
EXP. FF 01 86 00 00 00 00 00 79
返回
Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | Byte8 |
---|---|---|---|---|---|---|---|---|
起始位 | 命令 | 气体浓度 高位 |
气体浓度 低位 |
气体类型 |
小数位数 |
-- | -- | 校验值 |
0xFF | 0x86 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x7A |
EXP. FF 86 00 00 00 00 00 00 7A
注意:
- 气体浓度值 = (气体浓度高位 x 256 + 气体浓度低位) x 分辨率
- 小数位为 0,分辨率为 1;小数位为 1,分辨率为 0.1;小数位为 2,分辨率为 0.01
④ 0x87——问答模式,读取温度数据
在问答模式中,需要通过发送命令读取终端的各类参数。终端集成了热敏电阻,可以获取终端的实时温度,读取终端温度的方式如下。
发送
Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | Byte8 |
---|---|---|---|---|---|---|---|---|
起始位 | 地址 | 命令 | -- | -- | -- | -- | -- | 校验值 |
0xFF | 0x01 | 0x87 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x78 |
EXP. FF 01 87 00 00 00 00 00 78
返回
Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | Byte8 |
---|---|---|---|---|---|---|---|---|
起始位 | 命令 | 温度数据 高位 |
温度数据 低位 |
-- | -- | -- | -- | 校验值 |
0xFF | 0x87 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x79 |
EXP. FF 87 00 00 00 00 00 00 79
注意: 温度值的计算方法见下方示例代码:“温度值计算”
⑤ 0x88——问答模式,读取温度、气体类型和浓度数据
在问答模式中,需要通过发送命令读取终端的各类参数,同时读取终端温度和气体浓度数据的方式如下。
发送
Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | Byte8 |
---|---|---|---|---|---|---|---|---|
起始位 | 地址 | 命令 | -- | -- | -- | -- | -- | 校验值 |
0xFF | 0x01 | 0x88 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x77 |
EXP. FF 01 88 00 00 00 00 00 77
返回
Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | Byte8 |
---|---|---|---|---|---|---|---|---|
起始位 | 命令 | 气体浓度 高位 |
气体浓度 低位 |
气体类型 | 小数位数 | 温度数据 高位 |
温度数据 低位 |
校验值 |
0xFF | 0x88 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x78 |
EXP. FF 88 00 00 00 00 00 00 78
注意:
-
气体浓度值 = (气体浓度高位 x 256 + 气体浓度低位) x 分辨率
-
小数位为 0,分辨率为 1;小数位为 1,分辨率为 0.1;小数位为 2,分辨率为 0.01
-
温度值的计算方法见下方示例代码:“温度值计算”
⑥ 0x89——配置阈值报警功能
终端带有阈值报警功能,可配置报警阈值。
注意:当不连接外部控制器,仅使用传感器实现此功能,配置好阈值报警功能相关参数后必须将传感器设置为主动上传模式。
发送
Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | Byte8 |
---|---|---|---|---|---|---|---|---|
起始位 | 空 | 命令 | 功能开关设置 | 报警浓度阈值 高位 |
报警浓度阈值 低位 |
-- | -- | 校验值 |
0xFF | 0x01 | 0x89 | 开:0x01 关:0x00 |
0x00 | 0x00 | 0x00 | 0x00 | 0x71 0x70 |
EXP. FF 01 89 00 00 05 00 00 71(关闭报警功能)
EXP. FF 01 89 01 00 05 00 00 70(开启报警功能)
**注意:**浓度如何计算请参考 ⑤
返回
Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | Byte8 |
---|---|---|---|---|---|---|---|---|
起始位 | 命令 | 返回配置结果 | 功能开关状态 | 报警浓度阈值 高位 |
报警浓度阈值 低位 |
-- | -- | 校验值 |
0xFF | 0x89 | 成功:0x01 失败:0x00 |
开:0x01 关:0x00 |
0x00 | 0x00 | 0x00 | 0x00 | -- |
使用树莓派等控制器通过代码配置阈值报警,可使用此python代码:GAS_ALA.zip
校验和计算
参考例程如下:
unsigned char data[] = {0xFF,0x01,0x87,0x00,0x00,0x00};
unsigned char FucCheckSum(unsigned char *i,unsigned char ln)
{
unsigned char j,tempq=0;
i+=1;
for(j=0;j<6;j++)
{
tempq+=*i;
i++;
}
tempq=(~tempq)+1;
return(tempq);
}
void setup() {
Serial.begin(115200);
Serial.println(FucCheckSum(data,6),HEX);
}
void loop() {
}
温度值计算
byte Temp_H = 0x01;//温度数值高位
byte Temp_L = 0xD9;//温度数值低位
void setup() {
Serial.begin(115200);
uint16_t temp_ADC = (Temp_H << 8) + Temp_L;
float Vpd3 = 3 * (float)temp_ADC / 1024;
float Rth = Vpd3 * 10000 / (3 - Vpd3);
float Temp = 1 / (1 / (273.15 + 25) + 1 / 3380.13 * log(Rth / 10000)) - 273.15;
Serial.println(Temp);
}
void loop() {
}
常见问题
还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。