嵌入式人工智能(38-基于树莓派4B的角速度和加速度传感器-MPU6050)

1、角速度传感器

角速度传感器是一种用于测量物体在空间中绕坐标轴旋转的速度的传感器。角速度是一个物体围绕某一轴旋转的速度大小,通常以角度/秒或弧度/秒的形式表示。

角速度传感器通常使用陀螺仪原理来测量角速度。陀螺仪是基于角动量守恒定律的物理原理,当物体绕某一轴旋转时,旋转的角动量会导致一个力矩作用在物体上,通过测量这个力矩的大小可以推算出角速度。

角速度传感器广泛应用于航空航天、导航、运动控制等领域。在航空航天领域,角速度传感器常用于导航仪器中,用于确定飞行器的姿态和方向。在运动控制领域,角速度传感器常用于机器人和自动化设备中,以实时监测和控制旋转运动。

角速度传感器的精度和灵敏度对于测量结果的准确性和稳定性至关重要。

2、加速度传感器

加速度传感器是一种能够测量物体加速度的传感器。它能够感知物体在三个维度上的加速度变化,并将其转换为电信号输出。

加速度传感器通常由质量块、阻尼器、弹性元件、敏感元件和适调电路等部分组成。当传感器在加速的过程中,通过对质量块所受惯性力的测量,利用牛顿第二定律获得加速度值。相对于测角速度的陀螺仪来说,加速度传感器是用来测线性加速度的。

加速度传感器可以测量物体的加速度、速度和位移等参数。在移动设备中,加速度传感器可以实现自动旋转屏幕、晃动切换应用等功能。在汽车中,加速度传感器可以实现车辆稳定控制、碰撞检测等安全功能。在航空航天领域,加速度传感器可以用来检测火箭的振动情况和飞机的姿态稳定。在医疗设备中,加速度传感器可以用于监测人体运动和姿势,如步数统计和姿势纠正等。

3、MPU6050

角速度传感器利用惯性原理,加速度传感器利用力平衡原理。通常将两种传感器混合在一起使用,如MPU6050传感器。

MPU6050是当下最流行的一款六轴(三轴加速度+三轴角速度(陀螺仪))传感器。该传感器广泛的用于四轴、平衡车和空中鼠标等设计,具有非常广泛的应用范围。

5、无人机飞行的姿态检测

在飞行器中,飞行姿态是非常重要的参数,以飞机自身的中心建立坐标系,当飞机绕坐标轴旋转的时候,会分别影响到偏航角横滚角俯仰角。 下图 假设我们知道飞机初始时是左上角的状态,只要想办法测量出基于原始状态的三个姿态角的变化量,再进行叠加,就可以获知它的实时姿态了。

抽象的说,姿态是载体坐标系和地理坐标系之间的转换关系。

地球坐标系:以地球球心为原点,Z轴沿地球自转轴方向,X、Y轴在赤道平面内的坐标系。

地理坐标系:它的原点在地球表面,Z轴沿当地地理垂线的方向,也就是重力加速度的方向,XY轴沿当地经纬线的切线方向。跟我们说的东南西北是一样的。

载体坐标系:载体坐标系以运载体的质心为原点,一般根据运载体自身结构方向构成坐标系,如Z轴上由原点指向载体顶部,Y轴指向载体头部,X轴沿载体两侧方向。

其中,北轴、天轴、东轴对应的是地理坐标系。 

4、引脚与接线

SCL:IIC从时钟信号线SCL,模块需要外接上拉电阻,一般为4.7K
SDA:IIC从时钟信号线SDA,模块需要外接上拉电阻,一般为4.7K

INT:中断输出引脚
AUX_CL:IIC主串行数据信号线,用于外接传感器
AUX_DA:IIC主串行时钟信号线,用于外接传感器
VDD:3.3/5V电源输入   GND:接GND
VLOGIC:IO口电压,该引脚最低可以到1.8V,我们一般直接接VDD即可
AD0:从IIC接口(接MCU)的地址控制引脚,该引脚控制IIC地址的最低位。如果接GND,则MPU6050的IIC地址是:0X68;如果VDD,则是0X69,如果该引脚悬空则为0x68

至少需要接4条线,如果想把罗盘传感器接入,也可以挂接到该MPU6050上面

5、实验代码与现象

import time
import smbus

# 设置MPU6050寄存器地址
PWR_MGMT_1 = 0x6B
SMPLRT_DIV = 0x19
CONFIG = 0x1A
GYRO_CONFIG = 0x1B
INT_ENABLE = 0x38
ACCEL_XOUT_H = 0x3B
ACCEL_YOUT_H = 0x3D
ACCEL_ZOUT_H = 0x3F
GYRO_XOUT_H = 0x43
GYRO_YOUT_H = 0x45
GYRO_ZOUT_H = 0x47
Register_A = 0


# 初始化一个bus对象
bus = smbus.SMBus(1)
# MPU6050设备地址
MPU6050_Address = 0x68

def init():
    """初始化方法"""
    # 写入采样率寄存器
    bus.write_byte_data(MPU6050_Address, SMPLRT_DIV, 7)
    # 写入电源管理寄存器
    bus.write_byte_data(MPU6050_Address, PWR_MGMT_1, 1)
    # 写入配置寄存器
    bus.write_byte_data(MPU6050_Address, CONFIG, 0)
    # 写入陀螺仪配置寄存器
    bus.write_byte_data(MPU6050_Address, GYRO_CONFIG, 24)
    # 写入中断允许寄存器
    bus.write_byte_data(MPU6050_Address, INT_ENABLE, 1)


def get_value(addr):
    """从传感器读取参数"""
    # 读取加速度计和陀螺仪的16位值
    high = bus.read_byte_data(MPU6050_Address, addr)
    low = bus.read_byte_data(MPU6050_Address, addr + 1)
    # 左移位运算并按位或
    value = ((high << 8) | low)
    # 从模块获取标记值
    if value > 32768:
        value = value - 65536
    return value


def main_loop():
    """主循环,打印读取到的数据"""
    # 初始化
    init()

    # 读取加速度计原始值
    acc_x = get_value(ACCEL_XOUT_H)
    acc_y = get_value(ACCEL_YOUT_H)
    acc_z = get_value(ACCEL_ZOUT_H)

    # 读取陀螺仪原始值
    gyro_x = get_value(GYRO_XOUT_H)
    gyro_y = get_value(GYRO_YOUT_H)
    gyro_z = get_value(GYRO_ZOUT_H)

    # 转换为g
    Ax = acc_x / 16384.0
    Ay = acc_y / 16384.0
    Az = acc_z / 16384.0

    # 转换位度每秒
    Gx = gyro_x / 131.0
    Gy = gyro_y / 131.0
    Gz = gyro_z / 131.0

    # 打印读取到的数据
    print("Gx=%.2f" % Gx, u'\u00b0' + "/s", "\tGy=%.2f" % Gy, u'\u00b0' + "/s", "\tGz=%.2f" % Gz, u'\u00b0' + "/s",
          "\tAx=%.2f g" % Ax, "\tAy=%.2f g" % Ay, "\tAz=%.2f g" % Az)

    time.sleep(1)


if __name__ == '__main__':
    try:
        while True:
            main_loop()
    except KeyboardInterrupt:
        print("程序结束!")



随便用手晃动该传感器,可以发现数据的变化。 

 还有一种方法是安装mpu6050库

pip install mpu6050-raspberrypi,程序里面直接调用。

from mpu6050 import mpu6050
import time

sensor = mpu6050(0x68)

while True:
    accel_data = sensor.get_accel_data()
    gyro_data = sensor.get_gyro_data()
    temp = sensor.get_temp()

    print("Accelerometer data")
    print("x: " + str(accel_data['x']))
    print("y: " + str(accel_data['y']))
    print("z: " + str(accel_data['z']))

    print("Gyroscope data")
    print("x: " + str(gyro_data['x']))
    print("y: " + str(gyro_data['y']))
    print("z: " + str(gyro_data['z']))

    print("Temp: " + str(temp) + " C")
    time.sleep(0.5)

 MPU6050还可以测量温度。具体这两个程序运行的结果之间的关系,等有时间慢慢分析。

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值