在室内空气质量监测项目里有一个被反复验证、但又很难被直观感受到的结论厨房燃气灶在烹饪时产生的空气污染可能比你想象的严重得多。2025 年前后关于“从燃气灶切换到电炉/电磁炉能显著降低室内空气污染”的讨论热度明显上升不少实测研究用真实数据说明电炉并不只是“更安全”“更干净”的加热工具它还能从源头上减少氮氧化物、一氧化碳和细颗粒物的释放。这篇文章不打算只停留在概念科普层面而是从环境监测与物联网开发的角度整理一套完整、可复现的厨房空气污染对比方案。我们会选好传感器用 ESP32 采集 PM2.5 等关键指标再通过 Python 绘制燃气灶与电炉两种烹饪场景的对比曲线把“切换电炉能否显著降低污染”这个问题变成你手里的一张数据图表。无论你是智能家居开发者、物联网学习者还是正在纠结厨房改造方案这篇文章都能给你一个把结论落地的动手路径。1. 为什么关注厨房室内空气污染1.1 室内空气污染不只是“雾霾”和“甲醛”很多人在装修或购买空气净化设备时最关心的是 PM2.5、甲醛、TVOC 这几类指标。甲醛主要来自板材和胶黏剂PM2.5 会被联想到室外雾霾室内 TVOC 则往往和涂料、清洁剂相关。但厨房里还有一个很容易被忽略的污染源就是燃气灶本身的燃烧过程。燃气灶在燃烧天然气或液化石油气时并不是所有人想象中的“完全燃烧”。燃烧温度、氧气供应、锅具位置、火苗大小都会影响燃烧效率。高温下空气中的氮气和氧气会反应生成氮氧化物比如一氧化氮和二氧化氮燃烧不充分时还会产生一氧化碳同时伴随超细颗粒物的生成。这些物质都直接进入厨房空气再扩散到整个居住空间。换句话说即使你在客厅开着空气净化器只要厨房燃气灶在工作污染物仍然可能通过空气流动进入客厅。这也解释了为什么一些家庭明明没有装修污染但室内 NO2 浓度却会在某个时段异常升高。1.2 燃气灶是容易被忽略的室内污染源根据很多公开研究报道在通风条件一般的厨房里使用燃气灶烹饪 20 到 30 分钟厨房内的 NO2 浓度可能明显上升峰值甚至超过室外空气质量标准中对应的健康参考值。PM2.5 同样会升高因为油烟颗粒和燃烧产物会同时存在。这里需要把两类颗粒物区分开燃烧产生的颗粒物来自燃气不完全燃烧主要成分为碳颗粒和金属颗粒粒径较小。烹饪油烟颗粒物来自油脂和食材在高温下的挥发与裂解粒径分布更宽可以通过抽油烟机部分排出。抽油烟机可以显著降低油烟颗粒但无法完全消除燃气燃烧产生的气态污染物。如果抽油烟机的排风量不足或者厨房窗户紧闭污染物就会在室内积累。对于经常做饭的家庭来说这种影响是持续、反复的每天一两个小时长年累月下来不能忽视。1.3 电炉/电磁炉切换为什么成为研究热点电炉和电磁炉的工作方式完全不同。传统电炉通过电阻丝发热电磁炉通过电磁感应让锅具自身发热但都没有明火燃烧过程。这意味着电炉在加热时不会产生氮氧化物、一氧化碳等燃烧副产物。电炉烹饪期间产生的颗粒物主要来自食材和油脂本身而不是燃料燃烧。因此从源头上看电炉确实可以规避一类额外的空气污染。2025 年前后的多项实测研究也正是围绕这一点展开在控制菜品种类、锅具、通风条件一致的情况下对比燃气灶和电炉烹饪期间的空气质量数据结论普遍指向电炉能显著降低部分污染物浓度。当然电炉也并非完全没有缺点比如加热方式对锅具要求更高、加热速度可能更慢、热惯性不同。但从空气质量的维度看它确实是一个值得认真考虑的替代方案。2. 2025 年研究结论从燃气灶到电炉2.1 研究关注的核心污染物在燃气灶与电炉的对比研究中最受关注的几个指标是PM2.5细颗粒物能进入肺泡是衡量空气污染最常用的指标之一。NO2氮氧化物中的代表物质燃气高温燃烧时最容易产生长期暴露对呼吸系统有影响。CO一氧化碳来自不完全燃烧浓度过高时会让人头晕、乏力。超细颗粒物粒径在 100 纳米以下数量浓度高对健康的潜在影响近年来越来越被重视。这些污染物中PM2.5 最容易用低成本传感器测量NO2 则需要更专业的电化学传感器CO 和超细颗粒物也有对应设备但成本差异很大。对于绝大多数个人开发者来说先从 PM2.5 和 VOC 入手是最现实、最容易上手的路径。2.2 减污效果的常见量级“显著降低”到底意味着多少不同研究的数值并不完全一致因为厨房面积、燃气种类、锅具、菜品、通风方式都会影响结果。但大致规律可以归纳为燃气灶烹饪时PM2.5 浓度会随着煎、炒、炸等操作快速上升峰值往往达到背景浓度的数倍甚至更高。电炉烹饪时由于没有燃烧产物PM2.5 上升幅度通常更小峰值和平均值都更低。在燃气灶场景中即使开着抽油烟机燃烧产生的气态污染物仍然可能残留电炉场景中此类问题基本消失。这里要提醒一下电炉也不能完全保证 PM2.5 不升高因为食材加热依然会产生油烟。如果你用电磁炉大火爆炒照样会有油烟所以不能把“切换到电炉”等同于“厨房零污染”。2.3 影响减污效果的现实因素即使电炉在原理上可以减少燃烧污染实际效果仍然受很多因素影响通风条件窗户开度越大室内外空气交换越强污染物浓度下降越快。抽油烟机性能抽油烟机的风量、风压、是否及时开启直接影响颗粒物和气味。烹饪方式煎炸炒产生的油烟远大于煮、蒸、炖。锅具材质锅具的导热性和加热均匀度会影响油温控制油温过高时油烟更明显。传感器布点传感器距离炉灶越近读数波动越大距离越远越能反映整个厨房的平均状态。因此如果你要做一场测量对比不能只记录一两天数据就下结论。你需要把变量控制住用同一套设备、同一位置、相近的菜品和时间才能得到相对可信的结论。3. 可复现的监测方案整体架构3.1 方案目标和测量指标本文的实战目标不是写一篇论文而是搭建一套能长期运行的厨房空气质量监测系统。核心目标有两个记录燃气灶和电炉两种场景下的 PM2.5 变化曲线。通过数据对比确认切换电炉后 PM2.5 等指标是否明显下降。为了降低硬件门槛我们优先选择 PM2.5 作为主测量指标因为PM2.5 传感器成本相对低技术成熟。PM2.5 是燃气燃烧和烹饪油烟都会产生的指标对比价值高。传感器的数据接口和代码资源丰富适合二次开发。如果你手头有 VOC 传感器也可以同时采集 VOC 指数作为气态污染物的参考。NO2 因为传感器成本较高本文不展开但会在选型表格里标注可选方案。3.2 硬件选型常见的室内空气质量传感器如下传感器测量对象接口典型用途参考成本Sensirion SPS30PM1.0/PM2.5/PM4.2/PM10I2C/UART颗粒物监测精度较高中Sensirion SGP40VOC IndexI2C异味、挥发性有机物趋势低SenseAir S8CO2UART/I2C通风质量与人群密度中Sensirion SCD40CO2 温湿度I2C室内空气质量综合监测中Alphasense NO2-B43FNO2模拟量氮氧化物测量高Figaro TGS 系列CO/NO2/VOC模拟量气体定性参考低考虑到性价比和代码可复现性本文以 SPS30 为核心传感器以 ESP32 为主控。SPS30 能直接输出 PM2.5、PM10 等质量浓度精度在同级别传感器中表现较稳很适合做室内空气监测。3.3 系统连接与布点硬件连接非常简单ESP32 的 SDA 接 SPS30 的 SDA。ESP32 的 SCL 接 SPS30 的 SCL。ESP32 的 3.3V 接 SPS30 的 VDD。ESP32 的 GND 接 SPS30 的 GND。传感器布点时建议放在厨房操作台边缘距离炉灶 1 到 1.5 米高度和成年人呼吸区域接近。传感器不要直接对着抽油烟机出风口也不要放在窗户正下方否则读数的代表性会变差。4. 环境准备与开发板配置4.1 开发环境本文的软件部分使用 Arduino IDE 或 PlatformIO 均可核心逻辑完全一致。我以 Arduino IDE 为例你需要提前安装好ESP32 开发板支持包在 Arduino IDE 的“开发板管理器”中搜索esp32安装。SensirionI2cSps30库可以在库管理器中搜索安装。Wire库Arduino 自带不需要额外安装。版本需要根据你的实际开发环境调整本文重点演示配置思路和代码逻辑。4.2 创建项目结构为了方便后续维护建议将项目组织成下面这样esp32_air_monitor/ ├── esp32_air_monitor.ino ├── data_analysis/ │ ├── read_serial.py │ └── compare.py └── docs/ └── measurement_notes.md其中.ino文件是 ESP32 端采集程序data_analysis目录放 Python 数据分析脚本docs目录用来记录实验笔记。4.3 安装依赖库在 Arduino IDE 中点击“项目”→“加载库”→“管理库”搜索SensirionI2cSps30并安装。这个库是 Sensirion 官方提供支持 SPS30 通过 I2C 接口读取颗粒物数据。如果你的开发板不是 ESP32而是 ESP8266 或 Arduino Uno代码也能复用但需要注意引脚定义和电压差异。SPS30 推荐使用 3.3V 供电Arduino Uno 的 5V 引脚不能直接接 VDD。5. ESP32 采集代码实现5.1 初始化 SPS30 颗粒物传感器下面是一份完整的 ESP32 代码功能包括初始化 I2C 和 SPS30。每 5 秒读取一次 PM2.5 和 PM10。通过串口输出 CSV 格式数据方便后续保存。代码文件路径esp32_air_monitor/esp32_air_monitor.ino#include Wire.h #include SensirionI2cSps30.h SensirionI2cSps30 sps30; void printErrorMessage(const char* message, int16_t error) { Serial.print(message); Serial.print( error: 0x); Serial.println(error, HEX); } void setup() { Serial.begin(115200); while (!Serial) { delay(100); } Wire.begin(); sps30.begin(Wire); uint8_t serialNumber[32]; uint8_t serialNumberSize 32; int16_t error sps30.getSerialNumber(serialNumber, serialNumberSize); if (error) { printErrorMessage(getSerialNumber, error); } else { Serial.print(SPS30 serial: ); Serial.println((char*)serialNumber); } error sps30.startMeasurement(); if (error) { printErrorMessage(startMeasurement, error); } Serial.println(timestamp_ms,pm2p5,pm10); } void loop() { delay(5000); int16_t error sps30.readMeasurement(); if (error) { printErrorMessage(readMeasurement, error); return; } unsigned long nowMs millis(); Serial.print(nowMs); Serial.print(,); Serial.print(sps30.massConcentrationPm2p5, 1); Serial.print(,); Serial.println(sps30.massConcentrationPm10, 1); }这里说明几个关键点sps30.begin(Wire)之前必须先调用Wire.begin()否则 I2C 总线没有初始化。getSerialNumber用来检查传感器是否正常通信如果打印错误码多半是接线问题。startMeasurement在 setup 中调用一次即可之后反复readMeasurement()读取数据。massConcentrationPm2p5和massConcentrationPm10是传感器输出的质量浓度单位是微克每立方米。5.2 定时采集并输出 CSV上面的代码已经实现了定时输出。你可能会注意到loop()中的delay(5000)表示每 5 秒读一次。这个采样频率对于烹饪过程对比是足够的烹饪过程通常持续 10 到 30 分钟每 5 秒一个点可以画出平滑曲线。如果你想提高时间精度可以把millis()改成时间戳。这里为了简化直接用 ESP32 上电后的毫秒数。只要保证燃气灶和电炉两次实验都从同一台设备、同一个启动时刻开始记录相对时间就可以对比。5.3 用串口工具保存数据把代码上传到 ESP32 后打开串口监视器波特率设置为 115200你会看到数据流。但串口监视器直接复制不方便更稳妥的方式是用 Python 的 pyserial 脚本来保存数据。脚本文件路径esp32_air_monitor/data_analysis/read_serial.pyimport serial import csv port COM3 # Windows 示例Linux/macOS 通常是 /dev/ttyUSB0 baud 115200 output_file gas_cooking.csv with serial.Serial(port, baud, timeout1) as ser: with open(output_file, w, newline, encodingutf-8) as f: writer csv.writer(f) writer.writerow([timestamp_ms, pm2p5, pm10]) print(开始记录按 CtrlC 停止) try: while True: line ser.readline().decode(utf-8, errorsignore).strip() if line and not line.startswith(SPS30): parts line.split(,) if len(parts) 3: writer.writerow(parts) print(line, flushTrue) except KeyboardInterrupt: print(记录结束数据已保存到, output_file)运行方式pip install pyserial python read_serial.py记录燃气灶实验时文件名改为gas_cooking.csv记录电炉实验时把输出文件名改成electric_cooking.csv不要混用。6. 实验设计与数据采集流程6.1 控制变量保证对比有效如果想得出“电炉显著降低污染”的结论实验必须尽量控制变量。建议按下面的条件操作使用同一个锅具避免锅具材质和大小影响加热和油烟。烹饪同样的菜品例如都炒一盘青菜或者都煎一块鸡胸肉。烹饪时间尽量一致比如从开火到出锅都控制在 15 分钟。抽油烟机开关状态一致要么全程开启要么全程关闭不要中途切换。传感器位置不变整个实验过程中不要移动设备。厨房门窗状态保持一致记录实验当天的天气和室外空气质量作为备注。这些条件并不复杂但没有控制变量时数据很容易被“油烟差异”和“通风差异”干扰最终得不到明确结论。6.2 燃气灶场景步骤开启传感器确认串口输出正常。记录 5 分钟背景数据此时不点火、不炒菜。启动燃气灶按平时的习惯完成烹饪。烹饪结束后继续关闭燃气灶再记录 5 分钟残留数据。停止记录保存为gas_cooking.csv。背景数据很重要它可以帮助你判断污染是本底水平还是烹饪造成的。如果背景 PM2.5 本身就很高比如室外雾霾严重那么烹饪期间的增量可能被掩盖。6.3 电炉场景步骤在燃气灶实验结束之后建议开窗通风 20 到 30 分钟让厨房空气质量回到背景水平再进行电炉实验。电炉场景的操作步骤和燃气灶完全一致开启传感器记录 5 分钟背景数据。启动电炉或电磁炉完成相同菜品烹饪。烹饪结束后再记录 5 分钟残留数据。停止记录保存为electric_cooking.csv。需要特别注意的是两次实验之间如果不充分通风前一次实验残留的污染物会影响下一次实验的初始条件。6.4 数据记录时间表一份清晰的时间表能大幅度减少后期分析时“数据对不上”的问题。建议记录以下内容字段示例实验编号01日期2025-05-10室内温度/湿度24℃ / 55%室外空气质量良烹饪方式清炒时蔬锅具28cm 不锈钢炒锅抽油烟机关闭窗口状态关闭燃气灶/电炉燃气灶开始时间12:00结束时间12:20备注无每次实验都新建一行最终放在measurement_notes.md里。这样即使隔了一周再分析数据你仍然能还原实验现场条件。7. Python 数据对比与分析7.1 数据预处理采集完成后你手头会有两个文件gas_cooking.csvelectric_cooking.csv先用 Pandas 读取数据并把毫秒时间转换成相对分钟数方便画图。脚本文件路径esp32_air_monitor/data_analysis/compare.pyimport pandas as pd import matplotlib.pyplot as plt gas pd.read_csv(gas_cooking.csv) electric pd.read_csv(electric_cooking.csv) gas[minute] (gas[timestamp_ms] - gas[timestamp_ms].iloc[0]) / 60000 electric[minute] (electric[timestamp_ms] - electric[timestamp_ms].iloc[0]) / 60000 gas gas.dropna(subset[pm2p5]) electric electric.dropna(subset[pm2p5]) gas[pm2p5] pd.to_numeric(gas[pm2p5], errorscoerce) electric[pm2p5] pd.to_numeric(electric[pm2p5], errorscoerce) gas gas.dropna(subset[pm2p5]) electric electric.dropna(subset[pm2p5])这里使用errorscoerce是为了防止串口数据中出现异常字符串。如果某一行数据格式不对Pandas 会把它转为NaN再通过dropna丢弃。7.2 绘制对比曲线接下来用 matplotlib 绘制两条 PM2.5 曲线。plt.figure(figsize(10, 5)) plt.plot(gas[minute], gas[pm2p5], label燃气灶, linewidth1.5) plt.plot(electric[minute], electric[pm2p5], label电炉/电磁炉, linewidth1.5) plt.xlabel(时间分钟) plt.ylabel(PM2.5μg/m³) plt.title(燃气灶与电炉烹饪期间厨房 PM2.5 对比) plt.legend() plt.grid(alpha0.3) plt.tight_layout() plt.savefig(pm25_compare.png, dpi150) plt.show()如果你发现两条曲线的时间轴长度不一致不用担心因为两次实验的总时长可能不同。只需要保证我们都从0分钟开始画即可。7.3 统计指标与图表解读曲线图能直观看出变化趋势但我们还需要计算几个统计指标把结论量化。gas_avg gas[pm2p5].mean() electric_avg electric[pm2p5].mean() gas_peak gas[pm2p5].max() electric_peak electric[pm2p5].max() print(f燃气灶平均 PM2.5: {gas_avg:.1f} μg/m³) print(f电炉平均 PM2.5: {electric_avg:.1f} μg/m³) print(f平均降幅: {(1 - electric_avg / gas_avg) * 100:.1f}%) print(f燃气灶峰值 PM2.5: {gas_peak:.1f} μg/m³) print(f电炉峰值 PM2.5: {electric_peak:.1f} μg/m³) print(f峰值降幅: {(1 - electric_peak / gas_peak) * 100:.1f}%)需要注意如果燃气灶实验的背景值本身比电炉实验高平均值也会受影响。因此在解读时建议同时看“背景阶段”和“烹饪阶段”两个区间的曲线差异。一个相对可信的做法是取开始烹饪前 5 分钟为背景段。取烹饪开始后到结束后 5 分钟为污染段。用污染段平均值减去背景段平均值得到烹饪带来的净增量。gas_background gas.loc[gas[minute] 5, pm2p5].mean() gas_cooking gas.loc[gas[minute] 5, pm2p5].mean() gas_delta gas_cooking - gas_background electric_background electric.loc[electric[minute] 5, pm2p5].mean() electric_cooking electric.loc[electric[minute] 5, pm2p5].mean() electric_delta electric_cooking - electric_background print(f燃气灶净增 PM2.5: {gas_delta:.1f} μg/m³) print(f电炉净增 PM2.5: {electric_delta:.1f} μg/m³)如果燃气灶的净增量明显大于电炉并且多次重复实验都得到同样趋势那么“切换到电炉能显著降低烹饪期间的颗粒物污染”这个结论在你的厨房环境里就是成立的。8. 常见问题与排查思路8.1 传感器读数异常问题现象常见原因解决思路串口输出 error 0x01I2C 接线错误或电平不匹配检查 SDA/SCL 是否接反确认 VDD 是否为 3.3V一直输出 0传感器刚启动风扇还在初始化等待 10 到 30 秒观察读数是否恢复数值突然跳变传感器进灰或受到蒸汽干扰检查传感器进风口必要时用气吹清洁两次实验初始值差很多实验间没有充分通风增加 20 分钟通风时间或重新选择实验时间8.2 数据波动过大厨房环境本身动态变化很快数据波动大是正常的。如果你发现曲线像“毛刺”一样可以做一个滑动平均gas[pm2p5_smooth] gas[pm2p5].rolling(window6, min_periods1).mean() electric[pm2p5_smooth] electric[pm2p5].rolling(window6, min_periods1).mean()rolling(window6)表示每 6 个点求一次平均由于采样间隔是 5 秒相当于 30 秒滑动平均。这样画出来的曲线更平稳也更适合观察整体趋势。8.3 实验中如何避免误判不要把传感器放在燃气灶正上方蒸汽和火焰会直接干扰传感器。不要在实验中途开关门窗否则数据会混入通风因素。不要同时开两台灶具那会混淆污染来源。如果烹饪过程中油温过高导致大量油烟记录备注方便后续筛选数据。9. 最佳实践与工程建议9.1 测量与传感器维护建议SPS30 这类光学颗粒物传感器长期在厨房高油烟环境中使用镜片和风扇容易积灰。建议每 1 到 2 个月做一次清洁断电后用软毛刷或气吹清理进风口和出风口。如果传感器长期暴露在高浓度油烟中数据漂移会越来越明显。在正式实验前最好让传感器连续运行 30 分钟以上让风扇稳定。第一次上电时传感器内部的自动校准流程需要时间刚开机前几分钟的数据不建议直接用于结论分析。9.2 厨房环境改善建议如果你的测量结果证实燃气灶确实显著提高了厨房 PM2.5可以从下面几个方面改善烹饪前就开启抽油烟机而不是等油烟明显后才开。烹饪结束后继续开抽油烟机 5 到 10 分钟排走残留污染物。使用带排烟管的外排式抽油烟机比内循环式效果好。在条件允许时打开厨房窗户形成对流通风。如果经常爆炒可以考虑使用电磁炉完成高温快炒环节燃气灶用于炖煮。9.3 注意事项与安全边界燃气灶数据对比实验涉及明火和厨房环境操作时要注意安全实验过程中不要离开厨房。传感器和线材要远离灶台火源。如果使用液化气要确认连接管和阀门无泄漏。不要为了追求高浓度数据而关闭所有通风设备过度暴露对健康不利。传感器数据只能反映颗粒物质量浓度不能替代专业机构的气体检测。你要判断 NO2 和 CO 是否超标还是需要更专业的设备或第三方检测服务。10. 总结与下一步方向通过这篇文章你可以搭建一套属于自己的厨房空气质量监测系统。从传感器选型、ESP32 代码采集到 Python 数据可视化完整的流程已经跑通。最关键的不是代码本身而是实验设计和数据解读思路控制变量、记录背景、计算净增量才能得出可信的结论。下一步如果你想继续深入有几种方向可以选加入 SGP40 或 SCD40 传感器同时监测 VOC 和 CO2建立更完整的室内空气指标。把数据上传到 Home Assistant 或物联网平台实现实时监测和历史曲线。统计一个月内不同烹饪方式的数据用箱线图分析燃气灶和高频爆炒对空气质量的持续影响。结合继电器控制抽油烟机当 PM2.5 超过阈值时自动开启排风。厨房空气质量是一个非常贴近生活的物联网落地场景。希望这份实测方案能帮助你用数据做判断而不是停留在“听说电炉更干净”的模糊印象里。