负一.树莓派引脚说明
零.ADXL345基础
ADXL345是一个数字传感器,所以不需要额外的电路,如模拟到数字转换器。数字传感器可以直接连接到树莓派上。
0.1.ADXL345坐标系
方向规定:右手系
ADXL345传感器以各种不同方式静置时传感器的理想输出值(实际中由于器件偏差,尤其是Z轴很难保证输出纯正的±1g):
一.系统配置
1.1 连线说明
控制时由于树莓派的SDA/SCL均只有一个,所以控制代码里不涉及引脚说明
下列接线方式供参考
加速度计的VCC引脚连接到树莓派的物理引脚1(3v3)。
加速度计的SDA引脚连接到树莓派的物理引脚3(SDA)。
加速度计的SCL引脚连接到树莓派的物理引脚5(SCL)。
加速度计的GND引脚连接到树莓派的物理引脚地线(GND)(GND口可随意连接,6/9/14/…均可)。
1.2树莓派配置
- 在Raspberry Pi从ADXL345加速计中读取数据之前,必须对Pi的配置进行一些更改。
首先,让运行以下两个命令来确保所有软件包都是最新的。
sudo apt-get update
sudo apt-get upgrade
- 当Raspberry Pi完成更新后,需要启动Raspberry配置工具,这样就可以在Raspberry Pi上启用I2C。
运行以下命令启动 raspi 配置工具。
sudo raspi-config
- 在这个屏幕上,导航到 "5 Interfacing Options"菜单。
可以使用箭头键来浏览 raspi-config 工具菜单。使用 ENTER 键选择特定选项。 - 现在在接口选项菜单中选择 “P5 I2C”。
当被问是否要启用ARM I2C接口时,选择"yes"。
然后点击finish - 启用I2C接口后,需要通过运行以下命令重新启动Raspberry Pi。
稍等片刻后等待系统重启,VNC的连接需要一段时间
sudo reboot
- 现在已经启用了I2C并重新启动了Raspberry Pi,可以安装依赖包来与加速度传感器交互了。
运行以下命令进行安装。
sudo apt-get install python3-dev python3-pip python3-smbus i2c-tools -y
- 安装了所有所需的软件包后,现在检查一下Raspberry Pi是否能看到ADXL345加速度计。
可以运行以下命令来实现。
sudo i2cdetect -y 1
从这个命令中,应该看到命令行上显示了相当多的内容。在这个结果中,至少应该看到一个数字,如 “53”。
如果什么都没有出现,请确保已经将ADXL345加速度计正确连接到Raspberry Pi,并且传感器引脚上的所有焊接点都是干净的。如果看到错误,请尝试重新启用I2C
8.此步最重要!!!
为了与ADXL345交互,需要利用Adafruit的ADXL34x Python库,运行以下pip命令。
sudo pip3 install adafruit-circuitpython-ADXL34x
1.3 ADXL I2C说明
在默认状态下,树莓派的I2C传输速率为100kHz,此时ODR为200kHz(即两次采样之间的最短间隔时长为0.005秒)
修改树莓派I2C传输速率的方式:
【1】sudo nano /boot/config.txt
【2】在打开的文件中添加一行dtparam=i2c1_baudrate=600000(假设我们将其设置为600khz).
【3】sudo reboot重启
二.控制代码,无限循环版
python,如果之前的设置没有出现问题,以下代码即可运行
import time #利用 "time "库,可以让脚本短时间内进入睡眠状态
import board #导入Adafruit的 "board "库,为了了解设备上有哪些引脚可用。
import busio #busio包含各种不同的库来处理各种串行协议,用来处理I2C串行协议。
import adafruit_adxl34x #adafruit_adxl34x库包含了从ADXL345加速度计中读取信息所需的所有代码
i2c = busio.I2C(board.SCL, board.SDA)#利用busio 库为当前板子的SCL和SDA引脚准备一个I2C连接,并将句柄存储到i2c变量中。
#将ADXL345库实例化到accelerometer对象中,来读取和获取传感器的信息。在库的构造函数中,传递I2C句柄。
accelerometer = adafruit_adxl34x.ADXL345(i2c)
#依次打印出XYZ轴加速度的数据
while True:
print("%f %f %f"%accelerometer.acceleration)
time.sleep(1)
Thonny里的运行效果,在shell里导出测量数据:
三.控制代码,有限循环+画图+数据记录至txt文件版
代码,这里以记录z轴数据为例
import time
import board
import busio
import adafruit_adxl34x
import matplotlib.pyplot as plt
import numpy as np
i2c = busio.I2C(board.SCL, board.SDA)
accelerometer = adafruit_adxl34x.ADXL345(i2c)
DeltaTime=0.1#连续两次采样点的时间间隔,单位为秒;有下限,默认下限0.005秒
N=100 #记录的数据的总数
data=list(range(0,N))#data记录传感器某轴数据
for i in range(N):
print("DataNumber:%f"%i)
print("%f %f %f"%accelerometer.acceleration)
data[i]=accelerometer.acceleration[2]#[0]是x轴,[1]是y轴,[2]是z轴
time.sleep(DeltaTime)#每隔()秒采集一次数据
#绘图
time=np.linspace(1,N,N)#生成从1到N的维度为N的一维数组
time=np.multiply(DeltaTime,time)
fig,ax=plt.subplots()
ax.plot(time,data,'b',linewidth=1)
plt.xlabel("time(s)",loc='center')
plt.ylabel("Data-Z axle(m/s^2)",loc='center')
plt.show()
#记录数据至文件(同一文件夹内)
np.savetxt('Data-time.txt',time,delimiter=',')#导出时间数据
np.savetxt('Data-Z.txt',data,delimiter=',')#导出加速度数据
图片数据:时间间隔为0.1秒,100个数据,z轴加速度
python画图链接
文件及数据
注:文件可用U盘传输分析