室内舒适度监测传感器站(CoMoS)
0
准备工作:
材料:





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




热舒适度与光舒适度在办公场所及住宅领域的重要性日益凸显。核心挑战在于个体热感知差异大:相同环境下,有人觉热、有人觉冷。这是因为个体热感知受多重因素影响,包括空气温度、相对湿度、风速、周围表面辐射温度等物理因素,以及衣物穿着、代谢活动、年龄、性别、体重等个体因素。
尽管个体因素给暖通控制带来不确定性,但物理因素可通过传感器精准测量。空气温度、相对湿度、风速、黑球温度可直接作为建筑控制输入,还能用于计算 “预测平均投票指数(PMV)”。PMV 指数取值范围为 - 3(寒冷)至 + 3(炎热),0 代表中性状态,用于描述特定环境下人群平均热感知,是建筑热环境质量的常用评价指标。CoMoS 可测量计算 PMV 所需的全部环境参数。
若需深入了解热舒适度、黑球温度与平均辐射温度、PMV 指数及美国采暖、制冷与空调工程师学会(ASHRAE)标准,可参考:
此外,个性化环境调节设备(如桌面风扇、暖脚器、冷暖通风座椅等)可改善局部热环境,其自动控制也可基于本地传感器数据实现。更多相关信息可参考 “Living Lab 智能办公空间:个性化环境”、加州大学伯克利分校、ZEN 个性化冷暖设备报告(PDF)及伍伦贡大学 SBRC 研究成果。
系统方案




本设备开发的核心目标是打造一款无线、紧凑、低成本的传感器,用于监测开放式办公空间中至少 10 个独立工位的室内环境。系统采用 ESP32-WROOM-32 控制器(自带 Wi-Fi 功能,支持多种传感器总线类型),传感器站通过独立 IoT Wi-Fi 网络,将采集的数据经服务器上的 PHP 脚本传输至 MariaDB 数据库,还可可选安装 Grafana 实现数据可视化。
本文重点介绍传感器站本身,同时也会提供 PHP 文件及 SQL 连接说明,确保读者能完整搭建、连接并使用 CoMoS。此外,文末还将介绍带 SD 卡存储、内置 Wi-Fi 热点及移动网页应用的独立版本搭建方法。
材料清单




1. 电子元件
类别 | 组件名称及规格 | 参考来源 |
控制器 | ESP32-WROOM-32 微控制器 | |
温湿度传感器 | Si7021 或 GY21 温湿度传感器 | |
温度传感器 | DS18B20 + 温度传感器 | |
风速传感器 | Rev. C 风速传感器 | |
状态 LED | WS2812B 5050 LED | |
照度传感器 | BH1750 照度传感器 | |
其他电子件 | 4.7k 上拉电阻、0.14mm² 标准导线、2 个 Wago 紧凑型接线端子、Micro USB 线 | adafruit.com、wago.com、sparkfun.com |
2. 外壳零件(若有 3D 打印机,仅需乒乓球,可跳过此部分,详见步骤 5)
- 圆形亚克力板(50×4mm)[1]
- 圆形钢板(40×10mm)[2]
- 亚克力管(50×5×140mm)[3]
- 圆形亚克力板(40×5mm)[4]
- 亚克力管(12×2×50mm)[5]
- 乒乓球 [6]
3. 其他材料
白色喷漆、哑光黑色喷漆、胶带、绝缘棉(或棉球等类似物)
4. 工具
电钻、8mm 钢板钻头、6mm 木 / 塑料钻头、12mm 木 / 塑料钻头、细手锯、砂纸、剪线钳、剥线钳、电烙铁及焊锡、强力胶或热熔胶枪
5. 软件与库(括号内为测试验证版本,新版本通常兼容)
- Arduino IDE(1.8.5)
- ESP32 Core 库
- BH1750FVI 库
- Adafruit_Si7021 库(1.0.1)
- Adafruit_NeoPixel 库(1.1.6)
- DallasTemperature 库(3.7.9)
- OneWire 库(2.3.3)
外壳设计与搭建 —— 方案一



















CoMoS 采用纤细的立式外壳,多数传感器安装在上部,仅温湿度传感器靠近底部,传感器位置设计遵循测量参数的特定要求:
- Si7021 温湿度传感器:安装于外壳外部靠近底部处,确保空气自由流通,减少壳内控制器散热的影响;
- BH1750 照度传感器:安装于外壳平整顶部,符合工位照度测量的标准要求(水平表面照度);
- Rev. C 风速传感器:上部安装,电子元件置于壳内,带热风速计与温度传感器的探头暴露于顶部周围空气;
- DS18B20 温度传感器:安装于设备顶端的黑色喷漆乒乓球内,顶部位置可最小化传感器站自身对黑球温度测量的辐射影响。
关于平均辐射温度及黑色乒乓球作为黑球温度传感器的适用性,可参考文献:
- Wang, Shang & Li, Yuguo. (2015). 《亚克力与铜制黑球温度计在日间户外环境的适用性》,《建筑与环境》,89 卷;
- de Dear, Richard. (1987). 《用于平均辐射温度测量的乒乓球黑球温度计》,《H & Eng.》,60 卷。
1. 标准零件规格
- 主体外壳:亚克力(PMMA)管,外径 50mm、壁厚 5mm、高度 140mm;
- 底板:圆形亚克力板(直径 50mm、厚度 4mm),用作状态 LED 的导光板;
- 配重块:圆形钢板(直径 40mm、厚度 10mm),置于底板上方并嵌入主体外壳下端,防止设备倾倒并固定底板;
- 顶板:圆形亚克力板(直径 40mm、厚度 5mm),嵌入主体外壳;
- 顶部立管:亚克力管(外径 10mm、壁厚 2mm、长度 50mm)。
2. 制作与组装步骤
- 钻孔:钢板钻 8mm 通孔(用于 LED 与导线);主体外壳钻 6mm 孔(用于 USB 线、传感器线穿入及通风,数量与位置可自定义,建议背面上下各 3 个、正面上下各 1 个);顶板需钻 1 个 12mm 中心通孔(装顶部立管)、1 个 6mm 偏心孔(装照度传感器线)、1 条 1.5mm 宽 ×18mm 长的狭缝(装风速传感器);乒乓球钻 6mm 孔(装黑球温度传感器与导线)。
- 喷漆:除底板外,所有亚克力零件喷白色漆;乒乓球喷哑光黑漆(确保热学与光学特性)。
- 粘接:钢板居中粘于底板;顶部立管粘入顶板 12mm 孔;乒乓球粘于立管顶端(孔与立管内孔对齐,便于后续穿传感器)。
- 组装:将所有零件拼接,过紧可打磨,过松可贴薄胶带调整。
外壳设计与搭建 —— 方案二










3D 打印外壳更简便,仍分为顶壳、主体壳、底壳三部分,便于接线与组装。3D 打印文件及打印参数可在 Thingiverse(https://www.thingiverse.com/)搜索 “CoMoS” 获取。
1. 打印要求
- 顶壳与主体壳:建议用白色 filament( filament,打印材料),避免阳光直射下外壳过热导致测量误差;
- 底壳:用透明 filament,便于 LED 状态显示。
2. 配重与固定
无需圆形钢板配重,可在透明底壳内放置轴承滚珠或金属垫片(底壳边缘设计有卡槽固定配重),也可用双面胶将设备固定于安装位置。
注:Thingiverse 文件夹中包含微型 SD 卡读卡器的 3D 打印外壳文件(可选,用于独立版本,详见步骤 9)。
接线与组装











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 线(接地) | 黑色 |
关键说明
- 传感器供电:Si7021、BH1750、DS18B20 + 通过 ESP32 的 IO 引脚供电,因传感器最大电流低于 ESP32 单引脚最大供电电流,且该设计可在传感器通信出错时切断电源复位(详见 ESP 代码注释)。
- 导线预处理:Si7021、BH1750 传感器及 USB 线需先穿入外壳对应孔再焊接;用 Wago 接线端子连接 USB 线与各组件电源(均为 5V DC 供电,兼容 ESP32 的 3.3V 逻辑电平)。若需在外壳闭合状态下向 ESP32 传输代码,可将 USB 线的数据引脚重新连接至 ESP32 的 Micro USB 接口;否则需在组装前用另一条完好的 Micro USB 线完成代码烧录。
- 传感器安装:
- Si7021 温湿度传感器:粘于外壳背面靠近底部处,避免壳内热量导致读数偏差;
- BH1750 照度传感器:粘于顶板;
- 风速传感器:插入顶板狭缝,过松可在传感器中部缠胶带固定;
- DS18B20 温度传感器:通过顶部立管穿入乒乓球并置于球心,立管内填充绝缘棉,下端用胶带或热熔胶密封(防止热传导 / 对流影响黑球温度测量);
- LED:嵌入钢板通孔,朝向底板(实现底板导光)。
- 最终组装:将所有导线、接线端子、ESP32 放入主体壳,拼接所有外壳零件。
软件配置 ——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/)。
代码烧录后需在 “用户配置区” 修改关键参数(示例代码片段如下):
代码核心功能:
- 支持自定义数据读取 / 发送周期、Wi-Fi 参数、服务器地址;
- 包含通过 10 台传感器校准得到的平均校准系数(详见步骤 10);
- 集成错误处理(如 ESP32 常见的 I2C / 单总线通信错误);
- 通过 LED 颜色反馈设备状态(详见步骤 8)。
2. PHP 脚本配置
将 PHP 文件(示例代码见下文)放置于数据库服务器根目录(访问路径为 “服务器 IP/sensor.php”),需修改 “数据库配置区” 参数以匹配实际环境:
PHP 脚本作用:接收 ESP32 发送的传感器数据,验证数据有效性后写入数据库,需确保脚本中的数据库表名(默认 “data”)与 ESP32 代码一致。
3. MariaDB 数据库搭建
在服务器上创建 MariaDB 数据库(默认名 “sensorstation”),并建立表 “data”,包含 13 个字段(对应传感器数据类型):
- UTCDate(UTC 时间)、ID(传感器站 ID)、UID(设备唯一标识)、Temp(空气温度)、Hum(相对湿度)、Globe(黑球温度)、vel(风速)、velMin(最小风速)、velMax(最大风速)、MRT(平均辐射温度)、Illum(照度)、IllumMin(最小照度)、IllumMax(最大照度)。
可选安装 Grafana 平台实现数据可视化(本文不展开,可参考 Grafana 官方文档)。
结果 —— 数据读取与验证





完成接线、组装、编程与环境配置后,传感器站会定期向数据库发送数据,LED 颜色通过底板反馈设备运行状态:
- 启动阶段:黄色 LED(等待 Wi-Fi 连接);
- 连接成功:蓝色 LED(持续亮);
- 数据传输:每次成功发送数据时,绿色 LED 闪烁 600 毫秒;
- 错误状态:红色、紫色或淡黄色 LED(对应不同错误类型),错误累积到一定程度后,设备自动复位传感器并重启(重启时 LED 恢复黄色)。
目前,10 台 CoMoS 传感器站已在 “Living Lab 智能办公空间” 部署并持续运行。
备选方案:独立版本









CoMoS 独立版本无需数据库服务器与外部 Wi-Fi,核心新增功能如下:
- 数据存储:传感器数据以 Excel 兼容的 CSV 格式存储于内置微型 SD 卡;
- 无线访问:内置 Wi-Fi 热点,支持移动设备连接;
- 本地应用:基于 ESP32 内置 Web 服务器的网页应用(无需联网),可查看实时数据、修改设置、下载 SD 卡中的 CSV 文件。
1. 搭建步骤
- 外壳准备:按步骤 4 或 5 制作外壳,可选 3D 打印 SD 卡读卡器外壳(或直接将读卡器放入主体壳);
- 新增组件接线:在原有接线基础上,增加微型 SD 卡读卡器(亚马逊可购)与 DS3231 实时时钟模块(adafruit.com),注意上拉电阻与单总线的引脚分配与原始版本不同(参考本步骤附带的接线图);
- 代码配置:修改 Arduino 代码中的 Wi-Fi 热点参数(默认 SSID 为 “CoMoS_AP”,密码 “12345678”,可自定义);
- 部署运行:插入微型 SD 卡,烧录代码并通过 SPIFFS 文件上传工具(参考下文)将 “data” 文件夹上传至 ESP32;移动设备连接 CoMoS 的 Wi-Fi 热点,在浏览器中输入 “192.168.4.1” 即可访问应用。
2. 关键工具与应用功能
- 所需库:
- Espressif 的 SPIFFS 库
- me-no-dev 的 SPIFFS 文件上传工具
- Pedroalbuquerque 的 ESP32WebServer 库
- 网页应用功能:
- 首页:显示实时温湿度、平均辐射温度、风速、照度及趋势图;
- 设置页:调整本地时间、数据存储间隔(SD 卡)、数据更新间隔(在线)、图表数据点数、LED 状态显示;
- 存储页:列出 SD 卡中 “/data/” 目录下的 CSV 文件(默认显示最近 14 个),点击可直接下载至移动设备,文件按日期命名(如 “181204_C.csv”)。
独立版本仍在研发中,适合有 ESP32 SPIFFS 文件系统、HTML/CSS/JavaScript 基础的用户。如果您有兴趣了解更多详情或帮助,请随时通过评论或直接通过 LinkedIn 联系通讯作者。
已知问题和展望




1. 已知问题
- 传感器精度与校准:所用传感器成本低但精度较高,自带降噪与数字总线接口,无需频繁校准;但传感器安装于外壳后,需对设备整体校准。作者通过 10 台 CoMoS 与 “德图 480(TESTO 480)” 专业传感器对比,得出示例代码中的校准系数,建议用户对每台设备单独校准以提升精度。相关校准研究论文正处于同行评审阶段,后续将在作者网站更新。
- ESP32 运行稳定性:部分 Arduino 传感器库与 ESP32 兼容性不佳(尤其是 I2C / 单总线通信稳定性),作者通过 “IO 引脚供电 + 断电复位” 方案解决该问题(传感器由 ESP32 IO 引脚供电,出错时切断电源复位),该方案已稳定运行数月,仍在持续研究优化。
2. 展望
作者将通过论文发表、会议报告推广 CoMoS 技术,推动开源应用;同时持续优化设备设计(提升可制造性)与校准方案(提升测量精度),未来可能更新本文内容。最新信息可访问作者网站或通过 LinkedIn 联系:
0
0
0
qq空间
微博
复制链接
分享