室内舒适度监测传感器站(CoMoS)


ChangeCode
转载
发布时间: 2025-08-29 14:37:01 | 阅读数 0收藏数 0评论数 0
封面
以ESP32为核心,集成温湿度、风速、黑球温度(置于黑色乒乓球内)和照度传感器,通过WS2812B LED提供状态反馈。采用紧凑3D打印外壳设计,总成本仅约50欧元(传统实验室设备超3000欧元),支持Wi-Fi数据上传至数据库。特别开发了带SD卡存储的独立版本,内置Wi-Fi热点并配套移动可视化应用,可实现办公楼等场景的热环境与光环境实时监测。

准备工作:

材料:

材料名称
数量
备注
1

背景 —— 热舒适度与光舒适度

热舒适度与光舒适度在办公场所及住宅领域的重要性日益凸显。核心挑战在于个体热感知差异大:相同环境下,有人觉热、有人觉冷。这是因为个体热感知受多重因素影响,包括空气温度、相对湿度、风速、周围表面辐射温度等物理因素,以及衣物穿着、代谢活动、年龄、性别、体重等个体因素。


尽管个体因素给暖通控制带来不确定性,但物理因素可通过传感器精准测量。空气温度、相对湿度、风速、黑球温度可直接作为建筑控制输入,还能用于计算 “预测平均投票指数(PMV)”。PMV 指数取值范围为 - 3(寒冷)至 + 3(炎热),0 代表中性状态,用于描述特定环境下人群平均热感知,是建筑热环境质量的常用评价指标。CoMoS 可测量计算 PMV 所需的全部环境参数。


若需深入了解热舒适度、黑球温度与平均辐射温度、PMV 指数及美国采暖、制冷与空调工程师学会(ASHRAE)标准,可参考:


  1. 维基百科:热舒适度(Thermal Comfort)
  2. ISO 7726《热环境工效学》
  3. ASHRAE NPO


此外,个性化环境调节设备(如桌面风扇、暖脚器、冷暖通风座椅等)可改善局部热环境,其自动控制也可基于本地传感器数据实现。更多相关信息可参考 “Living Lab 智能办公空间:个性化环境”、加州大学伯克利分校ZEN 个性化冷暖设备报告(PDF)伍伦贡大学 SBRC 研究成果。


2

系统方案

本设备开发的核心目标是打造一款无线、紧凑、低成本的传感器,用于监测开放式办公空间中至少 10 个独立工位的室内环境。系统采用 ESP32-WROOM-32 控制器(自带 Wi-Fi 功能,支持多种传感器总线类型),传感器站通过独立 IoT Wi-Fi 网络,将采集的数据经服务器上的 PHP 脚本传输至 MariaDB 数据库,还可可选安装 Grafana 实现数据可视化。


本文重点介绍传感器站本身,同时也会提供 PHP 文件及 SQL 连接说明,确保读者能完整搭建、连接并使用 CoMoS。此外,文末还将介绍带 SD 卡存储、内置 Wi-Fi 热点及移动网页应用的独立版本搭建方法。


3

材料清单

1. 电子元件


类别

组件名称及规格

参考来源

控制器

ESP32-WROOM-32 微控制器

espressif.com

温湿度传感器

Si7021 或 GY21 温湿度传感器

adafruit.com

温度传感器

DS18B20 + 温度传感器

adafruit.com

风速传感器

Rev. C 风速传感器

moderndevice.com

状态 LED

WS2812B 5050 LED

adafruit.com

照度传感器

BH1750 照度传感器

amazon.de

其他电子件

4.7k 上拉电阻、0.14mm² 标准导线、2 个 Wago 紧凑型接线端子、Micro USB 线

adafruit.com、wago.com、sparkfun.com


2. 外壳零件(若有 3D 打印机,仅需乒乓球,可跳过此部分,详见步骤 5)

  1. 圆形亚克力板(50×4mm)[1]
  2. 圆形钢板(40×10mm)[2]
  3. 亚克力管(50×5×140mm)[3]
  4. 圆形亚克力板(40×5mm)[4]
  5. 亚克力管(12×2×50mm)[5]
  6. 乒乓球 [6]


3. 其他材料

白色喷漆、哑光黑色喷漆、胶带、绝缘棉(或棉球等类似物)


4. 工具

电钻、8mm 钢板钻头、6mm 木 / 塑料钻头、12mm 木 / 塑料钻头、细手锯、砂纸、剪线钳、剥线钳、电烙铁及焊锡、强力胶或热熔胶枪


5. 软件与库(括号内为测试验证版本,新版本通常兼容)

  1. Arduino IDE(1.8.5)
  2. ESP32 Core 库
  3. BH1750FVI 库
  4. Adafruit_Si7021 库(1.0.1)
  5. Adafruit_NeoPixel 库(1.1.6)
  6. DallasTemperature 库(3.7.9)
  7. OneWire 库(2.3.3)


4

外壳设计与搭建 —— 方案一

CoMoS 采用纤细的立式外壳,多数传感器安装在上部,仅温湿度传感器靠近底部,传感器位置设计遵循测量参数的特定要求:


  1. Si7021 温湿度传感器:安装于外壳外部靠近底部处,确保空气自由流通,减少壳内控制器散热的影响;
  2. BH1750 照度传感器:安装于外壳平整顶部,符合工位照度测量的标准要求(水平表面照度);
  3. Rev. C 风速传感器:上部安装,电子元件置于壳内,带热风速计与温度传感器的探头暴露于顶部周围空气;
  4. DS18B20 温度传感器:安装于设备顶端的黑色喷漆乒乓球内,顶部位置可最小化传感器站自身对黑球温度测量的辐射影响。


关于平均辐射温度及黑色乒乓球作为黑球温度传感器的适用性,可参考文献:


  1. Wang, Shang & Li, Yuguo. (2015). 《亚克力与铜制黑球温度计在日间户外环境的适用性》,《建筑与环境》,89 卷
  2. de Dear, Richard. (1987). 《用于平均辐射温度测量的乒乓球黑球温度计》,《H & Eng.》,60 卷


1. 标准零件规格

  1. 主体外壳:亚克力(PMMA)管,外径 50mm、壁厚 5mm、高度 140mm;
  2. 底板:圆形亚克力板(直径 50mm、厚度 4mm),用作状态 LED 的导光板;
  3. 配重块:圆形钢板(直径 40mm、厚度 10mm),置于底板上方并嵌入主体外壳下端,防止设备倾倒并固定底板;
  4. 顶板:圆形亚克力板(直径 40mm、厚度 5mm),嵌入主体外壳;
  5. 顶部立管:亚克力管(外径 10mm、壁厚 2mm、长度 50mm)。


2. 制作与组装步骤

  1. 钻孔:钢板钻 8mm 通孔(用于 LED 与导线);主体外壳钻 6mm 孔(用于 USB 线、传感器线穿入及通风,数量与位置可自定义,建议背面上下各 3 个、正面上下各 1 个);顶板需钻 1 个 12mm 中心通孔(装顶部立管)、1 个 6mm 偏心孔(装照度传感器线)、1 条 1.5mm 宽 ×18mm 长的狭缝(装风速传感器);乒乓球钻 6mm 孔(装黑球温度传感器与导线)。
  2. 喷漆:除底板外,所有亚克力零件喷白色漆;乒乓球喷哑光黑漆(确保热学与光学特性)。
  3. 粘接:钢板居中粘于底板;顶部立管粘入顶板 12mm 孔;乒乓球粘于立管顶端(孔与立管内孔对齐,便于后续穿传感器)。
  4. 组装:将所有零件拼接,过紧可打磨,过松可贴薄胶带调整。


5

外壳设计与搭建 —— 方案二

3D 打印外壳更简便,仍分为顶壳、主体壳、底壳三部分,便于接线与组装。3D 打印文件及打印参数可在 Thingiverse(https://www.thingiverse.com/)搜索 “CoMoS” 获取。


1. 打印要求

  1. 顶壳与主体壳:建议用白色 filament( filament,打印材料),避免阳光直射下外壳过热导致测量误差;
  2. 底壳:用透明 filament,便于 LED 状态显示。


2. 配重与固定

无需圆形钢板配重,可在透明底壳内放置轴承滚珠或金属垫片(底壳边缘设计有卡槽固定配重),也可用双面胶将设备固定于安装位置。


注:Thingiverse 文件夹中包含微型 SD 卡读卡器的 3D 打印外壳文件(可选,用于独立版本,详见步骤 9)。


6

接线与组装

ESP32、传感器、LED 及 USB 线需按电路原理图焊接,以下为与后续示例代码匹配的引脚分配(导线颜色仅供参考):


ESP32 引脚

连接组件及说明

导线颜色

14

复位引脚(EN)

灰色

17

WS2812B LED(数据端)

绿色

18

DS18B20 + 上拉电阻

-

19

DS18B20+(单总线)

紫色

21

BH1750 与 Si7021(SDA)

蓝色

22

BH1750 与 Si7021(SCL)

黄色

25

BH1750(电源输入)

棕色

26

Si7021(电源输入)

棕色

27

DS18B20+(电源输入)

棕色

34

风速传感器(TMP 信号)

青色

35

风速传感器(RV 信号)

橙色

VIN

USB 线(+5V)

红色

GND

USB 线(接地)

黑色


关键说明

  1. 传感器供电:Si7021、BH1750、DS18B20 + 通过 ESP32 的 IO 引脚供电,因传感器最大电流低于 ESP32 单引脚最大供电电流,且该设计可在传感器通信出错时切断电源复位(详见 ESP 代码注释)。
  2. 导线预处理:Si7021、BH1750 传感器及 USB 线需先穿入外壳对应孔再焊接;用 Wago 接线端子连接 USB 线与各组件电源(均为 5V DC 供电,兼容 ESP32 的 3.3V 逻辑电平)。若需在外壳闭合状态下向 ESP32 传输代码,可将 USB 线的数据引脚重新连接至 ESP32 的 Micro USB 接口;否则需在组装前用另一条完好的 Micro USB 线完成代码烧录。
  3. 传感器安装
  4. Si7021 温湿度传感器:粘于外壳背面靠近底部处,避免壳内热量导致读数偏差;
  5. BH1750 照度传感器:粘于顶板;
  6. 风速传感器:插入顶板狭缝,过松可在传感器中部缠胶带固定;
  7. DS18B20 温度传感器:通过顶部立管穿入乒乓球并置于球心,立管内填充绝缘棉,下端用胶带或热熔胶密封(防止热传导 / 对流影响黑球温度测量);
  8. LED:嵌入钢板通孔,朝向底板(实现底板导光)。
  9. 最终组装:将所有导线、接线端子、ESP32 放入主体壳,拼接所有外壳零件。


7

软件配置 ——ESP32、PHP 与 MariaDB

1. ESP32 编程

使用 Arduino IDE 及 Espressif 提供的 ESP32 Core 库对 ESP32 进行编程(ESP32 IDE 配置教程可参考网络资源,如https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/)。


代码烧录后需在 “用户配置区” 修改关键参数(示例代码片段如下):

/***** 用户配置 *****/
int nodeID = 1; // 传感器站ID(默认1)
const int sendCycleTime = 10; // 数据发送至数据库的周期(秒,默认10)
const int readSensorTime = 1; // 传感器数据读取周期(用于平均值计算,秒,默认1)
const char* ssid = "YourWiFiName"; // Wi-Fi名称
const char* password = "YourWiFiPassword"; // Wi-Fi密码
IPAddress server_addr(192, 168, 0, 0); // PHP/MariaDB服务器IP
IPAddress gateway(192, 168, 0, 0); // 网关IP
IPAddress subnet(255, 255, 255, 0); // 子网掩码
const double diameter = 0.04; // 黑球温度传感器球径(米,乒乓球默认0.04)
const double emissivity = 0.95; // 黑球表面发射率(哑光黑漆默认0.95)
float zerowindAdjustment = 0.1; // 风速传感器零风修正参数(默认0.1)
/***** 配置结束 *****/

代码核心功能:


  1. 支持自定义数据读取 / 发送周期、Wi-Fi 参数、服务器地址;
  2. 包含通过 10 台传感器校准得到的平均校准系数(详见步骤 10);
  3. 集成错误处理(如 ESP32 常见的 I2C / 单总线通信错误);
  4. 通过 LED 颜色反馈设备状态(详见步骤 8)。


2. PHP 脚本配置

将 PHP 文件(示例代码见下文)放置于数据库服务器根目录(访问路径为 “服务器 IP/sensor.php”),需修改 “数据库配置区” 参数以匹配实际环境:

<?php
$mysql_host = "localhost"; // 数据库服务器IP(默认localhost,若脚本与数据库同机)
$mysql_user = "YourSQLUsername"; // SQL用户名
$mysql_pw = "YourSQLPassword"; // SQL密码
$mysql_db = "sensorstation"; // 数据库名(默认sensorstation)

// 数据写入逻辑(避免写入全零数据)
if($temp==0 && $hum==0 && $globe==0 && $vel==0 && $illum==0){
echo "";
}else{
$connection = mysqli_connect($mysql_host, $mysql_user, $mysql_pw) or die("数据库连接失败");
mysqli_select_db($connection, $mysql_db) or die("数据库选择失败");
$insert_data = "INSERT INTO data (UTCDate, ID, UID, Temp, Hum, Globe, vel, velMin, velMax, MRT, Illum, IllumMin, IllumMax) VALUES ('$utcdate', $id, $uid, $temp, $hum, $globe, $vel, $velmin, $velmax, $mrt, $illum, $illummin, $illummax)";
mysqli_query($connection, $insert_data) or die("数据写入失败");
mysqli_close($connection);
}
?>

PHP 脚本作用:接收 ESP32 发送的传感器数据,验证数据有效性后写入数据库,需确保脚本中的数据库表名(默认 “data”)与 ESP32 代码一致。


3. MariaDB 数据库搭建

在服务器上创建 MariaDB 数据库(默认名 “sensorstation”),并建立表 “data”,包含 13 个字段(对应传感器数据类型):


  1. UTCDate(UTC 时间)、ID(传感器站 ID)、UID(设备唯一标识)、Temp(空气温度)、Hum(相对湿度)、Globe(黑球温度)、vel(风速)、velMin(最小风速)、velMax(最大风速)、MRT(平均辐射温度)、Illum(照度)、IllumMin(最小照度)、IllumMax(最大照度)。


可选安装 Grafana 平台实现数据可视化(本文不展开,可参考 Grafana 官方文档)。


INO
F7D6NECJMGL10H0.ino
21.95KB
ZIP
FT66OMDJMGL10GA.zip
1.84KB
8

结果 —— 数据读取与验证

完成接线、组装、编程与环境配置后,传感器站会定期向数据库发送数据,LED 颜色通过底板反馈设备运行状态:


  1. 启动阶段:黄色 LED(等待 Wi-Fi 连接);
  2. 连接成功:蓝色 LED(持续亮);
  3. 数据传输:每次成功发送数据时,绿色 LED 闪烁 600 毫秒;
  4. 错误状态:红色、紫色或淡黄色 LED(对应不同错误类型),错误累积到一定程度后,设备自动复位传感器并重启(重启时 LED 恢复黄色)。


目前,10 台 CoMoS 传感器站已在 “Living Lab 智能办公空间” 部署并持续运行。


9

备选方案:独立版本

CoMoS 独立版本无需数据库服务器与外部 Wi-Fi,核心新增功能如下:


  1. 数据存储:传感器数据以 Excel 兼容的 CSV 格式存储于内置微型 SD 卡;
  2. 无线访问:内置 Wi-Fi 热点,支持移动设备连接;
  3. 本地应用:基于 ESP32 内置 Web 服务器的网页应用(无需联网),可查看实时数据、修改设置、下载 SD 卡中的 CSV 文件。


1. 搭建步骤

  1. 外壳准备:按步骤 4 或 5 制作外壳,可选 3D 打印 SD 卡读卡器外壳(或直接将读卡器放入主体壳);
  2. 新增组件接线:在原有接线基础上,增加微型 SD 卡读卡器(亚马逊可购)与 DS3231 实时时钟模块(adafruit.com),注意上拉电阻与单总线的引脚分配与原始版本不同(参考本步骤附带的接线图);
  3. 代码配置:修改 Arduino 代码中的 Wi-Fi 热点参数(默认 SSID 为 “CoMoS_AP”,密码 “12345678”,可自定义);
  4. 部署运行:插入微型 SD 卡,烧录代码并通过 SPIFFS 文件上传工具(参考下文)将 “data” 文件夹上传至 ESP32;移动设备连接 CoMoS 的 Wi-Fi 热点,在浏览器中输入 “192.168.4.1” 即可访问应用。


2. 关键工具与应用功能

  1. 所需库
  2. Espressif 的 SPIFFS 库
  3. me-no-dev 的 SPIFFS 文件上传工具
  4. Pedroalbuquerque 的 ESP32WebServer 库
  5. 网页应用功能
  6. 首页:显示实时温湿度、平均辐射温度、风速、照度及趋势图;
  7. 设置页:调整本地时间、数据存储间隔(SD 卡)、数据更新间隔(在线)、图表数据点数、LED 状态显示;
  8. 存储页:列出 SD 卡中 “/data/” 目录下的 CSV 文件(默认显示最近 14 个),点击可直接下载至移动设备,文件按日期命名(如 “181204_C.csv”)。


独立版本仍在研发中,适合有 ESP32 SPIFFS 文件系统、HTML/CSS/JavaScript 基础的用户。如果您有兴趣了解更多详情或帮助,请随时通过评论或直接通过 LinkedIn 联系通讯作者。


ZIP
FWO614JJP8Z8RBV.zip
88.82KB
10

已知问题和展望

1. 已知问题

  1. 传感器精度与校准:所用传感器成本低但精度较高,自带降噪与数字总线接口,无需频繁校准;但传感器安装于外壳后,需对设备整体校准。作者通过 10 台 CoMoS 与 “德图 480(TESTO 480)” 专业传感器对比,得出示例代码中的校准系数,建议用户对每台设备单独校准以提升精度。相关校准研究论文正处于同行评审阶段,后续将在作者网站更新。
  2. ESP32 运行稳定性:部分 Arduino 传感器库与 ESP32 兼容性不佳(尤其是 I2C / 单总线通信稳定性),作者通过 “IO 引脚供电 + 断电复位” 方案解决该问题(传感器由 ESP32 IO 引脚供电,出错时切断电源复位),该方案已稳定运行数月,仍在持续研究优化。


2. 展望

作者将通过论文发表、会议报告推广 CoMoS 技术,推动开源应用;同时持续优化设备设计(提升可制造性)与校准方案(提升测量精度),未来可能更新本文内容。最新信息可访问作者网站或通过 LinkedIn 联系:


  1. 通讯作者:Mathias Kimmling
  2. 第二作者:Konrad Lauenroth
  3. 研究导师:Sabine Hoffmann 教授


阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载
pdf下载 举报