当前位置:首页 > 电子制作 > 正文内容

自制甲醛检测仪

新房装修、新车内饰的甲醛问题也随之而来。一些朋友网购了百十元的甲醛检测仪,也有三五百元的,找我来鉴定这些设备是否可靠。经过拆解部分的甲醛检测仪、以及在网上论坛的了解,发现甲醛检测仪这方面的水很深。比如,有些甲醛检测仪内部的传感器乃是十分廉价的模拟电路,有些甚至和抽油烟机的气体传感器同一级别。个别论坛里也有揭露,近千元的甲醛检测仪,打着进口的品牌,其实是廉价的传感器,以次充好。虽然廉价的传感器在检测甲醛时有一定的参考性,但其精确到和可靠性大打折扣。鉴于此,工作室设计了一款较为精准的DIY甲醛检测仪,可以测量甲醛数值、温湿度,并配有安卓APP显示。如图所示。

自制甲醛检测仪
显示效果

当然,这个设计有点bug:APP与LCD显示会有误差,经过研究,发现是安卓平台和单片机硬件的差异导致的,如下图:

自制甲醛检测仪
误差演示

可以看到,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
预热时间<3min
响应时间(T 90 ) <40S
恢复时间(T 10 ) <60S
分辨率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指令,仅需要配置如下参数:

  1. AT+NAME="XXX" 配置模块名称

  2. AT+ROLE=0 配置为从模式(ROLE=1为主模式)

  3. AT+CMODE=1 配置为任意连接模式

  4. AT+PSWD=1234 配置配对密码

  5. 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
帧头甲醛浓度高位甲醛浓度低位温度高位温度低位湿度高位湿度低位校验位帧尾
FA0000000FC

由于协议字节数不长,实际上,只校验了帧头和帧尾,没有加入实际的校验位,读者可根据自实际情况加入校验方法。甲醛浓数据、温湿度数据与单片机读取的数据格式完全一致,安卓程序中,套用单片机C代码中的公式即可得到实际数据。


扫描二维码推送至手机访问。

版权声明:本文由智凡单片机c语言入门发布,如需转载请注明出处。

分享给朋友:

相关文章

基于51单片机的蓝牙遥控灯调光设计制作

基于51单片机的蓝牙遥控灯调光设计制作

        这是一款基于51单片机的蓝牙遥控灯调光设计制作实例,系统:由51单片机最小系统、蓝牙模块、发光二极管组成...

破风小黄鸭喇叭灯方案

破风小黄鸭喇叭灯方案

小黄鸭又红了!但这次不是表情包也不是吹气橡皮鸭,而是一个安装在自行车把手上面的小黄鸭喇叭灯!这个时代一直给我们带来无限的惊喜,每一天的生活都会有新鲜的东西冒出来。最近因为刷抖音又再一次被这个小黄鸭喇叭...

基于蓝牙串口的手机远程控制系统

基于蓝牙串口的手机远程控制系统

十年前,手机基本只作为一种打电话发短信的通讯工具,得益于微电子技术和软件技术的迅猛发展,如今的手机已经具备了几乎可以与计算机相媲美的强大功能。一个不争的事实是:我们每天使用手机的时间远远超过使用计算机...

ESP8266局域网AT指令控制小灯亮灭

ESP8266局域网AT指令控制小灯亮灭

(一)配置ESP8266模块(WIFI模块连接CH340插电脑,利用串口工具配置)1 工作模式STA模式:AT+CWMOD_DEF=1// _DEF后缀表示保存到flash中;2 连接到路由器:&nb...

对hc-sr04的理解

对hc-sr04的理解

该超声波模块工作电压为5V,一共四个引脚,其中一个接电源一个接地,trig引脚为启动引脚,即可理解为如果要让超声波模块开始工作,除了接通电源,还得通过程序控制trig引脚。控制方法十分简单,只需要给该...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。