Micro Python———MPU6050六轴传感器

目录

1.什么是MPU6050?

MPU6050介绍:

MPU6050寄存器介绍:

2.例程

1.平台

2.目的

3.讲解

1.查阅原理图

 2.流程分析

3.代码讲解

3.结果


1.什么是MPU6050?

MPU6050介绍:

在介绍MPU6050之前,我们先介绍下MPU60X0,MPU60X0是全球首例9 轴运动处理传感器。它集成了3 轴MEMS 陀螺仪,3 轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP(Digital Motion Processor),可用I2C接口连接一个第三方的数字传感器,比如磁力计。

在其扩展之后就可以通过其I2C 或SPI 接口输出一个9 轴的信号,但这里我们要注意的是SPI 接口仅在MPU-6000 可用。同时呢,MPU-60X0 也可以通过其I2C 接口连接非惯性的数字传感器,比如压力传感器。
MPU-60X0 对陀螺仪和加速度计分别用了三个16 位的ADC(0~65535),将其测量的模拟量转化为可输出的数字量。为了精确跟踪快速和慢速的运动,传感器的测量范围都是用户可控的,陀螺仪可测范围为±250,±500,±1000,±2000°/秒(dps),加速度计可测范围为±2,±4,±8,±16g。

对于我们这次采用的主体呢,MPU6050 是一款高性能的 6 轴三轴加速度+三轴陀螺仪)传感器模块,用于测试物体的运动姿态。

我们再简单看一下MPU6050的框图:

 针对上述框图,我这里主要介绍一下SCL,SDA引脚,这两个引脚用于连接IIC接口(下边我们也会用到IIC知识,不理解的小伙伴们可以先去看一下。)。同时MPU6050又提供了另外的一个 IIC 接口:AUX_CL和AUX_DA两个引脚,通过这两个引脚我们可以添加外设,构成9轴传感器(本篇不涉及)。此外,再介绍一个引脚AD0,AD0是从IIC 接口(接 MCU)的地址控制引脚,该引脚控制的是IIC 地址的最低位。如果接 GND ,则 MPU6050的IIC地址是:0X68,如果接VDD,则是0X69。需要注意的是:这里的地址0x68和0x69是不包含用于数据传输的最低位的,因此并不是八位数据,如0x68表示的是110 1000,0x69表示的则是110 1001,通常最低位用于表示IIC主机的读取数据/写数据模式。

MPU6050寄存器介绍:

其实,我们这里是基于MicroPython进行程序的设计,是不需要去了解寄存器这些底层知识的,所以这里我仅做一个补充,介绍一些重要的寄存器,有需要的话可以自行去查看MPU6050的技术手册。

(英语好的还是建议去阅读英文版!!!)

1.采样分频寄存器Sample Rate Divider:该寄存器指定陀螺仪输出速率的分频器,用于为MPU-60X0生成采样速率。

2.配置寄存器 Configuration:该寄存器为陀螺仪和加速度计配置外部帧同步(FSYNC) 管脚的采样和数字低通滤波(DLPF)设置。

3.陀螺仪配置寄存器 Gyroscope Configuration:该寄存器是用来触发陀螺仪自检和配置陀螺仪的满量程范围。

4.加速度计配置Accelerometer Configuration:该寄存器是用来触发加速度计自检和配置加速度计的满量程范围。

5.加速度计测量值寄存器 Accelerometer Measurements:该寄存器存储最近加速度计的测量值。加速度计根据采样频率(由采样分频寄存器寄存器设定 )写入到这些寄存器。

6.陀螺仪测量值寄存器 Gyroscope Measurements:该寄存器存储最近加陀螺仪的测量值。大致构成与加速度计测量值寄存器相同,此处便不做叙述。

2.例程

1.平台

这里,我采用了麦哲伦 MicroPython 开发板。

2.目的

通过编程实现 MPU6050 六轴传感器数据获取,并显示在 LCD 上。

3.讲解

1.查阅原理图

这里通过查阅原理图,知道板载的MPU6050是通过IIC连接到主板上,以及IIC连接端口(H5,H4)

 2.流程分析

导入MPU6050,LCD显示模块,初始化,获取MPU6050数据,LCD数据显示 

3.代码讲解

#MPU6050传感器

#导入模块
import mpu6050,time,tftlcd
from machine import SoftI2C,Pin

#初始化颜色
WHITE=(255,255,255)
BLACK=(0,0,0)

#LCD显示屏初始化
#构建对象
d=tftlcd.LCD43R(portrait=4)
#填充白色
d.fill(WHITE)

#I2C构建
i=SoftI2C(sda=Pin("H5"),scl=Pin("H4"))

#MPU6050构建
m=mpu6050.accel(i)

d.printStr('CKFDR MPU6050', 40, 10, BLACK, size=4)

#主程序
while True:
    #获取传感器数据,返回的值value为元组格式
    value=m.get_values()
    
    #显示数据
    #x轴加速度
    d.printStr('Ac-X:'+str(value["AcX"]), 10, 100, BLACK, size=4)
    #y轴加速度
    d.printStr('Ac-Y:'+str(value["AcY"]), 10, 150, BLACK, size=4)
    #z轴加速度
    d.printStr('Ac-Z:'+str(value["AcZ"]), 10, 200, BLACK, size=4)
    
    #陀螺仪数据
    d.printStr('Gy-X:'+str(value["GyX"]), 10, 300, BLACK, size=4)
    d.printStr('Gy-Y:'+str(value["GyY"]), 10, 350, BLACK, size=4)
    d.printStr('Gy-Z:'+str(value["GyZ"]), 10, 400, BLACK, size=4)
    
    #延时1s读取数据
    time.sleep(1)

3.结果

 通过上述的讲解,我们已经成功的实现了MPU6050的LCD显示!

大家应该也感受到了运用python语言的方便与快速!

(上边的一些代码,如果是第一次接触MicroPython的话可能会不太理解,多去阅读一下文档就可以了!)

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
MPU6050是一种六轴传感器,它包含三轴的加速度传感器和三轴的陀螺仪(角速度传感器)。它可以用于测量物体的加速度和角速度,常用于姿态测量、运动控制和导航等应用领域。 以下是使用MPU6050六轴传感器的示例代码: ```python import smbus import math # MPU6050的I2C地址 MPU6050_ADDR = 0x68 # 加速度计的灵敏度范围 ACCEL_RANGE_2G = 0x00 ACCEL_RANGE_4G = 0x08 ACCEL_RANGE_8G = 0x10 ACCEL_RANGE_16G = 0x18 # 陀螺仪的灵敏度范围 GYRO_RANGE_250DEG = 0x00 GYRO_RANGE_500DEG = 0x08 GYRO_RANGE_1000DEG = 0x10 GYRO_RANGE_2000DEG = 0x18 # 初始化I2C总线 bus = smbus.SMBus(1) # 设置加速度计和陀螺仪的灵敏度范围 bus.write_byte_data(MPU6050_ADDR, 0x1C, ACCEL_RANGE_2G) bus.write_byte_data(MPU6050_ADDR, 0x1B, GYRO_RANGE_250DEG) # 读取加速度计和陀螺仪的原始数据 accel_x = bus.read_word_data(MPU6050_ADDR, 0x3B) accel_y = bus.read_word_data(MPU6050_ADDR, 0x3D) accel_z = bus.read_word_data(MPU6050_ADDR, 0x3F) gyro_x = bus.read_word_data(MPU6050_ADDR, 0x43) gyro_y = bus.read_word_data(MPU6050_ADDR, 0x45) gyro_z = bus.read_word_data(MPU6050_ADDR, 0x47) # 将原始数据转换为加速度和角速度的物理值 accel_scale = 16384.0 # 加速度计的比例因子 gyro_scale = 131.0 # 陀螺仪的比例因子 accel_x = accel_x / accel_scale accel_y = accel_y / accel_scale accel_z = accel_z / accel_scale gyro_x = gyro_x / gyro_scale gyro_y = gyro_y / gyro_scale gyro_z = gyro_z / gyro_scale # 计算加速度的合成值 accel = math.sqrt(accel_x**2 + accel_y**2 + accel_z**2) # 计算陀螺仪的合成值 gyro = math.sqrt(gyro_x**2 + gyro_y**2 + gyro_z**2) # 打印结果 print("加速度:", accel) print("角速度:", gyro) ``` 这段代码使用Python的smbus库通过I2C总线与MPU6050进行通信,读取加速度计和陀螺仪的原始数据,并将其转换为物理值。最后打印出加速度和角速度的合成值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值