(SKU:SEN0253)BNO055+BMP280智能10轴绝对定向传感器

来自DFRobot Product Wiki
跳转至: 导航搜索
BNO055+BMP280智能10轴绝对定向传感器

目录

简介

BNO055是实现智能9轴绝对定向的新型传感器IC,它将整个传感器系统级封装在一起,集成了三轴14位加速度计,三轴16位陀螺仪,三轴地磁传感器和一个自带算法处理的32位微控制器。是目前最小尺寸支持Windows 8.1的Sensor-hub产品。它既可单独提供三类传感器(加速度/地磁/陀螺仪)的单一数据,亦可提供组合数据,例如欧拉向量绝对方位、四元素绝对方位。通过内置MCU计算,省略了繁琐的算法处理,为智能手机、穿戴设备等产品提供更多方面的应用支持。
BMP280是专门为移动应用设计的绝对气压传感器,它能够实现气压检测、温度检测(可通过特定的计算公式转换为海拔高度的测量)。传感器模块采用非常紧凑的封装。它是基于博世经过验证的压阻式压力传感器技术,具有高精度和线性度以及长期稳定性和高EMC稳健性。众多的器件操作选项提供了最高的灵活性,以优化器件的功耗,分辨率和滤波器性能。
此次DFRobot推出的该传感器模块通过将BNO055与BMP280传感器集成设计到一个板上,两传感器组合成一个10轴传感器模块,接口为标准的Gravity-I2C接口,简化了用户的集成过程,摆脱了多解决方案的复杂性,可以将更多时间用于产品创新,包括新颖的应用,如可穿戴硬件。它也是增强现实,更加身临其境的游戏,个人健康和健身,室内导航以及任何其他需要环境感知的应用程序的完美选择。

特性

  • BNO055
    • 传感器混合数据输出:四元素、欧拉角、旋转矢量、线性加速度、重力、朝向
    • 集成三个传感器:
      • 16位陀螺仪
      • 14位加速度
      • 地磁传感器
    • 智能电源管理系统:正常、低功耗、睡眠
  • BMP280气压&温度传感器


技术规格

  • 工作电压:3.3V-5.5V DC
  • 工作电流:5mA
  • Gravity-I2C接口
  • BNO055加速度:
    • 加速度:±2g/±4g/±8g/±16
    • 低通滤波频段:1kHz~<8Hz
    • 工作模式:正常、睡眠、低功耗、待机、深度睡眠
    • 芯片中断控制:运动触发中断信号
  • BNO055陀螺仪:
    • 范围:±125°/s~2000°/s
    • 低通滤波频段:523Hz~12Hz
    • 工作模式:正常,快速启动、深度睡眠、睡眠、高级省电
    • 芯片中断控制:运动触发中断信号
  • BNO055地磁:
    • 范围:±1300uT(x-,y-axis);±2500uT(z-axis)
    • 地磁分辨率:~0.3
    • 工作模式:低功耗、定期、增强定期、高精度
    • 工作模式:正常、睡眠、强制
  • BMP280气压传感器
    • 气压检测范围:300~1100hPa
    • 相对精度:±0.12hPa(±1m)
    • 绝对精度:±1hPa(±8.33m)
    • 温度测量范围:0℃~65℃
    • 温度测量精度: 0.01℃
  • 工作温度:-40~+80 ℃
  • 产品尺寸:32x27 mm


更多详细的技术规格信息请参见附件中的BMP280、BNO055数据手册

引脚说明及尺寸

顶部示意图
SEN0253 尺寸图
底部示意图
引脚说明
标号 名称 功能描述
1 +/VCC 电源正极
2 -/GND 电源负极
3 C I2C串行时钟线
4 D I2C串行数据线
5 NBOOT 引导模式选择引脚
6 RST 复位引脚
7 INT 中断输出引脚
8 I2C_ADDR BNO055的I2C地址选择
9 PS2 协议选择引脚2
10 PS1 协议选择引脚1
11 BL_IND 引导程序指示
引脚说明
PS1 PS2 Functionalit
0 0 Standard/Fast 12C Interface
0 1 HID OVER I2C
1 0 UART Interface
1 1 Reserved
  • 注:BNO055的I2C地址默认设置为0x28,BMP280的I2C地址为0x76;可将BNO055的I2C_ADDR地址选为0x28/0x29,PS1、PS2默认设置为0、0






API接口函数

/*!
 * @函数功能:SEN0253设备初始化。
 *
 * @返回值:bool类型
 *   true: 设备初始化失败
 *   false:设备初始化成功
 */
bool init();

/*!
 * @函数功能:设置BNO055设备的模式。
 *
 * @参数:  powerMode: 设置电源模式
 *          dataMode:  设置数据传输速率
 */
void setMode(eBNO055PowerModes_t powerMode, eBNO055DataRateMode_t dataRate);

/*!
 * @函数功能:读欧拉角,并将读取的值存放到BNO055EulerData结构体中。
 */
void readEuler(void);

/*!
 * @函数功能:读角速度,并将得到的值存放到BNO055GyrData结构体中。
 */
void readAngularVelocity(void);

/*!
 * @函数功能:读线性加速度,并将得到的值存放到BNO055LinAccData结构体中。
 */
void readLinAcc(void);

/*!
 * @函数功能:读四元数,并将得到的值存放到BNO055QuaData结构体中。
 */
void readQua(void);

/*!
 * @函数功能:由最终四元数数据和线性加速度数据计算最终位置,并将计算出的位置信息存储到BNO055AbsLinAccData结构体中。
 */
void calcAbsLinAcc(void);

使用教程

10Dof板载BNO055传感器和BMP280传感器,可以用I2C接口分别访问BNO055(默认0x28)和BMP280(0x76)的I2C地址,从而获取相应的位置数据和环境信息。

准备

硬件

  • 1 x UNO控制板
  • 1 x BNO055+BMP280智能10轴绝对定向传感器模块
  • 杜邦线若干

软件

关于如何安装库文件,点击链接


连接图

SEN0253 V1.0连接图

样例代码

程序功能:通过I2C接口读取BNO055传感器的仰角、翻滚角、偏航角,并将读取到的数据通过串口打印出来。此demo结合我们为此设计的一个可视化小软件Euler angle visual tool.exe使用,能更直观的显示10Dof姿态的变化,如下图gif所示:

/*
 * file EulerAngleDemo.ino
 *
 * @ https://github.com/DFRobot/DFRobot_BNO055
 *
 * connect BNO055 I2C interface with your board (please reference board compatibility)
 *
 * This example can be used to display the gesture on dof10.exe
 *
 * Copyright   [DFRobot](http://www.dfrobot.com), 2016
 * Copyright   GNU Lesser General Public License
 *
 * version  V0.1
 * date  2018-1-8
 */
 
#include "DFRobot_BNO055.h"

DFRobot_BNO055 mpu;
void setup() 
{
   Serial.begin(115200);
   while (!mpu.init())
   {
     Serial.println("ERROR! Unable to initialize the chip!");
     delay(50);
   }
//   mpu.setMode(mpu.eNORMAL_POWER_MODE, mpu.eFASTEST_MODE);
   delay(100);
   Serial.println("Read euler angles...");
}

void loop() 
{
  mpu.readEuler();  /* read euler angle */
  /* In order to match the API of the upper computer, X ----> pitch  */
  Serial.print("pitch:"); 
  Serial.print(mpu.EulerAngles.y, 3); 
  Serial.print(" "); 
  /* In order to match the API of the upper computer, Y ----> roll  */
  Serial.print("roll:"); 
  Serial.print(mpu.EulerAngles.z, 3); 
  Serial.print(" ");
  /* In order to match the API of the upper computer, Z ----> yaw  */
  Serial.print("yaw:"); 
  Serial.print(mpu.EulerAngles.x, 3); 
  Serial.println(" ");
  
  delay(80);
}

如果把10Dof比作一架机头指向正东方向的飞机,则x轴指向方向为机头方向,y轴左机翼指向正北方向,z轴垂直于x轴与y轴形成的平面xoy,当10Dof的x,y,z完全与上述方向重合,则pitch、roll、yaw的值均为0度。其中pitch(仰角)为机头沿y轴上仰或下仰后,与xoy平面所形成的夹角,向上为正,向下为负;roll(翻滚角)为机身沿x轴左右翻滚后,与xoy平面所形成的夹角;yaw(偏航角)为机头沿z轴旋转后与xoz平面所形成的夹角;

DFR0253 57.jpg


10Dof姿态显示


Warning yellow.png

注:使用测试软件观察传感器姿态时需关闭串口打印所占用的串口!

样例代码

程序功能:获取传感器在x、y、z轴上的加速度,并通过串口打印出来。

/*
 * file AccelerationDemo.ino
 *
 * @ https://github.com/DFRobot/DFRobot_BNO055
 *
 * connect BNO055 I2C interface with your board (please reference board compatibility)
 *
 * Gets the current acceleration of the sensor and prints it out through the serial port.
 *
 * Copyright   [DFRobot](http://www.dfrobot.com), 2016
 * Copyright   GNU Lesser General Public License
 *
 * version  V0.1
 * date  2018-1-8
 */
 
#include <Wire.h> 
#include "DFRobot_BNO055.h"

DFRobot_BNO055 mpu;

void setup() 
{
   Serial.begin(115200);
   while (!mpu.init())
   {
     Serial.println("ERROR! Unable to initialize the chip!");
     delay(50);
   }
//   mpu.setMode(mpu.eNORMAL_POWER_MODE, mpu.eFASTEST_MODE);
   delay(100);
   Serial.println("Read acceleration...");
}

void loop() 
{
  mpu.readAcc();   /* read acceleration */
  Serial.print("X: "); 
  Serial.print(mpu.AccData.x,3); 
  Serial.print(" m/s^2  ");
  Serial.print("Y: "); 
  Serial.print(mpu.AccData.y,3); 
  Serial.print(" m/s^2  ");
  Serial.print("Z: "); 
  Serial.print(mpu.AccData.z,3); 
  Serial.println(" m/s^2  ");
  delay(200);
}

样例代码

程序功能:获取传感器在x、y、z轴上的线性加速度(排除重力加速度的影响的值),并通过串口打印出来。X、Y、Z后的值的含义:X:代表10Dof在x轴方向上移动过程中速度变化的快慢;Y:代表10Dof在y轴上速度变化的快慢;Z:代表10Dof在z轴上速度变化的快慢;单位为m/s^2,"+"、"-"分别表示加速、减速。当10Dof传感器静止时,X、Y、Z的值接近于0g,这是因为世界上没有绝对静止的物体,所以它的加速度会在0g的上下范围内波动。

/*
 * file LinearAccelerationDemo.ino
 *
 * @ https://github.com/DFRobot/DFRobot_BNO055
 *
 * connect BNO055 I2C interface with your board (please reference board compatibility)
 *
 * Gets the current linear acceleration of the sensor and prints it out through the serial port.
 *
 * Copyright   [DFRobot](http://www.dfrobot.com), 2016
 * Copyright   GNU Lesser General Public License
 *
 * version  V0.1
 * date  2018-1-8
 */
 
#include <Wire.h> 
#include "DFRobot_BNO055.h"

DFRobot_BNO055 mpu;

void setup() 
{
   Serial.begin(115200);
   while (!mpu.init())
   {
     Serial.println("ERROR! Unable to initialize the chip!");
     delay(50);
   }
//   mpu.setMode(mpu.eNORMAL_POWER_MODE, mpu.eFASTEST_MODE);
   delay(100);
   Serial.println("Read linear acceleration...");
}

void loop() 
{
  mpu.readLinAcc();   /* read linear acceleration */
  Serial.print("X: "); 
  Serial.print(mpu.LinAccData.x,3); 
  Serial.print(" m/s^2  ");
  Serial.print("Y: "); 
  Serial.print(mpu.LinAccData.y,3); 
  Serial.print(" m/s^2  ");
  Serial.print("Z: "); 
  Serial.print(mpu.LinAccData.z,3); 
  Serial.println(" m/s^2  ");
  delay(200);
}

样例代码

程序功能:获取传感器绕x、y、z轴旋转的角速度,并通过串口打印出来。X、Y、Z后的值的含义:X:代表单位时间内物体绕x轴旋转的角度;Y:代表单位时间内物体绕y轴旋转的角度;Z:代表单位时间内物体绕z轴旋转的角数;单位为度每秒dps,"+"、"-"分别表示绕轴正转和反转。

/*
 * file EulerAngleDemo.ino
 *
 * @ https://github.com/DFRobot/DFRobot_BNO055
 *
 * connect BNO055 I2C interface with your board (please reference board compatibility)
 *
 * Gets the Angular Velocity of the current sensor and prints it out through the serial port.
 *
 * Copyright   [DFRobot](http://www.dfrobot.com), 2016
 * Copyright   GNU Lesser General Public License
 *
 * version  V0.1
 * date  2018-1-8
 */
 
#include <Wire.h> 
#include "DFRobot_BNO055.h"

DFRobot_BNO055 mpu;
void setup() 
{
   Serial.begin(115200);
   while (!mpu.init())
   {
     Serial.println("ERROR! Unable to initialize the chip!");
     delay(50);
   }
//   mpu.setMode(mpu.eNORMAL_POWER_MODE, mpu.eFASTEST_MODE);
   delay(100);
   Serial.println("Read Angular Velocity...");
}

void loop() 
{
  mpu.readAngularVelocity();  /* read Angular Velocity */
  
  Serial.print("X: "); 
  Serial.print(mpu.GyrData.x, 3); 
  Serial.print(" dps  "); 
  
  Serial.print("Y: "); 
  Serial.print(mpu.GyrData.y, 3); 
  Serial.print(" dps ");
  
  Serial.print("Z: "); 
  Serial.print(mpu.GyrData.z, 3); 
  Serial.println(" dps ");
  
  delay(200);
}

样例代码

程序功能:读取10Dof模块采集到的温度、大气压、海拔等信息,并通过串口打印出数值,其测量值的单位分别为摄氏度、pa、m;其中海拔是通过板载传感器BMP280采集到的温度、压强等值计算而来,不是实际测量之值,存在误差。测量当天室内温度为26.33*C,气压为952hpa,地区海拔范围为511.3~647.4m。

IDE串口打印: Temperature,Pressure,Altitude
#include <DFRobot_BMP280.h>

DFRobot_BMP280 bmp;

void setup() {
  Serial.begin(115200);
  while (!bmp.begin()) {  
    Serial.println(F("Error initializing BMP280!"));
    delay(1000);
  }
}

void loop() {
  Serial.print("Temperature:");
  Serial.println(bmp.readTemperatureValue());
  Serial.print("Pressure:");
  Serial.println(bmp.readPressureValue());
  Serial.print("Altitude:");
  Serial.println(bmp.readAltitudeValue());
  /* use a sampling time of at least 38ms */
  delay(50);
}






常见问题

还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。


更多

DFshopping car1.png DFRobot商城购买链接

个人工具
名字空间

变换
操作
导航
工具箱