ESP8266-Arduino编程实例-ADXL345三轴加速计驱动
ADXL345三轴加速计驱动
1、ADXL345介绍
ADXL345 是一款小型、薄型、低功耗、3 轴加速度计,具有高达 ±16g 的高分辨率(13 位)测量值。数字输出数据采用 16 位二进制补码格式,可通过 SPI(3 线或 4 线)或 I2C 数字接口访问。
ADXL345 非常适合移动设备应用。它测量倾斜感应应用中的静态重力加速度,以及运动或冲击产生的动态加速度。其高分辨率 (4 mg/LSB) 可以测量小于 1.0° 的倾角变化。
ADXL345提供了几种特殊的传感功能。活动和不活动感应检测运动的存在或缺乏,以及任何轴上的加速度是否超过用户设置的水平。轻敲感应检测单击和双击。自由落体感应检测设备是否正在下降。这些功能可以映射到两个中断输出引脚之一。一个集成的、正在申请专利的 32 级先进先出 (FIFO) 缓冲器可用于存储数据,以最大限度地减少主机处理器干预。

2、硬件准备
- ESP8266 NodeMCU开发板一块
- ADXL345传感器模块一个
- 面板板一个
- 杜邦线若干
- 数据线一条
硬件接线如下:

3、软件准备
- Arduino IDE或VSCode + PlatformIO
在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:
ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:
4、代码实现
本次实例使用ADXL345驱动库如下:
1)导入依赖库头文件
1 2 3 4 5 6 7
| #include <Wire.h> #include <Adafruit\_Sensor.h> #include <Adafruit\_ADXL345\_U.h> // 创建ADXL345设备并分配设备ID Adafruit_ADXL345_Unified accel = Adafruit\_ADXL345\_Unified(12345);
|
2)设备初始化
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 124 125 126 127 128 129 130 131
| void setup(void) { // 串口初始化 Serial.begin(9600); Serial.println("Accelerometer Test"); Serial.println(""); // 初始化ADXL345加速计 if(!accel.begin()) { // 初始化失败 Serial.println("Ooops, no ADXL345 detected ... Check your wiring!"); while(1); } // 设置重力参数 accel.setRange(ADXL345_RANGE_16_G); // displaySetRange(ADXL345\_RANGE\_8\_G); // displaySetRange(ADXL345\_RANGE\_4\_G); // displaySetRange(ADXL345\_RANGE\_2\_G); // 显示设备参数 displaySensorDetails(); // 显示数据采样频率 displayDataRate(); displayRange(); Serial.println(""); }
void displaySensorDetails(void) { sensor\_t sensor; accel.getSensor(&sensor); Serial.println("------------------------------------"); Serial.print ("Sensor: "); Serial.println(sensor.name); Serial.print ("Driver Ver: "); Serial.println(sensor.version); Serial.print ("Unique ID: "); Serial.println(sensor.sensor_id); Serial.print ("Max Value: "); Serial.print(sensor.max_value); Serial.println(" m/s^2"); Serial.print ("Min Value: "); Serial.print(sensor.min_value); Serial.println(" m/s^2"); Serial.print ("Resolution: "); Serial.print(sensor.resolution); Serial.println(" m/s^2"); Serial.println("------------------------------------"); Serial.println(""); delay(500); } void displayDataRate(void) { Serial.print ("Data Rate: "); switch(accel.getDataRate()) { case ADXL345_DATARATE_3200_HZ: Serial.print ("3200 "); break; case ADXL345_DATARATE_1600_HZ: Serial.print ("1600 "); break; case ADXL345_DATARATE_800_HZ: Serial.print ("800 "); break; case ADXL345_DATARATE_400_HZ: Serial.print ("400 "); break; case ADXL345_DATARATE_200_HZ: Serial.print ("200 "); break; case ADXL345_DATARATE_100_HZ: Serial.print ("100 "); break; case ADXL345_DATARATE_50_HZ: Serial.print ("50 "); break; case ADXL345_DATARATE_25_HZ: Serial.print ("25 "); break; case ADXL345_DATARATE_12_5_HZ: Serial.print ("12.5 "); break; case ADXL345_DATARATE_6_25HZ: Serial.print ("6.25 "); break; case ADXL345_DATARATE_3_13_HZ: Serial.print ("3.13 "); break; case ADXL345_DATARATE_1_56_HZ: Serial.print ("1.56 "); break; case ADXL345_DATARATE_0_78_HZ: Serial.print ("0.78 "); break; case ADXL345_DATARATE_0_39_HZ: Serial.print ("0.39 "); break; case ADXL345_DATARATE_0_20_HZ: Serial.print ("0.20 "); break; case ADXL345_DATARATE_0_10_HZ: Serial.print ("0.10 "); break; default: Serial.print ("???? "); break; } Serial.println(" Hz"); } void displayRange(void) { Serial.print ("Range: +/- "); switch(accel.getRange()) { case ADXL345_RANGE_16_G: Serial.print ("16 "); break; case ADXL345_RANGE_8_G: Serial.print ("8 "); break; case ADXL345_RANGE_4_G: Serial.print ("4 "); break; case ADXL345_RANGE_2_G: Serial.print ("2 "); break; default: Serial.print ("?? "); break; } Serial.println(" g"); }
|
3)数据采集
1 2 3 4 5 6 7 8 9 10 11 12 13
| void loop(void) { // 查询传感器最新事件 sensors\_event\_t event; accel.getEvent(&event); // 显示结果 Serial.print("X: "); Serial.print(event.acceleration.x); Serial.print(" "); Serial.print("Y: "); Serial.print(event.acceleration.y); Serial.print(" "); Serial.print("Z: "); Serial.print(event.acceleration.z); Serial.print(" ");Serial.println("m/s^2 "); delay(500); }
|
文章来源: https://iotsmart.blog.csdn.net/article/details/126220981
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!