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

时间:2016-04-09 04:14:40

标签: python raspberry-pi

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

如果您对实际价值不感兴趣,那么可能只需对组件求和就可以了;

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

但是在这种情况下,可能发生一个轴上的正加速度被另一个轴上的负加速度抵消了!而且您必须测试一个大于阈值且小于阈值负值的值。

修改

根据datasheet,ADXL345是一款三轴加速度计。这本身可以检测旋转! 要检测旋转,您需要加速度计和陀螺仪的组合,例如MPU-6050

可能解决这个问题的方法是将加速度计固定在铰链对面的门边缘。这样,当门打开时,它将经历最线性的加速。但是开门的加速度非常低。它可能低于此传感器的检测阈值,尤其是当门缓慢打开时。

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