当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]最初的想法是,在家中部署三个传感器节点,记录每个房间内的环境变化,并利用这些数据训练模型,以识别不同类型的室内污染事件,例如烹饪、清洁或蜡烛点燃等。我还希望进一步扩展功能,不仅识别事件,还能采取行动,比如自动开启空气净化器。

我想要一个能完成并真正有所收获的个人项目。虽然我学到了很多东西,但遗憾的是,项目范围超出了预期。但这并不意味着项目毫无成果。

最初的想法是,在家中部署三个传感器节点,记录每个房间内的环境变化,并利用这些数据训练模型,以识别不同类型的室内污染事件,例如烹饪、清洁或蜡烛点燃等。我还希望进一步扩展功能,不仅识别事件,还能采取行动,比如自动开启空气净化器。

然而,由于数据限制——主要是可用数据量有限以及数据质量不高——项目不得不多次调整方向。

硬件部分无需更改:

每个节点均为定制PCB板,搭载ESP32芯片、Sensirion SEN66传感器、OLED显示屏,以及8个额外的引脚,便于日后添加更多组件。

SEN66 通过一个 I²C 模块提供了九个通道:PM1.0、PM2.5、PM4.0、PM10、VOC 指数、NOx 指数、CO₂ 当量、温度和相对湿度。我将三个独立的模块组装后,全部安装在同一房间内进行数据采集,并跟踪记录以确保三个传感器之间的偏差可以忽略不计。其中需要考虑的一个问题是 SEN66 的自发热现象,会影响温度测量结果。这可以通过在设备上应用温度偏移值轻松解决。

三个模块使用 Arduino IDE 上示例 SEN66 的代码进行了编程,每 5 秒采样一次,所有三个模块运行相同的程序,仅 NODE_ID 和 NODE_NAME 不同。

数据传输流程如下:

所有操作均在本地完成,没有使用云服务,也没有第三方处理我烹饪时间或窗户开启时间等信息,这些实际上都只是日志记录。

起初,我只在本地运行了电脑上的Flask服务器,但经过近一个月不间断的数据采集后,即使尝试减轻对电脑的负载(每个测量数据原本都记录到PowerShell,但很快这个做法就变得不理想),我的视频游戏连接仍然受到影响(是的,这正是我察觉到影响的主要方式)。Streamlit仪表板也托管在本地,因此连接到家庭Wi-Fi的其他设备都可以访问该仪表板。这是我追踪房间状态和事件的主要方式,依赖于三个被跟踪房间中仪表板的准确更新。

第一个问题:分类器没有可学习的内容

最初的目标是构建一个四类源分类器,并进行通道删除实验。我计划确定九个通道中哪些真正携带信号,以及逐一删除每个通道后,系统仍能保留多少准确率。

然而,我所拥有的几乎所有数据都是烹饪事件。我之前曾打算识别烹饪、清洁、蜡烛/香薰以及人员占用等事件。显然,我无法用这些数据训练一个分类器,即使可以,也无法仅凭其能极好地识别烹饪事件这一事实来验证它的准确性。

这是本项目中首次出现数据采集错误的主题。

我随后调整了方向:

由于我记录了大量相似的烹饪事件,当我改变项目重点时,便试图利用这一点。在同一个房间内追踪到大量几乎完全相同的事件,促使我将项目重新聚焦于识别房屋内的气流传输情况。我想问:当某个房间发生污染时,空气是如何在家中流动的?需要多长时间才能到达其他房间?在传输过程中,有多少污染物被“清除”了?

仪表板本应做得更好

这是数据采集的核心部分,而我对此严重低估,最终导致本项目未能达到预期目标。数据的质量完全取决于数据的准确性(显而易见),也就是说,这完全依赖于操作人员对仪表盘的控制以及事件记录的真实性。事件和房间状态应当在开始和结束时立即被记录。然而,在错过几次后,我添加了事后重建事件和房间状态的方法,但这反而成了过度依赖,成为了一个错误来源。许多烹饪事件直到发生数小时后才被记录,且事件持续时间存在偏差。房间状态也极为不一致,例如窗户在异常时间打开,改变了气流状况并影响了外部污染的影响。

仪表盘运行在本地网络上,只要有人站在厨房里,就可以用手机记录事件,即使锅具仍处于高温状态(理论上如此)。

•实时监控——每个房间的在线/离线状态及全部九个通道,因此节点故障可在几分钟内被发现,而非等到一天结束才察觉。

•事件日志——标签界面:针对源房间的开始/停止,按房间切换窗户、排风扇、净化器和空调,以及反向录入

•历史分析——通过悬停查看时间戳进行长期趋势分析

•房间比较——两房间叠加显示、相关性分析、延迟估计

•事件分析——基于阈值的事件检测

•数据导出——原始CSV文件及合并后的带标签数据集

每个事件仅记录一次,仅针对其源房间。房间状态以变更历史形式记录,而非快照;导出时通过“截至”连接方式保留该时刻房间内所有活跃状态。每条标签均记录其进入时间与发生时间,因此即使事后调取标签仍可识别。

测量运输过程

每个事件对应一个房间的行:

指标:

含义:

arrival_lag_min

源房间清空基准线与在此处清空之间的时间差(分钟)

xcorr_lag_min

整个曲线交叉相关性所得的独立延迟估计

attenuation

本房间上升速率 ÷ 源房间上升速率 —— 表示行程中存活的比例

clearance_min

从峰值到下降至一半回到基准线所需的时间

snr, detected

事件是否真的有可测量的存在感

下一期:事件信号太弱,无法被有效检测

我共记录了18个封闭式事件来追踪PM2.5。信号确实传播到了各个房间,83%的事件在客厅被检测到,78%在卧室被检测到,每个房间的媒体到达延迟约为5分钟。

数据分析表明,较弱的事件使这种延迟分布在19分钟的范围内,其中三分之一的事件时间方向相反(即空气先到达卧室,再离开厨房),这本质上只是信号噪声被误判为事件。而较强事件则集中于中位数的5分钟范围,且88%的事件方向正确。

我的数据集中有三分之二是较弱的事件。虽然经过一个月的跟踪,我并未期望能获得一个大规模、全面的数据集,但至少还是有一些可用的数据。事后看来,我本应如何训练这些数据就变得十分清楚了。显然,我在实际采集时本应更加规范,同时应该安排一些规模较大的阶段性事件。在这里,我可以精确控制事件的开始和结束,因为我可以提前规划事件,并准确识别它们。如果加入更多这类事件,可能就会有很大帮助。

一个我尚未弄明白的问题

客厅的PM2.5浓度上升幅度通常比厨房更大,中位衰减值为1.44,这在物理上是不可能的。

由于厨房的污染会向整个房屋扩散,人们本应预期在房屋更远端的位置检测到的颗粒物浓度会越来越低,但实际情况恰恰相反。如前所述,所有传感器都已进行测试和校准,以避免此类错误。此外,卧室的行为也较为符合预期,中位衰减值为0.87。

客厅没有开放的窗户,也没有其他可能让室外空气影响颗粒物浓度的来源,与其他房间不同,因此这一问题依然让我困惑。

试图寻找一个我可以回答的问题:

此时,我的项目设想已大相径庭。似乎大部分数据都无法使用,于是我决定亲自验证这一点。我选择将两个模型相互对比,目的都是回答这个问题:了解其他房间的情况是否有助于预测这个房间的状态?这两个模型唯一的区别在于,一个只能看到该房间的历史记录,而另一个则可以查看所有房间的数据。

最终的胜者通过以下方式确定:两个模型均以平均绝对误差作为评分标准,并将其转换为相对于“不采取任何操作”基准的“得分”。目标是衡量变化程度,因此“不作任何操作”意味着预测值为0。技能值为0表示模型与不作操作完全一致,1表示完美匹配,负值则表示预测效果更差。然后,模型之间的差距将表明空气流动是否携带了可预测的信息,而这一差距的大小则暗示了相关性的强弱。

评分过程在数据的三个切片中进行,旨在避免单一数值主导整个结果。这三类数据分别是:所有分钟数据、实际记录事件中的分钟数据,以及PM浓度变化最大的前10%分钟(即波动最剧烈的时段)。

在评分过程中,我忽略了大部分关键信息。即使对已记录的事件进行评分,也未能捕捉到污染水平波动的大部分情况,因为三个最大污染事件根本未被记录,这意味着这些时段均未被标记。此时我清楚地意识到,数据是我最大的瓶颈,而我并未成功收集到足够有价值的任何数据。

我真正学到的东西:

我意识到项目往往不会如预期般发展。此前我从未独立开展过类似的工作,缺乏明确的规划蓝图,因此整个过程令人耳目一新。从设计PCB开始,我就对真正的电路设计有了深刻体验。PCB与我在高中课堂上学习的传统电路完全不同。我一直疑惑,学习电容、电阻、电感以及其他各类电路元件究竟有何意义?我了解这些方程、它们的特性以及它们如何影响电路的行为,但从未停下来思考过自己为何要使用它们。这让我重新联想到PCB设计,发现其中许多元件都有一个共同用途:电容器被用来提供干净的电源,因为它们像能量储存器一样,有助于稳定电流消耗的波动。我也了解到电阻的更多用途,以及它们在I2C通信中的应用。

实际制作PCB让我学到了很多东西,比如正确的工具有多么重要。缺少任何一个工具,就无法完成电路板的焊接。说到焊接,我意识到下次应该使用更大的元件,比如1206型而不是0805型(虽然0805属于“大尺寸”范围,但仍然非常难焊接),或者直接使用PCB制造商提供的专用元件库进行设计,这样我就可以把设计发送给他们,由他们来制造和组装。

这个项目后半部分让我在数据收集方面学到了很多,包括哪些做法应该避免、哪些做法可以采用——我已经对此有相当多的体会。此外,我也深入了解了数据收集后的清洗和分析过程。尽管由于数据质量较差,本项目中机器学习的部分最终实现的目标比最初设想的小得多,但我还是在实际数据分析之前,掌握并熟悉了一些基础知识。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭