树莓派用python处理mpu6500数据

用的是wiringpi库

具体如何导入wiringpi库大家就先自行百度哈



#小灰灰原创
import threading#这是一个线程库 用于定时器 先不管这个

import wiringpi#导入wiringpi库

from math import atan2#导入一个数学公式

def getdata(mpu,address):#定义一个函数:把mpu读取的16位数据进行合成,并判断数据的正负

   
	x=((wiringpi.wiringPiI2CReadReg8(mpu,address)<<8 |wiringpi.wiringPiI2CReadReg8(mpu,address+1)))#(wiringpi.wiringPiI2CReadReg8(mpu,address)表示从address这个地址读取一个8位数据   然后合成这两个8位数据
   
	return x-65536 if x>=32767 else x#python是不能判断第一位是正还是负,所以我们要对数据进行处理

def read_ax_angle():#定义一个函数来读取x轴与z的夹角

   
	x=getdata(mpu,0x3B)

   
	z=getdata(mpu,0x3F)

   
	ax_angle=atan2(x,z)*57.2957804

   
	return ax_angle

def gyroyinit():#陀螺仪初始化

   
	global angle#声明全局变量以达到时刻更改当前角度

   
	wiringpi.wiringPiI2CWriteReg16(0x68,0x1B,0x08)#500dbs--0x08#设置陀螺仪的精度位500dps
   
	angle=read_ax_angle()#把陀螺仪的初始角度设置为加速度计读取出来的角度
	
ef interrupt1():定义定时器中断后执行的操作

   
	fileter()#一阶滤波(合成最终的角度)

   
	timer=threading.Timer(0.005,interrupt1)#重新配置定时器

   
	timer.start()#定时器开始

def fileter():#定义如何一阶滤波(如何合成角度)

   
	global angle,gyroy#声明角度和陀螺仪数据两个全局变量

   
	k1=0.02

   
	accel=read_ax_angle()

   
	gyroy=(-getdata(mpu,0x45)/66)*0.005

   
	angle=k1*accel+(1-k1)*(angle+gyroy)

mpu=wiringpi.wiringPiI2CSetup(0x68)#设置I2C读取mpu的地址

angle=0#定义角度变量

gyroy=0#定义陀螺仪变量

gyroyinit()初始化陀螺仪

timer=threading.Timer(0.005,interrupt1)#设置定时器

timer.start()#定时器开始

while True:

      
print("angle={}         ax={}".format(angle,read_ax_angle()))#打印合成的角度和读取的加速度处理后的角度

下面是树莓派运行后的图片
树莓派用python处理mpu6500数据

稳定下角度基本相似 误差基本微乎其微

上一篇:带你剖析WebGis的世界奥秘----点和线的世界


下一篇:[NOI2017] 泳池