BMX160+BMP388 10轴传感器

简介

BMX160 是一款高度集成且低功耗的9轴传感器,集成了三轴16位数字加速度传感器、三轴16位陀螺仪、地磁传感器(电子罗盘)。
BMP388 是一款基于博世成熟的压电式压力传感器技术,具有高EMC稳健性,高精度,低功耗等特点。可用于高度检测。

特性

  • BMX160九轴传感器
    • 集成三个传感器:
      • 16位陀螺仪
      • 16位加速度
      • 地磁传感器
    • 智能电源管理系统:正常、低功耗、睡�
  • BMP388气压&温度传感器
    • 温度检测
    • 大气压强检测
    • 海拔高度检测
    • 室内导航(楼层检测、电梯检测)
    • 户外导航、休闲和运动的应用程序
    • 医疗保健应用程序(如肺活量测定法)
    • 垂直速度指示(如上升/下沉速度)

技术规格及尺寸

SEN0252传感器尺寸图

  • 工作电压:3.3V-5.5V
  • BMX160九轴传感器
    • BMX160加速度:
      • 加速度:±2g/±4g/±8g/±16
    • BMX160陀螺仪:
      • 范围:±125°/s~2000°/s
    • BMX160地磁:
      • 范围:±1150uT(x-,y-axis);±2500uT(z-axis)
      • 地磁分辨率:~0.3
    • BMX160 默认I2C地址:0X68
  • BMP388气压&温度传感器
    • 测量范围:300-1250 hPa
    • 相对气压测量精度:±0.08 hPa(等价±0.66m @700-900hPa,25℃-40℃)
    • 绝对气压测量精度:±0.5 hPa(0℃-65℃@300-1100hPa)
    • 温度漂移系数:±0.75 Pa/K(-20℃-65℃@700-1100hPa)
    • 绝对温度测量精度:±0.5℃(@0℃-65℃)
    • 工作温度:-40℃~80℃(在0℃-65℃测量更精确)
    • BMP388 默认I2C地址:0X76
  • 外形尺寸:27mm x 32mm
  • 安装孔位置:20mm
  • 安装孔尺寸:内径3mm/外径6mm
  • 接口:Gravity-I2C PH2.0-4P

引脚说明

SEN0252传感器正面引脚说明 SEN0252传感器背面引脚说明

''' 丝印 ''' ''' 功能描述 '''
+/VCC 电源正极
-/GND 电源负极
C/SCL I2C时钟线
D/SDA I2C数据线
3V3 3.3V电源线
ADDR(BMP388) BMP388I2C地址选择
ADDR(BMX160) BMX160I2C地址选择
CSB2 BMX160协议选择引脚
INIT2 BMX160外部中断2
INIT3 BMX160外部中断1
CSB1 BMP388协议选择引脚
INIT1 BMP388外部中断

API接口函数

|


class DFRobot_BMX160 {
/*
 * @功能 枚举陀螺仪范围,单位为 G
 */
typedef enum{
 eGyroRange_2000DPS, /*Gyroscope sensitivity at 2000dps*/
 eGyroRange_1000DPS, /*Gyroscope sensitivity at 1000dps*/
 eGyroRange_500DPS,  /*Gyroscope sensitivity at 500dps*/
 eGyroRange_250DPS,  /*Gyroscope sensitivity at 250dps*/
 eGyroRange_125DPS   /*Gyroscope sensitivity at 125dps*/
}eGyroRange_t;

/*
 * @功能 枚举加速度计范围,单位为 m/s^2
 */
typedef enum{
 eAccelRange_2G,  /* Macro for mg per LSB at +/- 2g sensitivity (1 LSB = 0.000061035mg) */
 eAccelRange_4G,  /* Macro for mg per LSB at +/- 4g sensitivity (1 LSB = 0.000122070mg) */
 eAccelRange_8G,  /* Macro for mg per LSB at +/- 8g sensitivity (1 LSB = 0.000244141mg) */
 eAccelRange_16G  /* Macro for mg per LSB at +/- 16g sensitivity (1 LSB = 0.000488281mg) */
}eAccelRange_t;

/*
 * @功能 重置传感器
 * @返回 true为成功
 */
bool softReset();

/*
 * @功能 初始化传感器
 * @返回 true为成功
 */
bool begin();

/*
 * @功能 设置陀螺仪范围,单位为 G
 * @参数 一个来自eGyroRange_t 的变量
 */
void setGyroRange(eGyroRange_t bits);

/*
 * @功能 设置加速度计范围,单位为 m/s^2
 * @参数 一个来自eAccelRange_t 的变量
 */
void setAccelRange(eAccelRange_t bits);

/*
 * @功能 获取磁力计,陀螺仪,加速度计数据
 * @参数 用于存储各个数据的地址
 */
void getAllData(struct bmx160SensorData *magn, struct bmx160SensorData *gyro, struct bmx160SensorData *accel);

/*
 * @功能 关闭磁力计,陀螺仪进入低功耗模式(加速度计有数据读出)
 */
void setLowPower();

/*
 * @功能 打开磁力计,陀螺仪进入正常模式
 */
void wakeUp();

|}

使用教程

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

准备

硬件

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

软件

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

硬件连接示意图

SEN0252传感器连接图

BMX160使用例程

程序功能:通过I2C接口读取BMX160传感器的磁力计、陀螺仪、加速度计数据,并将读取到的数据通过串口打印出来 IDE串口打印: Temperature,Pressure,Altitude

 /*!
  * file readAllData.ino
  *
  * Through the example, you can get the sensor data by using getSensorData:
  * get all data of magnetometer, gyroscope, accelerometer.
  *
  * With the rotation of the sensor, data changes are visible.
  *
  * Copyright   [DFRobot](http://www.dfrobot.com), 2016
  * Copyright   GNU Lesser General Public License
  *
  * version  V0.1
  * date  2019-6-25
  */

#include <DFRobot_BMX160.h>

DFRobot_BMX160 bmx160;
void setup(){
  Serial.begin(115200);
  delay(100);

  //init the hardware bmx160
  if (bmx160.begin() != true){
    Serial.println("init false");
    while(1);
  }
  //bmx160.setLowPower();   //disable the gyroscope and accelerometer sensor
  //bmx160.wakeUp();        //enable the gyroscope and accelerometer sensor
  //bmx160.softReset();     //reset the sensor

  /** @typedef enum{eGyroRange_2000DPS,
   *                eGyroRange_1000DPS,
   *                eGyroRange_500DPS,
   *                eGyroRange_250DPS,
   *                eGyroRange_125DPS
   *                }eGyroRange_t;
   **/
  //bmx160.setGyroRange(eGyroRange_500DPS);

  /** @typedef enum{eAccelRange_2G,
   *                eAccelRange_4G,
   *                eAccelRange_8G,
   *                eAccelRange_16G
   *                }eAccelRange_t;
   */
  //bmx160.setAccelRange(eAccelRange_4G);
  delay(100);
}

void loop(){
 sBmx160SensorData_t Omagn, Ogyro, Oaccel;

  /* Get a new sensor event */
  bmx160.getAllData(&Omagn, &Ogyro, &Oaccel);

  /* Display the magnetometer results (magn is magnetometer in uTesla) */
  Serial.print("M ");
  Serial.print("X: "); Serial.print(Omagn.x); Serial.print("  ");
  Serial.print("Y: "); Serial.print(Omagn.y); Serial.print("  ");
  Serial.print("Z: "); Serial.print(Omagn.z); Serial.print("  ");
  Serial.println("uT");

  /* Display the gyroscope results (gyroscope data is in g) */
  Serial.print("G ");
  Serial.print("X: "); Serial.print(Ogyro.x); Serial.print("  ");
  Serial.print("Y: "); Serial.print(Ogyro.y); Serial.print("  ");
  Serial.print("Z: "); Serial.print(Ogyro.z); Serial.print("  ");
  Serial.println("g");

  /* Display the accelerometer results (accelerometer data is in m/s^2) */
  Serial.print("A ");
  Serial.print("X: "); Serial.print(Oaccel.x    ); Serial.print("  ");
  Serial.print("Y: "); Serial.print(Oaccel.y    ); Serial.print("  ");
  Serial.print("Z: "); Serial.print(Oaccel.z    ); Serial.print("  ");
  Serial.println("m/s^2");

  Serial.println("");

  delay(500);
}

BMP388使用例程

BMP388使用方式请参照BMP388模块WIKI
本产品BMP388 SDO引脚默认为低,需要改变I2C地址为:BMP3_I2C_ADDR_PRIM

常见问题

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

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

更多

DFshopping_car1.png DFRobot商城购买链接