一起玩转树莓派(18)——MPU6050螺旋仪加速度传感器模块应用(二)

简介: 一起玩转树莓派(18)——MPU6050螺旋仪加速度传感器模块应用

4. 加速计数据寄存器


加速计数据寄存器的地址为59到64,共48个二进制位,如下:


image.png


其使用方法与陀螺仪数据寄存器类似,同样需要在寄存器28来对加速计进行配置与设置量程,通过量程对应的灵敏度来计算得到真实的加速度值。


5. 加速计配置寄存器


陀螺仪配置寄存器的地址为28,是一个可读可写的寄存器,如下:


image.png


XA_ST,YA_ST,ZA_ST都是自检执行控制位,AFS_SEL用来设置量程,其与灵敏度对应关系如下:


AFS_SEL 量程范围 灵敏度参数

0 ±2 16384

1 ±4g 8192

2 ±8g 4096

3 ±16g 2048

6. 温度数据寄存器


温度数据寄存器的地址为65到66,共16个二进制位,如下:

image.png



对于测量到的温度数据为有符号数,需要采用如下的计算公式得到真实的摄氏度数据:


摄氏温度 = TEMP_OUT / 340 + 36.53


除此之外,还有许多功能传感器,如采样率配置等,有需要可以从芯片手册查到。


三. 编写代码


完成了前面的基础准备工作,编写代码获取传感器模块的数据则非常容易,示例代码如下:


#coding:utf-8


import smbus

import math

import time


# 电源控制寄存器地址

power_regist = 0x6b


# I2C模块初始化

bus = smbus.SMBus(1)

# 外接I2C设备的地址

address = 0x68


# 封装一些读取数据的功能函数


# 读取一个字长度的数据(16位)

def readWord(adr):

   high = bus.read_byte_data(address, adr)

   low = bus.read_byte_data(address, adr+1)

   val = (high << 8) + low

   return val


# 将读取到的数据转换为原码 (有符号数本身是采用补码方式存储的)

def readWordReal(adr):

   val = readWord(adr)

   x = 0xffff

   # 首位为1 表示是负数

   if (val >= 0x8000):

       # 求原码

       return -((x - val)+1)

   else:

       return val


# 已知加速度求角度值

def dist(a, b):

   return math.sqrt((a*a)+(b*b))


def getRotationX(x, y, z):

   radians = math.atan2(y, dist(x,z))

   return math.degrees(radians)


def getRotationY(x, y, z):

   radians = math.atan2(x, dist(y,z))

   return math.degrees(radians)


# 设置电源模式

bus.write_byte_data(address, power_regist, 0)



while True:

   time.sleep(0.5)

   print("螺旋仪数据-----------")

   gyroX = readWordReal(0x43)

   gyroY = readWordReal(0x45)

   gyroZ = readWordReal(0x47)


   print("X轴陀螺仪原始数据:", gyroX, "X轴每秒旋转度数:", gyroX/131)

   print("Y轴陀螺仪原始数据:", gyroY, "Y轴每秒旋转度数:", gyroY/131)

   print("Z轴陀螺仪原始数据:", gyroZ, "Z轴每秒旋转度数:", gyroZ/131)


   print("加速度数据----------")

   accelX = readWordReal(0x3b)

   accelY = readWordReal(0x3d)

   accelZ = readWordReal(0x3f)


   print("X轴加速度原始数据:", accelX, "X轴加速度:", accelX/16384)

   print("Y轴加速度原始数据:", accelY, "Y轴加速度:", accelY/16384)

   print("Z轴加速度原始数据:", accelZ, "Z轴加速度:", accelZ/16384)


   print("摄氏温度数据--------")

   temp = readWordReal(0x41)

   print("温度原始数据:", temp, "摄氏度:", temp/340 + 36.53)


   print("旋转家角度数据-------")

   print("X轴旋转度数:", getRotationX(accelX/16384, accelY/16384, accelZ/16384))

   print("Y轴旋转度数:", getRotationX(accelX/16384, accelY/16384, accelZ/16384))


image.png



在树莓派上运行上面代码,效果如下图所示:

目录
相关文章
|
7月前
|
传感器 芯片
毕业设计 基于51单片机霍尔电机转速测量温度PWM调速设计
毕业设计 基于51单片机霍尔电机转速测量温度PWM调速设计
106 0
|
传感器 存储 定位技术
一起玩转树莓派(18)——MPU6050陀螺仪加速度传感器模块应用
现在智能手机的功能已经非常强大,除了基础的通信功能外,测位测速,空间角度等数据的测量也非常方便,这在线路导航,地图,体感游戏等应用中十分重要。不知你是否想过,智能设备是如何获取到其所在的空间状态与加速度等数据的呢?MPU6050就是提供这类数据测量的一种传感器模块。
2314 0
|
6月前
|
传感器 数据采集 移动开发
基于STM32设计的炉温温度检测仪
本文档描述了一个基于STM32F103C8T6微控制器的炉温检测系统设计。系统采用铂电阻PT100作为温度传感器,提供精确的温度测量,并通过0.96寸IIC接口的OLED显示屏显示结果。STM32F103C8T6因其丰富的外设和计算能力被选为主控芯片,PT100的电阻变化通过ADC转换为数字信号。软件设计包括数据采集、处理和显示三个部分,其中OLED显示屏的初始化函数`oled_init()`设置各种屏幕参数,`OLED_Show_Temperature()`函数负责在指定位置显示温度值。
96 3
|
7月前
|
传感器 数据采集 监控
毕业设计 基于STM32单片机生理监控心率脉搏TFT彩屏波形曲线设计
毕业设计 基于STM32单片机生理监控心率脉搏TFT彩屏波形曲线设计
106 0
|
存储 人工智能 API
红外热成像仪测温模块开发资料准备
MLX90640 有两个型号, A 型和 B 型,各拍了一个,在等待物流的过程中索性先做些准备工作,也科普一下红外成像是怎么回事。
红外热成像仪测温模块开发资料准备
|
传感器 前端开发 机器人
基于单片机的智能循迹避障小车STC89C52红外对管L298N驱动PWM波控制速度
利用红外对管检测黑线与障碍物,并以STC89C52单片机为控制芯片控制电动小汽车的速度及转向,从而实现自动循迹避障的功能。其中小车驱动由L298N驱动电路完成,速度由单片机输出的PWM波控制。
356 0
|
传感器
红外热成像仪测温传感器模块开发笔记
什么是红外成像伪彩编码 红外成像的最终目的是用图像来表现温度变化,并且可以通过颜色来区分出不同热量的物体轮廓和形状。那么,到底用什么颜色来表示什么温度呢?是否有什么标准规范呢?
|
传感器 API
MLX90640 红外热成像仪测温模块介绍说明
A 型和 B 型的区别 区别主要有以下几点 视场角不同: A 型为 110*75° , B 型为 55*35° ,通俗一点讲就是 A 型是广角,所以镜头矮一些,视野更宽,但对远处物体的捕捉能力更低, B 型更适于拍摄稍远的物体。精度不同: A 型的噪声比 B 型大,所以 B 型的绝对温度和灵敏度都好一些。
MLX90640 红外热成像仪测温模块介绍说明
|
传感器 存储 编解码
MLX90640 红外热成像仪测温模块 温度测量和成像精度
是基于红外阵列高精度温度传感器以及先进软件算法的非接触式热成像仪器,可对视场范围内任何物体进行红外成像,成像分辨率达 512*384 像素,温度灵敏度 0.1℃,绝对精度±1.5℃,刷新频率最高达 64Hz。自带存储和实时时钟,具备数据实时输出显示、拍照存储功能,数字接口包括 UART 和 USB,可直接连接计算机和手机,配合上位机软件或者手机 APP 程序,使用十分方便。 广泛应用于电子设备开发、 PCB 测试、 新材料、供暖施工、非接触温度测控、非法侵入、生物探测等行业和领域。
MLX90640 红外热成像仪测温模块 温度测量和成像精度
|
传感器 存储 编解码
MLX90640 红外热成像仪测温传感器模块开发笔记(七)
Red Eye Camera(以下简称“IDF-x” 或“设备” )是基于红外阵列高精度温度传感器以及先进软件算法的非接触式热成像仪器,可对视场范围内任何物体进行红外成像,成像分辨率512*384 像素,温度灵敏度 0.1℃,绝对精度±1.5℃,刷新频率最高 64Hz。自带存储和实时时钟,具备数据实时输出显示、拍照存储功能,数字接口包括 UART 和 USB,可直接连接计算机和 Android 手机,配合上位机软件或者手机 APP 程序,使用十分方便。
MLX90640 红外热成像仪测温传感器模块开发笔记(七)