ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于单片机的室内空气质量检测系统设计与实现(甲醛+CO2+温湿度检测+自动换气警示)

基于单片机的室内空气质量检测系统设计与实现(甲醛+CO2+温湿度检测+自动换气警示) 基于单片机的室内空气质量检测系统设计与实现甲醛CO2温湿度检测自动换气警示一、系统功能总览二、核心模块选型2.1 主控芯片STM32F103C8T62.2 温湿度传感器DHT112.3 甲醛传感器MQ-1382.4 CO2 传感器MQ-1352.5 显示模块OLED12864三、系统接线总表四、系统软件设计4.1 主程序流程4.2 温湿度采集子程序4.3 气体浓度采集子程序4.4 显示子程序4.5 报警联动子程序五、系统实现与测试5.1 硬件调试5.2 软件调试5.3 数据采集功能测试5.4 报警联动功能测试六、总结基于单片机的室内空气质量检测系统设计与实现甲醛CO2温湿度检测自动换气警示装修后的新房、密闭的办公室、人员密集的教室室内空气质量直接影响身体健康甲醛是装修污染的头号隐患二氧化碳浓度过高会让人昏沉乏力温湿度不适也会降低体感舒适度。市面上不少空气质量检测仪只能测、不能管测出超标也只给出一个数字换气通风仍要靠人自觉。本文设计了一套基于 STM32 的室内空气质量检测系统由 DHT11 采集温湿度、MQ-138 检测甲醛浓度、MQ-135 检测二氧化碳浓度OLED 分页轮播显示各参数甲醛超标时自动开启风扇换气并驱动 LED 闪烁警示温度超标时蜂鸣器报警实现室内空气质量的实时检测、自动换气与超标警示。一、系统功能总览系统以 STM32F103C8T6 为主控围绕实时检测—轮播显示—自动联动—超标警示展开具体功能如下功能模块具体功能说明温湿度检测DHT11 实时采集室内温度与湿度甲醛检测MQ-138 检测室内甲醛浓度并换算为 PPMCO2 检测MQ-135 检测室内二氧化碳浓度并换算为 PPMOLED 轮播显示128×64 OLED 每 5 秒自动切换显示页面甲醛超标换气甲醛浓度超过阈值时自动开启风扇换气甲醛超标警示甲醛超标时 LED 闪烁警示温度超标报警温度超过阈值时蜂鸣器报警二、核心模块选型2.1 主控芯片STM32F103C8T6对比项方案一STM32F103C8T6选择方案方案二nRF52840内核架构ARM Cortex-M332 位ARM Cortex-M432 位主频72MHz64MHz片上 ADC2 个 12 位 ADC最多 16 通道1 个 12 位 ADC8 通道无线功能无需外挂模块内置 BLE 5.0生态与资料国内资料极多例程丰富资料相对较少以 BLE 应用为主价格低偏高本系统为本地检测联动型设计不依赖无线传输核心需求是多路 ADC 采样与简单控制逻辑。STM32F103C8T6 的 2 个 12 位 ADC 恰好满足 MQ-138、MQ-135 两路模拟量采集生态成熟、价格低nRF52840 的内置 BLE 在本系统中用不上属于功能过剩。选择方案一STM32F103C8T6。2.2 温湿度传感器DHT11对比项方案一DHT11选择方案方案二BME280测量参数温度、湿度温度、湿度、气压测温精度±2℃±0.5℃测湿精度±5%RH±3%RH接口方式单总线I2C/SPI价格约 3~5 元约 20 元以上室内空气质量检测中温湿度是辅助参考参数用于判断体感舒适度DHT11 的精度足够BME280 多出的气压测量对本系统没有意义。选择方案一DHT11。2.3 甲醛传感器MQ-138对比项方案一MQ-138选择方案方案二ZE08-CH2O检测原理SnO₂ 半导体气敏浓度越高电阻越低电化学传感器检测对象甲醛及有机挥发气体甲醛专用输出信号模拟电压ADC 直接读取UART 数字输出响应时间快10s 量级较快寿命长加热型多年电化学池 1~2 年需更换价格约 10 元约 50 元以上MQ-138 对甲醛为主的挥发性有机气体敏感输出模拟电压直接送 ADC 采样接口简单、寿命长、成本低ZE08-CH2O 电化学传感器精度更高但需要占用串口资源且电极有寿命限制对以超限联动为目的的检测系统而言性价比不足。选择方案一MQ-138。2.4 CO2 传感器MQ-135对比项方案一MQ-135选择方案方案二MH-Z19检测原理SnO₂ 半导体气敏红外 NDIR检测对象CO2 及有害气体CO2 专用输出信号模拟电压UART/PWM精度半导体式精度一般高±(50ppm3%)体积小巧较大价格约 10 元约 60 元以上室内 CO2 检测主要用于判断通风状况关注的是是否超标而非精确计量MQ-135 模拟输出直接进 ADC成本低、体积小MH-Z19 红外传感器精度高但体积和成本都翻了几倍。选择方案一MQ-135。2.5 显示模块OLED12864对比项方案一OLED12864选择方案方案二LCD1602分辨率128×64 点阵16 字符×2 行显示内容可显示汉字、数值、图标只能显示字符每屏 32 字符接口I2C仅 2 根线并口占用 IO 多视角自发光各角度清晰视角窄需调对比度功耗低较高系统需要分页轮播显示温湿度、甲醛、CO2 三类参数OLED12864 一屏即可容纳完整页面且支持汉字显示LCD1602 每屏仅 32 个字符且不支持汉字轮播内容受限。选择方案一OLED12864。三、系统接线总表系统各模块与 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 三极管驱动换气风扇继电器INPB10甲醛超标自动开启LED 警示灯APB0甲醛超标闪烁串联限流电阻电源——MQ 传感器 5V 供电STM32 与 OLED 3.3VMQ 系列传感器为加热型器件须保证 5V 供电充足其模拟输出电压按 3.3V 参考电压满量程 4096 换算为 PPM 浓度值。风扇继电器采用 5V 供电模块由 STM32 的 3.3V IO 驱动控制端。四、系统软件设计4.1 主程序流程系统上电后依次完成时钟初始化8MHz 外部晶振倍频至 72MHz、GPIO、ADC1/ADC2、I2C、定时器初始化OLED 上电自检并显示开机页面随后进入主循环。主循环中周期性执行读取 DHT11 温湿度 → 依次采样 MQ-138 与 MQ-135 模拟量并换算甲醛、CO2 浓度 → 执行联动判断甲醛超标开风扇LED 闪烁、温度超标蜂鸣报警→ 按轮播计时时钟刷新 OLED 当前页面。主程序骨架如下int main(void) { SysClock_Config(); /* 72MHz 系统时钟 */ GPIO_Config(); ADC1_Config(); /* MQ-138 采样通道 */ ADC2_Config(); /* MQ-135 采样通道 */ I2C_Config(); /* OLED I2C1 */ Timer_Config(); /* 采集与轮播定时 */ OLED_Init(); OLED_Show_Boot(); /* 开机自检页面 */ LED_OFF(); FAN_OFF(); BEEP_OFF(); while (1) { DHT11_Read(temp, humi); /* 温湿度 */ ch2o MQ138_Read_PPM(); /* 甲醛 PPM */ co2 MQ135_Read_PPM(); /* CO2 PPM */ /* --- 联动控制 --- */ if (ch2o CH2O_TH) { FAN_ON(); /* 自动换气 */ LED_Blink(); /* 闪烁警示 */ } else { FAN_OFF(); LED_OFF(); } if (temp TEMP_TH) BEEP_ON(); /* 温度报警 */ else BEEP_OFF(); OLED_Page_Show(temp, humi, ch2o, co2); /* 5s 轮播 */ Delay_ms(1000); /* 1s 周期 */ } }4.2 温湿度采集子程序DHT11 采用单总线时序主机将数据线拉低至少 18ms 发起起始信号后释放总线DHT11 回应 80µs 低电平 80µs 高电平随后连续发送 40 位数据湿度整数/小数、温度整数/小数、校验和各 1 字节。每一位以 50µs 低电平起始其后高电平持续 26~28µs 表示0、70µs 表示1程序用定时器测量高电平宽度完成位判别最后按前四字节之和低 8 位等于校验字节校验失败则丢弃本轮数据。4.3 气体浓度采集子程序MQ-138 与 MQ-135 均为 SnO₂ 半导体气敏传感器洁净空气中传感器电导率最低目标气体浓度越高电导率越大模块将分压后的模拟电压从 AO 引脚输出。程序分别触发 ADC1、ADC2 对两路电压采样多次采样均值滤波后先按 3.3V 参考电压换算为电压值再代入传感器灵敏度特性曲线换算为 PPM 浓度。MQ 传感器上电后需要预热一段时间使加热体稳定程序在开机页面停留期间完成预热避免预热期读数偏低误判。换算示意如下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 驱动通过 I2C 向 0x78 地址写显存。系统将显示内容分为多个页面页面一显示温湿度页面二显示甲醛浓度与超标状态页面三显示 CO2 浓度与超标状态。程序用定时计数实现每 5 秒自动切换当前页面每轮数据更新后仅刷新当前页切换时整页重绘避免闪烁。4.5 报警联动子程序联动逻辑在每轮采集后执行甲醛浓度超过阈值时风扇继电器置开持续换气同时 LED 按 500ms 周期翻转形成闪烁警示浓度回落后自动关闭温度超过阈值时蜂鸣器鸣响温度回落后自动解除。阈值为软件常量可按房间用途调整。五、系统实现与测试5.1 硬件调试硬件调试重点确认 DHT11 数据线上拉电阻可靠确认 MQ-138、MQ-135 两路模块的 AO 输出分别接到 ADC1、ADC2 对应引脚且共地良好——不共地会导致采样值漂移继电器与 LED 的驱动极性确认。电源实测 5V 与 3.3V 均稳定。调试结果如下测试项测试方法结果3.3V/5V 电源万用表实测电压稳定符合要求DHT11 通信示波器看单总线时序波形符合手册时序MQ 传感器预热上电观察 AO 电压预热后基线电压稳定继电器/LED手动拉高控制脚风扇继电器、LED 动作正常5.2 软件调试软件采用 Keil MDK 开发先分别调通 OLED 驱动、DHT11 时序、双 ADC 采样再叠加轮播显示与报警联动逻辑。通过串口打印中间变量核对 PPM 换算最终各模块运行稳定。测试项测试方法结果OLED 轮播观察页面切换每 5 秒正常切换无花屏 ✔DHT11 读取串口打印原始字节校验和全部通过 ✔双 ADC 采样打印两路电压值两通道读数独立、互不干扰 ✔5.3 数据采集功能测试将设备置于正常室内环境验证基线采集再用微量挥发物靠近 MQ-138 传感面模拟甲醛浓度升高向室内呼气模拟 CO2 升高对比检测值变化测试项测试方法实测结果温湿度采集与标准温湿度计对比误差在传感器标称精度内 ✔甲醛基线正常室内放置浓度值处于正常区间 ✔甲醛响应靠近微量挥发源浓度读数明显上升移开后回落 ✔CO2 响应传感器附近呼气浓度读数上升通风后回落 ✔OLED 显示全程观察数值与状态同步刷新正确 ✔5.4 报警联动功能测试测试场景触发条件预期动作实测结果甲醛超标换气甲醛浓度超过阈值风扇开启换气继电器吸合风扇启动 ✔甲醛超标警示甲醛浓度超过阈值LED 闪烁LED 按 500ms 周期闪烁 ✔甲醛回落恢复浓度回到阈值以下风扇停、LED 灭自动关闭无需人工干预 ✔温度超标报警温度超过阈值蜂鸣器报警报警及时温度回落后解除 ✔正常状态各参数均在阈值内无动作风扇/LED/蜂鸣器均静止 ✔六、总结本文完成了基于单片机的室内空气质量检测系统的设计与实现。系统以 STM32F103C8T6 为主控DHT11 采集温湿度MQ-138、MQ-135 分别检测甲醛与二氧化碳浓度OLED12864 每 5 秒轮播显示各参数甲醛超标时自动开启风扇换气并驱动 LED 闪烁警示温度超标时蜂鸣器报警。测试结果表明系统数据采集准确、页面轮播流畅、超标联动可靠实现了室内空气质量的实时检测与自动换气警示适合新房入住检测、办公室与教室等场所的空气质量监测场景也可作为多路气体检测类项目的参考设计。七、资料内容完整工程资料原理图、PCB、代码、元件清单八、资料获取方式
返回列表