TVOC-Sensor 使用教程

说明

产品简介

TVOC气体传感器模组专门设计用于精确测量环境中的TVOC(总挥发性有机化合物)气体浓度,为空气质量的评估提供了一种高效工具。其核心优势在于其卓越的适应性和可扩展性,能够根据用户的特定需求进行定制。 这款传感器模组以其卓越的性能特点而著称,包括:高灵敏度、稳定性、小型化设计、简易的测量电路、长寿命。

应用场景

  • 智能家居
  • 环境空气质量监测
  • 车载空气净化器
  • 手持空气质量检测仪
  • 工厂车间新风系统

工作原理

基于气体分子与半导体材料表面的化学吸附反应,当挥发性有机物(VOC)接触加热的敏感材料时,气体分子与表面氧离子发生反应会改变材料的电阻值;通过测量电阻变化量即可间接推算周围TVOC的浓度。 气体传感器中气敏材料的电阻随着环境中气体浓度的变化而变化,TVOC 气体的浓度越大,传感器电阻就越小。其测量采用与参考电阻串联分压的电路,如图 1-2 所示的参考电路图。传感器响应大小 S 的计算公式跟参考电路如下:


产品参数

TVOC Sensor
供电电压5V逻辑电压3.3V
通信接口UART (TTL 信号线电平 3.3V)通信波特率115200
响应时间<20S启动时间<120S
检测浓度范围0.1~100 ppm刷新率1Hz
产品尺寸27×20×4.3mm固定孔径2.0mm
工作电流≤60mA工作温度-20℃~50℃
工作湿度≤96%RH使用寿命5年

  • 传感器的IO电平为3.3V,如果使用5V的IO电平,需要经过电平转换,否则传感器会损坏

引脚说明

引脚号标识管脚描述
1VCC5V 电源正
2GND电源地
3TXDUART 输出
4RXDUART 输入
5RST复位引脚,低电平有效
6ALM报警引脚,TVOC超过2ppm,引脚自动拉低

协议解析

UART 通信流程

  • 串口默认配置为:数据位 8bit,停止位 1bit,无奇偶校验,无流控制,默认波特率 115200。
  • 协议由 Frame Header(帧头)、Data(数据)、Sum Check(校验和)和 Frame Footer(帧尾)组成。
    • 其中 Frame Header、Frame Footer 为固定不变的数值,具体可以查阅以下表格;

说明:协议包遵循小端模式原则,即低字节在前,高字节在后。

主动模式

  • 模块默认为主动模式
  • 原始数据
帧头空气等级保留CO2浓度高位CO2浓度低位CH2O浓度高位CH2O浓度低位TVOC浓度高位TVOC浓度低位校验值帧尾
Byte0Byte1Byte2Byte3Byte4Byte5Byte6Byte7Byte8Byte9Byte10
FE0200023200040196CF16
  • 数据解码
    • 空气等级分为优良中差,分别对于1-4等级(0x1-0x4),比如上面数据中可以得出空气等级为“良”
    • CO2浓度值 = (气体浓度高位*256+气体浓度低位) ppm
    • CH2O浓度值 = (气体浓度高位*256+气体浓度低位) ppb
    • TVOC浓度值 = ((气体浓度高位*256+气体浓度低位)/1000) ppm
  • 解析表
DataTypeLength (Bytes)HexResult
帧头uint81FE0xFE
空气等级uint81020x02
保留uint8100*
CO2浓度uint16202 32562 ppm
CH2O浓度uint16200 044 ppb
TVOC浓度uint16201 960.406 ppm
校验值uint81CF0xCF
帧尾uint81160x16


  • 恢复主动模式
    • 需要切换到主动模式时,向模组发送如下命令:
帧头保留切换模式命令主动上传模式保留保留保留保留校验值
Byte0Byte1Byte2Byte3Byte4Byte5Byte6Byte7Byte8
FE00784000000000B8

查询模式

  • 切换到查询模式
    • 需要切换到查询模式时,首先应该发送停止主动上传模式命令,命令格式如下:
帧头保留切换模式命令主动上传模式保留保留保留保留校验值
Byte0Byte1Byte2Byte3Byte4Byte5Byte6Byte7Byte8
FE00784100000000B9
  • 查询当前浓度
    • 查询模式下,读取当前浓度命令格式如下:
帧头保留问答模式命令保留保留保留保留保留校验值
Byte0Byte1Byte2Byte3Byte4Byte5Byte6Byte7Byte8
FE0086000000000086
  • 查询数据解码
    • 当发送查询当前浓度的命令后,模组会返回如下数据:
帧头帧头帧头保留保留TVOC浓度高位TVOC浓度低位ADC值高位ADC值低位校验值帧尾
Byte0Byte1Byte2Byte3Byte4Byte5Byte6Byte7Byte8Byte9Byte10
FEFE680101180909406C16
  • 数据解码
    • TVOC气体浓度值 = (气体浓度高位*256+气体浓度低位)/1000
    • ADC值 = (ADC值高位*256 + ADC值低位)
  • 解析表
DataTypeLength (Bytes)HexResult
帧头uint243FE FE 680xFE 0xFE 0x68
保留uint16200 00xx
TVOC浓度uint16218 096.153 ppm
ADC值uint16209 402368
校验值uint816C0x6C
帧尾uint81160x16
  • ADC:单片机通过 ADC 采样来采集 VS 的电压值,实现输出 12 位 ADC 值,电路在工作原理处。

快速测试

  • 测试软件 WS-TVOC 是 TVOC Sensor 配套的调试软件,主要作用为:快速测试
  • 测试准备
    • windows电脑
    • USB TO TTL 1PCS
    • TVOC Sensor 1PCS
    • 配套线材
  • 硬件连接

  • 开始测试
    • 把串口连接电脑 USB 口
    • 等待 2 分钟,传感器预热完成
    • 主动模式:
      • 方式一:使用串口调试助手(SSCOM),选择好对应的端口号,波特率选115200,打开串口,则每秒上传一次数据。

      • 方式二:打开配套的上位机软件
        ①选择对应串口号
        ②点击 save
        ③点击 get directory
        ④点击 Start 则可直观查看实时数据和曲线。
        如果想要查看所有历史数据,⑤点击 save,则可在 DataFile中看到源文件。

    • 查询模式:
      • 使用串口调试助手(SSCOM),选择好对应的端口号,波特率选115200,打开串口
      • 以十六进制发送停止主动上传模式命令:FE 00 78 41 00 00 00 00 B9
      • 以十六进制发送读取数据命令:FE 00 86 00 00 00 00 00 86,则可读取数据:
        ①发送切换成查询模式的命令
        ②发送查询命令,获取数据

产品尺寸


树莓派使用

  • 关于树莓派系统安装与使用可以参考这个链接
  • 成功开机后,进行树莓派环境配置

下载程序

sudo apt install gpiod libgpiod-dev
wget https://www.waveshare.net/w/upload/c/c6/TVOC_Sensor_Demo.zip
unzip TVOC_Sensor_Demo.zip
cd TVOC_Sensor_Demo/

UART示例使用

开启树莓派 UART

  • 在树莓派终端输入命令:sudo raspi-config nonint do_serial 2
  • 再弹出的窗口中第一个选择NO,第二个选择YES,最后选择OK.

硬件连接

  • 参考下图进行连接:


运行C程序

cd ~/TVOC_Sensor_Demo/Raspberrypi/c/
make
./main

运行Python程序

cd ~/TOF_Laser_Range_Sensor_demo/Raspberrypi/python/example
python main.py

ESP32S3使用

  • 关于ESP32S3的环境搭建跟基本使用,请参考这个链接
  • 环境搭建完成后,即可连接传感器,下载示例

硬件连接

  • 参考下图进行连接:


Arduino esp32示例使用

  • 进入到TVOC_Sensor_Demo\ESP32S3\Arduino\TVOC_UART_Demo,双击TVOC_UART_Demo.ino文件
  • 选择开发板:


  • 选择ESP32S3的端口,然后进行编译上传
  • 上传完成后,打开串口监测器,就会输出相关的信息。

Micropython示例使用

  • 进入到TVOC_Sensor_Demo\ESP32S3\Micropython,双击TVOC_UART_Demo.py文件
  • 选择开发板:


  • 选择ESP32S3的端口,然后运行程序
  • Shell就会输出相关的信息。

Raspberrypi Pico使用

硬件连接

  • 参考下图进行连接:


C 示例使用

  • 进入到TVOC_Sensor_Demo\Raspberrypi pico\C,通过VS Code打开工程
  • 等待自动导入跟加载编译工具,然后进行编译上传
  • 上传完成后,打开串口监测器,就会输出相关的信息。

Micropython示例使用

  • 先给Raspberrypi Pico刷入micropython固件
  • 进入到TVOC_Sensor_Demo\Raspberrypi pico\Micropython,双击TVOC_UART_Demo.py文件
  • 选择开发板:


  • 选择Raspberrypi pico的端口,然后运行程序
  • Shell就会输出相关的信息。

Arduino使用

  • Arduino开发板的IO电平必须为3.3V,如果使用5V的IO电平,需要经过电平转换,否则传感器会损坏
  • 使用waveshare R3/R4需要将以下的跳线帽设置成3.3V,才能使用
  • 关于Arduino的环境搭建跟基本使用,请参考这个R4链接、R3是默认安装。
  • 环境搭建完成后,即可连接传感器,下载示例

Arduino示例使用

硬件连接

  • 参考下图进行连接:

运行程序

  • 进入到TVOC_Sensor_Demo\Arduino\TVOC_UART_Demo,双击TVOC_UART_Demo.ino文件
  • 选择开发板:
  • 选择开发板的端口,然后进行编译上传
  • 上传完成后,打开串口监测器,就会输出相关的信息。

STM32使用

硬件连接

  • 参考下图进行连接:


STM32示例使用

  • 进入到TVOC_Sensor_Demo\STM32,双击打开.project文件
  • 等待自动导入跟加载,然后进行编译烧录
  • 上传完成后,连接单片机的PA2 PA3就可以输出相关信息

API简介

  • tvoc_init() TVOC初始化
  • tvoc_set_device_active_mode() 将传感器设置成主动模式
  • tvoc_set_device_query_mode() 将传感器设置成查询模式
  • tvoc_get_active_device_data() 获取主动模式的数据,并进行解码
  • tvoc_get_query_device_data() 获取查询模式数据,并进行解码
  • CRC_Check(uint8_t *Data, uint32_t Size) 计算校验和,模块输出的数据只需要校验Byte 3+Byte4+……+Byte8的值,主机发送给模块的数据校验为Byte 1+Byte2+……+Byte 7

效果展示

主动模式

  • 主动模式下,可以输出空气等级、CO2、CH2O和TVOC的值


查询模式

  • 查询模式下,可以输出TVOC的值和原始ADC的值


ALM报警

  • ALM报警,可以通过IO读取实现,具体表现如下


FAQ

Q1. 上位机不更新数据,怎么回事?

  如果出现数据不更新,请重启一下上位机,按照步骤进行操作即可重新获取

Q2. 波特率是固定115200吗?

是的,目前默认是115200波特率。

技术支持

周一-周五(9:30-6:30)周六(9:30-5:30)

手机:13434470212

邮箱:services04@spotpear.cn

QQ:202004841