4. 加速計資料寄存器
加速計資料寄存器的位址為59到64,共48個二進制位,如下:

其使用方法與陀螺儀資料寄存器類似,同樣需要在寄存器28來對加速計進行配置與設定量程,通過量程對應的靈敏度來計算得到真實的加速度值。
5. 加速計配置寄存器
陀螺儀配置寄存器的位址為28,是一個可讀可寫的寄存器,如下:
XA_ST,YA_ST,ZA_ST都是自檢執行控制位,AFS_SEL用來設定量程,其與靈敏度對應關系如下:
AFS_SEL 量程範圍 靈敏度參數
0 ±2 16384
1 ±4g 8192
2 ±8g 4096
3 ±16g 2048
6. 溫度資料寄存器
溫度資料寄存器的位址為65到66,共16個二進制位,如下:
對于測量到的溫度資料為有符号數,需要采用如下的計算公式得到真實的攝氏度資料:
攝氏溫度 = TEMP_OUT / 340 + 36.53
除此之外,還有許多功能傳感器,如采樣率配置等,有需要可以從晶片手冊查到。
三. 編寫代碼
完成了前面的基礎準備工作,編寫代碼擷取傳感器子產品的資料則非常容易,示例代碼如下:
#coding:utf-8
import smbus
import math
import time
# 電源控制寄存器位址
power_regist = 0x6b
# I2C子產品初始化
bus = smbus.SMBus(1)
# 外接I2C裝置的位址
address = 0x68
# 封裝一些讀取資料的功能函數
# 讀取一個字長度的資料(16位)
def readWord(adr):
high = bus.read_byte_data(address, adr)
low = bus.read_byte_data(address, adr+1)
val = (high << 8) + low
return val
# 将讀取到的資料轉換為原碼 (有符号數本身是采用補碼方式存儲的)
def readWordReal(adr):
val = readWord(adr)
x = 0xffff
# 首位為1 表示是負數
if (val >= 0x8000):
# 求原碼
return -((x - val)+1)
else:
return val
# 已知加速度求角度值
def dist(a, b):
return math.sqrt((a*a)+(b*b))
def getRotationX(x, y, z):
radians = math.atan2(y, dist(x,z))
return math.degrees(radians)
def getRotationY(x, y, z):
radians = math.atan2(x, dist(y,z))
# 設定電源模式
bus.write_byte_data(address, power_regist, 0)
while True:
time.sleep(0.5)
print("螺旋儀資料-----------")
gyroX = readWordReal(0x43)
gyroY = readWordReal(0x45)
gyroZ = readWordReal(0x47)
print("X軸陀螺儀原始資料:", gyroX, "X軸每秒旋轉度數:", gyroX/131)
print("Y軸陀螺儀原始資料:", gyroY, "Y軸每秒旋轉度數:", gyroY/131)
print("Z軸陀螺儀原始資料:", gyroZ, "Z軸每秒旋轉度數:", gyroZ/131)
print("加速度資料----------")
accelX = readWordReal(0x3b)
accelY = readWordReal(0x3d)
accelZ = readWordReal(0x3f)
print("X軸加速度原始資料:", accelX, "X軸加速度:", accelX/16384)
print("Y軸加速度原始資料:", accelY, "Y軸加速度:", accelY/16384)
print("Z軸加速度原始資料:", accelZ, "Z軸加速度:", accelZ/16384)
print("攝氏溫度資料--------")
temp = readWordReal(0x41)
print("溫度原始資料:", temp, "攝氏度:", temp/340 + 36.53)
print("旋轉家角度資料-------")
print("X軸旋轉度數:", getRotationX(accelX/16384, accelY/16384, accelZ/16384))
print("Y軸旋轉度數:", getRotationX(accelX/16384, accelY/16384, accelZ/16384))
在樹莓派上運作上面代碼,效果如下圖所示: