|
近年来,智能可穿戴设备离普通人的生活越来越近,智能手环、智能手表、智能耳机等一系列的产品逐渐走进了人们的生活中。这些设备通过数据交互、云端交互等方式提供了强大的功能,对我们的生活、感知带来很大的转变。可穿戴设备中的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供电。
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开发板,以下是硬件连接原理图:
首先连接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示例。完整的代码如下所示: - #include <SPI.h>
- #include "SparkFun_BMI270_Arduino_Library.h"
- // Create a new sensor object
- BMI270 imu;
- // SPI parameters
- uint8_t chipSelectPin = 5;
- uint32_t clockFrequency = 100000;
- void setup()
- {
- // Start serial
- Serial.begin(115200);
- Serial.println("BMI270 Example 2 - Basic Readings SPI");
- // Initialize the SPI library
- SPI.begin();
- // Check if sensor is connected and initialize
- // Clock frequency is optional (defaults to 100kHz)
- while(imu.beginSPI(chipSelectPin, clockFrequency) != BMI2_OK)
- {
- // Not connected, inform user
- Serial.println("Error: BMI270 not connected, check wiring and CS pin!");
- // Wait a bit to see if connection is established
- delay(1000);
- }
- Serial.println("BMI270 connected!");
- }
- void loop()
- {
- // Get measurements from the sensor. This must be called before accessing
- // the sensor data, otherwise it will never update
- imu.getSensorData();
- // Print acceleration data
- Serial.print("Acceleration in g's");
- Serial.print("\t");
- Serial.print("X: ");
- Serial.print(imu.data.accelX, 3);
- Serial.print("\t");
- Serial.print("Y: ");
- Serial.print(imu.data.accelY, 3);
- Serial.print("\t");
- Serial.print("Z: ");
- Serial.print(imu.data.accelZ, 3);
- Serial.print("\t");
- // Print rotation data
- Serial.print("Rotation in deg/sec");
- Serial.print("\t");
- Serial.print("X: ");
- Serial.print(imu.data.gyroX, 3);
- Serial.print("\t");
- Serial.print("Y: ");
- Serial.print(imu.data.gyroY, 3);
- Serial.print("\t");
- Serial.print("Z: ");
- Serial.println(imu.data.gyroZ, 3);
- // Print 50x per second
- delay(20);
- }
复制代码编译并将代码上传到Arudino开发板。连接开发板至计算机。
运行测试结果 打开串口监视器,查看Arduino开发板的输出结果。旋转模块,并观察输出数值的变化。 以上就是使用Arduino开发板连接YBX-BMI270模块的全部内容,如果有任何疑问,请随时在本帖下面回复。
注意1:由于BMI270传感器需要进行配置的参数较多,因此第一组数据出现的时间会比较慢,请多等待一段时间。 注意2:BMI270初始化时需要大约8KB的RAM,因此不适用于Arduino UNO等开发板。
|