树莓派如何连接并使用加速计 ADXL345 ?

在这个树莓派加速度计项目中,我们将向您展示如何将 ADXL345 加速度计连接到树莓派。我们还展示了如何编写 Python 脚本进行交互。


本教程将引导您完成将 ADXL345 连接到树莓派的过程。它还逐步介绍了如何实现 Adafruit 的 ADXL34x 库以与设备通信的步骤。两者都是相对简单的过程。

ADXL345 是一款低功耗,3 轴 (可同时跟踪 X ,Y 和 Z 加速度) 的 MEMS 加速度计,利用 I2C 和 SPI 串行接口。

对于那些不知道的人,MEMS 代表微电子机械系统。在加速度计的情况下,这意味着它具有一个微观组件,可用于计算传感器感觉到的当前加速度。

I2C 和 SPI 串行协议的支持使树莓派变得非常容易使用,因为我们不需要任何其他硬件来解释来自加速度计的数据。

还有很多其他适用于树莓派的传感器](/categories/raspberry-pi-sensors/) 都可以与该加速度计一起使用。例如,[距离传感器可以很好地测量传感器与物体之间的距离。

设备

以下是使用树莓派设置 ADXL345 加速度计所需的所有设备。

推荐的

  • 树莓派

  • Micro SD 卡 (如果您使用的是树莓派 2、 3 或 B +(建议使用 8gb +))

  • 电源

  • 面包板线

  • ADXL345 加速度计

可选的

  • 面包板

  • 树莓派外壳

视频

在此视频中,我们将引导您完成将 ADXL345 加速度计连接到树莓派的过程。我们还将向您展示如何设置树莓派与设备对话。

如果您希望使用更详尽的书面指南,则可以继续以下内容。

Adblock 阻止了视频?订阅我们的无广告服务,为我们提供支持。

树莓派 ADXL345 加速度计设置

在本部分的教程中,我们将向您展示如何将数字 ADXL345 加速度计连接到树莓派。

由于 ADXL345 是数字传感器,因此您无需处理任何其他电路,例如模拟到数字转换器。数字化意味着。您可以将传感器直接连接到树莓派。

请按照下面的指南查看如何使用 ADXL345 加速度计设置树莓派。

ADXL345 加速度计电路

下面我们提供了两种方法向您展示如何将加速度计连接到树莓派。

您可以按照图表或使用我们在电线和需要使用的 GPIO 引脚上的书面步骤。

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


准备您的树莓派与加速度计通话

1 在获得树莓派以便从 ADXL345 加速度计检索数据之前,我们必须对 Pi 的配置进行一些更改。

首先,通过运行以下两个命令来确保所有内容都是最新的。

sudo apt-get update
sudo apt-get upgrade

2 树莓派完成更新后,我们将需要继续并启动 Raspberry 配置工具,以便可以在树莓派上启用 I2C **。

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

sudo raspi-config

3 在此屏幕上,您需要转到”** 5 Interface Options **” 菜单。

您可以使用” 箭头键” 导航”raspi-config” 工具菜单。使用 ENTER 键选择特定选项。

4 现在,在接口选项菜单中,继续并选择”** P5 I2C **”。

当询问您是否要启用”ARM I2C 接口” 时,请选择”** <是> “。5** 启用 I2C 接口后,您将需要通过运行以下命令来重新启动树莓派。

sudo reboot

6 现在,我们已经启用了 ** I2C ** 并重新启动了树莓派,我们现在可以继续安装与加速度计通信所依赖的软件包。

运行以下命令进行安装。

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

6 安装了所有必需的软件包之后,现在检查一下树莓派是否可以看到我们的 ADXL345 加速度计。

我们可以通过运行以下命令来做到这一点。

sudo i2cdetect -y 1

通过此命令,您应该会在命令行上看到一些信息。在此结果中,您至少应该看到一个数字,例如”** 53 **”。

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

编写脚本以与 ADXL345 加速度计通信

1 现在将我们需要的所有软件包安装到树莓派中,现在我们可以继续编写一个小的 Python 脚本了。该脚本使我们可以从加速度计读取信息。

要与 ADXL345 进行交流,我们将使用 Adafruit 的 ADXL34x Python 库。要安装此库以便我们可以利用它,您需要运行以下 ** pip 命令 **。

sudo pip3安装 adafruit 电路 python -ADXL34x

2 安装了该库之后,我们现在可以开始编写小型 Python 脚本了。

通过运行以下命令开始写入此文件。

vim 〜/accelerometer.py

3 在我们的新脚本中,编写以下代码行。

导入时间

我们首先导入”** time “库。我们利用” time **” 库,以便可以将脚本休眠一小段时间。

进口板

在这里,我们导入 Adafruit 的”** board **” 库。这个独特的库旨在快速了解设备上可用的引脚。

因此,不用指定特定的引脚,我们可以使用”** board.scl **” 之类的东西,它将为当前微控制器返回正确的引脚。在我们的案例中,这是树莓派。

进口业务

接下来,我们导入 Adafruit 的”** busio **” 模块。该模块包含各种不同的库来处理各种串行协议。我们将使用此模块库来处理 I2C 串行协议。

导入 adafruit _adxl34x

现在,我们导入”** adafruit \ _adxl34x **” 库。该库包含我们从 ADXL345 加速度计读取信息所需的所有代码,并且使过程变得异常简单。

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

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

加速度计= adafruit_adxl34x.ADXL345(i2c)

现在,我们将 ADXL345 库实例化到我们的” 加速度计 “对象中。我们将利用此对象读取并从传感器获取信息。传入库的构造函数,我们传入 I2C 句柄。

而 True :
    打印("%f%f%f"%accelerometer.acceleration)
    time.sleep(0.5)

在这里,我们使用”** while True:**” 开始无限循环。

在这个无限循环内,我们打印出库从加速度计检索到的 ** X Y Z ** 加速度值。

一旦打印了 X ,Y 和 Z 值,然后将脚本休眠半秒钟。

我们休眠该脚本,以防止它被加速度计提供的值淹没命令行。

4 加速度计代码的最终版本应该看起来像下面的样子。对照此检查您的最终代码。

导入时间
进口板
进口业务
导入 adafruit _adxl34x

i2c = busio.I2C(board.SCL,board.SDA)
加速度计= adafruit_adxl34x.ADXL345(i2c)

而 True :
    打印("%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 现在,我们知道加速度计正在返回数据,并且树莓派可以正确读取,我们可以探索 ADXL345 库的其他一些功能。

探索 ADXL345 加速度计库 1 在本树莓派加速度计教程的这一部分中,我们将探索 Adafruit 的 ADXL345 加速度计库提供的其他一些功能。

特别是,我们将研究库启用后可以自动检测到的” 事件 “。

首先,让我们使用以下命令打开”** accelerometer.py **” 脚本。

vim 〜/accelerometer.py

2 在文件中,找到并添加以下所示的行。我们将解释每个新部分的用途和作用。

加速度计= adafruit_adxl34x.ADXL345(i2c)

在上方一行下方添加以下行。

accelerometer.enable_freefall_detection(阈值= 10,时间= 25)

此行启用库自由落体检测事件。它包含两个变量,一个是阈值,另一个是时间。

阈值是所有轴上的加速度必须低于的值,才能将其记录为下降。比例因子是 62 .5 mg,因此我们的示例是 10 \ * 62.5 = 625 mg **。

接下来,** time 变量是所有轴上的加速度必须小于它们注册为下降的阈值的时间。比例因子是 5 毫秒,因此我们的示例是 25×5 = 125ms **。

accelerometer.enable_motion_detection(阈值= 18)

此行启用库运动检测事件。它接受一个变量,即阈值。

阈值变量是所有轴上的加速度必须超过的值才能检测到运动。如果发现它太敏感或不够敏感,可以修改此值。比例因子是 62 .5 mg,因此我们的示例是 ** 18 \ * 62.5 = 1125 mg **。

accelerometer.enable_tap_detection(tap_count = 1,阈值= 20,持续时间= 50,延迟= 20,窗口= 255)

此行启用库点击检测事件。

** tap \ _count ** 变量是您要检测单击还是双击。将其设置为 1 (单次点击) 或 2 (双次点击)。

接下来是 ** threshold ** 变量,这是您想要敲击的敏感程度,值越大,代码对检测敲击的敏感性越低。像其他阈值变量一样,比例因子为 62 .5 mg。

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

现在,” 延迟” 变量是在初始脉冲之后开始寻找第二个抽头的时间长度。延迟值应以毫秒为单位。

最后,** window ** 变量是代码应查找第二次敲击发生的时间长度。同样,该值应以毫秒为单位。

打印("%f%f%f"%accelerometer.acceleration)

在下面添加以下行

    print("Dropped:%s"%accelerometer.events ["freefall"])
    打印("点击:%s"%accelerometer.events ['tap'])
    打印("检测到运动:%s"%accelerometer.events ['motion'])

这些额外的行显示了我们先前在脚本中激活的所有事件的状态。这些打印行将使您知道当前是否正在触发任何事件。

通常,您不会一次检查所有这些事件。

3 在对加速度计代码进行了所有更改之后,它看起来应该有点像下面的内容。

导入时间
进口板
进口业务
导入 adafruit _adxl34x

i2c = busio.I2C(board.SCL,board.SDA)
加速度计= adafruit_adxl34x.ADXL345(i2c)
accelerometer.enable_freefall_detection(阈值= 10,时间= 25)
accelerometer.enable_motion_detection(阈值= 18)
accelerometer.enable_tap_detection(tap_count = 1,阈值= 20,持续时间= 50,延迟= 20,窗口= 255)

而 True :
    打印("%f%f%f"%accelerometer.acceleration)
    print("Dropped:%s"%accelerometer.events ["freefall"])
    打印("点击:%s"%accelerometer.events ['tap'])
    打印("检测到运动:%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
删除:错误
窃听:错误
检测到运动:错误

完成所有这些之后,您现在应该对如何在树莓派上使用 ADXL345 加速度计有所了解。

我希望本树莓派加速度计教程能够教您设置 ADXL345 的所有基本知识。如果您有任何疑问,反馈或其他问题,请与我联系。

分享到