- 模块简介:
本模块采集MP503空气质量传感器信号,通过单片机的10位ADC对传感器信号采样,并通过气体浓度线性曲线算法计算出气体浓度,可计算出甲醛、酒精、氢气浓度值。模块以TTL串口作为数据输出接口。
2.技术指标:
产品型号 | KM-MP503 |
检测对象 | 甲醛、酒精、氢气浓度 |
通信接口 | TTL串口 |
供电电压范围 | 5V |
工作电流 | 60mA |
测量量程 | 甲醛(0-50PPM)、酒精(0-100PPM)、氢气(0-100PPM) |
预热时间 | 不小于6分钟 |
输出模式 | 可切换:1.自动上传 2.问答式 |
模块尺寸 | 24*20*16mm(长宽高) |
通讯参数 | 默认波特率9600,停止位1,无校验 |
响应时间 | ≤60秒 |
恢复时间 | ≤60秒 |
3.测量原理:
当环境空气中有被检测气体存在时传感器电导率发生变化,该气体的浓度越高,传感器的电导率就越高。采用简单的电路即可将这种电导率的变化转换为与气体浓度对应的输出信号。
电导率与电阻率互为倒数关系,即导电率=1/电阻率,电阻和电阻率的关系公式为R=ρL/S,即电阻的阻值与电阻率成正比,即气体浓度越大,电阻越小。下图为MP503官方手册提供的气体浓度检测电路:
MP503传感器官方数据手册并未提供分压电阻RL阻值,我们需自行根据其提供的线性关系,先将分压电阻RL设置为2K,经过在纯净空气中(不含酒精等传感器敏感气体)测试,首次上电测量MP503模块预热30分钟待输出电压稳定后,测量得到电压输出约为0.3V,由电阻分压关系计算:
RL/(RL+RS)*5=0.3V RS:传感器阻值 RL:负载阻值=2K
可得出传感器阻值RS≈31K。
接下来从MP503官方手册提供的检测气体浓度与输出电压的线性曲线图中,找到0ppm酒精浓度时对应输出电压约为1.25V,则假设RL未知,在RS=31K时,输出电压为1.25V,根据电阻分压关系:
RL/(RL+RS)*5=1.25V RS=31K
可得出RL≈10K,故可知传感器手册中负载电阻RL阻值为10K,
则设计采集电路中,RL采用10K阻值,以符合手册给出的线性曲线关系。
根据手册中气体浓度与输出电压值的线性曲线图:
从曲线图中找到气体浓度值与输出电压值对应如下:
对应电压(V) | 甲醛浓度(ppm) |
1.25 | 0 |
1.9 | 10 |
2.3 | 30 |
2.75 | 50 |
对应电压(V) | 酒精浓度(ppm) |
1.25 | 0 |
2.25 | 10 |
2.9 | 30 |
3.25 | 50 |
3.6 | 100 |
对应电压(V) | 氢气浓度(ppm) |
1.25 | 0 |
1.6 | 10 |
2 | 30 |
2.25 | 50 |
2.6 | 100 |
根据对应数值采用excel表格工具绘制各气体浓度值与电压值标准曲线如下:
例:y = 33.745x - 46.677即甲醛浓度标准曲线表达式,其中Y代表纵坐标为甲醛浓度,x为横坐标对应输出电压。这是一种曲线拟合方式,称为最小二乘法,根据几组对应数据即可求出函数关系表达式。本模块板载MCU自带内部10位分辨率AD转换器采集输出电压,通过代入曲线函数运算转换即可得到甲醛浓度值,酒精及氢气浓度的计算采用其对应曲线函数转换亦可得知。
关于最小二乘法的原理可参考:最小二乘法的本质是什么? - 知乎
注意:根据输出电压计算出的这三种气体浓度值,仅代表传感器处在一种气体环境下的测量值。如我们确定传感器处在只有甲醛气体存在的环境中,则模块计算所得的甲醛浓度值就能作为甲醛浓度的真实值,反之如果不确定环境中是否还存在酒精或氢气等对传感器有干扰作用的气体,那么模块计算得到的甲醛浓度值就无法确定是否为真实的甲醛浓度值。
4.串口协议:
模块默认主动上传数据模式,每间隔1S上传一次数据,数据格式如下:
模块返回 | byte0 | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 |
起始位 | 0x86 | AD值 | 甲醛 (PPB) | 酒精(PPM) | 氢气 (PPM) | 校验值 | |||
0xFF | 指令 | 高字节 | 低字节 | 高字节 | 低字节 | 0 | 0 | -- | |
EXP. | FF 86 01 1C 00 A3 00 00 BA |
注:1PPM=1000PPB PPM转换成mg/m3 的系数为1.23 即mg/m3=1PPM*1.23
例: FF 86 01 1C 00 A3 00 00 BA
AD值: 0x01 0x1C 即284
甲醛: 0x00 0xA3 即 163 PPB = 0.163 PPM = 0.200 mg/m3
酒精:0x00 = 0 PPM
氢气:0x00 = 0 PPM
如用户需要切换模块为问答模式,需向模块发送如下指令:
下发指令 | 0x86 | 读传感器浓度值 | |||||||
向模块发送 | byte0 | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 |
起始位 | 地址 | 命令 | -- | -- | -- | -- | -- | 校验值 | |
0xFF | 0x01 | 0x86 | 0 | 0 | 0 | 0 | 0 | 0x79 | |
EXP. | FF 01 86 00 00 00 00 00 79 | ||||||||
模块返回 | byte0 | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 |
起始位 | 0x86 | AD值 | 甲醛 (PPB) | 酒精(PPM) | 氢气 (PPM) | 校验值 | |||
0xFF | 指令 | 高字节 | 低字节 | 高字节 | 低字节 | 0 | 0 | -- | |
EXP. | FF 86 01 1C 00 A3 00 00 BA |
用户如需改为自动上传模式,需向模块发送以下指令:
下发指令 | 0x87 | 设置为自动上传模式 | |||||||
向模块发送 | byte0 | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 |
起始位 | 地址 | 命令 | -- | -- | -- | -- | -- | 校验值 | |
0xFF | 0x01 | 0x87 | 0 | 0 | 0 | 0 | 0 | 0x78 | |
EXP. | FF 01 87 00 00 00 00 00 78 |
5.模块连接及安装尺寸图:
6.上位机测试方法:
模块可通过外接USB转串口模块与电脑上位机通信,查看USB转串口模块在电脑上的端口号,在电脑设备管理器中查看,端口号因个人电脑而异,如下图:
一定要保证USB转串口模块与MP503模块的串口要交叉连接,即
打开上位机软件,并选择相应串口号(例如本机电脑端口号为3),如下图:
模块链接:
https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-23054510655.2.2826230aQMGgLM&id=755259608914