贺 媛,李 昕,马 健,纪永成
(吉林大学 电子科学与工程学院,长春 130012)
随着我国经济的快速发展,人民生活水平得到了极大提高,工作和住房条件明显改善,并且人们对健康和环保意识也在逐渐提高,而在关心环保问题的同时也高度关注室内空气质量问题[1-4]。目前在各种室内空气质量(IAQ:Indoor Air Quality)评价体系中,二氧化碳浓度是一项非常重要的评价指标。室内二氧化碳浓度的大小对人体的健康有极大影响[5-6]。当室内CO2体积百分比达4%时,处于室内生活的人群会产生呼吸加深、头晕、头痛、耳鸣、眼花、血压上升等症状,严重影响人们的工作和学习效率。当室内CO2体积百分比达到8%~10%时,处于室内生活的人群会产生呼吸困难,全身无力,神志逐渐丧失。当室内CO2体积百分比达到30%时,处于室内生活的人群甚至可能出现死亡现象。因此,对室内二氧化碳浓度的实时监测有着非常重要的实际意义。
气体传感器是指能迅速测量各种被测气体的化学类型、成分以及浓度,处理转换为与其成一定关系的电信号并输出该信号的检测设备装置和元件[7]。气体传感器的应用极其广泛,比如日常生活中的环境监测和易燃气体检测,医疗检测和食品工业等领域[8-11]。气体传感器可作为气体信息的检测装置,在信息获取中起到十分重要作用[12-13]。
笔者设计了一种以STC89C52单片机为核心的基于气体传感器的二氧化碳报警器。当空气中CO2的浓度超出预设值时,该报警器可以实现声光报警功能,同时可实时显示室内CO2浓度值。基于现有研究结果,0.5%被认为是人体对CO2长期耐受浓度的极限,而1.5%是CO2毒性的起始浓度,故本设计中空气中CO2浓度的预设值为1.5%[14]。
基于气体传感器的室内二氧化碳浓度监测报警器系统如图1所示。报警器系统的硬件主要由传感器信号采集、信号调理、模数转换、微控制和声光报警单元组成。
图1 报警器系统总体设计图
传感器信号采集单元主要包括二氧化碳气体传感器和传感器加热驱动电路。二氧化碳气体传感器是报警系统中信号传输的第1站,其主要作用是感知待测气体浓度,并将采集到的包含待测气体信息的非电量信号转换为电信号输出。
信号调理单元起到信号调理作用,它将根据实际需要,将前一级气体传感器输出信号进行放大或滤波等操作,再传递给后一级模数(A/D:Analog/Digital)转换单元。
A/D转换单元具有模数转换功能,其作用是将来自气体传感器的模拟信号转换为数字信号并发送给微控制器,以便系统方便进行数据处理。
微控制单元(MCU:Microcontroller Unit)是报警系统的核心部件,起到总指挥作用。微控制单元发出各种指令,控制数据的收发,将外部设备组织协调在一起,实现一定的逻辑功能。它将A/D模块输出的数字信号做进一步处理,并进行报警逻辑判断。如果判断逻辑为真,则控制声光单元发出报警提示。
声光报警单元包括蜂鸣器、发光二极管和数码管。数码管显示CO2浓度,蜂鸣器和LED(Light Emitting Diode)灯在室内气体浓度超标时起到声光同时报警作用。
信号采集单元中选用的气体传感器为MG812型二氧化碳气体传感器。该传感器具有体积小、功耗低、灵敏度高、选择性较好、重复性较好、受温度湿度环境影响较小等特点。MG812型二氧化碳气体传感器的实物图、引脚分布图及其内部加热驱动电路如图2所示。
图2 气体传感器实物图、引脚分布图及内部加热驱动电路
引脚分布如图3所示,其中引脚1、3为加热电极,一般器件工作时需提供5 V工作电压。2、4为信号电极,连接下一级信号调理单元电路。
图3 芯片引脚分布图及部分电路图
信号调理单元和模数(A/D)转换单元选用16位A/D芯片AD7705。该芯片兼并信号调理功能和模数(A/D)转换功能,内含前级缓冲器、可编程增益放大器、基于Σ-Δ调制原理的模数转换电路、数字滤波器、控制寄存器及串行接口。AD7705主要应用于低频测量的模拟前端,可直接输入前级传感器的低电平模拟信号,然后输出16位串行数字信号。AD7705还包括自校准和系统校准功能,用以消除部件或系统中的增益偏移误差。该器件为CMOS(Complementary Metal Oxide Semiconductor)结构,具有极低功耗,其中掉电模式可降低功耗至20 μW典型值。
微控制单元(MCU)选用STC89C52芯片。该芯片是一种低功耗、高性能的8位微控制器,使用经典的MCS-51内核,但进行很多改进使芯片具有增强型功能。该芯片的最小系统包括电源、晶振和复位3部分,芯片引脚图和部分电路如图3所示。该芯片的工作电压范围为3.3~5.5 V。为了有效滤除高频噪声,可在电源正极和负极之间加入10 μF和 0.1 μF并联的滤波电容增加电源的稳定性。晶振为单片机提供基本的时钟信号,该设计采用12 MHz的晶振。在芯片的XTAL1和XTAL2两个引脚上外接一个12 MHz的晶振和两个30 pF电容。晶体和电容组成并联谐振电路,作为反馈元件,构成一个自激振荡器,通过XTAL1和XTAL2两个引脚向内部时钟提供一定频率的时钟源信号。器件在上电时需要进行复位操作,使系统处于确定的初始状态。当程序出错或跑飞时也需要复位操作,让程序能从头开始运行。STC89C52的复位信号从RST(Reset)引脚输入,RST引脚上保持24个振荡周期以上的高电平即可实现复位。复位有上电自动、手动和看门狗复位3种方式。通常采用多种方式组合的设计。
声光报警单元由蜂鸣器、LED灯和数码管3部分组成。数码管显示二氧化碳的浓度,蜂鸣器和LED灯起报警作用。当室内二氧化碳浓度超标时,蜂鸣器发声,LED灯闪烁,实现报警功能。
该报警器的设计使用keil uVision4软件完成程序编译,程序设计采用C语言。报警器程序主要包括数据采集、数据处理和报警单元3个模块。其中数据采集模块包括气体浓度信息采集和模数转换。数据处理模块包括信息转换和报警逻辑,报警单元模块包括声光报警和数码显示。程序流程如图4所示。报警器开始工作后,系统首先初始化,完成初始化后进行气体浓度信息采集。对采集到的气体浓度信息进行模数转换,系统对接收到的信息进行数据处理后提交报警逻辑判断。当报警逻辑判断结果为True时,声光报警单元启动,数码管同时显示气体浓度值。当报警逻辑判断结果为False时,声光报警器关闭,结束一个工作程序。
图4 程序流程图
报警器部分代码程序如下所示。
AD7705的初始化程序:
void ad7705_initiate ()
{
ad7705_write8bit(0x20);/*配置通信寄存器。选择通道AIN1,下个操作对时钟寄存器写*/
ad7705_write8bit(0x08);/*写时钟寄存器。选择2.46 MHz的主时钟频率,20 Hz的输出更新率*/
ad7705_write8bit(0x10);/*设置通信寄存器。选择通道AIN1,下个操作对设置寄存器写*/
ad7705_write8bit(0x60);/*写设置寄存器。设置增益为16,双极性输入模式,开始自校准*/
}
数据处理函数的程序:
intdataprocess(intaddata)elseif(addata>1219×16) s=2000;{elses=3000;ints;if(s>=1500){led=0;beep=0;}if(addata>1506×6) s=100;if(s>=3000)elseif(addata>1428×16) s=200;{for(i=0;i<60;i++)elseif(addata>1375×16) s=500;{beep=~beep;delay(2000);}}elseif(addata>1336×16) s=800;return(s);elseif(addata>1311×16) s=1000;}elseif(addata>1271×16) s=1500;
针对室内二氧化碳浓度监测,笔者设计了一种低功耗、小体积、低成本的二氧化碳报警器。该报警器设置报警阈值为1.5%。当室内CO2浓度大于1.5%时,报警器启动,蜂鸣器发声,LED灯亮。数据每10 s更新一次。若监测到室内CO2浓度超过报警阈值,报警器会持续响应1 min,之后再次采集数据,重新检测。基本实现了预期功能。