這幾年買房、買車的朋友越來越多,當然我不在買房買車的行列,做開源的嘛,窮是必然的(笑)。新房裝修、新車內飾的甲醛問題也隨之而來。一些朋友網購了百十元的甲醛檢測儀,也有三五百元的,找我來鑒定這些設備是否可靠。經過拆解部分的甲醛檢測儀、以及在網上論壇的了解,發現甲醛檢測儀這方面的水很深。比如,有些甲醛檢測儀內部的傳感器乃是十分廉價的模擬電路,有些甚至和抽油煙機的氣體傳感器同一級別。個別論壇里也有揭露,近千元的甲醛檢測儀,打著進口的品牌,其實是廉價的傳感器,以次充好。雖然廉價的傳感器在檢測甲醛時有一定的參考性,但其精確到和可靠性大打折扣。鑒于此柴油報警器,工作室設計了一款較為精準的DIY甲醛檢測儀,可以測量甲醛數值、溫濕度,并配有安卓APP顯示。如圖所示。
顯示效果.jpg
這個設計有點bug:APP與LCD顯示會有誤差,經過研究,發現是安卓平臺和單片機硬件的差異導致的,如下圖:
誤差演示.jpg
可以看到,app中顯示甲醛濃度為0.362mg/m3,溫度為30.2℃,而LCD12864顯示的是0.363mg/m3和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/m3),與采用廉價的半導體傳感器的甲醛檢測備相比,測量數據更可靠,足夠滿足一般民用檢測。
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/m3,除以1000便可得到mg/m3
方法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/m3的關系為,X = C * M /22.4,其中,X是氣體濃度質量分數,單位mg/m3;C是氣體體積分數,量綱是ppm;M是氣體相對分子質量(此處是甲醛),甲醛的分子式HCHO,相對分子質量為30。22.4空氣在標準大氣壓下的相對分子質量。所以,1ppm甲醛氣體體積濃度相當于:1ppm*30/22.4=1.3393mg/m3
上述方法選其一求出甲醛濃度后,格式化數據甲醛模組,最后輸出到液晶屏顯示。
溫濕度傳感器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檢測儀揚塵監測儀