基于 PIR 运动传感器与 Particle Photon 2 的自动作业页面触发系统
——“门一开,我就在写作业” 的智能自控解决方案
1. 引言:把童年阴影做成一个项目
许多人都有类似的经历:正专心玩游戏时,房门突然被推开。电脑屏幕上还来不及切换,“暴露瞬间” 已经发生。
本项目从一个有趣的日常问题出发,构建了一个自动化系统——只要检测到房门被推开(即检测到运动),电脑端就自动切换到“作业页面”(如 Google Classroom)。
整个系统背后涉及:
PIR 运动检测传感器
Particle Photon 2 Wi-Fi 微控制器
Webhook 数据推送机制
Node.js 本地服务器
ngrok 公网通道转发
AutoHotkey 本地脚本自动触发浏览器动作
这个项目虽然玩法轻松,但实际上十分完整,涵盖 IoT 设备输入、云事件发布、Webhook 回调、桌面端自动化等多个技术点。

2. 系统整体工作流程
完整系统由三个部分共同运行:
PIR 运动传感器 → Photon 2 → Webhook → ngrok → Node.js → AutoHotkey → 打开作业网页
流程分解如下:
PIR 运动传感器 检测到门打开时的运动。
Photon 2 读取传感器状态,如果从 LOW→HIGH 发生变化,则发布云事件
switchTabs1。Particle Cloud 将事件推送到预设 webhook。
ngrok 暴露本地 Node.js 服务器的公网地址。
Node.js 服务端脚本 接收 webhook 调用,本地执行系统命令。
AutoHotkey (AHK) 脚本自动打开 Google Classroom 或任何指定“作业页面”。
最终,实现“父母开门 → 电脑立即跳到作业页面”的效果。
3. 使用到的硬件与软件组件
3.1 硬件组件
| 组件 | 数量 | 功能说明 |
|---|---|---|
| PIR Motion Sensor | 1 | 检测人体运动(门开动作被视为运动) |
| Particle Photon 2 | 1 | Wi-Fi MCU,用于读取传感器并发布事件 |
| 杜邦线 + 面包板 | 若干 | 原型连接 |
| Micro-USB 数据线 | 1 | 为 Photon 2 通电与编程 |
3.2 软件组件
| 软件 | 功能 |
|---|---|
| Particle Web IDE | 编写与烧录 Photon 2 端固件 |
| Node.js | 本地服务器,接收 webhook 回调 |
| ngrok | 为本地 Node.js 开端口映射到公网 |
| AutoHotkey | 自动执行电脑端操作,如打开网页 |
4. 系统安装与运行方式概述
使用前需要先启动两个服务:
① Node.js 本地服务器
用于监听来自 Photon 2 Webhook 的 HTTP 请求。
启动方式(示例):
node index.js
② 启动 ngrok
将 Node.js 服务器暴露为公网地址:
ngrok http 3000
ngrok 输出中会包含类似:
https://abc123.ngrok.io → http://localhost:3000
该地址就是 Webhook 在 Photon 端配置时使用的 URL。
5. 硬件搭建
PIR 传感器通常有三个引脚:
VCC → Photon 2 3V3
GND → Photon 2 GND
OUT → Photon 2 D6
你将传感器通过胶带固定在桌角,使其能直接“看到”房门,避免误触发。
6. 核心代码解析
6.1 Photon 2 端固件(读取 PIR → 发布 webhook 事件)
你提供的代码如下:
#include "Particle.h"
int motionSensor = 6;
int lastMotionState = LOW;
void setup()
{
pinMode(motionSensor, INPUT);
Serial.begin(9600);
}
void loop()
{
int motionState = digitalRead(motionSensor);
if (motionState == HIGH && lastMotionState == LOW)
{
Particle.publish("switchTabs1");
Serial.println("Motion sensed");
}
lastMotionState = motionState;
}功能说明:
从 D6 引脚读取 PIR 输出。
检测到 LOW → HIGH 的上升沿视为“检测到新运动”。
调用
Particle.publish("switchTabs1")发布事件。Cloud 将事件推送到 webhook URL。
7. 电脑端逻辑(Node.js + AutoHotkey)
当 webhook 到达本地 Node.js 服务器后:
Node.js 脚本收到请求;
调用 AutoHotkey 脚本;
AutoHotkey 脚本执行:
Run, https://classroom.google.com
即可自动打开你的作业页面。
这使得“检测运动 → 自动切换到作业浏览器标签页”成为可能。
8. 最终效果展示
完成搭建后,系统表现如下:
当房门被推开时,PIR 检测到运动;
Photon 2 立即发出云事件;
电脑端收到 webhook;
AutoHotkey 自动切换到作业页面;
屏幕上瞬间出现 Google Classroom,完美掩护。
你的视频演示展示了整个触发过程,非常有趣,也具有极高的互动性。

9. 工程化分析与可扩展性
尽管项目旨在“娱乐与隐藏游戏界面”,但技术架构十分完整,值得扩展为更多严肃用途:
家庭自动化:门禁检测、灯光触发、语音提醒
实验室与办公空间的入侵/访问监控
私人工作站自动锁屏
结合摄像头的事件触发式录影
未来还可加入:
Photon 2 端增加防抖动逻辑与事件冷却时间;
用 WebSocket 代替 webhook,实现更低延迟;
将 ngrok 替换为局域网监听 + 局域网触发脚本;
使用云平台执行更多动作(IFTTT、Home Assistant 等)。
10. 总结
这个项目虽然故事轻松,动机有趣,但技术路径完整,逻辑清晰,是一个非常好的 IoT 入门 Showcase:
传感器输入(PIR)
边缘计算(Photon 2)
云事件与 webhook
公网穿透(ngrok)
本地服务端执行(Node.js)
桌面自动化(AutoHotkey)
是一个“从物理世界到电脑桌面”的完整链路示例。












评论