感知层负责"看见",计算层负责"判定与分发",执行层负责"提醒到人"。 层与层之间用两条独立通道通信:视觉走 USB 摄像头,周界与头盔指令走串口/蓝牙。
USB 摄像头采集画面(640×640,目标 15FPS);E18-D80NK 红外对射看守周界,遮挡即入侵。
OpenCV 多线程采集 → YOLOv8 批量推理 → ROI 判定 → 事件编排(语音/指令/记录)。
HC-05 蓝牙 SPP ↔ 头盔 STM32(38400bps);CH340 USB 串口 ↔ 周界板(115200bps)。
STM32F103C8T6 驱动语音、震动马达、红/绿灯与蜂鸣器;周界触发现场声光报警。
| 模块 | 型号 / 说明 | 角色 |
|---|---|---|
| 笔记本上位机 | Windows 笔记本,USB 摄像头 ≤4 路,CPU 推理(有 GPU 自动加速) | 计算 / 判定 |
| 头盔主控 | STM32F103C8T6(Blue Pill),Arduino 框架烧录;另备 ESP32 WiFi 方案 | 执行 |
| 蓝牙模块 | HC-05,SPP 从机 38400bps,配对名 SafeHelmet | 通信 |
| 周界传感 | E18-D80NK 漫反射红外光电开关 ×4,周界 STM32 轮询 GPIO | 感知 |
| 提醒执行器 | 语音播放模块、震动马达模块、红/绿 LED 模块、有源蜂鸣器(均成品模块,杜邦线直插) | 执行 |
| 周界串口 | CH340 USB 转串口,连接周界 STM32 上报事件 | 通信 |
完整采购清单与引脚分配见项目《硬件采购清单》《头盔端设计说明》文档。
| 指令 | 含义 |
|---|---|
D1 – D4 | 区域 1–4 检测到危险(区域与摄像头的对应关系在界面中自由分配) |
CLEAR | 所有区域安全,解除告警 |
VIB | 触发头盔震动 500ms |
TEST | 模拟完整报警流程(演示用) |
STATUS | 查询头盔端状态 |
| 指令 | 含义 |
|---|---|
INTRUSION:N | 第 N 路红外被遮挡(周界入侵) |
CLEAR:N | 第 N 路红外恢复 |
TEST_BTN | 头盔测试按钮被按下 |
OK:STM32_READY | 头盔固件就绪 |
上位机用 Python + customtkinter 构建,深色工地安全主题(本站同一视觉语言)。 左侧边栏完成全部设备管理:扫描后用下拉框把任意摄像头分配到区域 1–4(路数 1–4 自选, 画面网格随数量自适应);HC-05 蓝牙与 CH340 周界串口均提供端口下拉选择与运行中连接。 主区从上到下是安全/危险状态横幅、视频网格与彩色事件日志;告警触发时系统会用 TTS 语音播报具体危险("X号区域危险区发现人员"等,预录语音兜底)。 所有事件自动结构化记录,点击「导出 Excel 记录」即可生成带样式、带筛选的报表。
| 模块 | 职责 |
|---|---|
camera_manager | 多路摄像头异步采集、区域分配连接、无信号降级、后台扫描不阻塞界面 |
yolo_detector | YOLOv8 批量推理、person 过滤、按区域槽位的 ROI 射线法判定 |
event_handler | 告警分发:TTS 语音播报、串口指令、3 秒冷却防抖、静音开关 |
voice_broadcaster | Windows TTS 中文语音播报(专职线程 + 队列),不可用时回退预录 mp3 |
serial_comms / perimeter_listener | HC-05 蓝牙收发与 CH340 周界事件监听,支持界面选择端口运行中连接 |
data_recorder | 事件结构化记录 + openpyxl 导出 Excel(检测记录 / 概要两个工作表) |
overlay_renderer | 视频画面合成:检测框、ROI、告警边框与"区域 N · CAM X"中文标注(PIL 字体渲染,无乱码) |
Arduino 框架烧录,USART1 接 HC-05 收指令;PA0/PA1 驱动呼吸绿灯与红色警示灯(PWM),PA4 震动马达、PA5 蜂鸣器、PA6 测试按钮,PB0/1/3/4 读取 4 路红外。
固件已实现ESP32-DevKitC 连接笔记本热点,TCP Client 对接上位机,指令语义与 STM32 方案一致,作为无线链路的替代验证方案保留。
固件已实现