JaswantBhartiya/esp32-laser-security

GitHub: JaswantBhartiya/esp32-laser-security

一款基于 ESP32-S3 的多次反射激光周界安防绊线系统,包含定制 PCB、3D 打印外壳和自动环境光校准功能。

Stars: 0 | Forks: 0

Laser Security Sentinel Icon

Typing Effect Headline

# 🛡️ ESP32 多次反射激光安防系统

C++ HTML5 CSS3 TypeScript JavaScript ESP32-S3 KiCad Fritzing SolidWorks Linux License

演示    •     硬件设计    •     机械防护罩    •     固件与校准    •     联系方式


一款专业且经济实惠的嵌入式安防系统,基于定制 PCB 和 ESP32 DevKit V1 构建。该项目利用光学多次反射激光路径,在真实玻璃镜面上进行反射,形成严密的周边防线,并由板载的光敏电阻 (LDR) 进行动态监控。

## 🚀 核心功能与演示 * **无线周界设计:** 激光发射器在房间内使用独立的隔离电池运行,无需拉扯长而凌乱的信号线回到控制器。 * **多次反射路径:** 支持 $650\text{nm}$ 红色或 $532\text{nm}$ 绿色激光,能够通过 4 到 5 次镜面反射保持锐利的焦点。 * **自动环境校准:** 启动时对室内光线进行采样,计算动态触发阈值,防止从白天到夜晚发生误报。 * **双态 LED 状态指示:** 使用红绿 LED 阵列(**绿色**代表布防,**红色**代表触发),并在开发板和外部扩展接口上同步显示。 * **硬件重置按钮:** `GPIO 18` 上的防抖按钮可立即清除警报、静音蜂鸣器并为系统重新布防。
## 🛠️ 硬件设计 ### 系统原理图 电路图规划了 ESP32 接口、传感器分压电路以及激光控制线,以确保低噪声运行。 ![电路原理图](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/622b48d51f183036.png)
### 📐 电子布局 (原始 KiCad PCB) 定制电路板采用紧凑的外形设计,配备专用的安装孔和清晰的丝印标签。 | 正面布局 | 背面布局 | | :---: | :---: | | | |
### ⚙️ 独立机械安装座 为了实现完全的光学隔离并过滤掉环境光,我们设计并定制了专门的安装防护罩。
点击展开 | 独立防护罩视图
| 等轴测视图 | 正视图 | 背视图 | | :---: | :---: | :---: | | ![Mount Front](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/d0516a0697183038.png) | ![Mount Top](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/bb033aa6ed183041.png) | ![Mount Bottom](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/76acb03ff2183043.png) | #### 📐 工程尺寸与公差 ![Mount Dimensions](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/d36eeb8f22183044.png) **设计规格:** * **材料:** 哑光/缎面深灰色 PLA(用于吸收内部杂散反射) * **内径:** 均匀的 5.7mm 通道(为手工焊接的 LDR 游隙和 FDM 打印缩水提供 0.5mm 的缓冲空间) * **紧固件:** 两个 M3 通孔,用于齐平安装。

👉 **[点击此处以在 GitHub 上原生查看交互式 3D 安装模型](./production/3d_printing/mount.STL)**
### 🤝 完全集成组件 组合视图展示了直接通过螺栓固定在电子控制电路板上的机械防护罩组件。
Integrated Isometric

| 组装俯视图 | 组装焊接面视图 | | :---: | :---: | | | |
## 🔋 电源设置 系统使用**两条独立的电源路径**,以防止激光产生的电噪声干扰 ESP32 和传感器。 ### ⚡ 路径 1:ESP32 与定制 PCB 为主控制器和传感器板供电。
ESP32 Power Layout

* **电池 (18650)** ➔ **TP4056 充电模块**(安全充电) * **TP4056 输出** ➔ **升压转换器**(提升电压) * **升压转换器 (5V)** ➔ **ESP32 引脚 (5V)**(为 MCU 供电) * **ESP32 引脚 (3.3V)** ➔ **定制 PCB (J2)**(为 LDR 和 LED 供电)
### 🔦 路径 2:独立激光发射节点 独立为激光模块供电,与主板零物理连接。
Laser Power Layout

* **100% 隔离:** 与 ESP32-S3 没有共享导线或公共接地环路。 * **18650 电池供电:** 使用独立的 18650 电池(~3.7V)运行,以实现最大、持久的亮度。 * **手动开关控制:** 使用串联的摇杆开关彻底切断电源,并在关机时节省电池。
## 📂 仓库结构 ``` esp32-laser-security/ ├── src/ # 💻 Firmware Source Code (PlatformIO) │ ├── main.cpp # └── Main security system logic │ └── testing/ # └── Isolated hardware testing scripts │ └── laser-connected-esp.cpp │ ├── esp32-laser-security-pcb/ # 🛠️ KiCad Hardware Design Files │ ├── *.kicad_sch # └── Circuit schematic │ └── *.kicad_pcb # └── PCB routing layout │ ├── production/ # 📦 Manufacturing & 3D Printing Files │ ├── gerbers/ # └── PCB manufacturing files (Gerbers) │ ├── 3d_printing/ # └── 3D-printable mount shroud (.STL / .3MF) │ └── step_models/ # └── 3D CAD assembly model (.STEP) │ ├── assets/ # 🖼️ Documentation Media │ ├── circuit_schematic.png # └── Circuit diagram for README │ ├── pcb_raw_*.png/jpg # └── 3D images of unmounted PCB │ ├── mount_*.jpg # └── 3D images of standalone plastic mount │ └── pcb_assembled_*.jpg # └── Photos of the final assembly │ ├── platformio.ini # ⚙️ Project configuration & libraries └── README.md # 📖 Main project documentation guide ```
## 🛠️ 硬件需求 | 组件 | 数量 | 用途 | | :--- | :--- | :--- | | **ESP32-S3 DevKitC-1 N16R8** | 1 | 中央处理器与实时监控引擎 | | **SYD1230 650nm 5mW 红色激光模块** | 1 | 支持对焦的发射节点,针对经济实惠的反射方案进行了优化 | | **光敏电阻 (LDR)** | 1 | 高灵敏度光学接收器 | | **SFM-27 有源压电式蜂鸣器(连续音)** | 1 | 3–24V 高分贝声音指示器;允许 ESP32 直接驱动定制的双频警笛扫描,而不会产生内部时序冲突 | | **正面反射镜 / 硬盘盘片** | 2–4 | 无重影、高反射率的角落反射节点 | | **金属膜电阻 (10 kΩ)** | 1 | 用于模拟分压电路的下拉电阻 | | **金属膜电阻 (330 Ω)** | 2 | 限流保护电阻(例如:用于状态 LED) | | **金属膜电阻 (220 Ω)** | 2 | 限流保护电阻(例如:用于限制蜂鸣器功率) | | **6x6x5mm 轻触按键开关** | 1 | PCB 安装轻触开关,用于即时手动系统重置或校准 | | **7×1 排针(直插,10mm 高度,2.54mm 间距)** | 1 | 用于外设 GPIO 编程/调试引脚的扩展接口连接器 | | **XY126V-5.0-2P 绿色接线端子(5mm 间距,直插)** | 1 | XINLAIYA 10A 300V 电源连接器,带导线保护,用于外部主直流输入 | | **3 Pin JST XH 2.5mm 顶插端子(直插公母配对)** | 1 | 带极性防呆的锁定连接器,确保 LDR 接收器接线牢固 | | **内六角圆柱头螺钉 (M3x12)** | 2 | 高强度机械紧固件,用于外壳或 PCB 边角安装 | | **M3 不锈钢六角螺母** | 2 | 配套的防锈六角形螺母,用于安全紧固 M3 安装螺钉 |
## 🔌 电路拓扑与接线 为了获得干净的光学基准并防止室内光线干扰传感器,LDR 必须安装在直指入射激光路径的不透光、黑暗的隔离管内。 ### 中央控制单元引脚映射 ``` +-----------------------------------------------------------------+ | ESP32-S3 DevKitC-1 N16R8 | +-----------------------------------------------------------------+ | GPIO 4 (ADC) | <-------> Pin 1: LDR (R1 Sensor Output Node) | GPIO 18 | <-------- Pin 2: RST (Reset Push Button SW1) | GPIO 5 | --------> Pin 3: BUZZ (External Buzzer J3) | GPIO 19* | --------> Pin 4: GRN (Green LED Control Rail) | GPIO 21* | --------> Pin 5: RED (Red LED Control Rail) | GND | --------> Pin 6: GND (Common System Ground) | 3V3 | --------> Pin 7: 3V3 (System Power Input) ``` ``` +-----------------------------------------------------------------------------------+ | EXTERNAL COMPONENT CONNECTIONS | +-----------------------------------------------------------------------------------+ | | | [ PCB Header J1 ] --------------------> Connects to EXTERNAL RG LED | | (EXT. RG LED) - Pin R: Red Indicator Anode | | - Pin G: Green Indicator Anode | | - Pin -: Common Ground Rail | | | | [ PCB Header J3 ] --------------------> Connects to EXTERNAL ACTIVE BUZZER | | (EXT. BUZZER) - Pin +: Positive Audio Signal Input | | - Pin -: Negative Ground Return | | | +-----------------------------------------------------------------------------------+ ``` ### 3.3V 安全分压电路布局 ``` 3V3 Rail -----[ LDR ]-----+-----> GPIO 34 (Analog Read Input) | [ 10kΩ Resistor ] | GND Rail ``` _注意:从 3V3 轨道为 LDR 网络供电,可保护 ESP32 的 12 位 ADC 引脚免受 5V 过压老化影响。_
## 💻 软件配置与安装 本项目在 VS Code 中使用 PlatformIO IDE 构建,以实现稳健的环境管理和更小的编译二进制文件体积。 ### 项目环境配置 (platformio.ini) ``` [env:esp32-s3-devkitc-1] platform = espressif32 board = esp32-s3-devkitc-1 framework = arduino monitor_speed = 115200 # 强制编译器禁用 PSRAM tracking 以防止启动 panic build_flags = -DBOARD_HAS_PSRAM=0 -DARDUINO_USB_CDC_ON_BOOT=1 # 指定 LittleFS 分区布局 board_build.filesystem = littlefs # 8MB Flash 设备的标准分区表(无 PSRAM) board_build.partitions = default_8MB.csv lib_deps = esphome/ESPAsyncWebServer-esphome @ ^3.2.2 knolleary/PubSubClient @ ^2.8 # 告诉 PlatformIO 编译 src 中的所有内容,除了 testing 文件夹 build_src_filter = +<*> - ```
### 部署说明 1. 将此仓库克隆到您的本地工作区: git clone https://github.com/JaswantBhartiya/esp32-laser-security.git 2. 在安装了 **PlatformIO** 扩展的 **Visual Studio Code** 中直接打开项目文件夹。 3. 调整您的外部激光节点在镜面网格中的位置,使其准确射入 LDR 管道的中心。 4. 点击底部状态栏上的 **PlatformIO**: **Upload**(上传)箭头图标(或按 `Ctrl + Alt + U`)编译并烧录固件。 5. 打开 **Serial Monitor**(串口监视器)(`Ctrl + Alt + M`),波特率设置为 `115200`,观察系统运行其初始校准分析。

## ⚙️ 系统状态工作原理 ``` +------------------+ | STATE_CALIBRATING| <-------- On Boot / User Reset +------------------+ | v (Samples light & computes threshold) +------------------+ +--->| STATE_ARMED | | +------------------+ | | | v (Beam broken for >50ms) | +------------------+ | | STATE_BREACHED | | +------------------+ | | +--------------+ (Reset Button Pressed) ``` * **开机校准:** 对激光束进行 3 秒钟的采样,计算直接激光和环境室内光之间的动态触发阈值。 * **主动警戒:** 持续对 LDR 进行采样。要求光束被遮挡的时间超过 `50ms`,以过滤掉因灰尘或飞虫引起的误报。 * **入侵警报:** 使用非阻塞微秒延迟在 `GPIO 5` 上播放双音警笛扫描音($800\text{Hz}$ 到 $1300\text{Hz}$)。 * **硬件重置:** 主动轮询 `GPIO 18`。按下重置按钮会立即使蜂鸣器静音,并将系统重新校准回布防状态。
## ⚙️ 校准与环境调节 ### 🛠️ 快速对齐指南 1. **对齐:** 将激光点直接对准 LDR 防护罩的中心。 2. **校准:** 打开或重置 ESP32 的电源。在最初的 **3 秒钟**内,保持激光路径完全畅通。 3. **计算:** 固件使用简单的中值公式自动设置触发阈值: $$\text{阈值} = \frac{\text{激光强度} + \text{环境光强度}}{2}$$ 4. **验证:** 用手遮挡光束,测试其是否立即触发警报。
### 🔍 环境光故障排除 | 问题 | 根本原因 | 快速解决方案 | | :--- | :--- | :--- | | **开机即刻触发警报** | 校准期间激光未击中 LDR。 | 重新对准激光并按重置按钮重新校准。 | | **光束被遮挡,但无警报** | 侧面眩光或室内环境光漏入传感器。 | 远离窗户或使用更长的 3D 打印防护罩来阻挡环境光。 | | **警笛声断断续续/颤动** | 激光点稍微未对齐或在传感器边缘震动。 | 拧紧您的激光/镜片固定座以消除物理颤动。 |
## 🚀 硬件演进与开发 要查看完整的多阶段开发时间表——包括计划中的 v2.0 硬件保护电路、v3.0 无线物联网功能跟踪以及长期的机械升级——请查看该项目的成长路线图: 👉 **[查看综合项目路线图与未来升级计划](./HARDWARE_ROADMAP.md)**
## 📄 许可证 本项目基于 MIT 许可证授权 - 详情请参阅 [`LICENSE`](./LICENSE) 文件。
标签:3D结构设计, ESP32, KiCad, 传感器网络, 激光防盗, 物理安全, 硬件项目