之前介绍过,项目的第一项操作是要采集帕金森病人的震颤数据,整体架构图如下:
这里采用的是一款基于MPU6050的JY61型号传感器,好处在于内置卡尔曼滤波,直接可以通过串口输出六轴数据,大大方便了编程效率。模块如图:
其产品介绍如下(摘自使用说明书):
此六轴模块采用高精度的陀螺加速度计 MPU6050,通过处理器读取 MPU6050 的测量数据
然后通过串口输出,同时精心的 PCB 布局和工艺保证了 MPU6050 收到外接的干扰最小,
测量的精度最高。
模块内部自带电压稳定电路,可以兼容 3.3V/5V 的嵌入式系统,连接方便。
采用先进的数字滤波技术,能有效降低测量噪声,提高测量精度。
模块内部集成了姿态解算器,配合动态卡尔曼滤波算法,能够在动态环境下准确输出
模块的当前姿态,姿态测量精度 0.05 度,稳定性极高,性能甚至优于某些专业的倾角
仪!
采用邮票孔镀金工艺,品质保证,可嵌入用户的 PCB 板中。
性能参数:
、电压:3.3V~5V
2、电流:<10mA
3、体积:51.3mm X 36mm X 15mm
4、焊盘间距:上下 100mil(2.54mm),左右 600mil(15.24mm)
5、测量维度:加速度:3 维,角速度:3 维,角度:3 维
6、量程:加速度:±16g,角速度:±2000deg/s,角度 X Z 轴±180° Y 轴±90°。
7、分辨率:加速度:0.0005g,角速度:0.61°/s。
8、测量精度:静态 0.05°,动态 0.1°。
9、数据输出内容:时间、加速度、角速度、角度。
10、数据输出频率:100HZ(波特率 115200)/20HZ(波特率 9600)。
11、波特率:9600kps、115200kps(默认)。
12、数据接口:串口(TTL/232 电平)可选。
经测试,用在我的项目里精度已经足够。采用TTL转USB线后,与我的linux开发板相连接,发现问题在于官方给出的例程不能直接拿来使用,考虑到python的通用性,因此利用python改写读取程序后分享给大家。
无论是windows还是linux,亲测都可以通过python成功运行。注意是python3版本。
第一版:由于自带例程没有python样例,因此尝试自己读取处理。
注意:
1 安装的包名叫pyserial而不是serial
2 在linux下不用安装驱动,直接利用串口调试工具即可看到串口号
读取加速度:
#Initial-T 2019.4
# -*- coding: UTF-8 -*-
import serial
def get_acc(self): #定义处理加速度函数
try:
axh = int(acchex[6:8],16) #注意字符串转成16进制的方法
axl = int(acchex[4:6],16)
except IOError:
print("ReadError: gyro_acc")
return (0, 0, 0)
else: #利用转换公式
k_acc = 16
acc_x = (axh << 8 | axl) / 32768 * k_acc # 以acc_x为例
if acc_x >= k_acc:
acc_x -= 2 * k_acc
return acc_x
while(1):
ser = serial.Serial("com6", 115200, timeout=0.5) # 打开端口
print(ser.is_open)
acchex = (ser.read(11).hex()) #以16进制接收数据
acc = get_acc(acchex) #处理数据
print(acchex)
print(acc)
ser.close() #处理完一轮后关闭端口
读取全部数据:
#Initial-T 2019.4
# -*- coding: UTF-8 -*-
import serial
def get_acc(self): #加速度
try:
axh = int(datahex[6:8],16)
axl = int(datahex[4:6], 16)
ayh = int(datahex[10:12],