# smart_guard **Repository Path**: kami2019/smart_guard ## Basic Information - **Project Name**: smart_guard - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-26 - **Last Updated**: 2026-05-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: 096OLED, STM32F407, E720, LD2420 ## README # SmartGuard 汽车门禁系统 基于 STM32F407 + RT-Thread Nano 的智能门禁控制系统,实现雷达触发、RFID识别、自动开关门等核心功能。 --- ## 一、项目概述 SmartGuard 是专为停车场/小区门禁场景设计的智能控制系统,具备以下特点: - **双雷达检测**:内外雷达协同工作,实现精准的人员/车辆检测 - **RFID身份识别**:支持UHF频段RFID标签识别,白名单管理 - **智能安全防护**:电子围栏模式、异常行为报警 - **RTOS实时调度**:基于RT-Thread Nano实现多任务并发 - **远程监控**:支持串口指令控制和状态上报 --- ## 二、硬件架构 ### 2.1 主控与外设 | 模块 | 型号 | 接口 | 功能说明 | |------|------|------|----------| | 主控芯片 | STM32F407ZGT6 | - | ARM Cortex-M4 核心,168MHz | | 外雷达 | LD2420 | UART5 (PC12/PD2) | 外部距离检测(触发距离 ≤1m) | | 内雷达 | LD2420 | USART6 (PC6/PC7) | 内部距离检测(触发距离 ≤0.5m) | | RFID模块 | E720 | UART4 (PA0/PA1) | UHF频段射频识别(860-960MHz) | | 舵机 | SG90 | TIM3_CH4 (PB1) | 闸门控制(PWM驱动) | | OLED显示 | 0.96寸 | I2C(软件) (PD0/PD1) | 状态显示(128x64像素) | | 报警单元 | 板载LED + 蜂鸣器 | GPIO | 声光报警指示 (PE3/PG7) | | 调试通信 | USB转TTL | UART4 (PA0) | 数据上报和调试(115200bps) | ### 2.2 硬件连接 ``` STM32F407ZGT6 ├── UART4 (PA0/PA1) → RFID E720模块 ├── UART5 (PC12/PD2) → 外雷达 LD2420-1 ├── USART6 (PC6/PC7) → 内雷达 LD2420-2 ├── TIM3_CH4 (PB1) → SG90舵机 PWM控制 ├── I2C_SCL (PD0) → OLED时钟线 ├── I2C_SDA (PD1) → OLED数据线 ├── GPIO PE3 → 报警LED └── GPIO PG7 → 蜂鸣器 ``` --- ## 三、软件架构 ### 3.1 项目结构 ``` smart_guard/ ├── firmware/ # 应用层代码 │ ├── main.c # 主入口与核心业务逻辑 │ ├── system.h # 系统状态与数据结构定义 │ ├── config.h # 系统配置参数 │ ├── radar.c/h # 雷达驱动模块 │ ├── rfid.c/h # RFID驱动模块 │ ├── servo.c/h # 舵机控制模块 │ ├── oled.c/h # OLED显示模块 │ ├── alarm.c/h # 报警控制模块 │ ├── ringbuffer.c/h # 环形缓冲区模块 │ └── pc.c/h # 调试串口模块 ├── mdk_arm/ # Keil MDK工程文件 │ ├── stm32f4.uvprojx # 工程配置 │ └── stm32f4.uvoptx # 工程选项 ├── rt-thread-nano/ # RT-Thread Nano内核 ├── Drivers/ # STM32 HAL驱动库 ├── doc/ # 文档资料 └── README.md # 项目说明 ``` ### 3.2 核心模块说明 | 模块 | 功能 | 关键函数 | |------|------|----------| | **main.c** | 核心业务逻辑,线程管理 | `system_logic_entry()`, `radar_thread_entry()`, `oled_thread_entry()` | | **radar.c** | 双雷达数据采集和处理 | `Radar_Init()`, `Radar_GetOuterDistance()`, `Radar_GetInnerDistance()` | | **rfid.c** | RFID标签检测和识别 | `RFID_Init()`, `RFID_Detect_Safe_Trigger()` | | **servo.c** | 舵机PWM控制和角度设置 | `Servo_Init()`, `Servo_SetAngle()` | | **oled.c** | 系统状态显示和UI刷新 | `OLED_Init()`, `OLED_Refresh_UI()` | | **alarm.c** | 声光报警控制 | `Alarm_Init()`, `Alarm_Control()` | | **ringbuffer.c** | 串口数据缓冲处理 | `RingBuffer_Push()`, `RingBuffer_Pop()` | | **pc.c** | 调试串口通信 | `PC_Hardware_Init()`, `PC_USART_SendBytes()` | ### 3.3 线程架构 | 线程名称 | 优先级 | 堆栈大小 | 功能说明 | |----------|--------|----------|----------| | `logic_thread` | 2 | 2048 | 核心门禁业务逻辑 | | `radar_thread` | 3 | 2048 | 双雷达数据采集 | | `oled_thread` | 5 | 1024 | OLED显示刷新 | | `shell_thread` | 10 | 1024 | 串口命令交互(预留) | --- ## 四、核心功能 ### 4.1 门禁控制流程 ``` 外雷达检测 ≤1m │ ▼ 触发RFID识别 │ ├── 合法标签 → 开门 → 10秒后检测 → 关门 │ └── 非法标签 → 重试5次 → 报警 ``` ### 4.2 雷达触发规则 | 触发源 | 阈值 | 动作 | |--------|------|------| | 外雷达 | ≤100cm | 触发RFID识别,校验通过开门,无标签则重试 | | 内雷达 | ≤50cm | 触发RFID识别,校验通过开门,无标签不重试不报警 | 内外雷达独立检测,互不锁定,各自触发探测逻辑。 ### 4.3 常开模式 - 通过串口指令 `sys --norm` 开启常开模式 - 闸门保持打开状态 - 保留外雷达电子围栏功能(异常靠近报警) - 通过串口指令 `sys --auto` 恢复正常模式 ### 4.4 安全防护 - **电子围栏**:常开模式下外雷达检测异常靠近触发报警 - **超时保护**:开门后10秒无检测自动关门 - **重试机制**:外雷达触发后最多重试5次RFID识别 - **报警自动复位**:报警状态30秒后自动重置 --- ## 五、串口协议 ### 5.1 指令格式 所有指令以回车换行(`\r\n`)结尾。 ### 5.2 支持指令 | 指令 | 功能说明 | 示例 | |------|----------|------| | `sys --norm` | 切换到常开模式 | 闸门打开并保持 | | `sys --auto` | 切换到正常模式 | 恢复门禁控制,关闭闸门 | | `sys --off` | 关闭报警 | 停止声光报警 | | `test --servo ` | 设置舵机角度 | test --servo 90 | ### 5.3 状态上报 系统每秒自动上报状态,格式如下: ``` { Out:[XXXcm], In:[XXXcm], RFID:[XXX],Door:[XXXXX],Mode:[XXXXX] } ``` **示例输出**: ``` { Out:[120cm], In:[ 45cm], RFID:[ OFF ],Door:[ CLOSED ],Mode:[ NO ] } { Out:[ 75cm], In:[ 25cm], RFID:[ ON ],Door:[ OPEN ],Mode:[ YES ] } ``` **字段说明**: | 字段 | 说明 | 示例 | |------|------|------| | Out | 外雷达距离 | 120cm | | In | 内雷达距离 | 45cm | | RFID | RFID工作状态 | ON / OFF | | Door | 门状态 | OPEN / CLOSED | | Mode | 工作模式 | NO(自动模式)/ YES(常开模式) | --- ## 六、配置参数 主要配置参数定义在 `firmware/system.h` 中: ```c // 雷达配置 #define DIST_OUT_THRESHOLD 100 // 外雷达触发距离:100cm #define DIST_IN_THRESHOLD 50 // 内雷达触发距离:50cm // 时序配置 #define RFID_RETRY_MAX 5 // RFID识别尝试最大次数:5次 #define RFID_RETRY_DELAY 2000 // RFID重试间隔时间:2s #define OPEN_KEEP_TIME 10000 // 闸门开启维持时间:10s // 舵机配置 #define OPEN_ANGLE 90 // 舵机开门角度(度) #define CLOSE_ANGLE 0 // 舵机关门角度(度) ``` 补充配置在 `firmware/config.h` 中(历史参考)。 --- ## 七、使用说明 ### 7.1 开发环境 - **IDE**: Keil MDK-ARM v5.38 或更高版本 - **编译器**: ARMCC v6.18 或更高版本 - **调试器**: J-Link / ST-Link ### 7.2 编译下载 1. 打开 `mdk_arm/stm32f4.uvprojx` 工程 2. 选择目标配置(Debug/Release) 3. 编译工程 4. 通过J-Link/ST-Link下载到STM32F407 ### 7.3 测试步骤 1. **硬件连接**:按照硬件连接图连接所有模块 2. **上电测试**:系统启动后OLED显示启动信息,串口打印启动LOGO 3. **触发测试**: - 用手靠近外雷达(≤1m)→ RFID识别 → 舵机开门 - 用手靠近内雷达(≤0.5m)→ RFID识别 → 舵机开门 4. **指令测试**:通过串口发送 `sys --norm` / `sys --auto` 切换模式 --- ## 八、注意事项 1. **雷达配置**:LD2420需配置为输出ASCII格式数据,波特率115200 2. **RFID模块**:E720模块使用波特率115200,8N1格式 3. **舵机角度**:根据实际安装位置调整开门/关门角度 4. **参数校准**:建议在实际使用前进行雷达触发阈值校准 5. **串口通信**:调试串口使用UART4(PA0),波特率115200,8N1格式 --- ## 九、版本历史 | 版本 | 日期 | 更新内容 | |------|------|----------| | v1.0 | 2024-01 | 初始版本,实现基本门禁功能 | | v1.1 | 2024-02 | 添加常开模式和电子围栏功能 | | v1.2 | 2024-03 | 优化雷达解析和RFID协议处理 | | v1.3 | 2024-04 | 重构代码结构,完善注释和文档 | --- ## 十、许可证 本项目仅供学习和研究使用,未经授权不得用于商业用途。