1、传感器介绍

  网上有关这个传感器的介绍的文章很多,但是真正能够探索这个传感器本身原理的很少,大多数都是大家搬过来别人的然后变成自己的文章,可是如果你细细研究这个传感器,发现网上的都没有正确使用这个传感器,换句话说,通过ADC转换出来的浓度,根本不是这个传感器设定的浓度,在这个里我将带大家从原理上,通俗易懂的解析一下这个传感器的原理,并给出这个传感器的运行代码,方便大家使用。

1.1MQ2传感器结构应用描述

        主要特点:广泛的探测范围,高灵敏度/快速响应回复,优异的稳定性/寿命长,简单的驱动电路等特点。其实对于我们学习者来说就是相对特别便宜,虽然精度低了点,但对于我们的学习还是够了的。以后有条件了,专攻这方面咋们买好的。有它的特点我们可以知道它的主要应用在于家庭跟工厂的气体泄漏监测装置,适宜于液化气、丁烷、丙烷、甲烷、酒精、氢气、烟雾等的探测。这是传感器厂家给的一个传感器说明,这里给一张图:

 以上是传感器厂家给的一个说明,不多说,这个只是一些参数,我会把这个说明PDF也放在资料里方便大家查看。

2.传感器分压图示:

这个图也是传感器PDF说明里的一个图,从这个图开始我开始进入分析。也就是下面这个图,在这个图里面有一个图2,大家可能看不懂,下面我单拿出来给大家解释一下。从这里开始你就会发现,网上所有的文章都没有说到点子上,都在自己凭感觉进行计算烟雾浓度(也十分苦恼,为什么厂家都给了文档,还没有给一个标准的例子,还是这个传感器太便宜了,不值得厂家出一个文档,给大家一个标准的答案)

下面就是图2:

在这里有一个分压公式也就是这个公式我们才能找出,传感器的ADC值对应的浓度,但是网上很多人,并没有往深一步进行考虑。后面给大家解释,我们先看这个分压公式:

  这里

Vl1表示的是图上的Vout,

Rl表示的是图上的Rl,

Vc-Vl1表示加在R0上的电压值,Vc我们这里用5V进行表示(因为传感器工作电压是5V,单片机也是可以输出5V的电压的)。

R0表示不同浓度下传感器所对应的电阻值。

到这里我们可以肯定,一点问题也没有,再往下走,就是出现各种问题,也就是网上好多文章的不真实之处。

我们在这里进行思考:Vl1(Vout),这个我们能测出来,Vc也是5V,R0是我们想知道的量(一会解释为什么求这个量),剩下只有一个参数,那就是Rl,网上对这个众说纷纭,有人说,文档里已经给了这个值是变化的,没错,我们看图2,确实是滑动变阻器,但是我们怎么改变这个值。(如果你手里有一个传感器,就会发现唯一能够拧动的是有一个蓝色的旋钮,但是这个旋钮是调节浓度阈值的,就是你浓度超过多少,传感器上会有一个蓝色的灯亮。),所以这个值我们根本不能改变,或许能够改变,但是已经集成在了传感器内部,我们无法用手旋转。再有就是有的文章说。这个图。

这个图中的引脚1-6,你拿到传感器可以清楚看到这6个引脚,从图上我们能看到,确实这个引脚有用,AH引脚之间就是这个R0电阻,但是我用万用表测一下,发现这个电阻是无穷大,也就是断路。或者是短路,电阻是0。为什么这样说,因为图上没有一个正确的方位,让我表示1-6引脚是对应的那一个点。我只能排列组合一个一个进行测量。

回到问题,我们最终没有办法测量出一个真实的R0的电阻值,到这个时候,没有办法,我只能寻找网络上大家使用的值,我发现有用200,有用5,有用50。到这里我们再回到说明书,图3。

我发现这里给出了Rl的值,也就是R0的值,大家疑惑为什么是两个符号。(我也解释不了,说明书就是这个两个符号,表示了一个值)至少到这里证明,文章里出现R0是5的文章,大家还是可以看看的,至于其他,怎样出来的值,我怎么也想不到。[好在对于一个真正想了解这个传感器的人,慢慢发现这个R0根本没有用,在公式中这个R0最后会被消除掉,这就解释了好多文章,大多都是看别人写的,凡是有R0的大家基本可以只看看了]我们接着向下分析。

这里R0代表的是纯净空气下,对应的电阻值

这里Rs代表的是纯净空气下,对应的电阻值

从图3我们可以知道,PPM和Rs/R0的关系,我们只需要找出Rs/R0就可以找出对应的PPM,这点是确定的,那就等于找出测量环境下的Rs和纯净空气下的R0就能知道对应的PPM。再根据图3我们拟合一个函数,知道Rs/R0就能对应出PPM。好的,理论成立,我们开始实践。

我们从

知道了,我们想要PPM,变成求R0,想要R0变成求Vl1。

有人说,还有RL。不急。我们两个公式相除。

就会变成RL抵消了,左边变成了我们想要求的值,右边变成了我们能求的值。(所以,我上面说凡是,把RL代值进去的,不管什么值,都是在瞎编,丝毫没有考虑实际)。

在这里,我们首先需要拟合函数。

来吧开始拟合。我们按照CH4来进行函数的拟合,这时候你就会用到python,这里我们看看,拟合需要的值,拟合后的图,大家不要感觉这里已经结束了,这刚刚开始。

ppm=[200,300,400,500,600,700,800,900,1000,2000,3000,4000,5000,6000,7000,8000,9000,10000];

Rs/R0=[3,2.75,2.50,2.25,2.15,2,1.85,1.75,1.70,1.50,1.25,1.05,0.93,0.87,0.81,0.75,0.72,0.69];

上面是我根据图3进行的函数拟合,不那么精准,但是再不精准,也不会吧PPM=200看成PPM等于0.2吧,为什么这样说,大家接着看。

y = 21.6852 * x ** -0.3656

以上是这个函数表达式,图像对应的是

以上图像我们叫图4。

好的到此我们拟合函数成功。

来我们进行数学代数。

最后我们可以得出这样的函数表达式,当然我已经转化为了C语言形式。

之前我也是根据这样来进行计算的,大家看到网上广为流传的C语言形式的这个也是这样写的。

但是,我带入函数以后,发现PPM的值是0.3,但是其中

的值,也就是我们应该通过电压转化知道的Rs测量空气下的电阻值,R0纯净空气下的电阻值,两个相除是1的画根据图像,我们得到的PPM的值应该是,4000多PPM。大家看我的串口输出。

这就发现了问题,拟合的函数不对,我找了半天发现网上的公式错了,真正拟合后的函数应该是:

可是这么多年了,网上没有出现一次这样的公式。

好了我们看看这次的输出:

这样才是,函数应该有的数值。但是输出以后,我发现不对了。空气中正常的CH4能有4000???

我查了一下,正常是0ppm,4000,人早上去了。

那么很正常,又一次错了。完了。我开始往回想,

PPM-》RS->VL

没错啊,单片机运行没有问题,一个测量的电阻比上纯净空气中的电阻,这个值按照图里说的,要想等于1ppm,这个值我们代入公式后计算,是21.6852。也就是需要电阻变成21倍才能算出PPM等于1。但是正常空气中都没有1。这个倍数怎么也不能上升到21倍。。。

这样只有一个情况说明书错了,给的拟合函数的图像错了。

只有这种解释了。网上开始找,终于我在一个地方找到了。

一样的图形,但是这个的准确性有待考察,但是不得不说,如果把ppm缩小1000倍,这个值真的七七八八是真实的样子,空气中本来也不会有这么大。但是无从证明。

我能做的只能把两种结果的函数都列出来,一种是网上大家都用的那种,测出来值是20多,还有我修改了拟合函数的测出的值4000对,再有就是上面这种,你测出了值是0ppm。大家用可以自行下载使用,我在源码里已经标明了。我用的是STM32F103C8T6。

资料中包括了两个源码,还有python 生成函数的代码。

资料包在我主页下载资源哪里,这个我附加传上去,系统默认是VIP资源了,我主页那个免费的,大家需要可以下载。

https://download.csdn.net/download/Q3082791442QQ/90360450

另如果需要我是一个UP主,哔哩哔哩搜质点电子,如果想代做也可以找我。哔哩哔哩私聊就可以,技术型。。。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐