一、MQ-2烟雾传感器简介
MQ-2常用于家庭和工厂的气体泄漏监测装置,适宜于液化气、苯、烷、酒精、氢气、烟雾等的探测。故因此,MQ-2可以准确来说是一个多种气体探测器。
MQ-2的探测范围极其的广泛。它的优点:灵敏度高、响应快、稳定性好、寿命长、驱动电路简单。
二、MQ-2的工作原理
MQ-2型烟雾传感器属于二氧化锡半导体气敏材料,属于表面离子式N型半导体。处于200~300摄氏度时,二氧化锡吸附空气中的氧,形成氧的负离子吸附,使半导体中的电子密度减少,从而使其电阻值增加。当与烟雾接触时,如果晶粒间界处的势垒收到烟雾的浓度而变化,就会引起表面导电率的变化。利用这一点就可以获得这种烟雾存在的信息,烟雾的浓度越大,导电率越大,输出电阻越低,则输出的模拟信号就越大。
三、MQ-2的特性
MQ-2型传感器对天然气、液化石油气等烟雾有很高的灵敏度,尤其对烷类烟雾更为敏感,具有良好的抗干扰性,可准确排除有刺激性非可燃性烟雾的干扰信息。
MQ-2型传感器具有良好的重复性和长期的稳定性。初始稳定,响应时间短,长时间工作性能好。需要注意的是:在使用之前必须加热一段时间,否则其输出的电阻和电压不准确。
其检测可燃气体与烟雾的范围是100~10000ppm
(ppm为体积浓度。1ppm=1立方厘米/1立方米)
电路设计电压范围宽,24V以下均可,加热电压5±0.2V
注意:如果加热电压过高,会导致输入电流过大,将内部的信号线熔断,从而器件报废。
四、MQ-2应用电路
MQ-2常用的电路有两种,一种使用采用比较器电路监控,另一种为ADC电路检测。
1.比较器电路
MQ-2的引脚4输出随烟雾浓度变化的直流信号,被加到比较器U1A的2脚,Rp构成比较器的门槛电压。当烟雾浓度较高输出电压高于门槛电压时,比较器输出低电平(0v),此时LED亮报警;当浓度降低传感器的输出电压低于门槛电压时,比较器翻转输出高电平(Vcc),LED熄灭。调节Rp,可以调节比较器的门槛电压,从而调节报警输出的灵敏度。R1串入传感器的加热回路,可以保护加热丝免受冷上电时的冲击。
2.ADC转换电路
MQ-2传感器另外一个采集方法为AD信号采集,即将电压信号转化为数字信号,进而转化为精确的烟雾浓度值。
MQ-2传感器的4脚、6脚的电压为输出信号,Rs为传感器的本体电阻。其中若气体浓度上升,必导致Rs下降。而Rs的下降则会导致MQ-2的4脚、6脚对地输出的电压增大。所以气体浓度增大,其输出的电压也会增大,最终通过ADC0832转换后数值增大。
五.控制程序
1. 因为比较器电路处理的检测信号只有高和低两种状态;当浓度低于阈值时,信号为高电平;浓度高于阈值时,信号为低电平。所以单片机只需要将引脚配置为输入模式,监控该信号的高低电平即可。
2.AD信号采集程序
实现对MQ-2烟雾浓度的采集,只需实现ADC0832采集函数便可完成信号的采集。但通过ADC0832采集到的信号只为原始信号,要转换为实际的烟雾浓度,还需要根据MQ-2的特性进行校正和公式转换,最终得到实际的浓度值。
/****************************************************************************函数功能:AD转换子程序入口参数:channel出口参数:dat****************************************************************************/unsigned char adc0832(unsigned char channel ){unsigned char i,test,adval,dat;adval = 0x00;test = 0x00;Clk = 0; //初始化DATI = 1;_nop_();CS = 0;_nop_();Clk = 1;_nop_();if (channel == 0x00 )//通道选择{Clk = 0;DATI = 1;//通道0的第一位_nop_();Clk = 1;_nop_();Clk = 0;DATI = 0;//通道0的第二位_nop_();Clk = 1;_nop_();} else{Clk = 0;DATI = 1;//通道1的第一位_nop_();Clk = 1;_nop_();Clk = 0;DATI = 1;//通道1的第二位_nop_();Clk = 1;_nop_();}Clk = 0;DATI = 1;for( i = 0;i < 8;i++ )//读取前8位的值{_nop_();adval <<= 1;Clk = 1;_nop_();Clk = 0;if (DATO)adval |= 0x01;elseadval |= 0x00;}for (i = 0; i < 8; i++)//读取后8位的值{test >>= 1;if (DATO)test |= 0x80;else test |= 0x00;_nop_();Clk = 1;_nop_();Clk = 0;}if (adval == test)//比较前8位与后8位的值,如果不相同舍去。若一直出现显示为零,请将该行去掉dat = test;nop_();CS = 1; //释放ADC0832DATO = 1;Clk = 1;return dat;}/****************************************************************************函数功能:获取烟雾浓度入口参数:无出口参数:dat****************************************************************************/unsigned char GetYanWuValue(void){unsigned int sum=0;unsigned char m,value=0;for(m=0;m<20;m++)//读50次AD值sum = adc0832(0)+sum; //读到的AD值,将读到的数据累加到sumvalue=(unsigned char)(sum/20); //跳出上面的for循环后,将累加的总数除以50得到平均值valueif(value > ADC_Zero) value = value - ADC_Zero; //首先减去零点漂移elsevalue = 0;return value;}