旧乡故客
发表于: 昨天 14:38 | 显示全部楼层

近年来,智能可穿戴设备离普通人的生活越来越近,智能手环、智能手表、智能耳机等一系列的产品逐渐走进了人们的生活中。这些设备通过数据交互、云端交互等方式提供了强大的功能,对我们的生活、感知带来很大的转变。可穿戴设备中的MEMS传感器能够精确捕捉数据,并进行实时更新反馈。惯性测量单元作为一种MEMS传感器,可以用来测量方位、运动或者手势。


博世公司推出的低功耗智能传感器BMI270可以用于穿戴设备,该传感器基于博世的MEMS工艺技术,而且大大提升了加速度计的偏移和灵敏度性能。在本篇文章中,我们将介绍如何基于Arduino Nano ESP32开发板通过SPI接口读取BMI270的加速度计和陀螺仪数据。


所需的组件

●  Arduino Nano ESP32开发板

●  YBX-BMI270惯性测量单元传感器模块(淘宝链接

●  连接跳线

●  USB线缆


YBX-BMI270传感器模块

YBX-BMI270模块采用博世传感器的超低功耗智能惯性测量单元BMI270。该IMU针对可穿戴设备进行了优化,提供精确的加速度、角速率测量和智能片上运动触发中断功能,同时该传感器集成了16位三轴陀螺仪和16位三轴加速度计。该模块支持SPI和I2C接口进行系统集成,可以快速实现与Arduino和STM32等控制器直接相连。该模块板载一颗电源芯片,支持3.3-5V供电。

YBX-BMI270惯性测量单元模块.jpg


BMI270包含直观的手势、情景和活动识别功能,并集成了针对腕戴式设备专门进行优化的即插即用计步器。该IMU也非常适合其他类型的可穿戴设备,如耳戴式设备、智能服装、智能鞋、智能眼镜和脚踝带。


Bosch的独特静止组件重新调整 (CRT) 功能可提供内置陀螺仪自校准功能,无需旋转激励,从而在测试和制造过程中为OEM节省宝贵的时间和成本。BMI270的嵌入式即插即用功能有助于缩短产品上市时间。


主要特性

●  采用Bosch超低功耗智能惯性测量单元BMI270

    ●  16位数字三轴加速度计

    ●  16位数字三轴陀螺仪

    ●  电流消耗:685µA(典型值)

    ●  灵敏度误差:± 0.4%

    ●  通过静止CRT功能实现自校准陀螺仪:

●  SPI和I2C接口

●  2个独立的可编程I/O引脚,用于中断和同步事件

●  板载一颗高精度DC-DC芯片

●  LED电源指示灯

●  支持Arduino和STM32等微控制器

●  外形尺寸:24mm x 24mm x 5mm


硬件连接

YBX-BMI270模块通过SPI连接到Arduino开发板,以下是硬件连接原理图:


硬件连接.jpg


首先连接SPI接口,将YBX-BMI270模块的SCK、MOSI和MISO分别连接到Arduino UNO开发板的引脚D13(SCK)、D11(MOSI)和D12(MISO),片选引脚CSB连接到D5。

然后将YBX-BMI270模块的VCC连接到3.3V引脚,GND引脚连接到Arduino的任意GND引脚。

硬件连接完成后如下图所示:


安装库文件

在进行编程之前,我们需要安装BMI270的Arduino库文件。

在Arduino的库管理器中主要有2个BMI270的Arduino库文件:Arduino_BMI270_BMM150和SparkFun_BMI270_Arduino_Library。前者主要用于Arduino Nano 33 BLE Sense Rev2开发中自带的BMI270芯片,因此本文主要使用SparkFun公司提供的库文件。

可以在Github上面下载,下载链接:SparkFun BMI270_Arduino_Library。也可以在库管理器中搜索BMI270,找到该库文件,然后进行安装。


该库文件基于博世传感器官方提供的BMI2驱动,支持使用SPI或I2C接口轻松配置和记录BMI270芯片的加速度计、陀螺仪和温度数据。它还提供嵌入式算法,例如点击、倾斜、计步器、动作检测的相关示例代码。


代码

本文使用的是库文件中提供的Example02_BasicReadingsSPI示例。完整的代码如下所示:

  1. #include <SPI.h>
  2. #include "SparkFun_BMI270_Arduino_Library.h"

  3. // Create a new sensor object
  4. BMI270 imu;

  5. // SPI parameters
  6. uint8_t chipSelectPin = 5;
  7. uint32_t clockFrequency = 100000;

  8. void setup()
  9. {
  10.     // Start serial
  11.     Serial.begin(115200);
  12.     Serial.println("BMI270 Example 2 - Basic Readings SPI");

  13.     // Initialize the SPI library
  14.     SPI.begin();

  15.     // Check if sensor is connected and initialize
  16.     // Clock frequency is optional (defaults to 100kHz)
  17.     while(imu.beginSPI(chipSelectPin, clockFrequency) != BMI2_OK)
  18.     {
  19.         // Not connected, inform user
  20.         Serial.println("Error: BMI270 not connected, check wiring and CS pin!");

  21.         // Wait a bit to see if connection is established
  22.         delay(1000);
  23.     }

  24.     Serial.println("BMI270 connected!");
  25. }

  26. void loop()
  27. {
  28.     // Get measurements from the sensor. This must be called before accessing
  29.     // the sensor data, otherwise it will never update
  30.     imu.getSensorData();

  31.     // Print acceleration data
  32.     Serial.print("Acceleration in g's");
  33.     Serial.print("\t");
  34.     Serial.print("X: ");
  35.     Serial.print(imu.data.accelX, 3);
  36.     Serial.print("\t");
  37.     Serial.print("Y: ");
  38.     Serial.print(imu.data.accelY, 3);
  39.     Serial.print("\t");
  40.     Serial.print("Z: ");
  41.     Serial.print(imu.data.accelZ, 3);

  42.     Serial.print("\t");

  43.     // Print rotation data
  44.     Serial.print("Rotation in deg/sec");
  45.     Serial.print("\t");
  46.     Serial.print("X: ");
  47.     Serial.print(imu.data.gyroX, 3);
  48.     Serial.print("\t");
  49.     Serial.print("Y: ");
  50.     Serial.print(imu.data.gyroY, 3);
  51.     Serial.print("\t");
  52.     Serial.print("Z: ");
  53.     Serial.println(imu.data.gyroZ, 3);

  54.     // Print 50x per second
  55.     delay(20);
  56. }
复制代码

编译并将代码上传到Arudino开发板。连接开发板至计算机。


运行测试结果

打开串口监视器,查看Arduino开发板的输出结果。旋转模块,并观察输出数值的变化。

以上就是使用Arduino开发板连接YBX-BMI270模块的全部内容,如果有任何疑问,请随时在本帖下面回复。


注意1:由于BMI270传感器需要进行配置的参数较多,因此第一组数据出现的时间会比较慢,请多等待一段时间。

注意2:BMI270初始化时需要大约8KB的RAM,因此不适用于Arduino UNO等开发板。


跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 23 | 回复: 26



手机版|

GMT+8, 2025-11-6 04:30 , Processed in 0.850313 second(s), 5 queries , Gzip On, Redis On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

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