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
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!