"CO2 二氧化碳传感器模块(SKU:SEN0159)"
简介
这是一款Arduino兼容的酒精浓度传感器模组,测量范围0-5ppm,支持I2C和UART两种输出方式,经过出厂标定,可以快速、准确的测量环境中酒精蒸汽的浓度。适用于酒驾检测、汽车智能化及其他小浓度场景下的酒精蒸汽浓度检测。
DFRobot推出的酒精传感器,采用电化学原理,出厂前已经进行过标定,可以准确测量环境中的酒精浓度。并具有抗干扰能力强、稳定性高、灵敏度高等特点,使用寿命长达两年。分辨率可以达到0.01ppm(10ppb),支持3.3~5.5V宽电压输入,具有I2C和UART两种数据输出类型,兼容Arduino、ESP32、树莓派等主流的主控设备,具有良好的兼容性。简单易用的Gravity接口,配上我们的样例代码,可迅速搭建出自己的酒精浓度检测仪。
特性
- 出厂标定,数据精确
- 高灵敏度、低功耗
- 优异的稳定性、抗干扰
- I2C和UART两种输出方式
- 卓越的线性输出
- 使用寿命长
- 兼容3.3~5.5V主控器
- 反接保护
产品参数
- 检测气体: 酒精
- 干扰气体:苯、甲苯、乙酸、硫化氢、一氧化碳
- 工作电压: 3.3~5.5V DC
- 功耗:0.05W(5V)
- 输出信号: I2C、UART输出(0~3V)
- 测量范围: 0~5ppm
- 分辨率: ≤0.01ppm(10ppb)
- 误差范围: ±10%满量程
- 预热时间: ≤3分钟
- 响应时间: ≤60秒
- 恢复时间: ≤60秒
- 工作温度: -20~50℃
- 工作湿度: 15~90%RH (无凝结)
- 存储温度: 0~25℃
- 寿 命: >2 年(空气中)
- 电路板尺寸:27mm*37mm
引脚说明
SEN0376 酒精传感器接口定义
标号 | 名称 | 功能描述 |
---|---|---|
1 | D/T | I2C数据线SDA/UART数据传输-TX |
2 | C/R | I2C时钟线SCL/UART数据接收-RX |
3 | - | GND电源负极 |
4 | + | 电源正极 |
Arduino使用教程
将程序下载到UNO,打开串口监视器查看酒精浓度。
注意:
- 初次上电建议预热24~48小时。
- 预热时间输出的酒精浓度值将在3分钟以后逐渐趋于稳定,请忽略预热3分钟内的酒精浓度值。
- 不要使用风油精和花露水进行测试,均属于有机溶剂,会损坏传感器。
软硬件准备
- 硬件
- DFRuino UNO R3 x1
- SEN0376 电化学酒精浓度传感器 x1
- 杜邦线 若干
- 软件
- Arduino IDE 点击下载Arduino IDE
- 下载并安装DFRobot_AlcoholSensor库。如何安装库?
使用I2C读取传感器数据
接线图
样例代码
- 将模块与Arduino按照上方的连线图相连,当然你也可以配合Gravity I/O扩展板使用,可以更方便、更快速的完成项目原型搭建。
- 将传感器上的选择开关,拨到I2C一侧。
- I2C地址默认为0x75,对应代码中的ADDRESS_3。如果需要修改I2C地址,可先通过模块上的拨码开关配置硬件I2C地址,并修改样例代码中I2C地址的定义ADDRESS_X。拨码开关与I2C地址参数对应关系如下:
- ADDRESS_0:0x72, A0=0, A1=0
- ADDRESS_1:0x73, A0=1, A1=0
- ADDRESS_2:0x74, A0=0, A1=1
- ADDRESS_3:0x75, A0=1, A1=1
- 下载并安装DFRobot_AlcoholSensor库。如何安装库?
- 打开Arduino IDE,将下面的代码上传到Arduino UNO。
- 打开Arduino IDE的串口监控视器,把波特率调至9600,观察串口打印结果。
/*!
* @file readAlcohol.ino
* @brief Reading Alcohol concentration, A concentration of one part per million (PPM).
* @n step: we must first determine the iic device address, will dial the code
* @n switch A0, A1 (ALCOHOL_ADDRESS_0 for [0 0]), (ALCOHOL_ADDRESS_1 for [1 0]), (ALCOHOL_ADDRESS_2 for [0 1]), (ALCOHOL_ADDRESS_3 for [1 1]).
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
* @license The MIT License (MIT)
* @author ZhixinLiu(zhixin.liu@dfrobot.com)
* @version V1.0
* @date 2020-09-09
* @url https://github.com/dfrobot/DFRobot_Alcohol
*/
#include "DFRobot_Alcohol.h"
#define COLLECT_NUMBER 5 // collect number, the collection range is 1-100
#define ALCOHOL_I2C_ADDRESS ALCOHOL_ADDRESS_3
/**
* select i2c device address
* ALCOHOL_ADDRESS_0 0x72
* ALCOHOL_ADDRESS_1 0x73
* ALCOHOL_ADDRESS_2 0x74
* ALCOHOL_ADDRESS_3 0x75
*/
DFRobot_Alcohol_I2C Alcohol(&Wire ,ALCOHOL_I2C_ADDRESS);
/*
#ifdef ESP_PLATFORM
// ESP32 user hardware uart
// RX io16
// TX io17
DFRobot_Alcohol_UART Alcohol(&Serial2 ,9600);
#else
// Arduino user software uart
// RX io10
// TX io11
SoftwareSerial mySerial(10 ,11);
DFRobot_Alcohol_UART Alcohol(&mySerial ,9600);
#endif
*/
void setup()
{
Serial.begin(9600);
while(!Alcohol.begin()){
Serial.println("NO Deivces !");
delay(1000);
}
Serial.println("Device connected successfully !");
/**
* set measuer mode
* MEASURE_MODE_AUTOMATIC active mode
* MEASURE_MODE_PASSIVE passive mode
*/
Alcohol.setModes(MEASURE_MODE_AUTOMATIC);
}
void loop()
{
/**
* Smooth data collection
* COLLECT_NUMBER The collection range is 1-100
*/
float alcoholConcentration = Alcohol.readAlcoholData(COLLECT_NUMBER);
if(alcoholConcentration == ERROR){
Serial.println("Please check the connection !");
}else{
Serial.print("Alcohol concentration is ");
Serial.print(alcoholConcentration);
Serial.println(" PPM.");
}
delay(1000);
}
结果
打开串口监视器,预热约3分钟后,得到最终的数据。
注意:
1. 酒精传感器可能会存在数据漂移的现象。
2. 电化学类型的传感器初次上电需要预热24~48小时。
使用UART读取传感器数据
接线图
样例代码
- 将模块与Arduino按照上方的连线图相连,当然你也可以配合Gravity I/O扩展板使用,可以更方便、更快速的完成项目原型搭建。
- 将传感器上的选择开关,拨到UART一侧。
- 下载并安装DFRobot_AlcoholSensor库。如何安装库?
- 打开Arduino IDE,将下面的代码上传到Arduino UNO。
- 打开Arduino IDE的串口监控视器,把波特率调至9600,观察串口打印结果。
/*!
* @file readAlcohol.ino
* @brief Reading Alcohol concentration, A concentration of one part per million (PPM).
* @n step: we must first determine the iic device address, will dial the code switch A0, A1 (ADDRESS_0 for [0 0]), (ADDRESS_1 for [1 0]), (ADDRESS_2 for [0 1]), (ADDRESS_3 for [1 1]).
*
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (https://www.dfrobot.com)
* @licence The MIT License (MIT)
* @author ZhixinLiu(zhixin.liu@dfrobot.com)
* @version V1.0
* @date 2020-09-09
* @get from https://www.dfrobot.com
* @url https://github.com/dfrobot/DFRobot_Alcohol
*/
#include "DFRobot_Alcohol.h"
#define COLLECT_NUMBER 5 // collect number, the collection range is 1-100
#define ALCOHOL_I2C_ADDRESS ADDRESS_3
/* iic slave Address, The default is ADDRESS_3
ADDRESS_0 0x72 // i2c device address
ADDRESS_1 0x73
ADDRESS_2 0x74
ADDRESS_3 0x75
*/
//DFRobot_Alcohol_I2C Alcohol(&Wire ,ALCOHOL_I2C_ADDRESS);
#ifdef ESP_PLATFORM
// ESP32 user hardware uart
// RX io16
// TX io17
DFRobot_Alcohol_UART Alcohol(&Serial2 ,9600);
#else
// Arduino user software uart
// RX io10
// TX io11
SoftwareSerial mySerial(10 ,11);
DFRobot_Alcohol_UART Alcohol(&mySerial ,9600);
#endif
void setup()
{
Serial.begin(9600);
while(!Alcohol.begin())
{
Serial.println("NO Deivces !");
delay(1000);
}
Serial.println("Device connected successfully !");
/* Set iic mode, active mode or passive mode
MEASURE_MODE_AUTOMATIC // active mode
MEASURE_MODE_PASSIVE // passive mode
*/
Alcohol.SetModes(MEASURE_MODE_AUTOMATIC);
}
void loop()
{
/* Smooth data collection
COLLECT_NUMBER // The collection range is 1-100
*/
float alcoholConcentration = Alcohol.ReadAlcoholData(COLLECT_NUMBER);
if(alcoholConcentration == ERROR)
{
Serial.println("Please check the connection !");
}else{
Serial.print("Alcohol concentration is ");
Serial.print(alcoholConcentration);
Serial.println(" PPM.");
}
delay(1000);
}
结果
打开串口监视器,预热约3分钟后,得到最终的数据。
注意:
1. 酒精传感器可能会存在数据漂移的现象。
2. 电化学类型的传感器初次上电需要预热24~48小时。
数据读取方式
SEN0376 Gravity: 电化学酒精传感器有主动上传和被动应答两种数据读取模式,出厂默认为主动上传模式,用户可以根据需求在代码中通过自行调整。
模式选择函数
可以通过修改括号中的参数,调整数据的发送模式。
**“MEASURE_MODE_AUTOMATIC”**为主动上传模式,在主动上传模式下,传感器会每1秒自动上传1次参数;
**”MEASURE_MODE_PASSIVE“**为被动应答模式,在被动应答模式下,只有在每次调用数据读取函数时,传感器才会反馈一次参数。
Alcohol.SetModes(MEASURE_MODE_AUTOMATIC);
/*
MEASURE_MODE_AUTOMATIC // 主动上传模式
MEASURE_MODE_PASSIVE // 被动应答模式
*/
数据读取函数
通过“ReadAlcoholData()”函数,可以读取到酒精传感器的反馈数值。该函数在输出前会将数据采集数组“COLLECT_NUMBER”中的数据进行平均值处理。"COLLECT_NUMBER"数组的大小默认为5,可以在代码中“#define COLLET_NUMBER 5"进行调整,数值在1-100之间。
#define COLLECT_NUMBER 5
Alcohol.ReadAlcoholData(COLLECT_NUMBER);
/*
COLLECT_NUMBER // The collection range is 1-100
*/
串口协议使用教程
通过UART串口通讯协议,可以将SEN0376 Gravity: 电化学酒精传感器连接到任何带有UART的控制器上,进行数据的读取和传感器的配置。
参数设置
波特率 | 9600 |
---|---|
数据位 | 8位 |
校验位 | 1位 |
通讯命令
传感器有主动上传式和问答式两种通讯模式,出厂默认为主动上传模式,每间隔1s发送一次浓度值。
主动上传模式的数据显示格式为:
Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | Byte8 |
---|---|---|---|---|---|---|---|---|
起始位 | 气体名称 C2H5OH |
单位 (ppb) |
小数位数 无 |
气体浓度 高位 |
气体浓度 低位 |
满量程 高位 |
满量程 低位 |
校验值 |
0xFF | 0x17 | 0x04 | 0x00 | 0x00 | 0x25 | 0x13 | 0x88 | 0x25 |
注意:气体浓度值(PPB)=气体浓度高位*256+气体浓度低位。当转换为 PPM 时:PPM= PPB/1000。
如果切换到问答模式下,需要重新切换为主动上传时,发送命令的格式如下:
Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | Byte8 |
---|---|---|---|---|---|---|---|---|
起始位 | 空 | 切换命令 | 主动上传模式 | 空 | 空 | 空 | 空 | 校验值 |
0xFF | 0x01 | 0x78 | 0x40 | 0x00 | 0x00 | 0x00 | 0x00 | 0x47 |
当需要切换到问答模式时,可以通过发送命令进行模式切换,再发送读取浓度的命令,即可获取浓度数值。
切换问答模式的命令格式如下:
Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | Byte8 |
---|---|---|---|---|---|---|---|---|
起始位 | 空 | 切换命令 | 问答模式 | 空 | 空 | 空 | 空 | 校验值 |
0xFF | 0x01 | 0x78 | 0x41 | 0x00 | 0x00 | 0x00 | 0x00 | 0x46 |
在问答模式下,读取浓度的命令格式如下:
Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | Byte8 |
---|---|---|---|---|---|---|---|---|
起始位 | 空 | 命令 | 空 | 空 | 空 | 空 | 空 | 校验值 |
0xFF | 0x01 | 0x86 | 0x00 | 0x00 | 0x00 | 0x00 | 0x20 | 0x79 |
问答模式的数据显示格式为:
Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | Byte8 |
---|---|---|---|---|---|---|---|---|
起始位 | 命令 | 空 | 空 | 空 | 空 | 气体浓度 高位(ppb) |
气体浓度 低位(ppb) |
校验值 |
0xFF | 0x86 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x20 | 0x5A |
气体浓度值(PPB)=气体浓度高位*256+气体浓度低位
校验和计算
校验值 = (取反(字节1 + 字节2 + ··· ··· +字节7) + 1
参考例程如下:
/******************************************************************
* 函数名: unsigned char FucCheckSum(uchar *i,ucharln)
* 功能描述:求和校验(取发送、接收协议的1\2\3\4\5\6\7的和取反+1)
* 函数说明:将数组的元素1-倒数第二个元素相加后取反+1(元素个数必须大于2)
******************************************************************/
unsigned char FucCheckSum(unsigned char *i,unsigned char ln)
{
unsigned char j,tempq=0;
i+=1;
for(j=0;j<(ln-2);j++)
{
tempq+=*i;
i++;
}
tempq=(~tempq)+1;
return(tempq);
}
注意事项
交叉干扰特性
由于该传感器为电化学原理,所以部分气体会对传感器产生干扰,相关交叉干扰特性可参考下表。
气体 | 浓度/PPM | 乙醇等同浓度 |
---|---|---|
苯 | 10 | 0.1 |
甲苯 | 10 | 0.46 |
乙酸 | 200 | 0.52 |
硫化氢 | 50 | 3 |
一氧化碳 | 200 | 0.64 |
使用注意
- 模组避免接触使传感器中毒的物质(包括硅胶及其它胶粘剂)、涂料、药剂、油类及高浓度气体。
- 模组不可用树脂材料完全封装,也不可浸没在无氧环境中,否则会损坏传感器的性能。
- 模组不能长时间应用于含有腐蚀性气体的环境中,腐蚀性气体会损害传感器。
- 模组不可经受过度的撞击或震动。
- 模组初次上电使用需预热 24-48 小时左右,使模组充分稳定后正常测试。
- 模组避免接触影响数值准确性的有机溶剂等,如:空气清新剂、女性化妆品、花露水等。
- 请勿将模组安装在强对流空气环境下使用。
- 请勿将模组长时间放置于高浓度有机气体中,长期放置会导致传感器零点发生漂移,恢复缓慢。
- 禁止用热熔胶或者固化温度高于 80℃以上的密封胶封装模组。
- 禁止长时间在高浓度碱性气体中存放和使用。
常见问题
还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。