CO2 二氧化碳传感器模块"CO2 二氧化碳传感器模块(SKU:SEN0159)"

简介

这是一款Arduino兼容的酒精浓度传感器模组,测量范围0-5ppm,支持I2C和UART两种输出方式,经过出厂标定,可以快速、准确的测量环境中酒精蒸汽的浓度。适用于酒驾检测、汽车智能化及其他小浓度场景下的酒精蒸汽浓度检测。

DFRobot推出的酒精传感器,采用电化学原理,出厂前已经进行过标定,可以准确测量环境中的酒精浓度。并具有抗干扰能力强、稳定性高、灵敏度高等特点,使用寿命长达两年。分辨率可以达到0.01ppm(10ppb),支持3.3~5.5V宽电压输入,具有I2C和UART两种数据输出类型,兼容Arduino、ESP32、树莓派等主流的主控设备,具有良好的兼容性。简单易用的Gravity接口,配上我们的样例代码,可迅速搭建出自己的酒精浓度检测仪。

特性

产品参数

引脚说明

SEN0376 酒精传感器接口定义

标号 名称 功能描述
1 D/T I2C数据线SDA/UART数据传输-TX
2 C/R I2C时钟线SCL/UART数据接收-RX
3 - GND电源负极
4 + 电源正极

Arduino使用教程

将程序下载到UNO,打开串口监视器查看酒精浓度。

注意:

软硬件准备

使用I2C读取传感器数据

接线图

样例代码

  /*!
  * @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读取传感器数据

接线图

样例代码

 /*!
  * @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

使用注意

常见问题

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

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

更多

DFshopping_car1.png DFRobot商城购买链接