树莓派如何测量加速度,使用ADXL345加速度传感器

在这个Raspberry Pi加速度传感器项目中,我记录了下如何用Raspberry Pi驱动ADXL345加速度传感器,还展示了如何编程一个Python脚本来与它交互。

Raspberry-Pi-ADXL345-Accelerometer-Thumbnail.jpg

 

ADXL345是一款采用I2C和SPI串行接口的低功耗、3轴(可跟踪X、Y和Z加速度)MEMS加速度传感器。

MEMS是微电子机械系统的意思,它有一个微观组件,用于计算传感器感受到的加速度。

因为支持I2C和SPI串行协议,Raspberry Pi可以很方便地以ADXL345交互,因为不需要任何额外的硬件来解析来自加速度传感器的数据。

Raspberry Pi还有很多其他的传感器,可以和这个加速度计一起使用。例如,距离传感器在测量传感器与物体的距离方面会很好。

设备清单

以下是在树莓派上设置ADXL345加速度计所需的所有设备,点击链接直达优惠购买

建议

可选

树莓派ADXL345加速度传感器配置

在这部分教程中,将展示如何将数字ADXL345加速度计连接到树莓派。

ADXL345是一个数字传感器,所以不需要额外的电路,如模拟到数字转换器。数字传感器可以直接连接到树莓派上。

下面请跟随指南来看看如何设置Raspberry Pi与ADXL345加速度计吧。

ADXL345加速度传感器电路

下面包括了两种方法来展示如何将加速度计连接到Raspberry Pi。

可以按照图示或利用文字步骤了解需要使用的电线和GPIO引脚。

  • 将加速度计的GND引脚连接到树莓派的物理引脚6(GND)。
  • 将加速计的VCC引脚连接到Raspberry Pi的物理引脚1(3v3)。
  • 将加速度计的SDA引脚连接到树莓派的物理引脚3(SDA)。
  • 将加速度计的SCL引脚连接到树莓派的物理引脚5(SCL)。

Raspberry-Pi-ADXL345-Accelerometer-Wiring-Schematic.png

配置Raspberry Pi与加速度传感器交互

1. 在Raspberry Pi从ADXL345加速计中读取数据之前,必须对Pi的配置进行一些更改。

首先,让运行以下两个命令来确保所有软件包都是最新的。

sudo apt-get update
sudo apt-get upgrade

2. 当Raspberry Pi完成更新后,需要启动Raspberry配置工具,这样就可以在Raspberry Pi上启用I2C。

运行以下命令启动 raspi 配置工具。

sudo raspi-config

3. 在这个屏幕上,导航到 “5 Interfacing Options“菜单。

可以使用箭头键来浏览 raspi-config 工具菜单。使用 ENTER 键选择特定选项。

4. 现在在接口选项菜单中选择 “P5 I2C”。

当被问是否要启用ARM I2C接口时,选择”<YES>”。

5. 启用I2C接口后,需要通过运行以下命令重新启动Raspberry Pi。

sudo reboot

6. 现在已经启用了I2C并重新启动了Raspberry Pi,可以安装依赖包来与加速度传感器交互了。

运行以下命令进行安装。

sudo apt-get install python3-dev python3-pip python3-smbus i2c-tools -y

6. 安装了所有所需的软件包后,现在检查一下Raspberry Pi是否能看到ADXL345加速度计。

可以运行以下命令来实现。

sudo i2cdetect -y 1

从这个命令中,应该看到命令行上显示了相当多的内容。在这个结果中,至少应该看到一个数字,如 “53”。

如果什么都没有出现,请确保已经将ADXL345加速度计正确连接到Raspberry Pi,并且传感器引脚上的所有焊接点都是干净的。如果看到错误,请尝试重新启用I2C。

编写Python脚本以与ADXL345加速度计交互

1. 现在需要的包都已经安装到树莓派上了,可以编写一个小的Python脚本。这个脚本是为了能够从加速度计中读取信息。

为了与ADXL345交互,需要利用Adafruit的ADXL34x Python库,运行以下pip命令。

sudo pip3 install adafruit-circuitpython-ADXL34x

2. 安装好库后,现在可以继续编写Python脚本。

通过运行以下命令写入这个文件。

nano ~/accelerometer.py

3. 在新脚本中,写下以下几行代码:

import time

先导入 “time “库,利用 “time “库,可以让脚本短时间内进入睡眠状态。

import board

这里导入Adafruit的 “board “库。这个独特的库是为了了解设备上有哪些引脚可用。

因此,可以使用类似 “board.scl “这样的东西来代替指定一个特定的引脚,这将返回当前微控制器的正确引脚。在我的例子中,是Raspberry Pi。

import busio

接下来,导入Adafruit的 “busio “模块。这个模块包含各种不同的库来处理各种串行协议。使用该模块库来处理I2C串行协议。

import adafruit_adxl34x

现在导入 “adafruit_adxl34x “库。这个库包含了从ADXL345加速度计中读取信息所需的所有代码,并让操作变得非常简单。

i2c = busio.I2C(board.SCL, board.SDA)

在这里,利用 “busio “库为当前板子的SCL和SDA引脚准备一个I2C连接。将句柄存储到 “i2c “变量中。

accelerometer = adafruit_adxl34x.ADXL345(i2c)

现在将ADXL345库实例化到 “accelerometer“对象中。利用这个对象来读取和获取传感器的信息。在库的构造函数中,传递I2C句柄。

while True:
    print("%f %f %f"%accelerometer.acceleration)
    time.sleep(0.5)

在这里,使用 “while True: “开始一个无限循环。

在这个无限循环中,打印出X、Y和Z加速度值,这些值是由库从加速度计中读取出来的。

打印出X、Y和Z值后,让脚本休眠半秒。

4. 加速计代码的最终版本应该是下面这个样子。请对照这个检查你的最终代码。

import time
import board
import busio
import adafruit_adxl34x

i2c = busio.I2C(board.SCL, board.SDA)
accelerometer = adafruit_adxl34x.ADXL345(i2c)

while True:
    print("%f %f %f"%accelerometer.acceleration)
    time.sleep(1)

所有都妥当之后,可以按CTRL+X然后按Y然后按ENTER键来保存它。

5. 现在代码已经完成了,运行下面的命令来运行这个脚本。

python3 ~/accelerometer.py

6. 通过运行这段代码,应该开始看到从加速度计读入的数值。

0.117680 0.313813 8.355266
0.117680 0.313813 8.394492
0.117680 0.313813 8.355266
0.117680 0.353039 8.316039
0.117680 0.431493 8.316039
0.117680 0.313813 8.276813

7. 现在知道加速度计正在返回数据,而且树莓Pi正在正确读取,可以探索ADXL345库的一些其他功能。

探索ADXL345加速度计库

1. 在本节Raspberry Pi加速度计教程中,看看Adafruit的ADXL345加速度计库提供的其他一些功能。

特别关注库在启用时可以自动检测的 “events“。

首先,使用下面的命令打开 “accelerometer.py “脚本。

nano ~/accelerometer.py

2. 在该文件中,找到并添加如下所示的行。

寻找

accelerometer = adafruit_adxl34x.ADXL345(i2c)

在上一行下面加上以下几行:

accelerometer.enable_freefall_detection(threshold=10, time=25)

这一行使库中的自由落体检测事件得以实现,它需要两个变量,一个是阈值,另一个是时间。它需要两个变量,一个是阈值,另一个是时间。

阈值是指所有轴上的加速度必须低于该值才能认为是下降。比例系数是62.5毫克,所以我的例子是10*62.5=625毫克。

接下来,时间变量是指所有轴上的加速度必须小于阈值的时间,这样的情况被识别为下降。比例系数是5ms,所以我的例子是25×5=125ms。

accelerometer.enable_motion_detection(threshold=18)

这一行启用了库中的运动检测事件。它接收一个变量,即阈值。

阈值变量是所有轴上的加速度必须超过的值,才能检测到运动。如果你发现这个值太敏感或不够敏感,你可以修改这个值。比例系数是62.5毫克,所以我们的例子是18*62.5=1125毫克。

accelerometer.enable_tap_detection(tap_count=1, threshold=20, duration=50, latency=20, window=255)

这一行是启用了库敲击检测功能

tap_count 变量是指想检测单次敲击还是两次敲击。设置为1代表单次分接,2代表两次分接。

接下来是阈值变量,这是希望检测的灵敏度,数值越高,代码检测的灵敏度就越低。和其他阈值变量一样,系数是62.5毫克。

持续时间变量是指运动发生的时间长度(纳秒)。如果运动的持续时间过长,则不会被检测为轻敲。该值需要以毫秒为单位。

现在,延迟变量是初始脉冲后开始寻找第二个分接的时间长度。延时值的单位应该是ms。

最后,window 变量是代码寻找第二个敲击的时间长度。同样,这个值的单位应该是 ms。

寻找

print("%f %f %f"%accelerometer.acceleration)

在下面增加以下几行

    print("Dropped: %s"%accelerometer.events["freefall"])
    print("Tapped: %s"%accelerometer.events['tap'])
    print("Motion detected: %s"%accelerometer.events['motion'])

这些额外的行打印出在脚本中之前激活的所有事件的状态。这些打印行让我们知道当前是否有事件被触发。

通常情况下,不会在同一时间检查所有这些事件。

3. 在对加速度计代码做了所有修改后,它应该有点像我下面的代码。

import time
import board
import busio
import adafruit_adxl34x

i2c = busio.I2C(board.SCL, board.SDA)
accelerometer = adafruit_adxl34x.ADXL345(i2c)
accelerometer.enable_freefall_detection(threshold=10, time=25)
accelerometer.enable_motion_detection(threshold=18)
accelerometer.enable_tap_detection(tap_count=1, threshold=20, duration=50, latency=20, window=255)

while True:
    print("%f %f %f"%accelerometer.acceleration)
    print("Dropped: %s"%accelerometer.events["freefall"])
    print("Tapped: %s"%accelerometer.events['tap'])
    print("Motion detected: %s"%accelerometer.events['motion'])
    time.sleep(0.5)

都写好后,可以按CTRL + X,然后按Y,然后按ENTER键来保存它。

4. 现在代码已经完成,运行下面的命令来运行这个脚本。

python3 ~/accelerometer.py

5. 运行这段代码,应该开始看到文本被打印到命令行,显示收到的X、Y、Z位置以及所有事件的状态。

0.235360 0.353039 8.355266
Dropped: False
Tapped: False
Motion detected: False

完成了这一切,你现在应该对如何将ADXL345加速度计与Raspberry Pi一起使用有了一定的了解。

希望这篇Raspberry Pi加速度传感器的教程能够告诉你设置ADXL345的所有基础知识。如果你有任何问题和反馈,请不要犹豫,在下面留言。

平均: 5 / 5. votes: 3

到目前为止还没有投票!成为第一位评论此文章。

欢迎转载,请留下出处链接:Labno3 » 树莓派如何测量加速度,使用ADXL345加速度传感器

赞 (0)

评论

2+3=