要根据 MPU6050 测得的俯仰角(Pitch)变化 来判断一次运动是否发生,可以结合 角度变化幅度、变化速率(角速度)和时间连续性 进行分析。以下是具体方法:
1. 设定阈值检测(静态→动态)
-
原理:当俯仰角的变化超过设定的阈值时,认为发生了运动。
-
步骤:
-
计算角度变化量:
-
记录初始俯仰角 θ0(静止状态下的基准值)。
-
实时监测当前俯仰角 θt,计算变化量 Δθ=∣θt−θ0∣。
-
-
设定角度阈值:
-
例如:Δθ>5°(具体阈值需根据应用场景调整,避免噪声误触发)。
-
-
触发条件:
-
当 Δθ 持续超过阈值一段时间(如 100ms),判定为有效运动。
-
-
2. 结合角速度(动态检测)
-
原理:仅用角度可能响应较慢,可配合陀螺仪的 Y轴角速度(Pitch 方向角速度) 提高灵敏度。
-
步骤:
-
读取陀螺仪的 Y 轴角速度 ωy(单位:°/s)。
-
设定角速度阈值(如 ∣ωy∣>10°/s)。
-
联合判断:
-
若 Δθ>阈值 且 ωy>阈值,则判定为运动发生。
-
-
3. 时间窗口滤波(抗噪声)
-
原理:避免瞬时噪声(如振动)误触发。
-
方法:
-
在 固定时间窗口(如 200ms) 内,若俯仰角变化持续超过阈值,才判定为运动。
-
示例代码逻辑(伪代码):
if abs(current_pitch - initial_pitch) > threshold:motion_counter += 1if motion_counter > time_window:trigger_motion_event() else:motion_counter = 0
-
4. 运动方向判断(可选)
-
通过俯仰角变化的 符号(正/负) 区分运动方向:
-
正角度变化:抬头/向后倾斜(如从水平到仰头)。
-
负角度变化:低头/向前倾斜(如从水平到俯身)。
-
5. 实际应用注意事项
-
校准初始状态:
-
启动时需静止 1~2 秒,校准初始俯仰角 θ0(消除零偏)。
-
-
动态阈值调整:
-
在高速运动场景中,可适当提高阈值;高精度场景则降低阈值。
-
-
传感器融合:
-
若需更高可靠性,可结合加速度计和陀螺仪数据(互补滤波或卡尔曼滤波),减少漂移影响。
-
示例场景
-
点头检测:
-
俯仰角快速变化(如 Δθ>15°)且角速度 ωy>30°/s,判定为一次点头动作。
-
-
跌倒检测:
-
俯仰角持续增大(如 Δθ>60°)并保持,可能表示跌倒。
-
总结
通过 俯仰角变化量 + 角速度 + 时间滤波 的组合策略,可以可靠地检测运动事件。具体参数需根据实际传感器噪声、运动速度和环境干扰进行调优。