Arduino爱好者

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: eagler8

[经验] 【Arduino】168种传感器系模块列实验(163)---BMI160 六轴陀螺仪

[复制链接]
 楼主| 发表于 2021-10-19 05:56 | 显示全部楼层
lzdlymztrfa 发表于 2021-10-18 20:27
楼主你好,我想问一下,监视器显示(BMI160GenClass::i2c_init(): I2C failed.)是什么原因呀?
...

估计是I2C连接失败,请重新检查一下模块接线
发表于 2021-10-20 13:46 | 显示全部楼层
我是按照I2C链接的,代码用的是这个:
/*
  【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-10-20 13:57 | 显示全部楼层
图片1.jpg 这个是我按照12C链接的实物图。
发表于 2021-10-20 14:02 | 显示全部楼层
图片2.png 这个是出来的结果,都是failed
 楼主| 发表于 2021-10-25 19:59 | 显示全部楼层
lzdlymztrfa 发表于 2021-10-20 14:02
这个是出来的结果,都是failed

程序一和程序二,也都试试看
发表于 2021-12-9 15:40 | 显示全部楼层
源码在哪里呢
 楼主| 发表于 2021-12-9 19:27 | 显示全部楼层

在这里
  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验一百六十三:BMI160 6轴惯性运动传感器 16位3轴加速度+超低功耗3轴陀螺仪  I2C/SPI 14LGA
  4.   项目之一:动态读取陀螺仪 x/y/z 值
  5.   实验接线:
  6.   BMI160     UNO
  7.   VIN        5V
  8.   GND        GND
  9.   SCL        A5
  10.   SDA        A4
  11.   SAO        GND
  12.   INT1       D2
  13. */

  14. #include <BMI160Gen.h>

  15. const int select_pin = 10;
  16. const int i2c_addr = 0x68; //I2C的地址

  17. void setup() {
  18.   Serial.begin(9600);
  19.   while (!Serial);  // 等待串口打开

  20.   // 初始化设备
  21.   //BMI160.begin(BMI160GenClass::SPI_MODE, select_pin);
  22.   BMI160.begin(BMI160GenClass::I2C_MODE, i2c_addr);
  23. }

  24. void loop() {
  25.   int gx, gy, gz;         // 原始陀螺值

  26.   // 从设备读取原始陀螺仪测量值
  27.   BMI160.readGyro(gx, gy, gz);

  28.   // 显示制表符分隔的陀螺仪 x/y/z 值
  29.   Serial.print("xyz:\t");
  30.   Serial.print(gx);
  31.   Serial.print("\t");
  32.   Serial.print(gy);
  33.   Serial.print("\t");
  34.   Serial.print(gz);
  35.   Serial.println();
  36.   delay(600);
  37. }
复制代码


发表于 2021-12-14 22:18 | 显示全部楼层
楼主你好我进行实验时前面的程序没有反应或者数据全是0,后面的会一直卡在Initializing imu device不知道该怎么解决,不过我的bmi160型号有点区别
屏幕截图 2021-12-14 161738.png
 楼主| 发表于 2021-12-15 07:01 | 显示全部楼层
Vodjell 发表于 2021-12-14 22:18
楼主你好我进行实验时前面的程序没有反应或者数据全是0,后面的会一直卡在Initializing imu device不知道该 ...

初始化没有通过,估计是硬件接线或I2C的地址没有设置合适
发表于 2021-12-15 15:00 | 显示全部楼层
厉害啊,有没有类似用于电子秤的模块说明?!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino爱好者

GMT+8, 2022-12-10 00:47 , Processed in 0.072769 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表