ESP8266-Arduino编程实例-L3G4200D三轴陀螺仪驱动

L3G4200D三轴陀螺仪驱动

1、L3G4200D介绍

L3G4200D 是一款低功耗三轴陀螺仪,提供三种不同的用户可选满量程(±250/±500/±2000 dps)。它包括一个传感元件和一个 I2C 接口,能够将检测到的角速率提供给外部世界 通过数字接口(I2C/SPI)。

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

在这里插入图片描述

L3G4200D具有如下特性:

  • 三个可选满量程 (±250/500/2000 dps)
  • I2C/SPI数字输出接口
  • 16位速率值数据输出
  • 两条数字输出线(中断和数据就绪)
  • 具有用户可选带宽的集成低通和高通滤波器
  • 嵌入式自检
  • 宽电源电压,2.4 V 至 3.6 V
  • 低电压兼容 IO,1.8 V
  • 嵌入式断电和睡眠模式
  • 高抗冲击能力
  • 扩展的工作温度范围(-40 °C 至 +85 °C)

2、硬件准备

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

硬件接线如下:

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

3、软件准备

  • Arduino IDE或VSCode + PlatformIO

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

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

4、代码实现

本次使用的驱动库如下:

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <Wire.h>
#include <L3G4200D.h>

L3G4200D gyroscope;

void setup()
{
Serial.begin(9600);
Serial.println("Initialize L3G4200D");

while(!gyroscope.begin(L3G4200D_SCALE_2000DPS, L3G4200D_DATARATE_400HZ_50))
{
Serial.println("Could not find a valid L3G4200D sensor, check wiring!");
delay(500);
}

// Check selected scale
Serial.print("Selected scale: ");

switch(gyroscope.getScale())
{
case L3G4200D_SCALE_250DPS:
Serial.println("250 dps");
break;
case L3G4200D_SCALE_500DPS:
Serial.println("500 dps");
break;
case L3G4200D_SCALE_2000DPS:
Serial.println("2000 dps");
break;
default:
Serial.println("unknown");
break;
}

// Check Output Data Rate and Bandwidth
Serial.print("Output Data Rate: ");

switch(gyroscope.getOdrBw())
{
case L3G4200D_DATARATE_800HZ_110:
Serial.println("800HZ, Cut-off 110");
break;
case L3G4200D_DATARATE_800HZ_50:
Serial.println("800HZ, Cut-off 50");
break;
case L3G4200D_DATARATE_800HZ_35:
Serial.println("800HZ, Cut-off 35");
break;
case L3G4200D_DATARATE_800HZ_30:
Serial.println("800HZ, Cut-off 30");
break;
case L3G4200D_DATARATE_400HZ_110:
Serial.println("400HZ, Cut-off 110");
break;
case L3G4200D_DATARATE_400HZ_50:
Serial.println("400HZ, Cut-off 50");
break;
case L3G4200D_DATARATE_400HZ_25:
Serial.println("400HZ, Cut-off 25");
break;
case L3G4200D_DATARATE_400HZ_20:
Serial.println("400HZ, Cut-off 20");
break;
case L3G4200D_DATARATE_200HZ_70:
Serial.println("200HZ, Cut-off 70");
break;
case L3G4200D_DATARATE_200HZ_50:
Serial.println("200HZ, Cut-off 50");
break;
case L3G4200D_DATARATE_200HZ_25:
Serial.println("200HZ, Cut-off 25");
break;
case L3G4200D_DATARATE_200HZ_12_5:
Serial.println("200HZ, Cut-off 12.5");
break;
case L3G4200D_DATARATE_100HZ_25:
Serial.println("100HZ, Cut-off 25");
break;
case L3G4200D_DATARATE_100HZ_12_5:
Serial.println("100HZ, Cut-off 12.5");
break;
default:
Serial.println("unknown");
break;
}

// Calibrate gyroscope. The calibration must be at rest.
// If you don't want calibrate, comment this line.
gyroscope.calibrate();

// Set threshold sensivty. Default 3.
// If you don't want use threshold, comment this line or set 0.
gyroscope.setThreshold(3);
}

void loop()
{
// Read normalized values
Vector raw = gyroscope.readRaw();

// Read normalized values in deg/sec
Vector norm = gyroscope.readNormalize();

// Output raw
Serial.print(" Xraw = ");
Serial.print(raw.XAxis);
Serial.print(" Yraw = ");
Serial.print(raw.XAxis);
Serial.print(" Zraw = ");
Serial.print(raw.YAxis);

// Output normalized
Serial.print(" Xnorm = ");
Serial.print(norm.XAxis);
Serial.print(" Ynorm = ");
Serial.print(norm.YAxis);
Serial.print(" ZNorm = ");
Serial.print(norm.ZAxis);

Serial.println();
}

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