如何在Python中修改IF语句以仅使用ADXL345加速计的轴数据来确定运动



我正在进行一个项目,使用树莓pi 2和adxl345加速度计来检测门的运动,并在打开与加速度计相连的门时发出警报。以下是我需要帮助的代码示例:

axes = adxl345.getAxes(True)
if axes['z'] >= 0: 
    print "Intruder Detected" 

我已经有一个单独的python文件,它将x、y和z轴的读数输出为Gs。我不知道我应该使用哪个轴,或者我是否应该使用轴读数的组合来确定开门的动作。任何帮助都将不胜感激,因为这是我项目的最后一点。谢谢

使用当前代码,这取决于加速度计相对于门的方向。

一种可能的解决方案是确定加速度矢量的长度。这应该适用于任何方向;

axes = adxl345.getAxes(True)
accel = math.sqrt(axes['x']**2 + axes['y']**2 + axes['z']**2)

如果你对实际值不感兴趣,你可能会只对分量求和;

accel = axes['x'] + axes['y'] + axes['z']

但在这种情况下,一个轴上的正加速度可能会被另一轴上的负加速度抵消!你必须测试一个大于阈值和小于阈值负值的值。

编辑

根据数据表,ADXL345是一款三轴加速度计。它本身可以而不能检测旋转!为了检测旋转,你需要一个加速度计和陀螺仪的组合,比如MPU-6050。

绕过这一问题的一种可行方法是将加速度计固定在铰链对面的车门边缘。这样,当车门打开时,它将经历最大的线性加速度。但是一扇打开的门的加速度很低。它可能低于该传感器的检测阈值,尤其是当车门缓慢打开时。

检测门打开的更好方法是在门和把手侧的框架之间放置一个连接到pi输入引脚的开关。即使是一个小小的门打开也会激活开关。

最新更新