开源空气质量监测器OAQ:从传感器融合到AQI计算的DIY实践
2026/6/4 19:02:22 网站建设 项目流程

1. 项目概述:为什么我们需要一个开源的空气质量监测器?

空气污染,这个看不见的“沉默杀手”,每年影响着全球数百万人的健康。最令人不安的是,许多身处污染环境中的人,对自己呼吸的空气质量一无所知。传统的专业监测站虽然数据精准,但数量稀少、成本高昂,根本无法形成高密度的监测网络。世界卫生组织曾建议,为了准确测量颗粒物,每100米至少应有一个传感器。但现实情况是,这个数字大约是每100米0.02个,存在百倍的缺口。这意味着,我们绝大多数人日常生活的微环境——办公室、卧室、通勤路上、公园里——其空气质量数据实际上是空白。

正是这种数据鸿沟,催生了像Project OAQ(Open Air Quality Sampler)这样的开源项目。它的核心目标非常明确:将空气质量监测的能力“民主化”。不是要替代专业的实验室设备,而是为普通人、创客、社区组织提供一个低成本、可定制、易于复制的工具,让大家能够亲手测量并了解自己身边的空气。当每个人都能便捷地获取本地化的污染数据时,从意识到行动的改变才会真正发生。

OAQ的设计哲学深深植根于实用主义和可及性。它不是一个追求极限参数的高精尖仪器,而是一个“够用就好”的务实方案。整套方案的目标成本控制在25美元以内,所有组件均采用通孔封装,只需一把电烙铁就能完成组装,核心固件和外壳3D文件全部开源。你可以把它看作是一个环境数据的“瑞士军刀”——便携、多功能、由你掌控。无论是想监测家里的甲醛和二氧化碳浓度,还是想记录上下班沿途的PM2.5变化,甚至为你的智能家居系统增加一个环境感知触发器,OAQ都提供了一个可靠的起点。

2. 核心设计思路与方案选型

2.1 需求定义:从用户场景倒推硬件设计

在动手画第一根线之前,明确需求比选择任何一个传感器都重要。OAQ项目首先梳理了以下几个核心目标,这些目标直接决定了后续每一个技术选型:

  1. 极致的成本控制(<25美元):这是实现“民主化”的前提。过高的成本会将绝大多数感兴趣的人挡在门外。这意味着我们需要在传感器、主控、结构件等每一个环节进行权衡。
  2. 极低的制作门槛(无需SMD焊接):表面贴装器件虽然小巧,但需要热风枪、焊膏等工具,对新手极不友好。坚持使用通孔元件,仅凭一把普通电烙铁就能完成所有焊接,极大地扩展了潜在的用户群体。
  3. 全球可获取的组件:避免使用那些只能在特定地区或通过特定渠道才能买到的“冷门”芯片或传感器。优先选择在主流电子商城(如Adafruit、SparkFun、淘宝、LCSC)都能找到的通用型号。
  4. 内置充电与长续航(18650电池):便携设备必须摆脱电线的束缚。18650锂电池能量密度高、成本低廉、易于获取(甚至可以从旧笔记本电池中拆取),是DIY项目的理想选择。同时集成充电管理电路,实现USB充电。
  5. 可定制的3D打印外壳:硬件是骨架,外壳是皮肤。提供开源的可3D打印外壳文件,允许用户根据自己拥有的传感器型号、安装位置或个人审美进行修改和再创作。
  6. 简单且社区驱动的固件:固件不应该是一个黑盒子。它需要结构清晰、注释完整,并且预留足够的接口,让其他开发者能够轻松地添加新传感器或功能。
  7. 手机App进行数据交互:设备本身可以独立工作,但通过蓝牙低功耗与手机App连接,能够提供更直观的数据可视化、历史记录查询和数据导出功能,而无需复杂的网络配置。
  8. 传感器融合与智能提醒:单一传感器的数据可能存在误差或局限。通过融合多个传感器的读数(如温湿度补偿颗粒物传感器),可以提高数据的可靠性。此外,设备能根据污染等级通过蜂鸣器发出不同强度的警报,实现从“监测”到“预警”的跨越。
  9. 智能家居集成潜力(如Home Assistant):通过开放数据接口或标准协议,让监测数据不仅能被查看,还能触发其他设备动作,例如在PM2.5超标时自动打开空气净化器。

2.2 主控与核心架构选择

面对以上需求,主控芯片的选择至关重要。它需要足够便宜、功耗低、性能足以处理多个传感器数据、并且具备蓝牙功能以实现与手机通信。

为什么是ESP32?经过综合评估,ESP32系列芯片几乎是这个项目的唯一最优解。首先,其成本极具竞争力,一片ESP32开发板的价格可以低至3-4美元。其次,它集成了双核处理器、Wi-Fi和蓝牙,其中蓝牙低功耗正是我们手机连接所需要的。再者,ESP32拥有庞大的Arduino社区支持,意味着有海量的库和示例代码可供参考,极大降低了固件开发难度。最后,其深度睡眠模式下的超低功耗特性,非常适合电池供电的便携设备。

注意:虽然ESP8266更便宜且也有Arduino支持,但它缺乏蓝牙功能,无法实现与手机的直接离线通信。如果选择ESP8266,则必须依赖Wi-Fi联网上传数据,这增加了使用的复杂性和场景限制(例如在户外移动中)。因此,为了满足“手机App离线连接”这一核心需求,ESP32是更合适的选择。

系统架构简述: OAQ采用了一个典型的“传感器-主控-人机交互”分层架构。ESP32作为大脑,通过I2C、UART等接口轮询或接收各个传感器的数据。处理后的数据一方面通过I2C驱动一个小型OLED屏幕进行实时显示,另一方面存储在内部缓冲区,并通过BLE广播,等待手机App连接读取。一个独立的蜂鸣器驱动电路负责提供声音警报。整个系统由一颗18650锂电池供电,通过一个集成充放电管理芯片的电路板进行安全充电和电压稳压。

3. 传感器选型与融合策略解析

传感器是项目的眼睛和鼻子,选型直接决定了数据的价值和设备的成本。OAQ没有追求单一的高端传感器,而是采用了一种务实且灵活的“传感器融合”策略。

3.1 基础环境参数:温湿度传感器

选择DHT22的原因: 测量颗粒物和气体浓度,必须考虑环境温湿度的影响。例如,高湿度可能导致光学颗粒物传感器将水雾误判为颗粒,影响读数准确性。因此,获取精确的温湿度数据用于后期补偿算法至关重要。DHT22(或AM2302)是一个经过时间检验的选择。它价格适中(约3-5美元),精度足以满足民用需求(温度±0.5°C,湿度±2%RH),并且提供了简单的单总线数字接口,仅需一个GPIO引脚即可读取,节省了主控的宝贵资源。

3.2 关键气体指标:二氧化碳与VOC探测

选择MQ-135的考量: 室内空气质量中,二氧化碳浓度是衡量通风状况的重要指标,而总挥发性有机物则是衡量装修污染、家具释放等化学污染的关键。MQ-135是一种半导体式气敏传感器,对二氧化碳、苯、酒精、烟雾等多种气体都有响应。选择它最主要的原因是成本极低(约1-2美元)和电路简单。它本质上是一个可变电阻,通过一个简单的分压电路接入ESP32的ADC引脚即可读取。

实操心得:MQ系列传感器的使用要点MQ传感器需要预热(通常5-30分钟)才能稳定,且读数受环境温湿度影响大。在实际代码中,不能直接将其ADC读数当作精确的ppm浓度。标准的做法是:

  1. 在洁净空气(户外)中获取一个基准值R0
  2. 根据传感器数据手册中的电阻-浓度曲线公式,将实时读取的传感器电阻RsR0的比值,换算成目标气体的近似浓度。
  3. 引入DHT22读取的温湿度数据进行补偿修正。虽然精度无法媲美数千元的NDIR红外CO2传感器,但对于判断“通风不足”、“污染显著升高”这类趋势性场景,MQ-135已经完全够用。

3.3 核心挑战:颗粒物传感器的“兼容性”设计

这是OAQ设计中最具巧思的部分。颗粒物传感器是成本大头,从几美元到上百美元的型号性能差异巨大,且供应情况不稳定。

面临的现实问题

  • 型号繁多:市场上有PMS5003(攀藤)、SDS011(诺方)、SPS30(盛思锐)、ZH03(哲闻)等多个主流型号。
  • 接口不一:主要是UART串口,但协议、数据帧格式、引脚定义各不相同。
  • 成本与精度权衡:廉价的SDS011和PMS5003能满足大部分民用需求,而高端的SPS30精度更高、寿命更长,但价格也贵数倍。

OAQ的解决方案:硬件兼容 + 软件适配与其绑定某一个传感器,不如设计一个能兼容多种型号的通用方案。OAQ的PCB设计了一个标准的传感器接口插座,统一提供5V、GND和一个UART TX/RX引脚对。关键在于,这个UART接口连接到了ESP32的任意一个硬件串口(如Serial2)。

固件层面的融合策略: 固件中会预置或允许用户选择当前使用的传感器型号。根据选择,调用不同的解码函数来解析从对应串口接收到的原始数据帧,最终统一换算成PM1.0、PM2.5、PM10的质量浓度值(μg/m³)。

// 伪代码示例:传感器数据解析路由 PMData readPMSensor(SensorType type) { PMData result; switch(type) { case PMS5003: result = decodePMS5003(serial2.readBuffer()); // 解析攀藤协议 break; case SDS011: result = decodeSDS011(serial2.readBuffer()); // 解析诺方协议 break; case SPS30: result = decodeSPS30(serial2.readBuffer()); // 解析盛思锐I2C/UART协议 break; default: result = {0,0,0}; } // 此处可加入基于温湿度的数据补偿算法 compensateWithTH(result, temperature, humidity); return result; }

这种设计带来了巨大灵活性:用户可以根据预算和精度要求自由选择传感器。今天可以先用便宜的SDS011搭建原型,明天升级到SPS30也无需改动主板,只需更新固件配置即可。这真正体现了开源硬件的“可演进”优势。

4. 从原理到实践:AQI的计算方法与实现

4.1 AQI到底是什么?

空气质量指数是一个将多种污染物的复杂浓度数据,转化为一个单一、易懂的数字分级指标的系统。它的核心目的是服务公众健康,让人们快速理解当前空气污染的健康风险等级。例如,AQI 150意味着“对所有人开始产生健康影响”,而AQI 50则代表“空气质量优良”。

需要明确的是,AQI是一个“指数”,而非某种污染物的直接浓度。它是通过一套分段线性公式,将每种污染物的实测浓度映射到一个0-500(或更高)的指数子集上,最后取所有污染物子指数中的最大值作为最终的AQI值。

4.2 AQI的计算公式拆解

全球不同国家和地区有不同的AQI计算标准(如中国的HJ 633-2012,美国的EPA标准)。OAQ项目采用了国际上较为通用的分段线性插值法,其核心公式如下:

对于某种污染物: [ I_p = \frac{I_{high} - I_{low}}{BP_{high} - BP_{low}} \times (C_p - BP_{low}) + I_{low} ]

其中:

  • ( I_p ):该污染物的空气质量分指数。
  • ( C_p ):该污染物的实测浓度值。
  • ( BP_{high} ), ( BP_{low} ):在AQI分级表中,与 ( C_p ) 所处浓度区间对应的浓度限值(高值和低值)。
  • ( I_{high} ), ( I_{low} ):在AQI分级表中,与上述浓度区间对应的指数限值(高值和低值)。

让我们用一个实例来演练: 假设OAQ测得PM2.5的浓度 ( C_p = 42 \mu g/m^3 )。参考某AQI分级表(例如美国EPA标准),PM2.5的24小时平均浓度限值区间如下表所示:

AQI指数范围空气质量等级PM2.5浓度范围 (μg/m³)
0 - 500.0 - 12.0
51 - 10012.1 - 35.4
101 - 150轻度污染35.5 - 55.4
151 - 200中度污染55.5 - 150.4
201 - 300重度污染150.5 - 250.4
301 - 500严重污染250.5 - 500.4

42 μg/m³ 落在35.5-55.4区间内,对应的AQI指数区间是101-150。因此:

  • ( I_{high} = 150 ), ( I_{low} = 101 )
  • ( BP_{high} = 55.4 ), ( BP_{low} = 35.5 )
  • ( C_p = 42 )

代入公式: [ I_p = \frac{150 - 101}{55.4 - 35.5} \times (42 - 35.5) + 101 ] [ I_p = \frac{49}{19.9} \times 6.5 + 101 \approx 2.462 \times 6.5 + 101 \approx 16.0 + 101 = 117 ]

所以,PM2.5的分指数 ( I_p ) 约为117。

4.3 在固件中实现AQI计算

在OAQ的Arduino固件中,我们需要为每种支持的污染物(PM2.5, PM10, CO2等)实现一个计算函数。以下是一个简化的代码框架:

// 定义AQI分级表结构体 typedef struct { float concLow; // 浓度下限 float concHigh; // 浓度上限 int indexLow; // 指数下限 int indexHigh; // 指数上限 } AQI_Breakpoint; // PM2.5的AQI分级表 (示例,请根据采用的标准替换) AQI_Breakpoint pm25Table[] = { {0.0, 12.0, 0, 50}, {12.1, 35.4, 51, 100}, {35.5, 55.4, 101, 150}, {55.5, 150.4, 151, 200}, {150.5, 250.4, 201, 300}, {250.5, 500.4, 301, 500} }; int calculateAQI(float concentration, AQI_Breakpoint* table, int tableSize) { for (int i = 0; i < tableSize; i++) { if (concentration >= table[i].concLow && concentration <= table[i].concHigh) { // 应用分段线性公式 return (int)((float)(table[i].indexHigh - table[i].indexLow) / (table[i].concHigh - table[i].concLow) * (concentration - table[i].concLow) + table[i].indexLow); } } // 如果浓度超出最高范围,返回最大值(如500) return 500; } // 在主循环中调用 void loop() { float pm25 = getPM25Concentration(); // 从传感器读取 int pm25AQI = calculateAQI(pm25, pm25Table, 6); float pm10 = getPM10Concentration(); int pm10AQI = calculateAQI(pm10, pm10Table, 6); // 需要定义pm10Table // 最终AQI取所有分指数中的最大值 int finalAQI = max(pm25AQI, pm10AQI); // ... 更新显示和触发警报 }

关键注意事项

  1. 标准一致性:务必确定你的AQI计算遵循哪一种标准(中国、美国、印度等),并使用对应的浓度限值表。不同标准结果差异可能很大。
  2. 平均时间:AQI通常是基于24小时或1小时的平均浓度计算。对于实时显示的设备,更常见的是计算1小时滑动平均或实时浓度对应的“即时AQI”,但这可能与官方发布的24小时平均AQI有出入,需要向用户说明。
  3. CO2的AQI:很多标准AQI不包含CO2。OAQ可能参考了室内空气质量指南(如1000ppm以上认为通风不良),将其浓度映射到一个自定义的指数范围,再与其他污染物指数取最大值。

5. 硬件实现:从面包板到定制PCB

5.1 原型验证:在面包板上“搭积木”

任何硬件项目的第一步都应该是面包板验证。这个阶段的目标不是美观,而是快速验证“逻辑可行性”:所有传感器能否被主控正确驱动?供电是否充足?数据通信是否正常?

我的面包板搭建顺序

  1. 电源核心:首先搭建18650电池座、充放电管理芯片(如TP4056)和稳压模块(将电池电压降至3.3V和5V)。用万用表确认各电压输出正常。
  2. 主控最小系统:插入ESP32开发板,连接电源。上传一个简单的Blink程序,确保核心功能正常。
  3. 逐个添加传感器:遵循“加电一个,调试一个”的原则。先接DHT22,写代码读取温湿度;再接MQ-135,读取ADC值;最后接颗粒物传感器(如PMS5003),通过串口调试助手查看原始数据帧是否正常。
  4. 集成外设:连接OLED屏幕(I2C),测试显示;连接蜂鸣器(通过一个三极管驱动),测试发声。

踩坑记录:电源噪声问题在面包板阶段,当我同时启用Wi-Fi、蓝牙并驱动多个传感器时,偶尔会出现ESP32重启或传感器读数跳变的情况。这通常是瞬间电流过大导致电源电压跌落造成的。面包板的连接电阻和分布电感比PCB大得多,在高频或大电流下问题更明显。解决方案是在ESP32的3.3V输入引脚和GND之间,以及5V电源入口处,就近焊接一个100μF的电解电容和一个0.1μF的陶瓷电容,用于缓冲和滤波。这个经验直接应用到了后续的PCB设计中。

5.2 PCB设计:在约束中寻求最优解

验证通过后,就可以开始设计印刷电路板了。OAQ的PCB设计遵循了“紧凑、易焊、模块化”的原则。

核心约束与设计决策

  1. 尺寸最小化(52mm x 30mm):小的PCB能降低打样成本,也更易于放入小巧的外壳。通过使用双面布局和合理的走线,将所有必要元件压缩在这个尺寸内。
  2. 坚持通孔元件:如前所述,为了制作友好,所有电阻、电容、接口都选用通孔封装。这略微增大了面积,但价值巨大。
  3. 清晰的接口分区:PCB布局上,将电源区(电池接口、充电芯片、稳压电路)、主控区(ESP32及外围电路)、传感器接口区(分别标出UART、I2C、ADC引脚)明确分开,便于理解和焊接。
  4. 传感器接口标准化:设计了一个标准的4针(5V, GND, TX, RX)通孔插座作为颗粒物传感器接口。无论用户使用哪种型号,只需按照其引脚定义制作一条杜邦线转接线即可接入。
  5. 充分的测试点和丝印:在关键信号点(如串口、I2C、ADC)添加了测试点,方便调试。丝印层清晰标注了每个元件的位置、极性和接口功能,这对焊接和日后排错至关重要。

PCB打样与焊接建议

  • 打样:目前国内5-10块双面板的打样成本极低,通常30-50元人民币即可。建议选择有铅喷锡工艺,焊接更容易。
  • 焊接顺序:先焊高度最低的元件,如电阻、电容、IC插座,再焊较高的元件,如排针、接口、电池座。焊接ESP32模组时,温度不要过高(建议350°C左右),先固定对角两个引脚,再快速焊接其余引脚,避免长时间加热损坏内部芯片。

6. 结构设计:打造一个“像充电宝”的监测器

6.1 工业设计理念:低调与实用

OAQ的外形设计灵感来源于充电宝,这是一个深思熟虑的选择。一个好的消费产品设计,尤其是涉及环境监测这种可能带有“焦虑感”的产品,应该努力降低用户的“心理负担”和“社交压力”。

为什么是充电宝造型?

  1. 认知亲和:充电宝是现代人日常携带、再熟悉不过的物品。采用这个造型,设备在背包里、桌面上都不会显得突兀,避免了传统检测仪那种“工业仪器”的疏离感。
  2. 功能暗示:它内置电池,需要充电,外形暗示了其“可移动、自供电”的特性。
  3. 空间利用:充电宝常见的扁平长方体造型,内部空间规整,非常适合分层布局主板、电池和传感器。
  4. 进气设计:可以在外壳侧面设计隐蔽的栅格或缝隙作为进气口,既保证空气流通,又不破坏整体造型。

6.2 使用Fusion 360进行3D设计

使用参数化建模软件如Fusion 360,可以让你在虚拟空间中精确地组装所有电子元件,进行干涉检查,这是成功3D打印的关键。

我的设计流程

  1. 精确建模:首先,根据PCB厂商提供的Gerber文件或尺寸图,精确建立PCB的3D模型。同样,为18650电池、OLED屏幕、各个传感器建立或下载准确的3D模型。
  2. 虚拟装配:将所有3D模型导入一个装配体,按照设想的布局摆放。核心原则是:主板在下,电池平铺,传感器(尤其是颗粒物传感器的风扇进气口)朝向侧面栅格,屏幕朝向正面。
  3. 设计外壳:根据装配体的大小,设计一个包裹它的外壳。外壳分为底盖和面盖两部分,通过卡扣或螺丝固定。需要特别注意:
    • 壁厚:通常打印厚度设为1.2mm-2mm,以保证强度。
    • 公差:PCB和外壳之间需要留出0.2mm-0.3mm的间隙,避免装不进去。卡扣的配合部分也需要预留弹性空间。
    • 按钮设计:这是难点。需要在PCB上的微动开关正上方,设计一个外壳上的“按钮柱”。按钮柱与外壳本体通过一个薄壁的“活铰链”连接,这样按下时有弹性反馈。需要多次打印测试来调整按钮柱的长度和活铰链的厚度,以达到最佳手感。
    • 进气与出气风道:确保颗粒物传感器风扇前方有足够的进气空间,后方有排气通道,避免气流短路导致测量不准。可以在传感器周围设计一些导流肋。

6.3 3D打印与迭代

设计完成后,导出STL文件进行3D打印。PLA材料是最常见的选择,价格便宜,打印成功率高。

打印与后处理建议

  • 层高:0.2mm层高可以在打印速度和表面光洁度之间取得良好平衡。
  • 填充率:15%-20%的填充率足以提供足够的强度,同时节省材料和时间。
  • 支撑:对于悬空结构(如按钮下方的空隙、内部卡扣),需要生成支撑。支撑面通常比较粗糙,需要仔细拆除并用砂纸打磨。
  • 迭代是常态:不要指望一次成功。我的第一个版本按钮按不动,第二个版本屏幕装歪,第三个版本传感器卡太紧……前后打印了不下七八个版本才得到满意的结果。每次修改后,可以只打印修改的部分(如仅打印面盖)来验证,节省时间和耗材。

7. 固件开发与功能实现

7.1 固件架构设计

一个健壮的固件应该模块清晰、易于维护和扩展。OAQ的固件大致分为以下几个模块:

  1. 传感器驱动层:为每种传感器编写独立的.h.cpp文件,如DHT22.cpp,PMSx003.cpp。这些文件只负责与硬件通信和读取原始数据。
  2. 数据模型层:定义统一的数据结构来存放所有传感器读数,例如一个SensorData结构体,包含temp,humi,pm25,co2等字段。
  3. 业务逻辑层:这是核心,包含:
    • 传感器管理器:周期性地调用各个驱动函数读取数据。
    • 数据处理单元:对原始数据进行滤波(如滑动平均)、单位换算、AQI计算。
    • 状态机:管理设备的不同状态(如启动、测量、睡眠、连接)。
  4. 人机交互层:负责OLED显示刷新、按钮扫描(短按切换显示页面,长按开关蜂鸣器)、蜂鸣器控制(根据AQI值改变鸣响频率)。
  5. 通信层:实现BLE服务,将SensorData结构体中的数据按照自定义的特征值格式广播出去,供手机App读取。

7.2 低功耗与电源管理

对于电池设备,功耗决定续航。ESP32的深度睡眠模式是省电利器。

我的功耗优化策略

  • 测量周期化:不是持续测量,而是每隔一段时间(如5分钟)唤醒一次。唤醒后,快速启动传感器、读取数据、计算AQI、更新显示和BLE广播,然后迅速返回深度睡眠。
  • 外设电源控制:在PCB上,使用MOS管为功耗较高的颗粒物传感器风扇和屏幕背光单独供电。在ESP32进入深度睡眠前,通过GPIO关闭这些MOS管,彻底切断它们的电源。
  • Wi-Fi的取舍:本项目只使用BLE,因为Wi-Fi在连接和传输时功耗巨大。如果需要远程上传数据,更优的策略是:设备平时深度睡眠,仅通过BLE与手机交互;由手机App负责在连接时,将历史数据通过手机网络上传到云端。
  • 实测续航:在采用18650电池(容量约2000-3000mAh),设置10分钟测量一次的周期下,设备可以轻松续航数周甚至一个月。

7.3 BLE通信协议设计

为了让手机App能理解数据,需要定义一个简单的BLE服务。

  1. 创建服务:定义一个唯一的UUID作为主服务,例如0xFFF0
  2. 定义特征值:在该服务下创建多个特征值,用于传输不同类型的数据:
    • 特征1(读/通知):用于传输实时数据包。可以设计一个包含温度、湿度、PM2.5、PM10、CO2、AQI等字段的二进制结构体,一次性发送。
    • 特征2(写):用于接收手机App的指令,如修改测量间隔、开关蜂鸣器、重启设备等。
    • 特征3(读):用于传输设备信息,如固件版本、电池电压。
  3. 数据序列化:将SensorData结构体转换为字节数组通过BLE发送。在手机App端,按照同样的格式解析。

8. 手机App与数据可视化

一个简单的手机App可以极大提升用户体验。对于OAQ,App的核心功能是数据接收、实时显示、历史记录和简单分析。

开发框架选择:对于这类IoT项目,使用跨平台框架如Flutter或React Native是高效的选择。它们可以同时生成iOS和Android应用,且对BLE的支持已经很好。

App核心功能点

  1. 设备扫描与连接:列出附近的OAQ设备,点击连接。
  2. 仪表盘:以数字和仪表盘形式实时显示所有传感器数据和AQI。
  3. 历史图表:App在本地存储接收到的数据,并可以绘制出过去几小时或几天的变化曲线,特别是PM2.5和AQI的趋势图。
  4. 数据导出:允许用户将历史数据导出为CSV或TXT文件,方便在电脑上用Excel等进行进一步分析。
  5. 设备设置:提供界面让用户修改设备端的参数(通过BLE写入特征值实现)。
  6. 警报推送:当设备通过BLE传输的AQI值超过用户设定的阈值时,App可以发送手机本地通知。

9. 常见问题与故障排查

在组装和使用OAQ的过程中,你可能会遇到以下问题。这里提供一个快速排查指南:

问题现象可能原因排查步骤与解决方案
设备无法开机1. 电池电量耗尽。
2. 电源开关损坏或未打开。
3. PCB上电源电路焊接问题(如稳压芯片、二极管反接)。
1. 连接USB充电器,查看充电指示灯是否亮起。
2. 用万用表测量电池电压(应高于3.0V),测量稳压芯片输出(应为3.3V)。
3. 检查电源开关通断是否正常。
OLED屏幕不显示1. 屏幕供电或I2C线路接触不良。
2. I2C地址错误。
3. 屏幕本身损坏。
1. 检查屏幕与PCB连接的4根线(VCC, GND, SCL, SDA)是否虚焊。
2. 使用I2C扫描程序(Arduino有示例)检查设备地址,常见地址是0x3C或0x3D。
3. 更换一个已知好的屏幕测试。
传感器读数全为01. 传感器未正确供电。
2. 通信接口(UART/I2C)错误。
3. 固件中传感器型号选择错误。
1. 测量传感器VCC引脚是否有5V或3.3V电压。
2. 用逻辑分析仪或另一个USB转串口工具监听传感器TX引脚,看是否有数据输出。
3. 确认固件中#define SENSOR_TYPE的型号与你实际使用的相符。
PM2.5读数异常高或为01. 传感器进气口被堵塞或遮挡。
2. 高湿度环境导致误判。
3. 传感器风扇不转。
1. 检查外壳进气栅格是否通畅,传感器激光孔是否清洁。
2. 观察湿度读数,尝试在干燥环境下对比测试。高质量的传感器固件应包含湿度补偿算法。
3. 听声音或观察传感器内部,确认风扇是否在通电后启动。
BLE无法连接1. 手机蓝牙未打开或权限未授予。
2. ESP32的BLE库初始化失败。
3. 设备不在广播状态。
1. 重启手机蓝牙,确认App有定位或蓝牙权限。
2. 检查串口日志,查看ESP32启动时BLE初始化是否报错。
3. 使用通用的BLE扫描App(如nRF Connect)查看是否能搜索到名为“OAQ-XXX”的设备。
蜂鸣器不响或常响1. 驱动三极管或MOS管焊接错误。
2. 控制蜂鸣器的GPIO引脚配置错误。
3. 蜂鸣器本身损坏。
1. 检查蜂鸣器驱动电路,确认NPN三极管的基极通过限流电阻连接GPIO,集电极接蜂鸣器至VCC,发射极接地。
2. 在代码中手动设置该GPIO为高电平,测试蜂鸣器是否响。
3. 用万用表通断档直接测试蜂鸣器两端,应有轻微“嗒”声和阻值。

最后一点心得:开源硬件项目的乐趣和挑战在于,你面对的不是一个完美的黑箱商品,而是一个可以无限调试、修改和理解的系统。遇到问题,从电源开始,用万用表逐步测量;善用串口打印调试信息;将问题拆解为最小的单元进行测试。每一次成功的排错,都是对系统理解的一次加深。OAQ提供了一个可靠的起点,但它的最终形态,取决于你如何用它去观察、记录和改善你周围的那一方空气。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询