驴友花雕 发表于 2021-8-27 13:25:41

实验串口绘图器返回情况(大力极限摇动模块)


驴友花雕 发表于 2021-8-27 14:22:49

实验一百六十三:BMI160 6轴惯性运动传感器 16位3轴加速度+超低功耗3轴陀螺仪I2C/SPI 14LGA
项目之一:动态读取陀螺仪 x/y/z 值(35秒视频)



https://v.youku.com/v_show/id_XNTgwMTMzNDg3Mg==.html?spm=a2hcb.playlsit.page.1


https://v.youku.com/v_show/id_XNTgwMTMzNDg3Mg==.html?spm=a2hcb.playlsit.page.1

驴友花雕 发表于 2021-8-27 14:45:04

本帖最后由 驴友花雕 于 2021-8-27 14:50 编辑



BMI160 技术数据
[*]数字分辨率

[*]加速度计 (A):16 位
[*]陀螺仪(G):16bit
[*]测量范围(可编程)

[*](A):±2g、±4g、±8g、±16g
[*](G):±125°/s、±250°/s、±500°/s、±1000°/s、±2000°/s
[*]灵敏度(校准)

[*](A):±2g:16384LSB/g
±4g:8192LSB/g
±8g:4096LSB/g
±16g:2048LSB/g
[*](G):±125°/s:262.4 LSB/°/s
±250°/s:131.2 LSB/°/s
±500°/s:65.6 LSB/°/s
±1000°/s:32.8 LSB/° /s
±2000°/s:16.4 LSB/°/s
[*]零重力偏移(典型值,在整个生命周期内)

[*](A):±40mg
[*](G):± 10°/s
[*]噪声密度(典型值)

[*](A):180 μg/√Hz
[*](G):0.008°/s/√Hz
[*]带宽(可编程):1600 Hz … 25/32 Hz
[*]数字输入/输出:SPI、I²C、4x 数字中断
[*]电源电压 (VDD):1.71 … 3.6 V
[*]I/0 电源电压 (VDDIO):1.2 … 3.6 V
[*]温度范围:-40 … +85°C
[*]目前的消费

[*]完全运行:950 μA
[*]低功耗模式:3 μA
[*]FIFO 数据缓冲区:1024 字节
[*]LGA 封装:2.5 × 3.0 × 0.8 mm³
[*]抗冲击性:10,000 gx 200 μs

BMI160 目标应用
[*]增强现实和沉浸式游戏
[*]3D 扫描和室内测绘
[*]室内导航、行人航位推算和计步
[*]6 轴和 9 轴传感器融合、空中鼠标应用
[*]光学防抖
BMI160 目标设备
[*]手机和平板电脑
[*]可穿戴设备,例如智能手表、头戴式显示器、运动和健身设备
[*]游戏控制器和智能遥控器
[*]玩具,例如四轴飞行器


驴友花雕 发表于 2021-8-27 15:02:33

本帖最后由 驴友花雕 于 2021-9-8 19:55 编辑

项目之二:使用中断的BMI160简单计步功能

实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百六十三:BMI160 6轴惯性运动传感器 16位3轴加速度+超低功耗3轴陀螺仪I2C/SPI 14LGA
项目之二:使用中断的BMI160简单计步功能
实验接线:
BMI160   UNO
VIN      5V
GND      GND
SCL      A5
SDA      A4
SAO      GND
INT1       D2
*/

#include <BMI160Gen.h>

const int bmi160_i2c_addr = 0x68;
const int bmi160_select_pin = 10;
const int bmi160_interrupt_pin = 2;

void bmi160_intr(void){
Serial.println("BMI160 中断:轻拍!");
}

void setup() {
Serial.begin(9600);
while (!Serial);   

// initialize device
Serial.println("正在初始化 IMU 设备...");
//BMI160.begin(BMI160GenClass::SPI_MODE, bmi160_select_pin, bmi160_interrupt_pin);
BMI160.begin(BMI160GenClass::I2C_MODE, bmi160_i2c_addr, bmi160_interrupt_pin);
BMI160.attachInterrupt(bmi160_intr);
BMI160.setIntTapEnabled(true);
Serial.println("初始化 IMU 设备...完成。");
}

void loop() {
}

驴友花雕 发表于 2021-8-27 15:06:57

本帖最后由 驴友花雕 于 2021-8-27 15:29 编辑

实验串口返回情况

驴友花雕 发表于 2021-8-27 15:15:25

本帖最后由 驴友花雕 于 2021-8-27 15:37 编辑

实验场景图

驴友花雕 发表于 2021-8-27 15:40:57

本帖最后由 驴友花雕 于 2021-9-8 19:56 编辑

项目之三:读取陀螺仪数据

实验开源代码

/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百六十三:BMI160 6轴惯性运动传感器 16位3轴加速度+超低功耗3轴陀螺仪I2C/SPI 14LGA
项目之三:读取陀螺仪数据
实验接线:
BMI160   UNO
VIN      5V
GND      GND
SCL      A5
SDA      A4
SAO      GND
INT1       D2
*/

#include <BMI160Gen.h>

void setup() {
Serial.begin(9600); // initialize Serial communication
while (!Serial);    // wait for the serial port to open

// initialize device
Serial.println("Initializing IMU device...");
//BMI160.begin(BMI160GenClass::SPI_MODE, /* SS pin# = */10);
BMI160.begin(BMI160GenClass::I2C_MODE);
uint8_t dev_id = BMI160.getDeviceID();
Serial.print("DEVICE ID: ");
Serial.println(dev_id, HEX);

// Set the accelerometer range to 250 degrees/second
BMI160.setGyroRange(250);
Serial.println("Initializing IMU device...done.");
}

void loop() {
int gxRaw, gyRaw, gzRaw;         // raw gyro values
float gx, gy, gz;

// read raw gyro measurements from device
BMI160.readGyro(gxRaw, gyRaw, gzRaw);

// convert the raw gyro data to degrees/second
gx = convertRawGyro(gxRaw);
gy = convertRawGyro(gyRaw);
gz = convertRawGyro(gzRaw);

// display tab-separated gyro x/y/z values
Serial.print("g:\t");
Serial.print(gx);
Serial.print("\t");
Serial.print(gy);
Serial.print("\t");
Serial.print(gz);
Serial.println();
delay(50);
}

float convertRawGyro(int gRaw) {
// since we are using 250 degrees/seconds range
// -250 maps to a raw value of -32768
// +250 maps to a raw value of 32767
float g = (gRaw * 250.0) / 32768.0;
return g;
}

驴友花雕 发表于 2021-8-27 15:43:22

实验串口返回情况


驴友花雕 发表于 2021-8-27 15:44:39

实验串口绘图器返回情况


驴友花雕 发表于 2021-8-27 20:12:22

本帖最后由 驴友花雕 于 2021-9-8 21:02 编辑

项目之四:从硬件 bmi160 读取计步器
I2C地址:
0x68:将 BMI160 的 SDIO 引脚连接到 GND,即默认 I2C 地址
实验接线:
BMI160   UNO
VIN      5V
GND      GND
SCL      A5
SDA      A4
SAO      GND
INT1       D2

实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百六十三:BMI160 6轴惯性运动传感器 16位3轴加速度+超低功耗3轴陀螺仪I2C/SPI 14LGA
项目之四:从硬件 bmi160 读取计步器
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.stepNormalPowerMode) != 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-8-27 20:15:32

实验串口返回情况


驴友花雕 发表于 2021-8-27 20:18:25

模块参考电原理图之二




驴友花雕 发表于 2021-8-27 20:18:52


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

本帖最后由 驴友花雕 于 2021-9-8 19:55 编辑

项目之五:获取陀螺仪传感器的数据

实验开源代码

/*
【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      A4
SAO      GND
INT1       D2
*/

#include <DFRobot_BMI160.h>
DFRobot_BMI160 bmi160;
const int8_t i2c_addr = 0x68;

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

//init the hardware bmin160
if (bmi160.softReset() != BMI160_OK){
    Serial.println("reset false");
    while(1);
}

//set and init the bmi160 i2c address
if (bmi160.I2cInit(i2c_addr) != BMI160_OK){
    Serial.println("init false");
    while(1);
}
}

void loop(){
int i = 0;
int rslt;
int16_t accelGyro={0};

//get both accel and gyro data from bmi160
//parameter accelGyro is the pointer to store the data
rslt = bmi160.getAccelGyroData(accelGyro);
if(rslt == 0){
    for(i=0;i<6;i++){
      if (i<3){
      //the first three are gyro datas
      Serial.print(accelGyro*3.14/180.0);Serial.print("\t");
      }else{
      //the following three data are accel datas
      Serial.print(accelGyro/16384.0);Serial.print("\t");
      }
    }
    Serial.println();
}else{
    Serial.println("err");
}
delay(100);
/*
   * //only read accel data from bmi160
   * int16_t onlyAccel={0};
   * bmi160.getAccelData(onlyAccel);
   */

/*
   * ////only read gyro data from bmi160
   * int16_t onlyGyro={0};
   * bmi160.getGyroData(onlyGyro);
   */
}


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

实验串口返回情况


驴友花雕 发表于 2021-8-27 20:32:43

实验串口绘图器返回情况


驴友花雕 发表于 2021-8-27 20:34:40


驴友花雕 发表于 2021-9-8 07:58:45

Arduino 系列传感器和执行器模块实验目录清单:
一块扩展板完成Arduino的10类37项实验(代码+图形+仿真)
https://mc.dfrobot.com.cn/thread-280845-1-1.html
连杆形式的腿机构十一种:盘点机器人行走背后的机械原理
https://mc.dfrobot.com.cn/thread-308097-1-1.html
【花雕动手做】超低成本,尝试五十元的麦克纳姆轮小车!
https://mc.dfrobot.com.cn/thread-307863-1-1.html
【花雕动手做】超迷你哦,用徽商香烟盒做个智能小车!
https://mc.dfrobot.com.cn/thread-307907-1-1.html
【花雕动手做】太搞笑啦,一支胶管制成二只蠕动机器人
https://mc.dfrobot.com.cn/thread-308046-1-1.html
【花雕动手做】快餐盒盖,极低成本搭建机器人实验平台
https://mc.dfrobot.com.cn/thread-308063-1-1.html
【花雕动手做】特别苗条,使用微波传感器控制的纤细小车
https://mc.dfrobot.com.cn/thread-308866-1-1.html
【花雕动手做】脑洞大开、五花八门的简易机器人66种
https://mc.dfrobot.com.cn/thread-307900-1-1.html

实验一百五十八:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
https://mc.dfrobot.com.cn/thread-308195-1-1.html
实验一百六十三:BMI160 6轴惯性运动传感器 16位3轴加速度+超低功耗3轴陀螺仪I2C/SPI 14LGA
https://mc.dfrobot.com.cn/thread-310371-1-1.html
实验一百六十五:2.4 英寸 TFT LCD 触摸屏模块 XPT2046 PCB ILI9341 240x320 像素 8 位 SPI 串口显示器
https://mc.dfrobot.com.cn/thread-309803-1-1.html
实验一百七十六:6mm大尺寸8x8LED方块方格点阵模块 可级联 红绿蓝白色 可选8级亮度
https://mc.dfrobot.com.cn/thread-309845-1-1.html
实验一百八十三:GY-530 VL53L0X 激光测距 ToF测距 飞行时间测距传感器模块 IIC通信协议
https://mc.dfrobot.com.cn/thread-310273-1-1.html
实验一百八十五:MAX4466声音传感器 驻极体话筒放大器 麦克风可调功放模块 microphone
https://mc.dfrobot.com.cn/thread-310193-1-1.html
实验一百八十九:TDA1308 硅麦克风 数字咪头放大模块 拾音器放大板 楼氏SUNLEPHANT
https://mc.dfrobot.com.cn/thread-310246-1-1.html
实验一百九十三:TCS34725颜色识别传感器 RGB IIC明光感应模块 ColorSensor
https://mc.dfrobot.com.cn/thread-310209-1-1.html
实验二百:RCWL-0515微波雷达感应开关 人体感应 智能感应探测传感器 12-15米远距离2.7G微波检测模块
https://mc.dfrobot.com.cn/thread-310313-1-1.html
实验二百零三:Air724UG合宙 Cat14G模块 DTU物联网UART串口通信数据TCP透传 核心板组合套餐
https://mc.dfrobot.com.cn/thread-310342-1-1.html
实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块 NB-IoT广域低功耗无线通信 GPS/北斗精准定位
https://mc.dfrobot.com.cn/thread-310433-1-1.html


驴友花雕 发表于 2021-9-8 18:56:45

BMI160 传感器 API概述
体积小、功耗低的 BMI160 是一款低噪声 16 位 IMU,专为 AR 或室内导航等移动应用而设计,可提供高度准确的传感器数据和实时传感器数据。BMI160 的低电流消耗使电池驱动设备中的应用成为可能。该传感器具有可配置的片上中断引擎,可提供基于运动的手势识别和上下文感知作为始终开启的后台功能。



主要特征
任意运动检测(加速度计)
显着运动检测(加速度计)
步进检测器(加速度计)
敲击感应(加速度计)
方向识别(加速度计)
平面检测(加速度计)
低重力/自由落体检测(加速度计)
高 G 检测(加速度计)
慢动作警报/无动作中断(加速度计)
数据就绪检测(加速度计、陀螺仪和外部传感器)
PMU触发器(陀螺仪)
FIFO 中断((加速度计、陀螺仪和外部传感器)

目标应用
增强现实和沉浸式游戏
室内导航
3D 扫描/室内测绘
高级手势识别
沉浸式游戏
9轴运动检测
空中鼠标应用程序和指针
计步器/计步
移动应用的高级系统电源管理
相机模组的光学防抖
自由落体检测和保修记录

驴友花雕 发表于 2021-9-8 19:47:53

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

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



驴友花雕 发表于 2021-9-8 19:50:15

实验串口返回情况


页: 1 [2] 3
查看完整版本: 【Arduino】168种传感器系模块列实验(163)---BMI160 六轴陀螺仪