37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十二:BMI160模块 6DOF 6轴 角速度 陀螺仪+重力加速度传感器IICSPI
知识点:博世BMI160芯片
Bosch Sensortec公司推出的最新BMI160惯性测量单元,将最顶尖的16位3轴重力加速度计和超低功耗3轴陀螺仪集成于单一封装。采用14管脚LGA封装,尺寸为2.5×3.0×0.8mm3。当加速度计和陀螺仪在全速模式下运行时,耗电典型值低至950µA,仅为市场上同类产品耗电量的50%或者更低。
Bosch BMI160专为智能手机、平板电脑、可穿戴设备设计,内置智能计步算法,可通过寄存器直接读取步数。内置的3轴加速度和3轴陀螺仪可以实现跑步,健身等运动检测。内置LDO电源管理芯片,支持3.2~6V宽电压供电,并且板载I2C电平转换电路,兼容Arduino 3.3V以及5V的控制器直接驱动。
BMI160的数据流框图
BMI160参数
芯片技术规格
工作电压:3.2V~6V
电流消耗:<1mA
接口方式:2.54间距排针
加速度可选标尺:±2g/±4g/±8g/±16g
陀螺仪可选标尺:±125°/s,±250°/s,±500°/s,±1000°/s,±2000°/s
加速度计零点漂移:±40mg
陀螺仪零点漂移:±10°/s
可编程频率:25/32Hz~1600Hz
6D检测定位
16位数据输出
抗冲击:10,000 gx 200μs
2个独立的可编程中断发生器
内置1024 byte FIFO
工作温度:-40℃~+85℃
GY-BMI160模块(三轴陀螺仪+三轴加速度计)
使用芯片:BMI160
电源:3-5v(内部低压差稳压器)
通讯方式:标准IIC/SPI通讯协议
内置16bit AD转换芯片,16位数据输出
陀螺仪范围:±125±250±500±1000±2000°/s
加速度范围:±2±4±8±16g
采用沉金PCB,机器焊接工艺,保证质量
2.54mm 间距
模组尺寸 13mm*18mm
BMI160模块接脚定义
BMI160模块参考电原理图
两种 BMI160 分线板
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十二:BMI160 6轴惯性运动传感器 16位3轴加速度+超低功耗3轴陀螺仪 I2C/SPI 14LGA
项目之一:动态读取陀螺仪 x/y/z 值
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十二:BMI160 6轴惯性运动传感器 16位3轴加速度+超低功耗3轴陀螺仪 I2C/SPI 14LGA
项目之一:动态读取陀螺仪 x/y/z 值
实验接线:
BMI160 UNO
VIN 5V
GND GND
SCL A5
SDA A4
SAO GND
INT1 D2
*/
#include <BMI160Gen.h>
const int select_pin = 10;
const int i2c_addr = 0x68; //I2C的地址
void setup() {
Serial.begin(9600);
while (!Serial); // 等待串口打开
// 初始化设备
//BMI160.begin(BMI160GenClass::SPI_MODE, select_pin);
BMI160.begin(BMI160GenClass::I2C_MODE, i2c_addr);
}
void loop() {
int gx, gy, gz; // 原始陀螺值
// 从设备读取原始陀螺仪测量值
BMI160.readGyro(gx, gy, gz);
// 显示制表符分隔的陀螺仪 x/y/z 值
Serial.print("xyz:\t");
Serial.print(gx);
Serial.print("\t");
Serial.print(gy);
Serial.print("\t");
Serial.print(gz);
Serial.println();
delay(600);
}
实验串口返回情况
实验场景图
打开IDE——工具——串口绘图器
实验串口绘图器返回情况(模块平放在桌面上)
实验串口绘图器返回情况(手指敲打桌面)
实验串口绘图器返回情况(三个方向摇动模块)
实验串口绘图器返回情况(大力极限摇动模块)
实验一百五十二: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
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 VI/0 电源电压 (VDDIO):1.2 … 3.6 V温度范围:-40 … +85°C目前的消费完全运行:950 μA低功耗模式:3 μAFIFO 数据缓冲区:1024 字节LGA 封装:2.5 × 3.0 × 0.8 mm³抗冲击性:10,000 gx 200 μsBMI160 目标应用
增强现实和沉浸式游戏3D 扫描和室内测绘室内导航、行人航位推算和计步6 轴和 9 轴传感器融合、空中鼠标应用光学防抖BMI160 目标设备
手机和平板电脑可穿戴设备,例如智能手表、头戴式显示器、运动和健身设备游戏控制器和智能遥控器玩具,例如四轴飞行器【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十二:BMI160 6轴惯性运动传感器 16位3轴加速度+超低功耗3轴陀螺仪 I2C/SPI 14LGA
项目之二:使用中断的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() {
}
实验串口返回情况
实验场景图
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十二:BMI160 6轴惯性运动传感器 16位3轴加速度+超低功耗3轴陀螺仪 I2C/SPI 14LGA
项目之六:简易计步器
实验开源图形编程(Mind+、编玩边学)
实验串口返回情况
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十二:BMI160 6轴惯性运动传感器 16位3轴加速度+超低功耗3轴陀螺仪 I2C/SPI 14LGA
项目之七:简易测量三轴数据
实验开源图形编程(Mind+、编玩边学)
实验串口返回情况
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十二:BMI160 6轴惯性运动传感器 16位3轴加速度+超低功耗3轴陀螺仪 I2C/SPI 14LGA
项目之八:简易测量X轴的动态波形
实验开源图形编程(Mind+、编玩边学)
实验串口绘图器返回情况
CCatherine2024.07.20
你好你好,请问想改成ESP32适用的代码的话要怎么改呀
驴友花雕2024.07.26
BMI160是一款六轴传感器,能够同时测量加速度和角速度,广泛应用于姿态检测、步态分析、人机交互等领域。如果你有一个为Arduino设计的BMI160模块,并且想要将其适配到ESP32上,你需要做以下几个步骤来修改代码: 1、包含ESP32的库:确保你的代码中包含了ESP32的库,以及BMI160的库。 2、修改引脚定义:将原有的Arduino引脚定义替换为ESP32的相应引脚。 3、初始化I2C通信:ESP32使用不同的I2C初始化函数,你需要使用ESP32的API来初始化I2C通信。 4、修改I2C通信函数:将Arduino的Wire库函数替换为ESP32的i2c驱动函数。 5、修改电源管理:如果BMI160模块需要特定的电源管理,确保在ESP32上也实现相同的管理。 6、测试和调试:在ESP32上上传修改后的代码,并进行测试和调试。
驴友花雕2024.07.26
下面是一个简单的代码示例,展示如何将Arduino的BMI160代码修改为适用于ESP32的代码: cpp // 原始Arduino代码示例 /* #include <Wire.h> #include "BMI160.h" BMI160 bmi; void setup() { Wire.begin(); bmi.begin(); // ...其他初始化代码... } void loop() { // ...BMI160数据处理代码... } */ // 修改后的ESP32代码示例 #include <Wire.h> // 确保包含了ESP32的Wire库 #include "BMI160.h" // 确保BMI160库是ESP32兼容的 #define BMI160_SCL_PIN 22 // 修改为ESP32的SCL引脚 #define BMI160_SDA_PIN 21 // 修改为ESP32的SDA引脚 BMI160 bmi; void setup() { Wire.begin(BMI160_SDA_PIN, BMI160_SCL_PIN); // 使用ESP32的引脚初始化Wire bmi.begin(); // ...其他初始化代码... } void loop() { // ...BMI160数据处理代码... }
驴友花雕2024.07.26
请注意,上述代码只是一个示例,实际代码可能需要根据你的具体需求和BMI160库的实现进行调整。如果BMI160库不是为ESP32设计的,你可能需要查找或编写一个兼容ESP32的BMI160库,或者对现有库进行修改以支持ESP32。 此外,如果你使用的是ESP-IDF开发环境,而不是Arduino IDE,那么你可能需要使用不同的方法来初始化I2C和处理数据。ESP-IDF提供了自己的I2C驱动和API。
驴友花雕2024.07.26
发出来在审核
驴友花雕2024.08.20
这个没有试过
花生编程2023.08.29
赞赞赞赞赞
花生编程2023.08.29
厉害厉害
三春牛-创客2023.08.27
赞赞赞
三春牛-创客2023.08.27
厉害
hacker_2023.08.24
666
匿名
该评论已删除
驴友花雕2023.07.07
谢谢老师的鼓励!