驴友花雕 发表于 2021-9-8 20:15:35

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百六十三:BMI160 6轴惯性运动传感器 16位3轴加速度+超低功耗3轴陀螺仪I2C/SPI 14LGA
项目之七:简易测量三轴数据

实验开源图形编程(Mind+、Mixly、编玩边学)



驴友花雕 发表于 2021-9-8 20:19:34

实验串口返回情况


驴友花雕 发表于 2021-9-8 20:25:56

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百六十三:BMI160 6轴惯性运动传感器 16位3轴加速度+超低功耗3轴陀螺仪I2C/SPI 14LGA
项目之八:简易测量X轴的动态波形

实验开源图形编程(Mind+、Mixly、编玩边学)



驴友花雕 发表于 2021-9-8 20:27:58

实验串口绘图器返回情况


驴友花雕 发表于 2021-9-8 21:05:39

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百六十三:BMI160 6轴惯性运动传感器 16位3轴加速度+超低功耗3轴陀螺仪I2C/SPI 14LGA
项目之九:低功耗模式计步器

通过 setStepPowerMode 设置计步器功耗模式(stepNormalPowerMode 表示正常模式,stepLowPowerMode 表示低功耗模式)

实验开源代码

/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百六十三:BMI160 6轴惯性运动传感器 16位3轴加速度+超低功耗3轴陀螺仪I2C/SPI 14LGA
项目之九:低功耗模式计步器
I2C地址:
0x68:将 BMI160 的 SDIO 引脚连接到 GND,即默认 I2C 地址
实验接线:
BMI160   UNO
VIN      5V
GND      GND
SCL      A5
SDA      A5
SAO      GND
INT1       D2
*/

#include <DFRobot_BMI160.h>

DFRobot_BMI160 bmi160;
const int8_t i2c_addr = 0x68;
bool readStep = false;

#if defined ARDUINO_AVR_UNO || defined ARDUINO_AVR_MEGA2560 || defined ARDUINO_AVR_PRO
//uno和mega2560的中断号为0
int pbIn = 2;
#elif ARDUINO_AVR_LEONARDO
//uno和leonardo的中断号为0
int pbIn = 3;
#else
int pbIn = 13;
#endif
//bmi160 有两个中断接口
int int1 = 1;
int int2 = 2;

void stepChange() {
//一旦改变了步进控制器,就可以读取该值
readStep = true;
}

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

//设置并初始化 bmi160 i2c 地址
while (bmi160.I2cInit(i2c_addr) != BMI160_OK) {
    Serial.println("i2c init fail");
    delay(1000);
}

//将中断号设置为 int1 或 int2
if (bmi160.setInt(int1) != BMI160_OK) {
    Serial.println("set interrput fail");
    while (1);
}

//将 bmi160 模式设置为计步器
if (bmi160.setStepCounter() != BMI160_OK) {
    Serial.println("set step fail");
    while (1);
}

//设置 bmi160 电源模型(微功耗电源模式)
if (bmi160.setStepPowerMode(bmi160.stepLowPowerMode) != BMI160_OK) {
    Serial.println("set setStepPowerMode fail");
    while (1);
}

#if defined ARDUINO_AVR_UNO || defined ARDUINO_AVR_MEGA2560 || defined ARDUINO_AVR_LEONARDO || defined ARDUINO_AVR_PRO
//将板上的引脚设置为连接到 bmi160 的 int1 或 int2
attachInterrupt(digitalPinToInterrupt(pbIn), stepChange, FALLING);
#else
attachInterrupt(pbIn, stepChange, FALLING);
#endif
Serial.println(pbIn);
}

void loop() {
if (readStep) {
    uint16_t stepCounter = 0;
    //从硬件 bmi160 读取计步器
    if (bmi160.readStepCounter(&stepCounter) == BMI160_OK) {
      Serial.print("计步器 = "); Serial.println(stepCounter);
    }
    readStep = false;
}
}

驴友花雕 发表于 2021-9-11 07:08:12

BMI160 6轴惯性运动传感器电原理图



kinpy 发表于 2022-11-12 00:49:11

非常棒就是动态读取陀螺仪 x/y/z 值,没有成功复现好像是库不一样。

驴友花雕 发表于 2022-11-12 05:27:08

kinpy 发表于 2022-11-12 00:49
非常棒就是动态读取陀螺仪 x/y/z 值,没有成功复现好像是库不一样。

相关库还有不少,可以实验试试

zzxzzxzzx 发表于 2024-9-3 16:53:11

驴友花雕 发表于 2021-8-27 20:27
项目之五:获取陀螺仪传感器的数据

实验开源代码

加速度的输出单位是什么?

驴友花雕 发表于 2024-9-4 06:05:09

zzxzzxzzx 发表于 2024-9-3 16:53
加速度的输出单位是什么?

BMI160 6轴惯性运动传感器的加速度输出单位是 g(重力加速度)。

重力加速度(通常用符号 g 表示)是指物体在地球表面附近自由下落时的加速度。它的标准值约为 9.8 m/s²,这意味着物体每秒钟的速度会增加约 9.8 米每秒。

驴友花雕 发表于 2024-9-4 06:06:38

zzxzzxzzx 发表于 2024-9-3 16:53
加速度的输出单位是什么?

主要特点:
1、方向:重力加速度的方向总是竖直向下的。
2、大小:在地球表面附近,重力加速度的大小大约为 9.8 m/s²,但会因地理位置和高度的不同而略有变化。例如,在赤道附近约为 9.78 m/s²,而在极地附近约为 9.83 m/s²12。
3、恒定性:在同一地点,重力加速度是一个恒定的矢量。

计算公式:
根据牛顿的万有引力定律,重力加速度可以通过以下公式计算:
g=GM​/r2

其中:
( G ) 是万有引力常数,
( M ) 是地球的质量,
( r ) 是地球半径。
页: 1 2 [3]
查看完整版本: 【Arduino】168种传感器系模块列实验(163)---BMI160 六轴陀螺仪