的室內(nèi)空氣質(zhì)量檢測(cè)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)(甲醛+CO2+溫濕度檢測(cè)+自動(dòng)換氣警示))
基于單片機(jī)的室內(nèi)空氣質(zhì)量檢測(cè)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)甲醛CO2溫濕度檢測(cè)自動(dòng)換氣警示一、系統(tǒng)功能總覽二、核心模塊選型2.1 主控芯片STM32F103C8T62.2 溫濕度傳感器DHT112.3 甲醛傳感器MQ-1382.4 CO2 傳感器MQ-1352.5 顯示模塊OLED12864三、系統(tǒng)接線總表四、系統(tǒng)軟件設(shè)計(jì)4.1 主程序流程4.2 溫濕度采集子程序4.3 氣體濃度采集子程序4.4 顯示子程序4.5 報(bào)警聯(lián)動(dòng)子程序五、系統(tǒng)實(shí)現(xiàn)與測(cè)試5.1 硬件調(diào)試5.2 軟件調(diào)試5.3 數(shù)據(jù)采集功能測(cè)試5.4 報(bào)警聯(lián)動(dòng)功能測(cè)試六、總結(jié)基于單片機(jī)的室內(nèi)空氣質(zhì)量檢測(cè)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)甲醛CO2溫濕度檢測(cè)自動(dòng)換氣警示裝修后的新房、密閉的辦公室、人員密集的教室室內(nèi)空氣質(zhì)量直接影響身體健康甲醛是裝修污染的頭號(hào)隱患二氧化碳濃度過高會(huì)讓人昏沉乏力溫濕度不適也會(huì)降低體感舒適度。市面上不少空氣質(zhì)量檢測(cè)儀只能測(cè)、不能管測(cè)出超標(biāo)也只給出一個(gè)數(shù)字換氣通風(fēng)仍要靠人自覺。本文設(shè)計(jì)了一套基于 STM32 的室內(nèi)空氣質(zhì)量檢測(cè)系統(tǒng)由 DHT11 采集溫濕度、MQ-138 檢測(cè)甲醛濃度、MQ-135 檢測(cè)二氧化碳濃度OLED 分頁輪播顯示各參數(shù)甲醛超標(biāo)時(shí)自動(dòng)開啟風(fēng)扇換氣并驅(qū)動(dòng) LED 閃爍警示溫度超標(biāo)時(shí)蜂鳴器報(bào)警實(shí)現(xiàn)室內(nèi)空氣質(zhì)量的實(shí)時(shí)檢測(cè)、自動(dòng)換氣與超標(biāo)警示。一、系統(tǒng)功能總覽系統(tǒng)以 STM32F103C8T6 為主控圍繞實(shí)時(shí)檢測(cè)—輪播顯示—自動(dòng)聯(lián)動(dòng)—超標(biāo)警示展開具體功能如下功能模塊具體功能說明溫濕度檢測(cè)DHT11 實(shí)時(shí)采集室內(nèi)溫度與濕度甲醛檢測(cè)MQ-138 檢測(cè)室內(nèi)甲醛濃度并換算為 PPMCO2 檢測(cè)MQ-135 檢測(cè)室內(nèi)二氧化碳濃度并換算為 PPMOLED 輪播顯示128×64 OLED 每 5 秒自動(dòng)切換顯示頁面甲醛超標(biāo)換氣甲醛濃度超過閾值時(shí)自動(dòng)開啟風(fēng)扇換氣甲醛超標(biāo)警示甲醛超標(biāo)時(shí) LED 閃爍警示溫度超標(biāo)報(bào)警溫度超過閾值時(shí)蜂鳴器報(bào)警二、核心模塊選型2.1 主控芯片STM32F103C8T6對(duì)比項(xiàng)方案一STM32F103C8T6選擇方案方案二nRF52840內(nèi)核架構(gòu)ARM Cortex-M332 位ARM Cortex-M432 位主頻72MHz64MHz片上 ADC2 個(gè) 12 位 ADC最多 16 通道1 個(gè) 12 位 ADC8 通道無線功能無需外掛模塊內(nèi)置 BLE 5.0生態(tài)與資料國(guó)內(nèi)資料極多例程豐富資料相對(duì)較少以 BLE 應(yīng)用為主價(jià)格低偏高本系統(tǒng)為本地檢測(cè)聯(lián)動(dòng)型設(shè)計(jì)不依賴無線傳輸核心需求是多路 ADC 采樣與簡(jiǎn)單控制邏輯。STM32F103C8T6 的 2 個(gè) 12 位 ADC 恰好滿足 MQ-138、MQ-135 兩路模擬量采集生態(tài)成熟、價(jià)格低nRF52840 的內(nèi)置 BLE 在本系統(tǒng)中用不上屬于功能過剩。選擇方案一STM32F103C8T6。2.2 溫濕度傳感器DHT11對(duì)比項(xiàng)方案一DHT11選擇方案方案二BME280測(cè)量參數(shù)溫度、濕度溫度、濕度、氣壓測(cè)溫精度±2℃±0.5℃測(cè)濕精度±5%RH±3%RH接口方式單總線I2C/SPI價(jià)格約 3~5 元約 20 元以上室內(nèi)空氣質(zhì)量檢測(cè)中溫濕度是輔助參考參數(shù)用于判斷體感舒適度DHT11 的精度足夠BME280 多出的氣壓測(cè)量對(duì)本系統(tǒng)沒有意義。選擇方案一DHT11。2.3 甲醛傳感器MQ-138對(duì)比項(xiàng)方案一MQ-138選擇方案方案二ZE08-CH2O檢測(cè)原理SnO? 半導(dǎo)體氣敏濃度越高電阻越低電化學(xué)傳感器檢測(cè)對(duì)象甲醛及有機(jī)揮發(fā)氣體甲醛專用輸出信號(hào)模擬電壓ADC 直接讀取UART 數(shù)字輸出響應(yīng)時(shí)間快10s 量級(jí)較快壽命長(zhǎng)加熱型多年電化學(xué)池 1~2 年需更換價(jià)格約 10 元約 50 元以上MQ-138 對(duì)甲醛為主的揮發(fā)性有機(jī)氣體敏感輸出模擬電壓直接送 ADC 采樣接口簡(jiǎn)單、壽命長(zhǎng)、成本低ZE08-CH2O 電化學(xué)傳感器精度更高但需要占用串口資源且電極有壽命限制對(duì)以超限聯(lián)動(dòng)為目的的檢測(cè)系統(tǒng)而言性價(jià)比不足。選擇方案一MQ-138。2.4 CO2 傳感器MQ-135對(duì)比項(xiàng)方案一MQ-135選擇方案方案二MH-Z19檢測(cè)原理SnO? 半導(dǎo)體氣敏紅外 NDIR檢測(cè)對(duì)象CO2 及有害氣體CO2 專用輸出信號(hào)模擬電壓UART/PWM精度半導(dǎo)體式精度一般高±(50ppm3%)體積小巧較大價(jià)格約 10 元約 60 元以上室內(nèi) CO2 檢測(cè)主要用于判斷通風(fēng)狀況關(guān)注的是是否超標(biāo)而非精確計(jì)量MQ-135 模擬輸出直接進(jìn) ADC成本低、體積小MH-Z19 紅外傳感器精度高但體積和成本都翻了幾倍。選擇方案一MQ-135。2.5 顯示模塊OLED12864對(duì)比項(xiàng)方案一OLED12864選擇方案方案二LCD1602分辨率128×64 點(diǎn)陣16 字符×2 行顯示內(nèi)容可顯示漢字、數(shù)值、圖標(biāo)只能顯示字符每屏 32 字符接口I2C僅 2 根線并口占用 IO 多視角自發(fā)光各角度清晰視角窄需調(diào)對(duì)比度功耗低較高系統(tǒng)需要分頁輪播顯示溫濕度、甲醛、CO2 三類參數(shù)OLED12864 一屏即可容納完整頁面且支持漢字顯示LCD1602 每屏僅 32 個(gè)字符且不支持漢字輪播內(nèi)容受限。選擇方案一OLED12864。三、系統(tǒng)接線總表系統(tǒng)各模塊與 STM32F103C8T6 的接線分配如下MQ-138 使用 ADC1 通道、MQ-135 使用 ADC2 通道OLED 使用 I2C1互無沖突模塊/器件模塊引腳STM32 引腳說明DHT11 溫濕度DATAPA0單總線DATA 與 VCC 間接 4.7k~10kΩ 上拉電阻MQ-138 甲醛AOPA4ADC1 通道 4模擬電壓輸出MQ-135 CO2AOPA5ADC2 通道 2模擬電壓輸出OLED12864SCL / SDAPB6 / PB7I2C1地址 0x785 秒輪播頁面PE-3530 蜂鳴器I/OPB5NPN 三極管驅(qū)動(dòng)換氣風(fēng)扇繼電器INPB10甲醛超標(biāo)自動(dòng)開啟LED 警示燈APB0甲醛超標(biāo)閃爍串聯(lián)限流電阻電源——MQ 傳感器 5V 供電STM32 與 OLED 3.3VMQ 系列傳感器為加熱型器件須保證 5V 供電充足其模擬輸出電壓按 3.3V 參考電壓滿量程 4096 換算為 PPM 濃度值。風(fēng)扇繼電器采用 5V 供電模塊由 STM32 的 3.3V IO 驅(qū)動(dòng)控制端。四、系統(tǒng)軟件設(shè)計(jì)4.1 主程序流程系統(tǒng)上電后依次完成時(shí)鐘初始化8MHz 外部晶振倍頻至 72MHz、GPIO、ADC1/ADC2、I2C、定時(shí)器初始化OLED 上電自檢并顯示開機(jī)頁面隨后進(jìn)入主循環(huán)。主循環(huán)中周期性執(zhí)行讀取 DHT11 溫濕度 → 依次采樣 MQ-138 與 MQ-135 模擬量并換算甲醛、CO2 濃度 → 執(zhí)行聯(lián)動(dòng)判斷甲醛超標(biāo)開風(fēng)扇LED 閃爍、溫度超標(biāo)蜂鳴報(bào)警→ 按輪播計(jì)時(shí)時(shí)鐘刷新 OLED 當(dāng)前頁面。主程序骨架如下int main(void) { SysClock_Config(); /* 72MHz 系統(tǒng)時(shí)鐘 */ GPIO_Config(); ADC1_Config(); /* MQ-138 采樣通道 */ ADC2_Config(); /* MQ-135 采樣通道 */ I2C_Config(); /* OLED I2C1 */ Timer_Config(); /* 采集與輪播定時(shí) */ OLED_Init(); OLED_Show_Boot(); /* 開機(jī)自檢頁面 */ LED_OFF(); FAN_OFF(); BEEP_OFF(); while (1) { DHT11_Read(temp, humi); /* 溫濕度 */ ch2o MQ138_Read_PPM(); /* 甲醛 PPM */ co2 MQ135_Read_PPM(); /* CO2 PPM */ /* --- 聯(lián)動(dòng)控制 --- */ if (ch2o CH2O_TH) { FAN_ON(); /* 自動(dòng)換氣 */ LED_Blink(); /* 閃爍警示 */ } else { FAN_OFF(); LED_OFF(); } if (temp TEMP_TH) BEEP_ON(); /* 溫度報(bào)警 */ else BEEP_OFF(); OLED_Page_Show(temp, humi, ch2o, co2); /* 5s 輪播 */ Delay_ms(1000); /* 1s 周期 */ } }4.2 溫濕度采集子程序DHT11 采用單總線時(shí)序主機(jī)將數(shù)據(jù)線拉低至少 18ms 發(fā)起起始信號(hào)后釋放總線DHT11 回應(yīng) 80μs 低電平 80μs 高電平隨后連續(xù)發(fā)送 40 位數(shù)據(jù)濕度整數(shù)/小數(shù)、溫度整數(shù)/小數(shù)、校驗(yàn)和各 1 字節(jié)。每一位以 50μs 低電平起始其后高電平持續(xù) 26~28μs 表示0、70μs 表示1程序用定時(shí)器測(cè)量高電平寬度完成位判別最后按前四字節(jié)之和低 8 位等于校驗(yàn)字節(jié)校驗(yàn)失敗則丟棄本輪數(shù)據(jù)。4.3 氣體濃度采集子程序MQ-138 與 MQ-135 均為 SnO? 半導(dǎo)體氣敏傳感器潔凈空氣中傳感器電導(dǎo)率最低目標(biāo)氣體濃度越高電導(dǎo)率越大模塊將分壓后的模擬電壓從 AO 引腳輸出。程序分別觸發(fā) ADC1、ADC2 對(duì)兩路電壓采樣多次采樣均值濾波后先按 3.3V 參考電壓換算為電壓值再代入傳感器靈敏度特性曲線換算為 PPM 濃度。MQ 傳感器上電后需要預(yù)熱一段時(shí)間使加熱體穩(wěn)定程序在開機(jī)頁面停留期間完成預(yù)熱避免預(yù)熱期讀數(shù)偏低誤判。換算示意如下uint16_t Get_Gas_PPM(uint8_t ch) { uint32_t sum 0; uint8_t i; float volt, ratio; for (i 0; i 10; i) { /* 多次采樣 */ sum Get_Adc(ch); Delay_ms(2); } volt (sum / 10) * 3.3f / 4096; /* 電壓換算 */ ratio volt / (3.3f - volt); /* 分壓比 */ /* 按傳感器特性曲線將 ratio 換算為 PPM */ return PPM_Convert(ratio); }4.4 顯示子程序OLED 采用 SSD1306 驅(qū)動(dòng)通過 I2C 向 0x78 地址寫顯存。系統(tǒng)將顯示內(nèi)容分為多個(gè)頁面頁面一顯示溫濕度頁面二顯示甲醛濃度與超標(biāo)狀態(tài)頁面三顯示 CO2 濃度與超標(biāo)狀態(tài)。程序用定時(shí)計(jì)數(shù)實(shí)現(xiàn)每 5 秒自動(dòng)切換當(dāng)前頁面每輪數(shù)據(jù)更新后僅刷新當(dāng)前頁切換時(shí)整頁重繪避免閃爍。4.5 報(bào)警聯(lián)動(dòng)子程序聯(lián)動(dòng)邏輯在每輪采集后執(zhí)行甲醛濃度超過閾值時(shí)風(fēng)扇繼電器置開持續(xù)換氣同時(shí) LED 按 500ms 周期翻轉(zhuǎn)形成閃爍警示濃度回落后自動(dòng)關(guān)閉溫度超過閾值時(shí)蜂鳴器鳴響溫度回落后自動(dòng)解除。閾值為軟件常量可按房間用途調(diào)整。五、系統(tǒng)實(shí)現(xiàn)與測(cè)試5.1 硬件調(diào)試硬件調(diào)試重點(diǎn)確認(rèn) DHT11 數(shù)據(jù)線上拉電阻可靠確認(rèn) MQ-138、MQ-135 兩路模塊的 AO 輸出分別接到 ADC1、ADC2 對(duì)應(yīng)引腳且共地良好——不共地會(huì)導(dǎo)致采樣值漂移繼電器與 LED 的驅(qū)動(dòng)極性確認(rèn)。電源實(shí)測(cè) 5V 與 3.3V 均穩(wěn)定。調(diào)試結(jié)果如下測(cè)試項(xiàng)測(cè)試方法結(jié)果3.3V/5V 電源萬用表實(shí)測(cè)電壓穩(wěn)定符合要求DHT11 通信示波器看單總線時(shí)序波形符合手冊(cè)時(shí)序MQ 傳感器預(yù)熱上電觀察 AO 電壓預(yù)熱后基線電壓穩(wěn)定繼電器/LED手動(dòng)拉高控制腳風(fēng)扇繼電器、LED 動(dòng)作正常5.2 軟件調(diào)試軟件采用 Keil MDK 開發(fā)先分別調(diào)通 OLED 驅(qū)動(dòng)、DHT11 時(shí)序、雙 ADC 采樣再疊加輪播顯示與報(bào)警聯(lián)動(dòng)邏輯。通過串口打印中間變量核對(duì) PPM 換算最終各模塊運(yùn)行穩(wěn)定。測(cè)試項(xiàng)測(cè)試方法結(jié)果OLED 輪播觀察頁面切換每 5 秒正常切換無花屏 ?DHT11 讀取串口打印原始字節(jié)校驗(yàn)和全部通過 ?雙 ADC 采樣打印兩路電壓值兩通道讀數(shù)獨(dú)立、互不干擾 ?5.3 數(shù)據(jù)采集功能測(cè)試將設(shè)備置于正常室內(nèi)環(huán)境驗(yàn)證基線采集再用微量揮發(fā)物靠近 MQ-138 傳感面模擬甲醛濃度升高向室內(nèi)呼氣模擬 CO2 升高對(duì)比檢測(cè)值變化測(cè)試項(xiàng)測(cè)試方法實(shí)測(cè)結(jié)果溫濕度采集與標(biāo)準(zhǔn)溫濕度計(jì)對(duì)比誤差在傳感器標(biāo)稱精度內(nèi) ?甲醛基線正常室內(nèi)放置濃度值處于正常區(qū)間 ?甲醛響應(yīng)靠近微量揮發(fā)源濃度讀數(shù)明顯上升移開后回落 ?CO2 響應(yīng)傳感器附近呼氣濃度讀數(shù)上升通風(fēng)后回落 ?OLED 顯示全程觀察數(shù)值與狀態(tài)同步刷新正確 ?5.4 報(bào)警聯(lián)動(dòng)功能測(cè)試測(cè)試場(chǎng)景觸發(fā)條件預(yù)期動(dòng)作實(shí)測(cè)結(jié)果甲醛超標(biāo)換氣甲醛濃度超過閾值風(fēng)扇開啟換氣繼電器吸合風(fēng)扇啟動(dòng) ?甲醛超標(biāo)警示甲醛濃度超過閾值LED 閃爍LED 按 500ms 周期閃爍 ?甲醛回落恢復(fù)濃度回到閾值以下風(fēng)扇停、LED 滅自動(dòng)關(guān)閉無需人工干預(yù) ?溫度超標(biāo)報(bào)警溫度超過閾值蜂鳴器報(bào)警報(bào)警及時(shí)溫度回落后解除 ?正常狀態(tài)各參數(shù)均在閾值內(nèi)無動(dòng)作風(fēng)扇/LED/蜂鳴器均靜止 ?六、總結(jié)本文完成了基于單片機(jī)的室內(nèi)空氣質(zhì)量檢測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。系統(tǒng)以 STM32F103C8T6 為主控DHT11 采集溫濕度MQ-138、MQ-135 分別檢測(cè)甲醛與二氧化碳濃度OLED12864 每 5 秒輪播顯示各參數(shù)甲醛超標(biāo)時(shí)自動(dòng)開啟風(fēng)扇換氣并驅(qū)動(dòng) LED 閃爍警示溫度超標(biāo)時(shí)蜂鳴器報(bào)警。測(cè)試結(jié)果表明系統(tǒng)數(shù)據(jù)采集準(zhǔn)確、頁面輪播流暢、超標(biāo)聯(lián)動(dòng)可靠實(shí)現(xiàn)了室內(nèi)空氣質(zhì)量的實(shí)時(shí)檢測(cè)與自動(dòng)換氣警示適合新房入住檢測(cè)、辦公室與教室等場(chǎng)所的空氣質(zhì)量監(jiān)測(cè)場(chǎng)景也可作為多路氣體檢測(cè)類項(xiàng)目的參考設(shè)計(jì)。七、資料內(nèi)容完整工程資料原理圖、PCB、代碼、元件清單八、資料獲取方式