在前面的基础上对设备外形和后续数据分析进行了优化。
之前的版本中,使用各种接线器把模块连接起来,然后不管三七二十一塞到一个笔筒里边,多少有点凌乱,这不符合我的风格,所以抽空要理一下的。另外当时使用的移动电源已经服役多年,输出电压不稳,也需要更换。所以这次找了另外一块长方形闲置移动电源。
这次具体就是干了两件事情:1)优化线束连接,把之前大量使用的接线器换下来,缩小空间占用;2)固定各个模块,使之紧凑稳固一点。
但我发现,要整合这些东西,想做得紧凑美观,也是非常不容易的事情。我既没有合适的外壳材料,也没有外壳加工能力(后面有空设计三维模型去打印)。所以这里只能是组合应用扎带,纸板,纳米胶等材料来做好固定。而线束啥的,幸亏之前买了一些热缩管,不然还会更加丑陋。
成果如上图所示,现在它可以称之为【具有环境监测功能的移动电源】。打开手机热点,这个设备还能自动连接并上传数据。然后通过一段代码可以查看各项测量值的变化。这里我也进行了一些优化,用户只需要输入测量的大致时间段,就能够专门根据这段时间内发生的测量数据绘制图表。
从结果来看,车内因为夏季高温会积聚大量的二氧化碳和有机挥发物。所以上车后务必开窗通风一段时间,然后行驶途中开启空调外循环。为了简化和美化后续数据分析,我对代码也进行了调整。具体代码如下:
# 选取特定片段,只需要修改这里即可
start = "2024-08-03 06:00:00"
end = "2024-08-03 18:00:00"
import pandas as pd
from datetime import datetime
import matplotlib.pyplot as plt
import seaborn as sns
import requests
# 下载数据到本地
url = 'https://sheldonxxd.cn/data.txt'
r = requests.get(url)
with open("data.txt", 'wb') as f:
f.write(r.content)
# 读取全部数据
with open("data.txt") as f:
lines = f.readlines()
box = []
for a in lines:
b = a.strip()
cs =b.split(" ")
if len(cs)==3:
date = cs[0]
time = cs[1]
info = cs[2]
ds = info.split("_")
if len(ds)==5:
temp = float(ds[0])
humid = int(ds[1])
CO2 = int(ds[2])
TVOC = int(ds[3])
device = ds[4]
box.append([device, temp, humid, CO2, TVOC, datetime.fromisoformat(date+ " "+time)])
data = pd.DataFrame(box, columns=['device', 'temperature', 'humidity', 'CO2', 'TVOC', 'time'])
# 根据设定时间段提取数据
data2 = data[(data['time']>datetime.fromisoformat(start))&\
(data['time']<datetime.fromisoformat(end))
]
plt.figure(figsize=(10,4))
plt.subplot(221)
sns.lineplot(x='time', y='temperature', c='red', data=data2)
plt.ylabel('Temperature (℃)')
plt.xticks(rotation=5)
plt.subplot(222)
sns.lineplot(x='time', y='humidity', c='blue', data=data2)
plt.ylabel('Humidity (%)')
plt.xticks(rotation=5)
plt.subplot(223)
sns.lineplot(x='time', y='CO2', c='green', data=data2)
plt.ylabel('$CO_{2}$ (ppm)')
plt.xticks(rotation=5)
plt.subplot(224)
sns.lineplot(x='time', y='TVOC', c='orange', data=data2)
plt.ylabel("TVOC (ppb)")
plt.xticks(rotation=5)
plt.tight_layout()
plt.show()
这里主要是利用 python 的 pandas 模块来处理数据,特别是根据日期时间来截取数据片段。还有一个就是使用 matplotlib 作图的时候,这里使用了最简单的布局设置,还有坐标轴中使用下角标的方式(类似 latex 语法),以及对 x 轴 ticks 的旋转处理。简单记录下来,备忘。
此处评论已关闭