raspberrypi-pico 项目 | 水平仪,mpu6050

raspberrypi-pico 项目 | 水平仪

前言

假期闲来无事,在抽屉里找到了之前买来吃灰的mpu6050,这次有时间就随便捣鼓弄出了一个水平仪。在过程中遇到了很多困难,其中最大困难就是对mpu6050的数据进行姿态解算,经过我不断的在网上翻查资料最终就有了以下成就。

材料

材料 数量
树莓派 Pico 1个
mpu6050 1个
oeld096 1个
面包板 1个
杜邦线 10根
Micro USB数据线 1根

电路连接

树莓派Pico部分:

树莓派Pico —> Micro USB —> 电脑USB树莓派Pico引脚图

MPU6050部分:
MPU6050 Raspberry Pi Pico
VCC VBUS/VSYS/3V3
GND GND
SCL GP15
SDA DP14
OLED096部分
OLED096 Raspberry Pi Pico
VCC VBUS/VSYS/3V3
GND GND
SCL GP13
SDA GP12

代码部分

导入需要用到的库

from machine import Pin, I2C#使用Micropython进行编写代码使用官方machine库中的I2C,Pin对模块进行控制
from ssd1306 import SSD1306_I2C#由于OLED096模块的控制芯片是SSD1306所以使用ssd1306对oled屏进行控制
import mpu6050#控制mpu6050的必须库,当然可以自己配置寄存器等
import math#为了姿态解算需要数学计算
import time#物理时间,程序时间控制

初始化数据

datax = 0#x轴数据
datay = 0#y轴数据
dataz = 0#z轴数据
gAnglex = 0#初始x轴角度
gAngley = 0#初始y轴角度
yaw = 0 #航偏角
pitch = 0 #俯仰角
roll = 0 #翻滚角
imu_data = {
   } #mpu6050数据存储
WIDTH  = 128# oled的width
HEIGHT = 64 # oled的heigth

实例化对象

i2c = I2C(0, scl=Pin(13), sda=Pin(12), freq=400000)#实例化一个oled对象,频率为400000
imui2c = I2C(1, scl=Pin(15), sda=Pin(14))#实例化一个mpu6050对象
imu = mpu6050.accel(imui2c)     #初始化                        
oled = SSD1306_I2C(WIDTH, HEIGHT, i2c)  #配置信息

画圆函数

def circle(a,b,r):
    """画圆函数
    使用圆的标准方程:(x-a)**2+(y-b)**2=r**2
    Args:
        a (int): 圆心的横坐标
        b (int): 圆心的纵坐标
        r (int): 圆的半径

    Returns:
        x (list): 圆上每个点的横坐标
        y (list): 圆上上半圆点的纵坐标
        negative_y (list): 圆上下半圆点的纵坐标
    """
    x = [i for i in range(-r+a,r+a+1)]
    y = [round(math.sqrt(r**2-(j-a)**2)+b) for j in x]
    negative_y = [round(-math.sqrt(r**2-(j-a)**2)+b) 
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值