这几年买房、买车的朋友越来越多,当然我不在买房买车的行列,做开源的嘛,穷是必然的(笑)。新房装修、新车内饰的甲醛问题也随之而来。一些朋友网购了百十元的甲醛检测仪,也有三五百元的,找我来鉴定这些设备是否可靠。经过拆解部分的甲醛检测仪、以及在网上论坛的了解,发现甲醛检测仪这方面的水很深。比如,有些甲醛检测仪内部的传感器乃是十分廉价的模拟电路,有些甚至和抽油烟机的气体传感器同一级别。个别论坛里也有揭露,近千元的甲醛检测仪,打着进口的品牌,其实是廉价的传感器,以次充好。虽然廉价的传感器在检测甲醛时有一定的参考性,但其精确到和可靠性大打折扣。鉴于此柴油报警器,工作室设计了一款较为精准的DIY甲醛检测仪,可以测量甲醛数值、温湿度,并配有安卓APP显示。如图所示。
显示效果.jpg
这个设计有点bug:APP与LCD显示会有误差,经过研究,发现是安卓平台和单片机硬件的差异导致的,如下图:
误差演示.jpg
可以看到,app中显示甲醛浓度为0.362mg/m³,温度为30.2℃,而LCD12864显示的是0.363mg/m³和30.3℃,这是因为,单片机硬件在保留小数位的时候,自动向上取整了。比如实际读取到的温度是30.26℃,当保留1位小数时,应该是30.2℃,但实际结果是30.3℃(有兴趣的可以保留多位小数观察一下)。同时,安卓app这边,小数处理上也有类似的问题。不过这些误差是可以接受的,毕竟分辨率比较高了。
本设计由单片机系统、WZ-S型甲醛传感器、温湿度传感器、OLED显示、和蓝牙模块组成,其中,OLED显示屏和蓝牙模块可以同时兼有,也可以只取其一。只需要手机APP显示时,可以舍弃OLED显示部分;如果不需要手机APP显示,也可以舍弃蓝牙模块。 单片机使用STC15F2K系列增强型8051,该单片机具有两个UART串口,串口1用于甲醛模块数据的读取,串口2用于连接蓝牙模块。发送数据到安卓APP。该单片机I/O口可通过软件配置为开漏模式,用于Si7201通信。
模块说明甲醛检测模块
甲醛检测仪使用英国达特甲醛传感器,具有nqa ISO9001 和UKAS认证,采用电化学检测测原理,分辨率可达0.001ppm(换算为甲醛浓度为1.34μg/m³),与采用廉价的半导体传感器的甲醛检测备相比,测量数据更可靠,足够满足一般民用检测。
WZ-S型甲醛模块部分参数:
产品型号WZ-S
检测原理
燃料电池
检测气体
甲醛
检测量程
0-2ppm
最大过载
10ppm
供电电压
5-7V
预热时间
响应时间
(T 90 )
恢复时间
(T 10 )
分辨率
0.001ppm
工作温度
-20℃~50℃
工作湿度
10%-90%RH(非凝结)
存储温度
0~20℃
使用寿命
5 年(正常使用)
重量
4g
甲醛传感器内置数模转换电路,直接通过UART串口输出数字数据,用户只需要根据通信协议将数据进行转换便可得到甲醛浓度值。模块供电为5V,但TX和RX通信端口电压为3.3V,因此与5V单片机通信时,需要5V转3.3V电平转换模块,以免甲醛模块无法承受5V单片机I/O口的电压。
蓝牙模块
蓝牙模块为HC05,可通过AT指令配置主从模式,当与手机蓝牙通信时,需要配置为从模式。通过AT指令,仅需要配置如下参数:
AT+NAME="XXX"配置模块名称AT+ROLE=0配置为从模式(ROLE=1为主模式)AT+CMODE=1配置为任意连接模式AT+PSWD=1234配置配对密码AT+UART=9600,0,0配置蓝牙串口波特率为9600,停止位1位,无校验位(和单片机串口参数一致)
蓝牙模块配置的时候有点坑,需要加个回车,有些串口助手软件自带了回车,需要注意。温湿度传感器
温湿度传感器使用Si7201模块,与DHT11相比,体积更小,测量精度更高。使用该模块时需要注意,模块需要3.3V供电柴油报警器,SDA和SCL端口与单片机连接时,单片机I/O口必须配置为开漏模式,否则有可能无法读到准确的数据。
软件设计
程序中,设定查询时间为5秒,即每隔5秒可查询一次甲醛浓度数据,甲醛模块收到单片机的查询指令后,溢出9字节的数据,存储在数组receive_buf[9]中。源代码中,给出了处理甲醛数据的方法:
方法1:直接读取receive_buf[2]、receive_buf[3]的浓度数据,把两个8位数据整合为float型,代码如下:
HCHO = (float) (receive_buf[2]<<8 | receive_buf[3]);
HCHO = HCHO/1000; //μg转换为mg,1mg=1000μg
求助来的数值单位是μg/m³,除以1000便可得到mg/m³
方法2:读取receive_buf[6]、receive_buf[7]的ppb数据,把两个8位数据整合为float型,此时得到的单位是ppb,ppb除以1000,得到ppm值。
HCHO = (float) (receive_buf[6]<<8 | receive_buf[7]); //求出ppb值
HCHO = HCHO / 1000 * 1.3393 ; //根据ppb得到ppm值,再换算为甲醛浓度
ppm(parts per million) 是百万分率(或百万分之几)是用溶质质量占全部溶液质量的百万分比来表示的浓度 。1ppm与mg/m³的关系为,X = C * M /22.4,其中,X是气体浓度质量分数,单位mg/m³;C是气体体积分数,量纲是ppm;M是气体相对分子质量(此处是甲醛),甲醛的分子式HCHO,相对分子质量为30。22.4空气在标准大气压下的相对分子质量。所以,1ppm甲醛气体体积浓度相当于:1ppm*30/22.4=1.3393mg/m³
上述方法选其一求出甲醛浓度后,格式化数据甲醛模组,最后输出到液晶屏显示。
温湿度传感器Si7201的数据较为简单,使用标准IIC协议读取数据,为节约篇幅,本文只介绍温湿度数据处理部分。数组Data_buf[]中,Data_buf[0]、Data_buf[1]分别存储温度高字节、温度低字节;Data_buf[2]、Data_buf[3]分别存储湿度高字节、湿度低字节。这些数据得到后,并不能直接合并后输出显示,而是要跟手册公式计算出数值。温度、湿度转换公式分别为:
湿度公式
温度公式
转换为C代码为:
temp_u16 = Data_buf[0] << 8 | Data_buf[1];
tmp_value = 175.72 * temp_u16 /65536 - 46.85;
temp_u16 = Data_buf[2]<<8 | Data_buf[3];
RH_value = temp_u16;
RH_value = 125 * RH_value/65536-6;
tmp_value为最终求得的温度数值,RH_value为最终求得的湿度数值。最后格式化数据,输出到12864显示。
现在,有了甲醛浓度数据、温湿度数据显示在液晶屏,如何发送到手机显示呢?此处借助蓝牙通信实现。单片机将得到的数据,通过串口2传输给蓝牙模块,蓝牙模块与手机蓝牙连接甲醛模组,获取单片机数据,APP用和单片机相同的方法处理数据后,得到数值并显示。单片机硬件和手机软件进行通信时,要制定一个数据通信协议,即硬件以一定的方式发送数据,手机软件收到数据后,根据一定的格式解析数据,解析后的数据与单片机显示的的数据应当一致。设定的通信协议如下:
012345678
帧头
甲醛浓度高位
甲醛浓度低位
温度高位
温度低位
湿度高位
湿度低位
校验位
帧尾
FA
0
0
0
0
0
0
0
FC
由于协议字节数不长,实际上甲醛模组,只校验了帧头和帧尾,没有加入实际的校验位,读者可根据自实际情况加入校验方法。甲醛浓数据、温湿度数据与单片机读取的数据格式完全一致,安卓程序中,套用单片机C代码中的公式即可得到实际数据。
资料下载: 戳我下载若资料失效,请留言告知
腾元达编辑,转载请注明出处
- 2023-09-17
什么环境需要安装氧气检测仪?有什么作用? - 2023-09-10
垃圾填埋场有毒有害气体如何防范? - 2023-09-10
常见有毒有害气体以及如何防范? - 2023-09-10
固定式可燃气体探测器一般用什么气体标定 - 2023-08-19
密闭空间如何选择气体检测仪? - 2021-09-08
二氧化氮探测器 二氧化氮NO2传感器 - 2021-09-08
pm2.5检测仪 欢迎##简阳PM2.5扬尘监测系统环境检测仪##集团 - 2021-09-08
在线式二氧化碳检测仪 - 2021-09-08
噪音检测仪 噪声检测仪哪个品牌好? - 2021-09-08
pm2.5检测仪 云南玉溪 扬尘监测PM10监测PM2.5监测TSP检测仪扬尘监测仪