甲醛是一种无色,有强烈刺激性气味的气体。易溶于水、醇和醚。甲醛在常温下是气态,通常以水溶液形式出现,经常吸入少量甲醛,会引起慢性中毒,出现头痛、乏力、心悸、失眠以及植物神经紊乱等疾病。而在我们生活的环境中应该可以说是随处可见甲醛,比如室内装修所用的合成板材、家具、还有装饰材料。前段时间哥哥家的新房刚刚装修不久。因为用来当婚房,所以想要急着住进去,于是在家里到处都能看见除甲醛的东西,前两天还在网上购了一个甲醛检测仪呢。 目前,市场上甲醛检测仪的种类也是多种多样,就比如在某宝上,就有半导体传感器测甲醛、利用电阻丝发热测甲醛、还有常见的试验纸。虽然价格便宜,但是所测数据不稳定,误差范围过大(误差范围在±20%)。后面我自己DIY了一个便携式甲醛检测仪,这样以后就可以随时检测自己所处环境的甲醛浓度了。 【主要配件】 此款甲醛传感器是电化学传感器。它可以将甲醛气体的浓度转换为微弱的电流信号。这样就可以通过电流电压变换电路将微弱的电流信号转换为可以测量的稳定的电压信号,增强了电信号的稳定性。另外它与 Arduino兼容,可以精确的测量空气中的甲醛浓度,相比其他甲醛检测仪,它可以抑制干扰气体,而且稳定性和分辨率都较高。其使用寿命长达2年。 HCHO甲醛传感器在接口上采用简单的Gravity接口、宽输入电压、支持模拟电压或者串口输出。另外结合IOT技术,让全自动测量并统计不同地点的空气质量成为了可能。 【其他配件】 【总配件图】 【电路连线图1-DAC模式】 将传感器上的开关拨至DAC一端。接线图如上所示。 【实物接线图1】 注意:DAC模式中,测量精度会受主控器ADC的位数、参考电压精度的影响,因此请使用高精度的电源给主控器供电,或者直接使用主控器的内部参考电压。而且主控器的ADC至少是10位 【电路接线图2-UART模式】 将传感器上的开关拨至UART一端。接线图如上所示。 【实物接线图2】 以上两种模式,我推荐使用UART模式,因为在此模式下,可以获得更高的精度。 【效果图】 当甲醛浓度在安全范围内(则居室空气中甲醛浓度低于0.08mg/m3 或者0.06ppm),屏幕显示的为绿色。 当甲醛浓度超过安全范围(0.06ppm<空气中的甲醛浓度<0.2ppm),屏幕显示的为黄色。这个时候就要注意需要放置一些祛除甲醛的东西了 当甲醛浓度严重超标(0.2ppm<空气中的甲醛浓度<4ppm),屏幕显示的为红色。这类的房间最好还是给它空置半年再说入住的话,这甲醛实在是太厉害了。 当甲醛浓度>4ppm(此款甲醛传感器检测的最大范围为5ppm),这已经达到报表的程度了,这时屏幕会红色紫色交替闪烁。
【场景】 21世纪,我们接触的很多,身边有害的、有益的东西也是同等存在。在健康方面我们必须要重视起来,这样才能做到“生命,随年月流去,随白发老去。”所以我们所处的很多环境都需要检测甲醛浓度。比如:书柜、汽车内室、会议室、特别是刚装修的房子等环境里。 书柜 汽车内 会议室 置物架 窗台 办公室 现在不仅以上这些地方需要检测甲醛,公共场所民用建筑室内、建筑材料、家具等的甲醛含量也需要检测。由于甲醛含量超量的话,将对人体健康造成很大的影响。具有民用价值的甲醛检测仪也受到了人们的高度重视。既要满足生活需要,也要方便携带。针对目前的现状,此次设计遵守体积小,质量轻,性价比高的原则。其中外壳的3D文件以附件的形式放于文末,欢迎感兴趣的小伙伴下载。 【程序1-DAC模式】
- #define SensorAnalogPin A2 //this pin read the analog voltage from the HCHO sensor
- #define VREF 5.0 //voltage on AREF pin
- #include "DFRobot_RGBLCD.h"
- DFRobot_RGBLCD lcd(16, 2);
-
- void setup()
- {
- Serial.begin(9600);
- lcd.init();
- lcd.setRGB(0, 0,255);
- lcd.setCursor(1, 0 );
- lcd.print("HCHO:");
- }
-
- void loop()
- {
- Serial.print(analogReadPPM());
- Serial.println("ppm");
- delay(1000);
- lcd.setCursor(6,1);
- lcd.print(analogReadPPM());
- lcd.print("ppm");
- lcd.setCursor(6,0);
- lcd.print(analogReadPPM()*1.34);// Unit conversion :1ppm = 1.34 mg/m3
- lcd.print("mg/m3");
- if(analogReadPPM()<0.06)
- {
- lcd.setRGB(0, 255, 0);
- }
- else if(analogReadPPM()<0.2)
- {
- lcd.setRGB(250, 128, 10);
- }
- else if(analogReadPPM()<4)
- {
- lcd.setRGB(255, 0, 0);
- }
- else
- {
-
- lcd.setRGB(255, 0, 0);
- delay(250);
- lcd.setRGB(0, 0, 0);
-
- }
- delay(100);
- }
-
- float analogReadPPM()
- {
- float analogVoltage = analogRead(SensorAnalogPin) / 1024.0 * VREF;
- float ppm = 3.125 * analogVoltage - 1.25; //linear relationship(0.4V for 0 ppm and 2V for 5ppm)
- if(ppm<0) ppm=0;
- else if(ppm>5) ppm = 5;
- return ppm;
- }[/mw_shl_code]
- </font></div><div align="left"><font face="宋体">【程序2-UART模式】</font></div><div align="left"><font face="宋体">[mw_shl_code=cpp,true]
- #include <Wire.h>
- #include <DFRobotHCHOSensor.h>
- #include <SoftwareSerial.h>
- #include "DFRobot_RGBLCD.h"
- DFRobot_RGBLCD lcd(16, 2);
- #define SensorSerialPin 10 //this pin read the uart signal from the HCHO sensor
- SoftwareSerial sensorSerial(SensorSerialPin,SensorSerialPin);
- DFRobotHCHOSensor hchoSensor(&sensorSerial);
-
-
- void setup()
- {
- sensorSerial.begin(9600); //the baudrate of HCHO is 9600
- sensorSerial.listen();
- Serial.begin(9600);
- lcd.init();
- lcd.setRGB(0, 0,255);
- lcd.setCursor(1, 0 );
- lcd.print("HCHO:");
- lcd.setCursor(1, 1 );
- }
-
- void loop()
- {
-
- if(hchoSensor.available()>0)
- {
- // delay(1000);
- Serial.print(hchoSensor.uartReadPPM());
- Serial.println("ppm");
- lcd.setCursor(6,1);
- lcd.print(hchoSensor.uartReadPPM());
- lcd.print("ppm");
- lcd.setCursor(6,0);
- lcd.print(hchoSensor.uartReadPPM()*1.34); //Unit conversion :1ppm = 1.34 mg/m3
- lcd.print("mg/m3");
- if(hchoSensor.uartReadPPM()<0.06)
- {
- lcd.setRGB(0, 255, 0);
- }
- else if(hchoSensor.uartReadPPM()<0.2)
- {
- lcd.setRGB(250, 128, 10);
- }
- else if(hchoSensor.uartReadPPM()<4)
- {
- lcd.setRGB(255, 0, 0);
- }
- else
- {
-
- lcd.setRGB(255, 0, 0);
- delay(500);
- lcd.setRGB(255, 0, 255);
-
- }
-
- delay(100);
-
- }
- }
复制代码
作者联系方式-QQ:1078883988 (添加时,备注DF社区+项目名称) |