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

如何在Python中修改IF语句以仅使用来自ADXL345加速计的轴数据确定运动?,python,raspberry-pi,Python,Raspberry Pi,我正在进行一个项目,使用raspberry pi 2和adxl345加速计检测门运动,并在打开加速计连接的门时发出警报。以下是我需要帮助的代码示例: axes = adxl345.getAxes(True) if axes['z'] >= 0: print "Intruder Detected" 我已经有了一个单独的python文件,它将x、y和z轴的读数输出为Gs。我不知道应该使用哪个轴,或者是否应该使用轴读数的组合来确定开门的动作。任何帮助都将不胜感激,因为这是我项目的最

我正在进行一个项目,使用raspberry 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是一个三轴加速计。它本身无法检测旋转! 为了检测旋转,你需要一个加速计和陀螺仪的组合,比如

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


检测门是否打开的更好方法是在门和把手侧框架之间的pi输入引脚上安装一个开关。即使车门稍微打开,也会启动开关。

这取决于车门打开的方向。不管怎样,你可能需要附加它并检查阅读器,然后根据它建立你的算法。我的问题是我实际上不知道阅读要寻找什么。我的物理知识还不太好,所以我不太熟悉轴如何决定运动。这就是我的意思:)。将其连接到门,并在打开门时记录值。从中,您将看到哪些值对于检测门打开非常重要。门开成一个圆圈。我想象x和y坐标将沿着从关闭到打开的正弦路径。或者,它可能足以检查任何轴的变化是否超过某个阈值,足以检测门是否打开,因为它通常是平稳的,所以似乎圆周运动根本不会影响加速度计的读数。当加速度处于任何垂直方向时,所有3个值保持几乎相同。看起来垂直或水平翻转只会影响数值,但不会影响任何形式的旋转运动(类似于旋转陀螺的运动,但速度较慢)。当前,加速计的方向是,标记为x的箭头直接指向加速计的背面。如果您可以使其在任何方向上工作,您不必担心传感器的方向。确保将加速度传感器放在车门把手的一侧,而不是铰链的一侧。经过多次测试后,无论出于何种原因,我的加速度传感器都无法检测到圆周运动的任何变化。无论门连接后如何移动,所有3个轴都保持不变。它唯一的变化是当方向从水平放在桌子上变成垂直站立时。你在哪里把它贴在门上的?