龙邱 MPU9250 模块接口 | 基于ESP32模块
简 介: 制作了MPU9250的转接接口,并利用舵机带动起旋转测量了模块测量角度功能。
关键词
: MPU9250,ESP32
Contents
§01 模块接口
在博文 龙邱MPU9250传感器 | 使用ESP32 模块进行测试 中使用了 ESP32
对于MPU9250
进行初步测试。为了方便今后的使用,制作模块的转接板,从原来的 8PINs
转换成 4PINs
接口。
一、接口定义
对于接口进行简化的功能定义为如下图所示:
▲ 图1.1 接口定义
二、电路制作
1、原理图
▲ 图1.2.1 接口原理图
2、快速制版
▲ 图1.2.2 快速制版
§02 测试模块
一、测试接口
1、I2C接口
根据 ESP32-S模块转接板设计与实现 选择GPIO2,GPIO15作为 SCL,SDA。
▲ 图2.1.1 ESP32接口
注: 需要在GPIO2 施加 2.2kΩ 上拉电阻来保证它的输出能够使用。
2、舵机接口
选择TXD2(GPIO2)作为输出 100Hz的 舵机信号输出。
▲ 图2.1.2 输出的PWM波形
二、测试结果
利用PWM控制舵机带动 MPU9250旋转,测量MPU9250 输出的三个加速度传感器数值。
▲ 图2.2.1 测试旋转平台
1、测试程序
(1) MicroPython程序
from machine import Pin,Timer,SoftI2C,PWM
import time
import mathled0 = Pin(5, Pin.OUT)
led1 = Pin(17, Pin.OUT)pwm = PWM(Pin(13))
pwm.freq(100)
pwm.duty(100)i2c = SoftI2C(scl=Pin(2), sda=Pin(15), freq=100000)MPU9250_ADDRESS = 0x68
MAG_ADDRESS = 0x0cGYRO_FULL_SCALE_250_DPS = 0x00
GYRO_FULL_SCALE_500_DPS = 0x08
GYRO_FULL_SCALE_1000_DPS = 0x10
GYRO_FULL_SCALE_2000_DPS = 0x18ACC_FULL_SCALE_2_G = 0x00
ACC_FULL_SCALE_4_G = 0x08
ACC_FULL_SCALE_8_G = 0x10
ACC_FULL_SCALE_16_G = 0x18def MPU9250Setup():i2c.writeto_mem(MPU9250_ADDRESS, 27, bytearray(GYRO_FULL_SCALE_2000_DPS))# Configure gyroscope rangei2c.writeto_mem(MPU9250_ADDRESS, 28, bytearray(ACC_FULL_SCALE_16_G))# Configure accelerometer rangei2c.writeto_mem(MPU9250_ADDRESS, 0x37, bytearray(0x2))# Set by pass mode for magnetometer# Request first magnetometer single measurementdef bytes2short(b):a = int.from_bytes(b, 'big', True)if a > 0x7fff:return -(0x10000 - a)else: return adef MPU9250read():buf = bytearray(14)buf = i2c.readfrom_mem(MPU9250_ADDRESS, 0x3b, 14)ax = bytes2short(buf[0:2])ay = bytes2short(buf[2:4])az = bytes2short(buf[4:6])gx = bytes2short(buf[8:10])gy = bytes2short(buf[10:12])gz = bytes2short(buf[12:14])temp = bytes2short(buf[6:8])return (ax,ay,az),(gx,gy,gz), tempMPU9250Setup()axdim = []
aydim = []
azdim = []step = 1
start = 50pwm.duty(50)
time.sleep(1)for i in range(200):pwm.duty(start+step*i)time.sleep(1)readdata = MPU9250read()axdim.append(readdata[0][0])aydim.append(readdata[0][1])azdim.append(readdata[0][2])print(readdata[0])print(axdim)
print(aydim)
print(azdim)while True:passwhile True:led0.on()led1.off()time.sleep_ms(200)led0.off()led1.on()time.sleep_ms(200)print(MPU9250read())
(2) 绘制图形
from headm import *def thonnycmd(cmd):tspsendwindowkey('Thonny', 's', alt=1, noreturn=1)tspsendwindowkey('Thonny', '%s'%cmd, noreturn=1)def thonnyshs(cmd='', wait=0):tspsendwindowkey('Thonny', 's', alt=1, noreturn=1)if len(cmd) > 0:tspsendwindowkey('Thonny', '%s\r'%cmd, noreturn=1)if wait > 0:time.sleep(wait)tspsendwindowkey('Thonny', 'ac', control=1, noreturn=1)tspfocuswindow('TEASOFT:1')return clipboard.paste()pastestr = thonnyshs('', 1)
ax = [float(s) for s in pastestr.split('[')[-3].split(']')[0].split(',')]
ay = [float(s) for s in pastestr.split('[')[-2].split(']')[0].split(',')]
az = [float(s) for s in pastestr.split('[')[-1].split(']')[0].split(',')]printf(ax, ay, az)plt.plot(ax, label='ax')
plt.plot(ay, label='ay')
plt.plot(az, label='az')plt.xlabel("Samples")
plt.ylabel("X,Y,Z")
plt.grid(True)
plt.tight_layout()
plt.show()
2、测试结果
(1) 数据曲线
▲ 图2.2.1 采集到的三个加速度数值
(2) 数据分析
对于AX, AY转换成对应的角度。
angle = [math.atan2(y,x)*180/pi for y,x in zip(ay,ax)]
▲ 图2.2.2 转换成了不同的角度数值
- 测量结果:
-
起始角度
: 51.05
结束角度
: 104.51
最大角度
: -177.11
最小角度
: 179.21
※ 测试结果 ※
通过测试可以得到以下结论:
- 对于大范围舵机旋转,设置的脉冲宽度从1ms 到2ms,对应的角度变化 307°。
- 可以使用MPU9250的两个加速度值来计算模块的倾角。
■ 相关文献链接:
- 龙邱MPU9250传感器 | 使用ESP32 模块进行测试
- ESP32-S模块转接板设计与实现
● 相关图表链接:
- 图1.1 接口定义
- 图1.2.1 接口原理图
- 图1.2.2 快速制版
- 图2.1.1 ESP32接口
- 图2.1.2 输出的PWM波形
- 图2.2.1 测试旋转平台
- 图2.2.1 采集到的三个加速度数值
- 图2.2.2 转换成了不同的角度数值
from headm import *def thonnycmd(cmd):tspsendwindowkey('Thonny', 's', alt=1, noreturn=1)tspsendwindowkey('Thonny', '%s'%cmd, noreturn=1)def thonnyshs(cmd='', wait=0):tspsendwindowkey('Thonny', 's', alt=1, noreturn=1)if len(cmd) > 0:tspsendwindowkey('Thonny', '%s\r'%cmd, noreturn=1)if wait > 0:time.sleep(wait)tspsendwindowkey('Thonny', 'ac', control=1, noreturn=1)tspfocuswindow('TEASOFT:1')return clipboard.paste()pastestr = thonnyshs('', 1)
ax = [float(s) for s in pastestr.split('[')[-3].split(']')[0].split(',')]
ay = [float(s) for s in pastestr.split('[')[-2].split(']')[0].split(',')]
az = [float(s) for s in pastestr.split('[')[-1].split(']')[0].split(',')]tspsave('measure', ax=ax, ay=ay, az=az)angle = [math.atan2(y,x)*180/pi for y,x in zip(ay,ax)]printf(ax, ay, az, angle)
printf(angle[0], angle[-1], min(angle), max(angle))plt.plot(angle, label='angle')plt.xlabel("Samples")
plt.ylabel("angle")
plt.grid(True)
plt.tight_layout()
plt.show()
龙邱 MPU9250 模块接口 | 基于ESP32模块相关推荐
- 龙邱MPU9250传感器 | 使用ESP32 模块进行测试
简 介: 利用ESP32 MicroPython对于来自于龙邱的MPU9250进行初步测试. 关键词: MPU9250,I2C,ESP32,软件I2C #mermaid-svg-fMBqdJ8sCAu ...
- 用启明云端基于ESP32模块的开发板来快速了解天猫精灵
为什么要了解天猫精灵呢? 在物联网时代,单纯的"互联"已经无法满足需求,需要让万物"智联"才能发挥它的应用价值.AI语音的简单.易用特性将成为万物"智 ...
- 基于ESP32模块利用检测线圈检测车模停止时间,室内视觉AI裁判系统
▌01 室内视觉AI裁判系统 1.背景介绍 在 ESP32检测调制激光信号程序优化 以及 测试ESP32S基本模块的功能,并验证是否可以应用在AI智能车竞赛检测激光信号中 中测试了 ESP32串口转W ...
- python 播放mp3模块_Python基于pygame模块播放MP3的方法示例
1 IDLE1 1 IDLE是python创初人Guido van Rossum使用python and Tkinter来创建的一个集成开发环境.要使用I 2018-04-14 为什么使用Python ...
- 基于ESP32的竞赛裁判系统功能调试-计时线圈功能
简 介: 对于智能车竞赛比赛系统中的电磁检测功能进行了调试,设置了程序运行的主要框架. 关键词: 智能车竞赛,比赛系统,计时系统,ESP32,电磁检测 §01 智能车竞赛裁判系统 中间间隔了一段时 ...
- 龙邱树莓派Raspberry Pi 扩展板电路及其相关实验
▲ 树莓派与其扩展板 文章目录 ▌01 树莓派车模扩展板 1.车模的整体配置 2.扩展板 3.树莓派IO口管脚功能 (1)树莓派接口定义 (2)扩展板上各功能接口定义 ▌02 扩展板子模块 1.树莓派 ...
- 基于ESP32的竞赛裁判系统功能调试-与微机通讯
简 介: 通过调试测试了基于ESP32设计的智能车竞赛的比赛系统方案与比赛软件联系的功能. 关键词: 智能车竞赛,比赛系统,ESP32 §01 比赛系统与微机通讯 在 基于ESP32智能车竞赛比赛系统 ...
- AI视觉组基于ESP32的裁判系统第一版本设计要求
简 介: 面对第十六届全国大学生智能车竞赛中新增加的一些组别的要求,比如室内AI组,对于车模任务增加的检测任务,设计了基于ESP32为核心的比赛系统.本文给出了对于比赛系统功能的要求. 关键词: 比赛 ...
- 基于ESP32的竞赛裁判系统功能调试-激光信号调试
简 介: 通过揣进测试了新版的基于ESP32的裁判系统对于激光信号的检测能力. 关键词: 智能车竞赛,125Hz,激光信号 §01 智能车竞赛裁判系统 对于 基于ESP32的智能车竞赛裁判系统 中 ...
最新文章
- Windows轻松实现linux shell环境:gitforwindows
- MSE与MAE的区别与如何选择
- 深入理解JavaScript的闭包特性如何给循环中的对象添加事件
- 用火狐录制脚本为空_功能测试——链接测试amp;脚本功能
- 计算机考研各科目分数,考研各科目及分数
- UI设计灵感|时尚简约风格网页页面设计
- 使用FFMPEG类库分离出多媒体文件中的音频码流
- python周志_python第一周总结
- python import random_python import random 后一直无法使用解决方法
- 修改Nodejs内置的npm默认配置路径
- 论如何用电脑开手游辅助,实现QQ飞车自动跑图
- 物联网应用三个阶段,你在哪里?
- 培训班出来的程序员怎么就不行了?
- 如何写一封好的情书?Python三步爬取全网情诗信息
- oracle+omf+格式,oracle omf
- Android Interpolator属性 设置动画速度
- 编写高质量代码:改善Java程序的151个建议(第9章:多线程和并发___建议125~131)
- 百度地图测距 java_java 百度地图判断两点距离1
- R语言GD包基于栅格图像实现地理探测器与连续参数的自动离散化
- putty修改显示服务器ip或域名,putty 标题显示ip
热门文章
- python学习笔记(3) -- 常用数据类型
- Android开发实践:屏幕旋转的处理
- IDC评述网:7月上旬国内域名解析服务商Top10
- C# CAD对象 构造时应把它的父对象也加进它的属性里
- 一个递归函数的漏洞及优化
- py2exe——.py文件转换成exe
- Django模拟新浪微博的@功能
- Windows中如何正确认识和安装驱动程序
- android:layout_with=,android – 难以理解layout_alignWithParentIfMissing
- mysql引擎层存储层_MySQL存储底层技术:InnoDB底层原理解读