驴友花雕
发表于 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 ) 是地球半径。