1. 项目背景与核心需求
食堂排队监控系统是高校信息化建设中一个典型的物联网应用场景。去年我在参与某高校智慧校园项目时,发现午餐时段食堂窗口排队长度差异能达到3-4倍,部分窗口前学生排队时间超过25分钟,而相邻窗口可能只需等待5分钟。这种资源分配不均的现象促使我选择了这个毕业设计课题。
这个系统的核心要解决三个问题:
- 实时感知各窗口排队人数
- 动态展示排队热力图
- 通过数据分析优化窗口资源配置
2. 系统架构设计
2.1 硬件选型方案
经过实地测试对比,最终采用"双传感器融合"方案:
- 主传感器:TOF激光雷达(VL53L1X)
- 测距精度±5mm
- 最大检测距离4m
- 采样率50Hz
- 辅助传感器:红外热释电(HC-SR501)
- 用于人体移动检测
- 120°探测角度
实际部署中发现,单纯使用红外传感器在食堂高温环境下误报率高达30%,而纯激光方案又无法区分静止物体和人。双传感器方案将误判率控制在5%以内。
2.2 网络拓扑设计
采用分层式组网结构:
code复制[传感节点] --LoRa--> [网关] --WiFi--> [云服务器]
|
[本地显示屏]
关键参数配置:
- LoRa频段:470MHz(避开2.4G食堂微波干扰)
- 发射功率:17dBm
- 扩频因子:SF9
- 编码率:4/5
3. 核心算法实现
3.1 人数统计算法
开发了基于时空特征融合的计数模型:
python复制def count_people(distance_series):
# 预处理
filtered = kalman_filter(distance_series)
# 特征提取
peaks, _ = find_peaks(filtered, height=0.2, distance=10)
troughs, _ = find_peaks(-filtered, height=0.2, distance=10)
# 事件判定
events = []
for i in range(len(peaks)):
if peaks[i] - troughs[i] > TIME_THRESHOLD:
events.append(1) # 进入
elif troughs[i] - peaks[i] > TIME_THRESHOLD:
events.append(-1) # 离开
return sum(events)
3.2 热力图生成算法
采用改进的核密度估计方法:
python复制def generate_heatmap(counts):
# 标准化处理
normalized = (counts - np.min(counts)) / (np.max(counts) - np.min(counts))
# 高斯核卷积
kernel = np.exp(-np.linspace(-3, 3, 21)**2 / 2)
smoothed = np.convolve(normalized, kernel, mode='same')
# 颜色映射
return plt.cm.viridis(smoothed)
4. 实际部署经验
4.1 传感器安装要点
- 安装高度:2.1-2.3米(避免被餐盘遮挡)
- 倾斜角度:15°向下俯角
- 防尘措施:加装透明亚克力防护罩
- 供电方案:PoE供电(避免频繁更换电池)
4.2 典型问题排查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 计数波动大 | 传感器震动 | 加固安装支架 |
| 数据断连 | LoRa干扰 | 更换通信频道 |
| 显示延迟 | 网络拥堵 | 启用本地缓存 |
5. 数据分析应用
通过两周的运行数据,发现几个有趣现象:
- 11:45-12:15是绝对高峰期,占全天流量的43%
- 最受欢迎窗口的排队人数是最少窗口的4.8倍
- 增加一个临时窗口可减少平均等待时间27%
基于这些发现,食堂后续调整了:
- 增设2个临时窗口(11:30-12:30开放)
- 将畅销菜品分散到不同窗口
- 实行错峰就餐建议
实测调整后平均等待时间从14.6分钟降至9.2分钟,学生满意度提升31%。这个项目让我深刻体会到,好的技术方案应该像空气一样——用户感受不到它的存在,却能实实在在地改善生活体验。