简介
Bosch Sensortec推出紧凑型9轴运动传感器BMX160,极为适合广泛的应用,如智能手机、智能腕表、健身跟踪器、智能首饰,例如戒指、项链,以及增强/虚拟现实设备。
相比于智能手机,穿戴式设备面临更加严苛的空间和功耗限制。BMX160节能9轴传感器为这类使用环境提供了一种理想的解决方案,而且是行业内最小型的9轴运动传感器。
通过结合Bosch Sensortec的先进加速计、陀螺仪和地磁传感器技术,BMX160能够满足穿戴式设备越来越严格的低功耗要求。博世低功耗传感器技术令这款性能卓越的9轴惯性传感器的功耗可降至1.5 mA以下。该传感器极为适合对外形具有极端限制的应用,例如智能眼镜。该传感器可与Bosch Sensortec的BSX传感器数据融合软件库结合使用,以进一步优化性能。
特性
- BMX160九轴传感器
- 集成三个传感器:
- 16位陀螺仪
- 16位加速度
- 地磁传感器
- 智能电源管理系统:正常、低功耗、睡眠
- 集成三个传感器:
技术规格及尺寸
- 工作电压: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
- 外形尺寸:20mm x 12.5mm
- 安装孔位置:15mm
- 安装孔尺寸:内径2mm/外径3.7mm
引脚说明
丝印 | 功能描述 |
---|---|
VCC | 电源正极 |
GND | 电源负极 |
SCL | I2C时钟线 |
SDA | I2C数据线 |
CSB | BMX160协议选择引脚 |
INIT1 | BMX160外部中断1 |
INIT2 | BMX160外部中断2 |
ADDR | I2C地址选择 |
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();
使用教程
BMX160 9-axis sensor module传感器,可以用I2C接口访问BMX160I2C地址,从而获取相应的位置数据。
准备
硬件
- 1 x UNO控制板
- 1 x BMX160 9-axis sensor module模块
- 杜邦线若干
软件
- Arduino IDE, 点击下载Arduino IDE
- BMX160库
关于如何安装库文件,点击链接
硬件连接示意图
BMX160使用例程
程序功能:通过I2C接口读取BMX160传感器的磁力计、陀螺仪、加速度计数据,并将读取到的数据通过串口打印出来
/*!
* @file readAllData.ino
* @brief Through the example, you can get the sensor data by using getSensorData:
* @n get all data of magnetometer, gyroscope, accelerometer.
* @n With the rotation of the sensor, data changes are visible.
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (https://www.dfrobot.com)
* @license The MIT License (MIT)
* @author [luoyufeng] (yufeng.luo@dfrobot.com)
* @maintainer [Fary](feng.yang@dfrobot.com)
* @version V1.0
* @date 2021-10-20
* @url https://github.com/DFRobot/DFRobot_BMX160
*/
#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
/**
* enum{eGyroRange_2000DPS,
* eGyroRange_1000DPS,
* eGyroRange_500DPS,
* eGyroRange_250DPS,
* eGyroRange_125DPS
* }eGyroRange_t;
**/
//bmx160.setGyroRange(eGyroRange_500DPS);
/**
* 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);
}
常见问题
还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。