嵌入式开发日记(3)——利用Python接收并处理JY61传感器数据

之前介绍过,项目的第一项操作是要采集帕金森病人的震颤数据,整体架构图如下:

这里采用的是一款基于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],
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值