ESP8266-Arduino编程实例-LSM6DS3加速度计和陀螺仪驱动

LSM6DS3加速度计和陀螺仪驱动

1、LSM6DS3介绍

LSM6DS3 是一个系统级封装,具有一个 3D 数字加速度计和一个 3D 数字陀螺仪,在高性能模式下以 1.25 mA(高达 1.6 kHz ODR)运行,并支持始终开启的低功耗功能,以实现最佳运动体验 。

LSM6DS3 支持主要的操作系统要求,为动态数据批处理提供 8 KB 的真实、虚拟和批处理传感器。

ST 的 MEMS 传感器模块系列利用了已经用于生产微机械加速度计和陀螺仪的强大而成熟的制造工艺。

各种传感元件采用专门的微加工工艺制造,而 IC 接口采用 CMOS 技术开发,允许设计专用电路,该电路经过修整以更好地匹配传感元件的特性。

LSM6DS3 的满量程加速度范围为 ±2/±4/±8/±16 g,角速率范围为 ±125/±250/±500/±1000/±2000 dps。

对机械冲击的高鲁棒性使 LSM6DS3 成为系统设计人员创建和制造可靠产品的首选。

LSM6DS3 采用塑料焊盘网格阵列 (LGA) 封装。

在这里插入图片描述

LSM6DS3具有如下特性:

  • 功耗:组合正常模式下为 0.9 mA,组合高性能模式下高达 1.6 kHz 下为 1.25 mA。
  • 加速度计和陀螺仪的低功耗“永远在线”体验
  • 高达 8 kbyte 的智能 FIFO(基于功能集)
  • 兼容 Android K 和 L
  • 用于外部磁传感器校正的硬、软熨烫
  • ±2/±4/±8/±16 g 满量程
  • ±125/±250/±500/±1000/±2000 dps 满量程
  • 模拟电源电压:1.71 V 至 3.6 V
  • 独立 IO 电源 (1.62 V)
  • 占地面积小,2.5 mm x 3 mm x 0.83 mm
  • 具有主处理器数据同步功能的 SPI/I2C 串行接口

2、硬件准备

  • ESP8266 NodeMCU开发板一块
  • LSM6DS3传感器模块一个
  • 面板板一个
  • 杜邦线若干
  • 数据线一条

硬件接线如下:

传感器引脚 ESP8266开发板引脚
Vin 5v
Gnd Gnd
SCL D1
SDA D2

3、软件准备

  • Arduino IDE或VSCode + PlatformIO

在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:

ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:

4、代码实现

本次实例使用的LSM6D33驱动库如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include "SparkFunLSM6DS3.h"
#include "Wire.h"
#include "SPI.h"

LSM6DS3 myIMU; //Default constructor is I2C, addr 0x6B

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
delay(1000); //relax...
Serial.println("Processor came out of reset.\n");

//Call .begin() to configure the IMU
myIMU.begin();

}


void loop()
{
//Get all parameters
Serial.print("\nAccelerometer:\n");
Serial.print(" X = ");
Serial.println(myIMU.readFloatAccelX(), 4);
Serial.print(" Y = ");
Serial.println(myIMU.readFloatAccelY(), 4);
Serial.print(" Z = ");
Serial.println(myIMU.readFloatAccelZ(), 4);

Serial.print("\nGyroscope:\n");
Serial.print(" X = ");
Serial.println(myIMU.readFloatGyroX(), 4);
Serial.print(" Y = ");
Serial.println(myIMU.readFloatGyroY(), 4);
Serial.print(" Z = ");
Serial.println(myIMU.readFloatGyroZ(), 4);

Serial.print("\nThermometer:\n");
Serial.print(" Degrees C = ");
Serial.println(myIMU.readTempC(), 4);
Serial.print(" Degrees F = ");
Serial.println(myIMU.readTempF(), 4);

delay(1000);
}

文章来源: https://iotsmart.blog.csdn.net/article/details/126517431